Вивантаження з розширенням - студопедія
Вивантаження при виконанні системної функції fork
В описі системної функції fork передбачалося, що процес-батько отримав в своє розпорядження пам'ять, достатню для створення контексту нащадка. Якщо ця умова не виконується, ядро вивантажує процес з пам'яті, чи не звільняючи простір пам'яті, займане його (одного з батьків) копією. Коли процедура вивантаження завершиться, процес-нащадок буде розташовуватися на пристрої вивантаження; процес-батько переводить свого нащадка в стан "готовності до виконання" і повертається в режим завдання. Оскільки процес-нащадок знаходиться в стані "готовності до виконання", програма підкачки в кінці кінців завантажить його в пам'ять, де ядро запустить його на виконання; нащадок завершить тим самим свою роль у виконанні системної функції fork і повернеться в режим завдання.
3. Завантаження (підкачка) процесів
Нульовий процес (процес підкачки) є єдиним процесом, завантажуються інші процеси в пам'ять з пристроїв вивантаження. Процес підкачки починає роботу по виконанню цієї своєї єдиної функції після закінчення ініціалізації системи. Він завантажує процеси в пам'ять і, якщо йому не вистачає місця в пам'яті, вивантажує звідти деякі з процесів, що знаходяться там. Якщо у процесу підкачки немає роботи (наприклад, відсутні процеси, що чекають свого надсилання в пам'ять) або ж він не в змозі виконати свою роботу (жоден з процесів не може бути вивантажений), процес підкачки призупиняється; ядро періодично відновлює його виконання. Ядро планує запуск процесу підкачки точно так же, як робить це по відношенню до інших процесів, орієнтуючись на більш високий пріоритет, при цьому процес підкачки виконується тільки в режимі ядра. Процес підкачки не вдається до функцій операційної системи, а використовує в своїй роботі тільки внутрішні функції ядра; він є архетипом всіх процесів ядра.
Як уже коротко говорилося, програма обробки переривань за таймером вимірює час знаходження кожного процесу в пам'яті або в стані вивантаження. Коли процес підкачки відновлює свою роботу по завантаженню процесів в пам'ять, він переглядає всі процеси, що знаходяться в стані "готовності до виконання, будучи вивантаженими", і вибирає з них один, який знаходиться в цьому стані довше за інших. Якщо є достатньо вільного місця, процес підкачки завантажує обраний процес, виконуючи операції в послідовності, зворотної вивантаженні процесу. Спочатку виділяється фізичне пам'ять, потім з пристрою вивантаження зчитується потрібний процес і звільняється місце на пристрої.
Якщо процес підкачки виконав процедуру завантаження успішно, він знову переглядає сукупність вивантажених, але готових до виконання процесів в пошуках наступного процесу, який передбачається завантажити в пам'ять, і повторює зазначену послідовність дій. В кінцевому підсумку виникає одна з наступних ситуацій:
· На пристрої вивантаження більше немає жодного процесу, готового до виконання. Процес підкачки призупиняє свою роботу до тих пір, поки не відновиться процес на пристрої вивантаження або поки ядро НЕ вивантажить процес, готовий до виконання.
· Процес підкачки виявив процес, готовий до завантаження, але в системі недостатньо пам'яті для його розміщення. Процес підкачки намагається завантажити інший процес і в разі успіху перезапускає алгоритм підкачки, продовжуючи пошук завантажуються процесів.
Якщо процесу підкачки потрібно вивантажити процес, він переглядає всі процеси в пам'яті. Припинили своє існування процеси не підходять для вивантаження, оскільки вони не займають фізичну пам'ять; також не можуть бути вивантажені процеси, заблоковані в пам'яті, наприклад, виконують операції над областями. Ядро вважає за краще вивантажувати призупинені процеси, оскільки процеси, готові до виконання, мають більше шансів бути незабаром обраними на виконання. Рішення про вивантаження процесу приймається ядром на підставі його пріоритету та тривалості його перебування в пам'яті. Якщо в пам'яті немає жодного призупиненого процесу, рішення про те, який із процесів, готових до виконання, слід вивантажити, залежить від значення, присвоєного процесу функцією nice, а також від тривалості перебування процесу в пам'яті.
Процес, готовий до виконання, повинен бути саморозміщувані в пам'яті протягом щонайменше 2 секунд до того, як піти з неї, а процес, що завантажується в пам'ять, повинен щонайменше 2 секунди пробути на пристрої вивантаження. Якщо процес підкачки не може знайти жодного процесу, відповідного для вивантаження, або жодного процесу, відповідного для завантаження, або жодного процесу, перед вивантаженням не менше 2 секунд знаходився в пам'яті, він призупиняє свою роботу у зв'язку з тим, що йому потрібно завантажити процес в пам'ять, а в пам'яті немає місця для його розміщення. У цій ситуації таймер відновлює виконання процесу підкачки через кожну секунду. Ядро також відновлює роботу процесу підкачки в тому випадку, коли один з процесів переходить в стан приостанова, так як останній може виявитися більш відповідним для вивантаження процесом в порівнянні з раніше розглянутими. Якщо процес підкачки розчистив місце в пам'яті або якщо він був припинений через неможливість зробити це, він відновлює свою роботу з перезапуску алгоритму підкачки (з самого його початку), знову роблячи спробу завантажити очікують виконання процеси.
Процес підкачки вибирає процеси для завантаження, грунтуючись на тривалості їх перебування на пристрої вивантаження. Як інший критерій може застосовуватися більш високий пріоритет завантажується процесу в порівнянні з іншими, готовими до виконання процесами, оскільки такий процес більш кращий для запуску. Алгоритм вибору процесу для вивантаження з пам'яті з метою звільнення місця необхідного обсягу має, однак, більш серйозні вади.
По-перше, процес підкачки проводить вивантаження на підставі пріоритету, тривалості перебування в пам'яті і значення nice. Незважаючи на те, що він проводить вивантаження процесу з єдиною метою - звільнити в пам'яті місце для завантаженого процесу, він може вивантажити і процес, який не звільняє місце необхідного розміру. Наприклад, якщо процес підкачки намагається завантажити в пам'ять процес розміром 1 Мбайт, а в системі відсутня вільна пам'ять, буде далеко не достатньо вивантажити процес, який займає лише 2 Кбайта пам'яті. В якості альтернативи може бути запропонована стратегія вивантаження груп процесів за умови, що вони звільняють місце, достатнє для розміщення завантажуються процесів. Експерименти з використанням машини PDP 11/23 показали, що в умовах сильної завантаженості така стратегія може збільшити продуктивність системи майже на 10 відсотків (див. [Peachey 84]).
По-друге, якщо процес підкачки призупинив свою роботу через те, що в пам'яті не вистачило місця для завантаження процесу, після відновлення він знову вибирає процес для завантаження в пам'ять, незважаючи на те, що раніше їм вже був зроблений вибір. Причина такої поведінки полягає в тому, що за минулий час в стан готовності до виконання могли перейти інші вивантажені процеси, більш підходящі для завантаження в пам'ять в порівнянні з раніше обраним процесом. Однак від цього мало втіхи для раніше обраного процесу, все ще намагається завантажитися в пам'ять. По-третє, якщо процес підкачки вибирає для вивантаження процес, що знаходиться в стані "готовності до виконання", не виключена можливість того, що цей процес після завантаження в пам'ять жодного разу не був запущений на виконання.
Слід згадати ще про одну небезпеку. Якщо при спробі вивантажити процес на пристрої вивантаження що не знайдено вільне місце, в системі може виникнути тупикова ситуація, при якій: всі процеси в основний пам'яті знаходяться в стані приостанова, все готові до виконання процеси вивантажені, для нових процесів на пристрої вивантаження вже немає місця , немає вільного місця і в основній пам'яті.
Інтерес до проблем, пов'язаних з підкачкою процесів, в останні роки спав у зв'язку з реалізацією алгоритмів підкачки сторінок пам'яті.
13 Denning P.J. The Working Set Model for Program Behavior. CACM, Vol.11, No.5, 1968, pp. 323-333