Призупиненні процеси
Об'єм оперативної пам'яті комп'ютера значно впливає на характер і швидкість протікання обчислюваного процесу. Об'єм пам'яті обмежує число одночасно виконуваних програм в комп'ютері. В умовах коли існуючої пам'яті недостатньо для забезпечення достатнього рівня роботи обчислювальної системи, постає питання, що робити?
Варіант 1 Збільшити об'єм оперативної пам'ті, щоб можна було розміщувати більше процесів.
Варіант 2 Використовувати свопінг, при якому процеси повністю або частково тимчасово переносяться на диск. Це зумовлено тим що, в оперативній пам'яті окрім активного процесу, завжди існують призупинені процеси, процеси, що знаходяться в режимі очікування, а також процеси які знаходяться в стані готовності. Таким чином деякі неактивні на даний момент процеси можуть бути переміщеними з оперативної пам'яті на диск. Коли підходить черга виконання переміщеного процеса, він повертається в оперативну пам'ять.
Якщо в модель поведінки процесів ввести поняття свопінгу, то виникає новий стан ПРИЗУПЕНЕННЯ. Коли всі процеси в основній пам'яті знаходяться в блокованому стані, операційна система може призупинити процес, перевівши його у призупинений стан і завантажити на диск. Вільне місце в основній пам'яті буде використовуватися для завантаження наступного процесу.
Готовий. Процес, який знаходиться в основній пам'яті і готовий до виконання.
Чекання. Процес, який знаходиться в основній пам'яті і чекае виконання якоїсь події.
Блокований/Призупинений. Процес, знаходиться на диску і чекає настання якоїсь події.
Готовий/Призупинений. Процес знаходиться на диску і готовий до виконання. Потрібно лише загрузити в основну пам'ять.
Модель переходів
Блокований -> Блокований / призупинений. Якщо до виконання не готовий жоден процес, то принаймні один блокований процес вивантажується з пам'яті, щоб звільнити місце для іншого процесу, який не є блокованим. Цей перехід можна виконувати і при наявності готових до виконання процесів, якщо операційна система визначить, що для процесу який виконується в даний час або процесу, управління до якого перейде найближчим часом, потрібно збільшити обсяг основної пам'яті для забезпечення адекватної продуктивності.
Блокований / призупинений -> Готовий / призупинення. Процес в стані блокованого призупиненого переходить в стан готового до виконання призупиненого процесу, якщо відбувається подія, якої чекав цей процес. Прицьому, що для такого переходу операційна система повинна мати доступ до інформації про стан припинених процесів.
Готовий / призупинений -> Готовий. Коли в основній пам'яті немає готових до виконання процесів, операційній системі для продовження обчислень потрібно завантажити процес в пам'ять. Може трапитися і так, що у готового до виконання призупиненого процесу виявиться більш високий пріоритет, ніж в іншого з готових до виконання процесів. У такій ситуації розробник операційної системи може вирішити, що важливіше забезпечити пріоритет процесу, ніж мінімізувати свопінг.
Готовий -> Готовий / призупинення. Зазвичай операційна система віддає перевагу призупиняти не готовий, а заблокований процес, оскільки до виконання готового процесу можна приступити негайно, а блокований процес тільки даремно займає основну пам'ять, оскільки не може бути виконаний. Однак іноді виявляється, що єдиний спосіб звільнити досить великий блок основної пам'яті - це призупинити готовий до виконання процес. Операційна система може також замість блокованого процесу з більш високим пріоритетом призупинити готовий до виконання процес з більш низьким пріоритетом, якщо блокований процес досить скоро буде готовий до виконання.
Крім того, заслуговують розгляду і інші переходи.
Новий -> Готовий / призупинений та Новий -> Готовий. Після створення нового процесу цей процес може бути доданий або в чергу готових до виконання, або в чергу готових до виконання призупинених процесів. У будь-якому з цих випадків операційна система повинна створити таблиці для управління процесом і виділити йому адресний простір. Краще виконати ці дії на ранніх етапах, щоб мати більший запас незаблокованних процесів. Однак якщо дотримуватися цієї стратегії, то в основній пам'яті може не вистачити місця для нового процесу. З цієї причини передбачено перехід нового процесу в стан призупиненого готового до виконання. З іншого боку, створення процесу в "останній момент" призводить до зменшення непродуктивних витрат і дозволяє операційній системі виконувати свої обов'язки щодо створення процесів навіть тоді, коли вона переповнена блокованими процесами.
Блокований / призупинений -> Блокований. Нехай: завершився певний процес, звільнивши при цьому певну частину основної пам'яті. У черзі заблокованих припинених процесів перебуває процес, пріоритет якого вище, ніж у будь-якого процесу з черги готових до виконання, але припинених процесів. Крім того, операційна система має аргументи на користь того, що досить скоро відбудеться подія, яка зніме блокування з цього високопріоритетного процесу. За таких обставин резонно віддати перевагу блокованому процесу перед готовими до виконання, завантаживши в основну пам'ять саме його.
Виконання -> Готовий / Призупинення. Зазвичай процес, який виконується і у якого вийшов відведений йому час, переходить у стан готового до виконання. Однак при наявності процесу з вищим пріоритетом, який перебував у черзі заблокованих припинених процесів і щойно був розблокований, операційна система може віддати перевагу саме йому. Щоб звільнити частину основної пам'яті, вона може перевести виконуваний процес безпосередньо в стан готового до виконання припиненого процесу.
Довільний стан -> Завершення. Зазвичай завершується виконуваний в даний момент процес - це відбувається або через те, що він виконався до кінця, або через помилки при його роботі.
Інші використання призупинення
Призупинений процес як такий, задовольняє такі критерії:
Цей процес не може бути запущений в даний момент.
Цей процес може як очікувати якоїсь події, так і не перебувати в стані очікування. Якщо він знаходиться в стані очікування, то блокуючий подія не пов'язана з умовою припинення, а наступ події не означає, що процес може бути виконаний.
Процес припиняється самостійно, операційною системою або батьківським процесом. Процес не може вийти зі стану припиненого до тих пір, поки не буде явно виведений з цього стану припинив його агентом.
Причини призупинення
Свопінг. Операційній системі потрібно звільнити простір в основній пам'яті, щоб завантажити готовий до виконання процес.
Інші причини, які з'являються у ОС. ОС може призупинити фоновий або службовий процес, а також підозрілий процес, який найімовірніше став причиною виникнення помилки.
Запит інтерактивного користувача. Користувач може захотіти призупинити процес, щоб приступити до відлагодження програми, або у зв'язку з використанням деякого ресурсу.
Часовий режим виконання. Процес може виконуватися періодично. В проміжках між виконанням такий процес може призупинятися.
Запит батьківського процесу. Батьківському процесу може знадобитися можливість призупинення дочірніх процесів для їх перевірки або модифікації, а також для координації роботи декількох дочірніх процесів.