ТОП 10:

Технологія копіювання під час запису



Якщо під час створення процесу за допомогою виклику fork () щоразу завчасно виділяти пам'ять і копіювати в неї дані адресного простору предка (стек, область глобальних змінних, програмний код), то це буде доволі трудомістким завдан­ням, особливо для процесів, що займають багато місця в пам'яті.

Для розв'язання цієї проблеми в сучасних ОС використовують технологію ко­піювання під час запису (copy-on-write). При цьому під час виклику fork () дані з пам'яті предка у пам'ять нащадка не копіюють, натомість відповідні ділянки пам'яті відображають в адресний простір — як нащадка, так і предка, але при цьо-му позначають їх як захищені від запису.

 

 

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

 

 

У багатьох сучасних системах копіювання під час запису є основною техноло­гією керування адресним простором у разі створення процесів.

 

Особливості завершення процесів

Розглянемо три варіанти завершення процесів.

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

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

Процес завершується іншим процесом або ядром системи. Наприклад, перед закінченням роботи ОС ядро припиняє виконання всіх процесів. Процес може припинити виконання іншого процесу за допомогою системного виклику, який у POSIX-системах називають kill ().

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

 







Последнее изменение этой страницы: 2017-02-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.83.188.254 (0.005 с.)