Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PANCHENKO.doc
Скачиваний:
1
Добавлен:
16.09.2019
Размер:
396.29 Кб
Скачать
  1. Программный поток. Понятие и использование

При створенні процесу в системі з'являється новий програмний потік, що належить цьому процесу. Спочатку будь щойно створений процес має лише одним потоком. Цей потік може створювати нові потоки, а ці нові потоки, в свою чергу, можуть створювати інші нові потоки. Процес продовжує своє існування до тих пір, поки в його володінні знаходиться принаймні один програмний потік (або до тих пір, поки не відбудеться щось, в результаті чого весь процес або всі завдання не припинить роботу, (наприклад, звернення до функції TerminateProcess).

Потоки можуть виконувати будь-які дії у фоновому режимі щодо вашої основної програми. Наприклад, ви можете створити новий програмний потік, який буде у фоновому режимі здійснювати вивід інформації на принтер. Потоки зручно використовувати також у випадку, якщо блокування або підвисання будь-якої процедури не повинно стати причиною порушень функціонування основної програми. Наприклад, у той час як основна програма виконує складні математичні обчислення, окремий програмний потік може здійснювати обмін даними через послідовний асинхронний канал зв'язку.

Базовий системний виклик, призначений для створення потоку, - це Create Thread. Наприклад, у складі стандартної бібліотеки C + + присутні функції _beginthread і _begintnreadex (функція beginthreadex приймає кілька додаткових аргументів і дозволяє створювати потоки, що знаходяться в припиненому стані, а також вона повертає вам дескриптор нового потоку). У MFC для створення потоку використовується функція AfxBeginThread.

Пам'ятайте: Windows розподіляє процесорний час не між процесами, а між потоками. Кожен потік в системі працює незалежно. Кількість процесорного часу, що виділяється конкретному потоку, визначається багатьма факторами. По-перше, кожен процес має власний базовим рівнем пріоритету, який присвоюється всім своїм потокам. По-друге, кожен з потоків має власний пріоритетом, який додається до базового значення. Нарешті, сама операційна система має право динамічно змінити пріоритет деякого потоку, якщо вважатиме, що так буде краще. Наприклад, якщо система виявить, що пристрій введення готове передати одному з потоків будь-які дані, і чекає, поки управління буде передано цього потоку, система може тимчасово підвищити пріоритет цього потоку.

  1. Сегментная и страничная организация памяти. Виртуальная память

Віртуальна пам'ять (англ. Virtual memory) - технологія керування пам'яттю ЕОМ, розроблена для багатозадачних операційних систем. При використанні даної технології для кожної програми використовуються незалежні схеми адресації пам'яті, які відображаються тим чи іншим способом на фізичні адреси в пам'яті ЕОМ. Дозволяє збільшити ефективність використання пам'яті декількома одночасно працюють програмами, організувавши безліч незалежних адресних просторів, і забезпечити захист пам'яті між різними додатками. Також дозволяє програмісту використовувати більше пам'яті, ніж встановлено в комп'ютері, за рахунок відкачування невикористовуваних сторінок на вторинне сховище.

При використанні віртуальної пам'яті спрощується програмування, так як програмісту більше не потрібно враховувати обмеженість пам'яті, або погоджувати використання пам'яті з іншими додатками. Для програми виглядає доступним і безперервним все допустиме адресний простір, незалежно від наявності в ЕОМ відповідного обсягу ОЗУ.

Застосування механізму віртуальної пам'яті дозволяє:

  • Спростити адресацію пам'яті клієнтським програмним забезпеченням;

  • Раціонально управляти оперативною пам'яттю комп'ютера (зберігати в ній тільки активно використовуються області пам'яті);

  • Ізолювати процеси один від одного (процес вважає, що монопольно володіє всією пам'яттю).

В даний час ця технологія має апаратну підтримку на всіх сучасних побутових процесорах. У той же час у вбудованих системах і в системах спеціального призначення, де потрібно або дуже швидка робота, або є обмеження на тривалість відгуку (системи реального часу) віртуальна пам'ять використовується відносно рідко. Також в таких системах рідше зустрічається багатозадачність і складні ієрархії пам'яті.

Сторінкова організація віртуальної пам'яті. У більшості сучасних операційних систем віртуальна пам'ять організується за допомогою сторінкової адресації. Оперативна пам'ять ділиться на сторінки: області пам'яті фіксованої довжини (наприклад, 4096 байт), які є мінімальною одиницею виділеної пам'яті (тобто навіть запит на 1 байт від програми призведе до виділення йому сторінки пам'яті). Процес звертається до пам'яті за допомогою адреси віртуальної пам'яті, який містить в собі номер сторінки і зміщення всередині сторінки. Процесор перетворить номер віртуальної сторінки на адресу відповідної їй фізичної сторінки за допомогою буфера асоціативної трансляції. Якщо йому не вдалося це зробити, то потрібно звернення до таблиці сторінок, що може зробити або сам процесор, або операційна система (залежно від архітектури). Якщо сторінка вивантажена з оперативної пам'яті, то операційна система підкачує сторінку з жорсткого диска. При запиті на виділення пам'яті операційна система може «скинути» на жорсткий диск сторінки, до яких давно не було звернень. Критичні дані (наприклад, код запущених і працюючих програм, код і пам'ять ядра системи) зазвичай знаходяться в оперативній пам'яті (виключення існують, проте вони не стосуються тих частин, які відповідають за обробку апаратних переривань, роботу з таблицею сторінок і використання файлу підкачки).

Сегментна організація віртуальної пам'яті. Механізм організації віртуальної пам'яті, при якому віртуальний простір ділиться на частини довільного розміру - сегменти. Цей механізм дозволяє, наприклад, розбити дані процесу на логічні блоки. Для кожного сегмента, як і для сторінки, можуть бути призначені права доступу до нього користувачів та його процесів. При завантаженні процесу частина сегментів поміщається в оперативну пам'ять (при цьому для кожного з цих сегментів ОС підшукує придатний ділянку вільної пам'яті), а частина сегментів розміщається в дискової пам'яті. Сегменти однієї програми можуть займати в ОП несуміжні ділянки. Під час завантаження система створює таблицю сегментів процесу, в якій для кожного сегмента вказується початкова фізична адреса сегмента в оперативній пам'яті, розмір сегмента, правила доступу, ознака модифікації, ознака звертання до даного сегменту за останній проміжок часу і деяка інша інформація. Якщо віртуальні адресні простори кількох процесів включають той самий сегмент, то в таблицях сегментів цих процесів робляться посилання на один і той же ділянка оперативної пам'яті, в який даний сегмент завантажується в єдиному екземплярі. Система із сегментною організацією функціонує аналогічно системі зі сторінкової організацією: час від часу відбуваються переривання, пов'язані з відсутністю потрібних сегментів у пам'яті, при необхідності звільнення пам'яті деякі сегменти вивантажуються, при кожному зверненні до оперативної пам'яті виконується перетворення ВА у фізичну. Крім того, при зверненні до пам'яті перевіряється, чи дозволений доступ необхідного типу до даного сегменту.

Віртуальний адресу при сегментної організації пам'яті може бути представлений парою (g, s), де g - номер сегмента, а s - зсув у сегменті. Фізична адреса виходить шляхом додавання початкової фізичної адреси сегмента, знайденого в таблиці сегментів за номером g, і зміщення s.

Недоліком даного методу розподілу пам'яті є фрагментація на рівні сегментів і більш повільне в порівнянні з сторінкової організацією перетворення адреси.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]