Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка.doc
Скачиваний:
20
Добавлен:
08.11.2018
Размер:
1 Мб
Скачать
☆

4.8 Координація дій машини

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

Поняття процесу

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

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

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

Управління процесами

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

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

Кожного разу, коли процесу надається черговий квант часу, диспетчер ініціює ланцюг таймера, готуючи його до вимірювання тривалості наступного кванта. Після закінчення встановленого кванта ланцюг таймера генерує сигнал, званий перериванням. Центральний процесор реагує на цей сигнал так само, як і людина, яку зупиняють під час виконання певного завдання. Людина припиняє свою роботу, записує поточний стан завдання і звертає увагу на те, що його відвернуло. При отриманні сигналу переривання центральний процесор завершує поточний машинний цикл, зберігає своє положення в поточному процесі і починає виконувати програму – обробник переривань, поміщену в наперед певне місце в основній пам'яті.

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

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

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

Модель "клієнт/сервер"

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

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

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