Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структура обчислювальної системи.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.6 Mб
Скачать

Процеси в операційних системах. Поняття процесу

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

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

Розглянемо наступний приклад. Два студенти запускають програму витягання квадратного кореня. Одін хоче обчислити квадратний корінь з 4, а другий – з 1. З погляду студентів, запущена одна і та ж програма; з погляду комп'ютерної системи, їй доводиться займатися двома різними обчислювальними процесами, оскільки різні початкові дані приводять до різного набору обчислень. Отже, на рівні того, що відбувається усередині обчислювальної системи ми не можемо використовувати термін "програма" в призначеному для користувача сенсі слова.

Розглядаючи системи пакетної обробки, ми ввели поняття "завдання" як сукупність програми, набору команд мови управління завданнями, необхідних для її виконання, і вхідних даних. З погляду студентів, вони, підставивши різні початкові дані, сформували два різні завдання. Можливо, термін "завдання" підійде нам для опису внутрішнього функціонування комп'ютерних систем? Щоб з'ясувати це, давайте розглянемо інший приклад. Хай обидва студенти намагаються витягувати корінь квадратний з 1, тобто хай вони сформували ідентичні завдання, але завантажили їх в обчислювальну систему із зрушенням за часом. Тоді як одне з виконуваних завдань приступило до друку набутого значення і чекає закінчення операції введення-виводу, друге тільки починає виконуватися. Чи можна говорити про ідентичність завдань усередині обчислювальної системи в даний момент? Ні, оскільки стан процесу їх виконання різний. Отже, і слово "завдання" в призначеному для користувача сенсі не може застосовуватися для опису що відбувається в обчислювальній системі.

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

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

Стани процесу

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

Як видимий, кожен процес може знаходитися як мінімум в двох станах: процес виконується і процес не виконується. Діаграма станів процесу в такій моделі зображена на мал. 2.1.

Рис. 2.1. Проста діаграма станів процесу

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

Це дуже груба модель, вона не враховує, зокрема, те, що процес, вибраний для виконання, може все ще чекати події, із-за якої він був припинений, і реально до виконання не готовий. Для того, щоб уникнути такої ситуації, розіб'ємо стан процес не виконується на два нові стани: готовність і очікування (див. мал. 2.2).

Рис. 2.2. Докладніша діаграма станів процесу

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

  • операційна система припиняє його діяльність;

  • він не може продовжувати свою роботу, поки не відбудеться деяка подія, і операційна система переводить його в стан очікування;

  • в результаті виникнення переривання в обчислювальній системі (наприклад, переривання від таймера після закінчення передбаченого часу виконання) його повертають в стан готовність.

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

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

Рис. 2.3. Діаграма станів процесу, прийнята в курсі

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

У конкретних операційних системах стану процесу можуть бути ще більш деталізовані, можуть з'явитися деякі нові варіанти переходів з одного стану в інше. Так, наприклад, модель станів процесів для операційної системи Windows NT містить 7 різних станів, а для операційної системи Unix – 9. Проте так чи інакше, всі операційні системи підкоряються викладеній вище моделі.