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

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

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

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

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

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

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

Для вирішення перерахованих проблем потрібен систематичний метод, заснований на спостереженні за різними виконуються процесором програмами і управлінні ними. В основі такого методу лежить концепція процесу. Подумки процес можна розділити на три компоненти:

  1. Виконується програма.

  2. Дані, потрібні для її роботи (змінні, робочий простір, буфери і т.д.).

  3. Контекст виконання програми.

Останній елемент є дуже важливим. Контекст виконання (execution context), або стан процесу (process state), включає в себе всю інформацію, потрібну операційній системі для управління процесом, і процесору - для його виконання. Дані, що характеризують цей стан, включають в себе вміст різних регістрів процесора, таких, як програмний лічильник і регістри даних. Сюди ж входить інформація, що використовується операційною системою, така, як пріоритет процесу і відомості про те, чи знаходиться даний процес в стані очікування якоїсь події, пов'язаного з введенням-висновком.

На рис. 2.8 показаний приклад реалізації процесів. Два процеси, А і В, перебувають у різних областях основної пам'яті. Іншими словами, кожному процесу відведено блок пам'яті, в якому містяться код програми, дані та інформація про стан процесу. Кожен процес заноситься в список процесів, що створюється та підтримується операційною системою. Частина цього списку, відповідна певного процесу, містить покажчик розміщення цього процесу в пам'яті. Крім того, сюди ж частково або повністю може входити й інформація про стан процесу. Інші дані можуть зберігатися в самому процесі. У регістрі індексу процесу міститься індекс виконується в поточний момент часу процесу, що ідентифікує його у списку процесів. Вміст програмного лічильника вказує на чергову інструкцію, яку потрібно виконати. Базовий і граничний регістри задають область пам'яті, займану процесом. У базовий регістр заноситься адреса початковій осередку цієї області, а в граничний - її розмір (в байтах або словах).

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

Регістр індексу процесу, зображений на рис. 2.8, вказує, що виконується процес В. До цього виконувався процес А, але він тимчасово перерваний. Вміст всіх регістрів в момент припинення цього процесу записано у вигляді даних про стан процесу. Згодом операційна система зможе повернутися до виконання процесу А; при цьому буде збережений контекст виконання процесу В і відновлений контекст виконання процесу А. Коли в програмний лічильник завантажується значення, яке вказує на область коду програми процесу А, автоматично поновлюється виконання цього процесу.

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

Рис. 2.8. Типова реалізація процесів

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