Гордєєв а

стве монолітної можна назвати Windows 95/98 або ОС Linux. Ядро ОС Windows ми не можемо змінити, нам не доступні його вихідні коди і у нас немає програми для зборки (компіляції) цього ядра. А ось у випадку з Linux ми можемо самі зібрати ядро, яке нам необхідно, включивши в нього ті необхідні програмні модулі і драйвери, які ми вважаємо за доцільне включити саме в ядро ​​(а не звертатися до них з ядра).

Контрольні питання і завдання

Питання для перевірки

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

2 Зобразіть діаграму станів процесу, поясніть всі можливі переходи з одного стану в інший.

3 Поясніть значення наступних термінів: task (завдання), process (процес), thread (потік, нитка). Як вони між собою співвідносяться?

4 Для чого кожна задача одержує відповідний дескриптор? Які поля, як правило, містяться в дескрипторі процесу (завдання)? Що таке «контекст завдання»?

5 Поясніть поняття ресурсу. Чому поняття ресурсу є одним з фундаментальних при розгляді ОС? Які види і типи ресурсів ви знаєте?

6 Як ви вважаєте: скільки і яких списків дескрипторів завдань може бути в системі? Від чого повинно залежати це число?

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

8 З якою метою в ОС вводиться спеціальний системний модуль, іноді званий супервизором переривань?

9 У чому полягає відмінність між повторно-входимость (re-entrance) і повторно-переривається (re-enterable) програмними модулями? Як вони реалізуються?

10 Що таке привілейований програмний модуль? Чому не можна створити мультипрограмне ОС, в якій би не було привілейованих програмних модулів?

ГЛАВА 2 Управління завданнями і пам'яттю в

Отже, час центрального процесора і оперативна пам'ять є основними ресурсами в разі реалізації мультипрограмних обчислень.

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

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

Отже, операційна система виконує наступні основні функції, пов'язані з управлінням завданнями:

♦ створення і видалення завдань;

♦ планування процесів і диспетчеризація задач;

♦ синхронізація завдань, забезпечення їх засобами комунікації.

Створення та видалення завдань здійснюється за відповідними запитами від користувачів або від самих завдань. Завдання може породити нову задачу. При цьому між процесами з'являються «родинні» відносини. Породжує завдання називається «предком», «батьком», а породжена - «нащадком», «сином» або «дочірньої завданням». «Предок» може призупинити або видалити свою дочірню завдання, тоді як «нащадок» не може керувати «предком».

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

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

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

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

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

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

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

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

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

Планування і диспетчеризація процесів і задач

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

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

♦ по можливості закінчувати обчислення (обчислювальні процеси) в тому ж самому порядку, в якому вони були розпочаті;

♦ віддавати перевагу більш коротким процесам;

♦ надавати всім користувачам (процесам користувачів) однакові послуги, в тому числі і однаковий час очікування.

Коли говорять про стратегію обслуговування, завжди мають на увазі поняття процесу, а не поняття завдання, оскільки процес, як ми вже знаємо, може складатися з декількох потоків (завдань).

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

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

Гордєєв а

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

Мал. 2.1. дисципліни диспетчеризації