ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Структура обчислювальної системи

Структура обчислювальної системи

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

По-друге, обчислювальна система складається з програмного забезпечення. Все програмне забезпечення прийнято ділити на дві частини: прикладне і системне. До прикладного програмного забезпечення, як правило, відносяться різноманітні банківські та інші бізнес-програми, ігри, текстові процесори і таке інше. Під системним програмним забезпеченням зазвичай розуміють програми, що сприяють функціонуванню і розробці прикладних програм. Треба сказати, що поділ на прикладне і системне програмне забезпечення є доволі умовним і залежить від того, хто здійснює такий поділ. Так, звичайний користувач, недосвідчений в програмуванні, може вважати Microsoft Word за системну програму, а, з погляду програміста, це – застосування. Компілятор мови С для звичайного програміста – системна програма, а для системного – прикладна. Не зважаючи на таку нечітку грань, цю ситуацію можна відобразити у вигляді послідовності шарів (див. рис. 1.1), виділивши окремо найбільш загальну частину системного програмного забезпечення – операційну систему:

 


Рис. 1.1. Шари програмного забезпечення комп'ютерної системи

Що таке ОС

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

Операційна система як віртуальна машина

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

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

Операційна система як менеджер ресурсів

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

Операційна система як захисник користувачів і програм

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

Основні поняття і концепції ОС

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

Системні виклики

У будь-якій операційній системі підтримується механізм, який дозволяє призначеним для користувача програмам звертатися до послуг ядра ОС. У операційних системах найбільш відомої радянської обчислювальної машини БЕСМ-6 відповідні засоби "спілкування" з ядром називалися екстракодами, в операційних системах IBM вони називалися системними макрокомандами і так далі У ОС Unix такі засоби називають системними викликами.

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

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

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

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

Переривання

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

Виняткові ситуації

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

Файли

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

Головне завдання файлової системи (file system) – приховати особливості введення-виводу і дати програмістові просту абстрактну модель файлів, незалежних від пристроїв. Для читання, створення, видалення, запису, відкриття і закриття файлів також є обширна категорія системних викликів (створення, видалення, відкриття, закриття, читання і так далі). Користувачам добре знайомі такі пов'язані з організацією файлової системи поняття, як каталог, поточний каталог, кореневий каталог, шлях. Для маніпулювання цими об'єктами в операційній системі є системні виклики. Файлова система ОС описана в лекціях 11–12.

Процеси, нитки

Концепція процесу в ОС одна з найбільш фундаментальних. Процеси детально розглянуті в лекціях 2–7. Там же описані нитки, або легковагі процеси.

Архітектурні особливості ОС

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

Монолітне ядро

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

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

Монолітне ядро – старий спосіб організації операційних систем. Прикладом систем з монолітним ядром є більшість Unix-систем.

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

Віртуальні машини

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

 


Рис. 1.3. Варіант віртуальної машини

Першою реальною системою такого роду була система CP/CMS, або VM/370, як її називають зараз, для сімейства машин IBM/370.

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

Мікроядерна архітектура

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

 


Рис. 1.4. Мікроядерна архітектура операційної системи

Решта компонентів системи взаємодіє один з одним шляхом передачі повідомлень через мікроядро.

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

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

Змішані системи

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

Іншим прикладом змішаного підходу може служити можливість запуску операційної системи з монолітним ядром під управлінням мікроядра. Такі влаштовані 4.4BSD і MkLinux, засновані на мікроядрі Mach. Мікроядро забезпечує управління віртуальною пам'яттю і роботу низькорівневих драйверів. Решта всіх функцій, зокрема взаємодії з прикладними програмами, здійснюється монолітним ядром. Даний підхід сформувався в результаті спроб використовувати переваги мікроядерної архітектури, зберігаючи по можливості добре відладжений код монолітного ядра.

Найтісніше елементи мікроядерної архітектури і елементи монолітного ядра переплетені в ядрі Windows NT. Хоча Windows NT часто називають мікроядерною операційною системою, це не зовсім так. Мікроядро NT дуже велике (більше 1 Мбайт), щоб носити приставку "мікро". Компоненти ядра Windows NT розташовуються в пам'яті, що витісняється, і взаємодіють один з одним шляхом передачі повідомлень, як і належить в мікроядерних операційних системах. В той же час всі компоненти ядра працюють в одному адресному просторі і активно використовують загальні структури даних, що властиве операційним системам з монолітним ядром. На думку фахівців Microsoft, причина проста: чисто мікроядерний дизайн комерційно невигідний, оскільки неефективний.

Таким чином, Windows NT можна з повним правом назвати гібридною операційною системою.

Класифікація ОС

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

Реалізація багатозадачності

По числу одночасно виконуваних завдань операційні системи можна розділити на два класи:

· багатозадачні (Unix, OS/2, Windows);

· однозадачні (наприклад, MS-DOS).

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

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

Багатопроцесорна обробка

Аж до недавнього часу обчислювальні системи мали один центральний процесор. В результаті вимог до підвищення продуктивності з'явилися багатопроцесорні системи, що складаються з двох і більш за процесори загального призначення, що здійснюють паралельне виконання команд. Підтримка мультипроцесування є важливою властивістю ОС і приводить до ускладнення всіх алгоритмів управління ресурсами. Багатопроцесорна обробка реалізована в таких ОС, як Linux, Solaris, Windows NT, і ряду інших.

Багатопроцесорні ОС розділяють на симетричних і асиметричних. У симетричних ОС на кожному процесорі функціонує одне і те ж ядро, і завдання може бути виконана на будь-якому процесорі, тобто обробка повністю децентрализована. При цьому кожному з процесорів доступна вся пам'ять.

У асиметричних ОС процесори неравноправны. Зазвичай існує головний процесор (master) і підлеглі (slave), завантаження і характер роботи яких визначає головний процесор.

Висновок

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

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

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

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

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

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

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

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

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

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

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

 

 


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

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

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

 


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

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

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

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

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

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

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

 


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

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

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

Набір операцій

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

· створення процесу – завершення процесу;

· припинення процесу (переклад із стану виконання в стан готовність) – запуск процесу (переклад із стану готовність в стан виконання);

· блокування процесу (переклад із стану виконання в стан очікування) – розблокування процесу (переклад із стану очікування в стан готовність).

Надалі, коли ми говоритимемо про алгоритми планування, в нашій моделі з'явиться ще одна операція, що не має парною: зміна пріоритету процесу.

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

Одноразові операції

Складний життєвий шлях процесу в комп'ютері починається з його народження. Будь-яка операційна система, що підтримує концепцію процесів, повинна володіти засобами для їх створення. У дуже простих системах (наприклад, в системах, спроектованих для роботи тільки одного конкретного застосування) всі процеси можуть бути породжені на етапі старту системи. Складніші операційні системи створюють процеси динамічно, в міру необхідності. Ініціатором народження нового процесу після старту операційної системи може виступити або процес користувача, що зробив спеціальний системний виклик, або сама операційна система, тобто, зрештою, теж деякий процес. Процес, що ініціював створення нового процесу, прийнято називати процесом-батьком (parent process), а знов створений процес – процесом-дитиною (child process). Процеси-діти можуть у свою чергу породжувати нових дітей і т. д., утворюючи, в загальному випадку, усередині системи набір генеалогічних дерев процесів – генеалогічний ліс. Приклад генеалогічного лісу зображений на малюнку 2.4. Слід зазначити, що всі призначені для користувача процеси разом з деякими процесами операційної системи належать одному і тому ж дереву лісу. У ряді обчислювальних систем ліс взагалі вироджується в одне таке дерево.

 


Рис. 2.4. Спрощений генеалогічний ліс процесів. Стрілка означає відношення батько–нащадок

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

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

Після наділу процесу-дитини ресурсами необхідно занести в його адресний простір програмний код, значення даних, встановити програмний лічильник. Тут також можливі два рішення. У першому випадку процес-дитина стає дублікатом процесу-батька по регістровому і призначеному для користувача контекстах, при цьому повинен існувати спосіб визначення, хто для кого з процесів-двійників є батьком. У другому випадку процес-дитина завантажується новою програмою з якого-небудь файлу. Операційна система Unix вирішує породження процесу тільки першим способом; для запуску нової програми необхідно спочатку створити копію процесу-батька, а потім процес-дитина повинен замінити свій призначений для користувача контекст за допомогою спеціального системного виклику. Операційна система VAX/VMS допускає тільки друге рішення. У Windows NT можливі обидва варіанти (у різних API).

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

Після того, як процес наділений змістом, в PCB дописується інфо

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти