Системне програне забезпечення
1. Загальна структура операційної системи. Ядро ОС. Склад і основні функції.
Загальна структура операційної системи.
Основними функціями ОС є такі:
Сприймання від користувача завдань, або команд у вигляді директив, або у вигляді вказівок від маніпуляторів та їх обробка
Завантаження, запуск, призупинення та зупинка програм
Керування файловими системами та системами управління базами даних
Забезпечення режиму мультипрограмування, тобто виконання двох, або більше програм а одному процесорі
Забезпечення ф-цій по організації та керуванню всіма операціями вводу/виводу
Забезпечення виконання обмежень на час відповіді в режимі реального часу, що є важливим для ОС реального часу
Розподіл пам’яті, як основної так і зовнішньої, і організація віртуальної пам’яті
Планування та диспетчеризація у відповідності із заданими стратегією та дисципліною обслуговування задач
Організація механізмів обміну повідомленнями і даними між програмами, які виконуються, а також захист одних програм від впливу інших програм
Забезпечення роботи систем програмування
Таким чином ОС виконує функції керування обчислювальними процесами в комп’ютерній системі, розділяє ресурси системи між різним обчислювальними процесами і створює програмне середовище в якому виконуються прикладні програми користувача. Таке середовище називається операційним середовищем або операційним оточенням.
EMBED Visio.Drawing.6
Взаємодія користувачів з комп’ютерними системами відбувається через інтерфейс користувача, який підтримується ОС. Надалі приймаємо, що ф-ції ОС реалізуються програмним способом, але деякі з них можуть бути представлені програмно апаратними засобами і вигляді ПЗП (наприклад BIOS).
Операційне оточення складається з деякої множини стандартних сервісних програм, які можуть бути використані в процесі виконання задач і які надають засоби для керування ресурсами обчислювальної системи, виділяючи ці ресурси користувачам по потребах (наприклад керування вв/вив).
Ядро ОС. Склад і основні функції.
Всі операції пов’язані з процесами виконуються під керуванням тої частини ОС, яка називається ядром. Ядро – це невеличка частина ОС, але це компонент який найбільш інтенсивно використовується. З цієї причини ядро звичайно розміщується в основній пам’яті, в той час як інші частини ОС знаходяться на зовнішніх запам’ятовувальних і при необхідності викликаються в ОП такий процес називається Swapping. Одна з найважливіших функцій ядра це обробка переривань. У великих багатоабонентських в процесор надходить постійний потік переривань, коли ядро обробляє біжуче переривання воно забороняє всі інші і дозволяє їх знову тільки після обробки текучого переривання. При постійному потоці переривань може утворитись така ситуація, що ядро буде блокувати переривання на протязі значного часу, тобто не буде мати можливості реагувати на переривання. Тому ядро звичайно розробляють таким чином, щоб воно виконувало мінімально можливу попередню обробку кожного переривання, а потім передавало це переривання на подальшу обробку відповідно обробнику переривань, після початку роботи якого ядро отримало Можливість дозволити обробку інших переривань. Таким чином реакція суттєво зростає. Основні функції ядра. Ядро як правило вміщує програми тобто компоненти ядра для реалізації таких функцій:
Обробка переривань
Створення і знищення процесів
Переключення стану процесу
Диспетчеризація
Призупинення та активізація процесів
Організація взаємодії між процесами
Маніпуляція блоками PCB
Підтримка операцій вводу/виводу
Підтримка розподілу і перерозподілу пам’яті
Підтримка роботи файлової системи
Підтримка роботи виклику та повернення для звертання для процедури
Підтримка функцій обліку в роботі КС
Функції які реалізує ядро називаються примітивними – найпростіші функції в ОС.
В ієрархічних системних структурах ядро розташується безпосередньо над базовим апаратурного комп’ютера. А на вищих рівнях розташовані процеси системи та процеси користувача. Практика показала що такі системи піддаються відладці, модифікації та тестуванню.
2. Діаграма переходу процесу зі стану в стан. Стани процесу.
Поняття обчислювальний процес є одним з основних при розгляданні ОС. Процес або задача – це програма під час виконання на процесорі із послідовним виконанням команд. Сам процесор розглядається в двох аспектах: 1)Він є носієм даних. 2)Він виконує операції пов’язані з обробкою даних.
Процесом може бути виконання утиліти, виконання прикладної програми, транслятор деякої вихідної програми. При чому коли транслюється одна програма – це один процес, а коли інша – інший процес, хоча працює один і той самий транслятор. Розглянемо комп’ютер з одним центральним процесом, але всі наступні питання справедливі і для багатопроцесорних систем: Процес приймає ряд дискретних станів. Зміну станів процесу можуть викликати різні події. Процес знаходиться в стані виконання, якщо в біжучий момент йому надається центральний процесор. Процес знаходиться в стані готовності, якщо він міг би одразу використовувати центральний процесор, який знаходиться в його розпорядженні. Процес знаходиться в стані заблокованості, якщо він очікує на деяку подію; приклад: завершення операції вводу-виводу для того, щоб отримати можливість продовжити виконання. Це основні стани процесу. В однопроцесорному комп’ютері в кожен конкретний момент часу може викликатися один процес, але декілька процесів можуть знаходитись в стані готовності, а деякі бути заблоковані. Тому створюють списки: список процесів готових до виконання: 2 список або черга заблокованих процесів. Перший список або черга впорядкований за пріоритетом таким чином наступний процес який отримує в своє розпорядження центральний процесор буде першим цього списку. Другий список не впорядкований, не передбачається ніякого пріоритетного порядку розблокування процесорів, тобто їх переводу в стан готовності. Розблокування відбувається в тому порядку, в якому відбуваються події, які очікуються заблокованими процесами. ОС як правило процес з’являє при запуску довільної програми. Коли процес створено, він займає місце в кінці списку готових до виконання процесів. Під час функціонування ОС такий процес поступово просувається до початку списку в відповідності з тим, як завершиться виконання попередніх процесів. Коли процес буде першим у списку готових до виконання і коли звільниться центральний процесор, то центральний процесор буде цьому процесу і в той момент відбувається зміна стану процесу. Вибір процесу до виконання називається пуском. Це виконання за допомогою програми ОС, яка називається диспетчер. В мультипрограмних системах для того, щоб запобігти випадковому або навмисному захвату ресурсів комп’ютера одним довільним процесом ОС встановлює в спеціальному апаратному таймері переривань деяке значення, яке визначає часовий інтервал або квант часу на протязі якого біжучому процесу користувача дозволяється утримувати центральний процесор в своєму розпорядженні. Після закінчення часу таймер виробить сигнал переривань за яким керувати буде передане ОС. Після цього ОС переведе процес, який перед цим виконувався в стані готовності, а перший процес із списку готовий переведе в стан виконання. Якщо процес, який виконувався ще до закінчення кванту часу згенерує операцією вводу-виводу він тим самим сам звільнить центральний процесор, тобто себе сам заблокує на час завершення операції вводу-виводу. Системи з трьома активними станами процесів можлива ще одна зміна станів після завершення операції вводу-виводу. Процес перейде із заблокованого стану в стан готовності. Таким чином маємо чотири можливі зміни стану процесу. Єдина зміна станів, яка викликається самим процесом це блокування інші при зміні викликів об’єктами, які є зовнішніми по відношенню до біжучого процесу. Пасивний стан – це програма, яка не виконується. Процес із пасивного стану може перейти в стан готовності в таких випадках: 1)За командою користувача. Це має місце в таких інтерактивних або діалогових ОС, де програма може мати статус задачі, а не бути файлом виконання і тільки на час виконання вона може отримувати статус задачі, тобто процесу. 2)При виборі планувальника з черги процесу. 3)За викликом із інших задач. Один процес може створювати, ініціювати, призупинити і зупинити інший процес. 4)За перериванням від зовнішнього пристрою. Сигнал при виконання деякої події може записувати відповідну задачу. 5)При надходженні запланованого часу програм із стану виконання процес може вийти з таких причин:
процес завершується. При цьому він передає керування ОС і повідомляє про своє завершення. В результаті процес переходить в пасивний стан або знищується. Знищується не сама програма, а саме активний процес, який відповідає виконанню деякої програми. В пасивний стан також може бути переведений за командою користувача.
процес переводиться ОС в стан готовності у зв’язку виникнення більш пріоритетної задачі або через завершення виділення кванту часу.
процес блокується або через запит операції вводу-виводу або через те, що йому неможливо надати ресурс на який виник запит, або за командою користувача призупинку процесу. З початком відповідної дії процес буде деблоковано і переведено в стан готовності до виконання. Таким чином силою, яка міняє стани процесу це події і один з видів подій це - переривання.
3. Переключення контексту як засіб реалізації переривань.
Для обробки кожного з видів переривань в складі ОС передбачені програми, які називаються оброблювачі переривань (IH, Interrupt Handler).
Коли відбувається переривання, ОС запам’ятовує стан перерваного процесу і передає керування відповідному оброблювачу. Це робиться в спосіб, який називається переключення контексту. При реалізації цього способу використовується слово стану програми (PSW, Program Status Word). Ці слова керують порядком виконання команд і вміщують інформацію відносно стану процесу. Існує три типи PSW:
Адреса наступної команди, яка має виконуватись вміщується в біжучому PSW, в якому вказані також типи переривань дозволені і заборонені в біжучий момент.
Центральний процесор реагує тільки на дозволені переривання, обробка заборонених переривань або затримок в деяких випадках ігнорується. Процесору не можна заборонити реагувати на переривання за викликом супервізора, за рестартом, а також на деякі види програмних переривань. В одно процесорній машині є тільки одне біжуче PSW, але n нових PSW, і n старих PSW. Нове PSW для біжучого типу переривань містить постійну адресу, за якою резидентно розміщується оброблювач переривань цього типу.
Коли відбувається переривання, якщо воно не заборонено для процесора відбувається автоматично, яке виконується апаратно переключення PSW таким чином:
біжуче PSW робиться старим PSW для переривань цього типу;
нове PSW для переривань цього типу робиться біжучим PSW.
Після такого заміщення біжуче PSW буде вміщувати адресу відповідного оброблювача переривань, який починає відробляти біжуче переривання. Коли обробка переривань завершиться, центральний процесор починає обслуговувати або той процес, який виконується в момент переривань, або готовий процес з найвищим пріоритетом.
4. Асинхронні паралельні процеси.
Процеси називаються паралельними якщо вони існують одночасно. Розвиток технології створення апаратури сприяють зменшенню габаритів апаратури , розвитку багатопроцесорних систем і як кінцевий результат реалізації максимального паралелізму на всіх рівнях роботи КС. Паралельні процеси можуть бути повністю незалежними або взаємодіючими. Взаємодіючі процеси можуть бути конкуруючими або такими що сумісно виконують спільну роботу. Як правило маємо справу з паралельними процесами яким необхідно тільки час від часу синхронізуватись та взаємодіяти. Такі паралельні процеси називаються асинхронними.
EMBED Visio.Drawing.6
EMBED Visio.Drawing.6
Ця програма друкує за чергою всі файли, імена яких послідовно в порядку надходження записують в загально-доступний спеціальний файл замовлень інших програм. Спеціальна змінна NEXT, яка також доступна усім процесам-клієнтам вміщує номер першої вільної для запису імені файла позиції у файлі замовлень. Процеси клієнти читають адресу з NEXT і записують у відповідну позицію файла замовлень своє ім’я і збільшують значення NEXT і записують у відповідну позицію файла замовлень своє ім’я і збільшують значення NEXT на 1. припустімо, що в деякий момент процес вирішив роздрукувати свій файл. Для цього він прочитав значення NEXT. Процес запам’ятав це значення але розмістити туди ім’я файла не встиг оскільки його виконання було перервано, наприклад через закінчення кванту часу. Черговий процес S який теж хоче роздрукувати свій файл так само прочитав значення NEXT розмістив в позицію 4 ім’я свого файлу(S2) і збільшує NEXT на 1(S3). Коли в черговий раз керування буде передано процесу R то він продовжить своє виконання у повній відповідності із значенням біжучої вільної позиції у файлі замовлень, яке було отримане під час попередньої ітерації і запише ім’я свого файла також в позицію 4 поверх імені файла, яке записав процес S. В результаті процес S ніколи не побачить свій файл роздрукованим таким чином, має місце проблема синхронізації процесів.
Складність проблеми синхронізації полягає в тому що синхронізації виконують регулярно. Це визначається взаємними швидкостями процесів і моментами їх переривання. Така відладка взаємодіючих процесів є складною задачею. Ситуація подібна тій коли два або більше процесів обробляють дані тобто такі що дозволяються і що кінцевий результат залежить від співвідношень швидкостей процесів називають перегонами або гонками. Вони мають місце не тільки в програмному але й апаратному рівні.
5. Явище “гонок”як прояв проблеми синхронізації процесів.
EMBED Visio.Drawing.6
EMBED Visio.Drawing.6
Ця програма друкує за чергою всі файли, імена яких послідовно в порядку надходження записують в загально-доступний спеціальний файл замовлень інших програм. Спеціальна змінна NEXT, яка також доступна усім процесам-клієнтам вміщує номер першої вільної для запису імені файла позиції у файлі замовлень. Процеси клієнти читають адресу з NEXT і записують у відповідну позицію файла замовлень своє ім’я і збільшують значення NEXT і записують у відповідну позицію файла замовлень своє ім’я і збільшують значення NEXT на 1. припустімо, що в деякий момент процес вирішив роздрукувати свій файл. Для цього він прочитав значення NEXT. Процес запам’ятав це значення але розмістити туди ім’я файла не встиг оскільки його виконання було перервано, наприклад через закінчення кванту часу. Черговий процес S який теж хоче роздрукувати свій файл так само прочитав значення NEXT розмістив в позицію 4 ім’я свого файлу(S2) і збільшує NEXT на 1(S3). Коли в черговий раз керування буде передано процесу R то він продовжить своє виконання у повній відповідності із значенням біжучої вільної позиції у файлі замовлень, яке було отримане під час попередньої ітерації і запише ім’я свого файла також в позицію 4 поверх імені файла, яке записав процес S. В результаті процес S ніколи не побачить свій файл роздрукованим таким чином, має місце проблема синхронізації процесів.
Складність проблеми синхронізації полягає в тому що синхронізації виконують регулярно. Це визначається взаємними швидкостями процесів і моментами їх переривання. Така відладка взаємодіючих процесів є складною задачею. Ситуація подібна тій коли два або більше процесів обробляють дані тобто такі що дозволяються і що кінцевий результат залежить від співвідношень швидкостей процесів називають перегонами або гонками.
6. “Взаємовиключення” як спосіб взаємодії процесів. Концепція “семафорів” як засіб керування “взаємовиключенням”
Взаємовиключення – спосіб взаємодії між процесами, при якому під час звертання одного процесу до даних що розділяються всім іншим процесам це заборонено. Якщо процес звертається до змінних які розділяються то цей процес знаходить на своїй критичній ділянці або критичній області. Для всіх інших процесів, які розділяють дані можливість входу в критичні ділянки повинна бути виключена. Він не повинен блокуватись на критичній ділянці. Критичні ділянки потрібно програмувати найбіль ретельно, щоб виключити наприклад можливість зациклювання. Таким чином, маємо наступну задачу. Ми хочемо реалізувати взаємовиключення з виконаним таким чином 4-х обмежень:
задача повинна бути розв’язана програмним способом на комп’ютері який не має спеціальних команд взаємовиключення, причому:
а). кожна команда виконується як операція яка не може бути поділена
б). при одночасній спробі декількох процесорів звернутись до того самого елемента даних спрацьовує апаратна схема захисного блокування пам’яті. Будується черга яка дозволяє виконуватись тільки одне звертання.
не повинно бути ніяких припущень щодо відносних швидкостей виконання асинхронних паралельних процесів
процеси які знаходяться поза своїми критичними ділянками не можуть заважати заходити у їх власні користувацькі ділянки
не повинно бути безумовного відкидання моменту входу процесів в іх критичні ділянки
Концепція “семафорів” як засіб керування “взаємовиключенням”
Всі найважливіші поніття які мають відношення до взаємовиключення були об’єднані в концепції семафорів. Семафор – це захищена змінна значення якої можна читати та міняти тільки за допомогою операцій Р, V також операцій ініціалізації двійкові семафори можуть приймати значення 0 та 1. семафори з рахуванням можуть приймати невід’ємні цілі значення. Операція Р-типу семафори S:
EMBED Visio.Drawing.6
Узагальнений зміст примітиву Р(S) полягає у перевірці біжучого значення семафора S і якщо він не менше 0 то виконується перехід до наступної за даним примітивом операції, процес змінюється на деякий час з виконання і переходить в стан пасивного очікування. V(S) пов’язана із збільшенням значення семафора на 1 і переводом одного або декілька процесів в стан готовності. Операції P та V виконуються ОС у відповідь на запит виданий деяким процесом і який вміщує ім’я семафора. Для роботи з семафорами треба мати операцію ініціалізації семафора. Семафори можна використовувати для реалізації механізму синхронізації процесів шляхом блокування розблокування. Один процес блокує себе виконуючи операцію Р з погчатковим значенням S=0 для того щоб очікувати на прихід деякої події. Інишй процес виясняє що подія яка очікуватиме відбулась і відновлює заблокований процес за допомогою операції V. Семафори з рахуванням осбливо корисні у випадку коли деякий ресурс виділяється з множини ідентичних ресурсів кожна Р-операція показує що ресурс виділяється деякому процесу а V-операція що ресурс повертає в загальну множину. Операції над семафорами можна реалізувати з використанням режиму активного очікування, але це може призвести до втрати ефективності, щоб цього уникнути подібні операції потрібно реалізовувати в ядрах.
7. Концепція “моніторів” як засіб розподілу загальних ресурсів.
Необхідність входу в монітор в різні моменти часу можуть виникати у багатьох процесів, але вхід в монітор знаходиться під жорстким контролем. Саме тут виконується взаємо виключення процесів, так щоб в кожний момент часу тільки одному процесу дозволяється зайти в монітор. Процеси які хочуть зайти в монітор, коли він вже зайнятий, будуть очікувати. Режимом очікування автоматичного керує сам монітор. Механізм монітора гарантує взаємовиключення процесів. Внутрішні дані монітора можуть бути або глобальними, відносяться до всіх процесів монітора або локальними, відносяться до конкретної процедури. До всіх цих даних є доступ із середини монітора. Процеси які знаходяться поза монітором не можуть отримати доступ до даних моніторів. Якщо процес звертається до деякої процедури монітора і виявляється, що відповідний ресурс вже зайнято, процедура видає команду wait. Цей процес міг би залишитись в середині монітора, але це привело б до порушення принципу взаємодії, якщо в монітор зайшов би інший процес. Тому процес який приводиться в режимі очікування повинен поза монітором очікувати того моменту, коли необхідний йому ресурс звільниться з часом який утримував деякий ресурс звертається до монітора для того щоб повернути ресурс системі. Процедура монітора може прийняти повідомлення про повернення ресурс, а також очікувати доки не надійде запит від іншого процесу, що йому буде необхідний цей процес, але може виявитись, що вже є процеси які очікують на звільнення цього ресурсу. Монітор виконує сигнал для того, щоб один з процесів який очікує міг зайняти цей ресурс і покинути монітор. Процес який очікує завжди має більш високий пріоритет ніж новий процес який намагається зайти в монітор, такий підхід захищає від безмежного відкладання ресурсів процесам які стоять в черзі. Просте розподілення ресурсів за допомогою монітора. Припустимо, що декільком процесам необхідний доступ до певного ресурсу, який може бути використаний в кожний конкретний момент часу тільки одним процесом. Використаємо такий монітор.
Monitor розподільник ресурсів
Var ресурс зайнятий: логічний
Ресурс звільнено: умова
Procedure захват ресурсу
Begin if ресурс зайнятий then
Wait (ресурс звільнено)
Ресурс звільнено:=істина
End
Procedure повернути ресурс
Begin ресурс зайнятий :=неправда
Signal (ресурс звільнено)
End
Begin ресурс зайнятий := неправда
Повернути ресурс
End
Перевага такого монітора в тому, що він може працювати так як двійковий семафон. Захват ресурсу відповідає р оператору, повернення (в) оператору, і таким чином монітор як мінімум може мати таку саму потужність як і семафон.
8. Тупики. Причини виникнення. Способи боротьби з тупиками.
EMBED Visio.Drawing.6
В багатопрограмній системі процес знаходиться в стані тупика, дедлока або клінча якщо він очікує на деяку подію, яка ніколи не відбудется. Системна тупикова ситуація – це коли один або декілька процесів виявляються в стані тупика. Одна з основних функцій ОС це розподіл ресурсів, коли ресурси розподіляються між багатьма користувачами кожному з яких надається право виключного керування виділеними йому конкретними ресурсами можливе виникнення тупиків, які дадуть процесам деяких користувачів коли-небудь дійти до завершення. Розглянемо таку ситуацію:
EMBED Visio.Drawing.6
EMBED Visio.Drawing.6
EMBED Visio.Drawing.6
EMBED Visio.Drawing.6
Нехай після того, як А захопив принтер, тобто встановив блокуючу змінну в семафорі він був перерваний керування отримав процес в який спочатку захопив диск але при виконанні наступної команди був заблокований оскільки принтер захоплений процесом А і процес В став в чергу за цим ресурсом, керування знову отримує процес а, який у відповідності зі своєю програмою хоче захопити диск. Але диск захоплений процесом В і процес а блокується. Маємо ситуацію тупика. В такому стані процеси А і В можуть знаходитись безмежно довго. Можливий інший розвиток взаємодії цих процесів. в такому випадку не виникає тупика, виникає лише черга на диску. В цих 2-ох прикладах процес А і процес В розділяють ресурси тобто спільно використовують. Якщо б мало місце незалежне використання ресурсу кожним процесом то така діаграма виглядає наступним чином. Типові ситуації треба відрізняти від звичайних, хоча ті і інші виникають при сумісному використанні ресурсів зовні виглядають схоже. Процес призупиняється і очікує звільнення ресурсу. Але черга нормативне явище однаково високого коефіцієнту використання ресурсу. Графічно тупикові ситуації можна представити таким чином: Для виникнення тупика необхідні такі умови:1)умова взаємо виключення – процеси вимагають надання їм права монопольного керування ресурсами які їм виділяють. 2)умова очікування ресурсу – процеси утримують за собою ресурси які вже виділені їм, очікуючи в той же час виділенню нових ресурсів. 3)умова неперерозподілюваності – ресурси неможливо відібрати у процесів які їх утримують, доки ці ресурси не будуть використані для завершення роботи. 4)умова кільцевого очікування – існує кільцевий ланцюжок процесів в якому кожний процес утримує за собою один або декілька ресурсів, які потрібні наступному процесу ланцюжка. Якщо хоча б одна з умо не виконується, тупик не виникає. Стратегія боротьби з тупиками полягає в томк щоб порушити хоча б одну умову. В системах із спулінгом можливе виникнення тупиків коли виділена область буферної пам'яті заповнюється коли процес завершує свою роботу.
9. Конвеєри (програмні канали) і черги повідомлень.
Конвеєр – це програмний канал або транспортер – це засіб прогр. За допомогою якого можна виконувати обмін даними між процесами. Процес який передає інформацію працює так нібито він записує дані у файл, в той час як задача для якої призначена ця інформація читає її з цього файла, тобто конвеєр – це потік даних між двома або більше процесами. Це не файл на диску, а буферна пам'ять яка працює за принципом FIFO. Конвеєр має певний розмір і працює циклічно як кільцевий буфер. В початковий момент обидва покажчики рівні 0. коли додаємо самий перший елемент у пусту чергу це приводить до того , що покажчики head i tail приймають значення 1. В масиві з’являється перший елемент. Потім додавання нового елемента викликає зміну значення другого покажчика, оскільки він відмічає розташування останнього елемента в черзі. Читання та вилучення елементів приводить до необхідності модифікувати значення head, в результаті читання і запису покажчики будуть переміщатись від початкового масиву до його кінця. Після досягнення покажчиком індексу останнього елемента масива значень покажчика рівна 1. Конвеєр – це системний ресурс, щоб почати роботу з конвеєром. Процес повинен зробити запит у ОС і отримати в його розпорядження. Процеси які знають ідентифікатор конвеєра можуть обмінюватись через нього даними.
Черги повідомлень.
Це більш складний метод зв’язку між взаємодіючими процесами в порівнянні з програмними каналами. За допомогою черг можна з одної або декількох задач незалежним чином послати повідомлення деякій задачі – приймачу, причому тільки процес приймач може приймати і вилучати повідомлення з черг, а процеси клієнти мають право тільки розміщати в чергу свої повідомлення. Таким чином черга працює лише в одному напрямку, якщо потрібно двосторонній зв’язок, потрібно створити дві черги. Відмінність черг від програмного каналу або конвеєра така:
1) а) черги повідомлень надають можливість використовувати декілька дисциплін обробк повідомлень.
б) пріоритетне обслуговування.
в) довільний доступ, який дозволить читати довільні повідомлення, в той час як конвеєр забезпечує тільки FIFO.
2) якщо при читанні повідомлення з конвеєра воно вилучається з нього, то при читанні повідомлення з черги може бути прочитане ще раз.
3) в чергах знаходяться не безпосередньо самі повідомлення, а лише їх адреси в пам’яті та розмір. Ця інформація розміщується в елементі памяті який доступний для всіх задач, які спілкується за допомогою даної черги.
10. Невитісняючі та витісняючі алгоритми планування процесів.
Існує два основні типи процедур планування процесів:
витісняючи preemptire
невитісняючі non – preemptire
Невитісняюча багатозадачність – це спосіб планування процесів при якому активний процес виконується до того часу доки він сам за власною ініціативою керування планувальнику ОС для того щоб той вибрав з черги інший готовий до виконання процес
Витісняюча багатозадачність – це такий спосіб планування при якому рішення про переключення процесора з виконання одного процеса на інший процес приймається планувальником ОС а не активним процесом.
Типи багатозадачності – це більш широкі поняття ніж типи пріоритетності. Пріоритети задач можуть як використовуватись так і невикористовуватисьяк при витісняючій так і при невитісняючій багатозадачності. Основна відмінність між витісняючи ми і невитісняючими плануваннями – це ступінь нейтралізації механізма планування задачі. У витісняючому випадку механізм планування задач повністю зосереджено в ОС. В цьому випадку ОС виконує такі функції:
визначає момент коли знімається з виконання остання задача
запам'ятовується контекст
вибирається з черги готових задач наступна
ця задача запускається на виконання шляхом завантаження її контексту
В невитісняючому випадку механізм планування розміщається між ОС і прикладними програмами. Прикладна програма отримає керування від ОС. Сама визначить момент завершення чергової ітерації і передає керування ОС за допомогою системного виклику. ОС формує черги задач і вибирає із врахуванням пріоритетів. Такий механізм досить складний як для користувача так і для розробників. Програміст повинен забезпечити дружнє відношення до інших програм які виконуються одночасно, тобто досить часто їм віддавати керування.
EMBED Visio.Drawing.6
EMBED Visio.Drawing.6
мал.1. Витісняюча багатозадачність
мал.2. Невитісняюча (кооперативна) багатозадачність
Витісняючу багатозадачність називають справжньою багатозадачністю.
11. Механізм багатониткової обробки процесів із внутрішніми паралелізмом.
Багатозадачність – найважливіша якість ОС. Для її підтримки ОС визначає і створює для себе ті внутрішні одиниці роботи, між якими будуть розділятись всі ресурси комп’ютера. ОС підтримує відокремленість ресурсів. У кожного процесу є свій віртуальний адресний простір. Кожному процесу призначаються свої ресурси: файли, семафори, вікна тощо. Все це створюється для того, щоби захистити один процес від інших. При мультипрограмуванні підвищується пропускна здатність системи в цілому, але окремий процес ніколи не може бути виконаний швидше, ніж у випадку його виконання в однопрограмному режимі, оскільки витричається час на очікування розділюваних ресурсів. Але задачі, яка розв’язуються в рамках одного процесу, може бути притаманний внутрішній паралелізм, який в принципі дозволяє прискорити її розв’язок. Наприклад, в ході виконання задачі відбувається звертання до завантаження принтера. Під час цієї операції можна не блокувати цей процес, а продовжити виконання по іншій гілці алгоритму. Для цього пропонується механізм багатониткової обробки (multithreating). І мультипрограмування тепер можна реалізувати на рівні ниток. Оскільки всі нитки одного процесу завжди належать одній програмі, між ними досить легко організувати тісну взаємодію. Програміст може завчасно продумати роботу множини тредів процеса таким чином, щоби вони могли взаємодіяти, а не боротись за ресурс. Тобто нитки подібні до процесів, але в рамках одного процеса не такі незалежні. Всі нитки мають один адресний простір, вони розділяють одні і ті самі глобальні змінні, кожний тред має доступ до кожної віртуальної адреси. Одна нитка може використовувати стек іншої нитки і між ними немає повного захисту. Всі нитки розділяють набір відкритих файлів, таймерів, сигналів тощо.
Таким чином нитки мають власні: 1) програмний лічильник; 2) стек; 3) регістри; 4) треди-нащадки; 5) стани.
Треди розділяють: 1) адресний простір; 2) глобальні змінні; 3) відкриті файли; 4) таймера; 5) семафори; 6) статистичну інформацію про роботу системи.
Головне, що забезпечують нитки – це можливість паралельно виконувати декілька видів операцій в одній прикладній програмі. Паралельність обчислень, а значить і більш ефективне використання ЦП і менший сумарний час виконання задач тепер реалізується і на рівні тредів. Об’єкт-процес припускає, що при диспетчеризації треба враховувати всі ресурси, а при роботі з об’єктом “тред” можна міняти тільки контекст задачі, якщо ми переключаємось в рамках одного процесу. Всі інші ресурси не торкаються. Кожний процес складається як мінімум з одного треда. І тільки якщо є внутрішній паралелізм програміст може його розділити на декілька тредів. В багатопроцесорних системах із спільною пам’яттю треди просто необхідні, оскільки вони дозволяють завантажити роботою всі процеси. Але треба мати на увазі, що все-таки бажано зменшити взаємодію тредів між собою, оскільки прискорення від одночасного використання паралельних потоків обробки даних може бути зведене до мінімуму через затримки синхронізації і обмін даними. Для того, щоб можна було ефективно організувати паралельне виконання як процесів так і тредів, в архітектуру включається можливість працювати із спеціальною інформаційною структурою, яка описує або процес, або тред. Для цього на рівні архітектури процесора використовується поняття задачі (task). Воно об’єднує в собі як процес, так і тред. Це поняття і інформаційна структура, яка підтримується для нього на рівні апаратури, дозволяє побудувати відповідні дескриптори. Вони будуть відрізнятись перш за все тим, що дескриптор треда може зберегти тільки контекст призупиненого обчислювального процесу, а дескриптор процесу повинен вміщувати поля, які описують всі ресурси, які виділені цьому процесу.
12. Призначення підсистеми керування ресурсами ОС.
EMBED Visio.Drawing.6
Найважливіші ресурси КС – це пам’ять і процесорний час.
Розглянемо керування основною або фізичною пам’яттю. Це один з найбільш важливих факторів, який визначає побудову та принцип функціонування ОС. В напряму стрілки змінюється час доступу до пам’яті. Тобто росте швидкість. Росте вартість зберігання одного біта і зменшується ємність пам’яті. До пам’яті першої групи центральний процесор може звертатись безпосередньо до програм і даних які там зберігаються, а для прочитання даних які зберігаються в пристроях другої групи треба спочатку ці дані переписати в основну пам'ять. Під організацією пам’яті ми розуміємо те, яким чином представляється та використовується основна пам'ять.
Процесор може працювати, виконуючи команди програм. Для того, щоб CPU міг звернутись до програм та даних ІІ групи їх треба спочатку переписати в пам’ять І групи.
Під організацією пам’яті ми розуміємо те, яким чином представляється і використовується основна пам’ять. При цьому виникають такі можливості:
однопрограмін системи;
багатопрограмні системи з фіксованими розділами пам’яті з трансляцією та програмних завантаженням модулів в абсолютних адресах;
багатопрограмні системи з фіксованими розділами пам’яті, але з трансляцією та завантаженням модулів, які переміщаються;
багатопрограмні системи із змінними розділами пам’яті;
системи із свопінгом, тобто системи із сторінковою організацією пам’яті і обміном сторінками.
13. Можливі стратегії керування основною пам’яттю.
Стратегії керування пам’яті визначають, яким чином буде працювати пам’ять конкретної системи при різних підходах до вирішення таких питань:
коли треба розміщувати нову програму в пам’яті;
ми будемо розміщувати нову програму в пам’ять тоді, коли система буде сама про це просити; будемо намагатись випередити запити системи;
в яке місце ОП ми будемо розміщувати чергову програму для виконання;
програми в ОП ми будемо розміщувати як можна більш щільно, щоб звести до мінімуму затрати пам’яті, чи будемо прагнути до найшвидшого розміщення програм, щоби звести до мінімуму витрати комп’ютерного часу;
якщо в ОП необхідно розмістити нову програму, а ОП в біжучий момент буде заповнена, то яку з інших програм треба вивести із пам’яті: ту, яка в пам’яті довше, ніж інші, або ту, яка використовується найменш часто, або ту, яка довше за інші не використовується?
Існують системи, які орієнтовані на реалізації кожної з таких стратегій керування пам’яттю. Всі стратегії направлені на те, щоб забезпечити найкраще можливе її використання. Стратегії керування пам’яттю поділяються на такі категорії:
стратегії вибірки
стратегії розміщення
стратегія заміщення.
Визначає, який блок програм або даних треба виштовхувати з ОП, щоб звільнити місце для нових програм або даних.
14. Незв’язаний розподіл основної пам’яті та зв’язаний розподіл зовнішнього адресного простору.
Зв’язаний розподіл зовнішньої пам’яті. При такому розподілі кожному файлу відводиться одна неперервна область зовнішньої пам’яті. Користувач вказує розмір ділянки необхідної для розміщення створеного файлу. Якщо потрібної за розміром неперервної вільної області немає файл створити не можливо. Позитивним в такому розміщенні є те, що послідовні логічні засоби розміщуються фізично поруч і це підвищує швидкість доступу. Директорія файлів в системах з зв’язаним розподілом реалізується досить просто. Для кожного файлу необхідно зберігати тільки початкову адресу і довжину файлу. Недоліки розподілу: коли файл знищується простір, який він займав повертається в список вільних ресурсів. Цей простір надається для розміщення нових файлів, які повинні за розміром відповідати вільним ділянкам. Таким чином сусідні вільні області зовнішньої пам’яті необхідно об’єднувати, виконувати періодично ущільнення, для того щоб створювати великі вільні ділянки для розміщення нових файлів і при умові, що розміри файлів часто міняються зв’язаний розподіл може бути не раціональний, а може бути і доцільним.
Незв’язаний розподіл адресного простору зовнішньої пам’яті. Його поширення викликане тим, що файли з часом або збільшуються або зменшуються, а користувач як правило не знає якого розміру будуть його файли.
2.1) Розподіл за допомогою списків секторів – дискова пам’ять розглядається як набір індивідуальних секторів. Файли складаються з секторів, які можуть знаходитись в різних місцях дискової пам’яті. Сектори, які належать одному файлу вміщують покажчики один одного, які створюють список. Коли з’являється необхідність збільшити розмір файла, відповідний процес робить запит по додаткову к-сть секторів із числа вільних. Файли розміри яких зменшився повертають сектори у список вільного простору. Проблема ущільнення пам’яті на рівні секторів не виникає. Недоліки: оскільки записи файлів можуть розміщуватись в різних місцях дискової пам’яті вибірка логічно суміжних записів може бути пов’язана з довготривалим пошуком; маємо додаткові витрати машинного часу для обробки посилок покажчиків; оскільки покажчики зберігаються в елементах списків, це веде до зміни об’єму пам’яті для зберігання власне даних.
2.2) Поблочний розподіл – існує схема яка об’єднує методи зв’язаного і незв’язаного розподілів. В цій схемі пам’ять розподіляється не індивідуальними секторами, а блоками суміжних секторів. При виділленні нових блоків система намагається вибрати вільні блоки як можна ближче до вже існуючих блоків файлів. При кожному звертанні до файлу, спочатку визначається блок, а потім відповідний сектор в рамках цього блоку. Існує декілька способів реалізації поблочного розподілу:
а) схема з ланцюжками блоків
Рядок директорії користувача показує на перший блок файлу. Кожний з блоків фіксованої величини, який входить до складу файлу вміщує 2 частини: блок даних і покажчик на наступний блок. Мінімальна одиниця виділеної пам’яті – це блок фіксованого розміру, який включає багато секторів. Звичайно розмір блоку вибирається рівним повній доріжці дискового накопичувача. Для знаходження конкретного запису необхідно передивитись ланцюжок блоків, знайти необхідний блок, переглянути його поки не буде знайдено необхідний запис. Перегляд ланцюжка блоків необхідно починати з самого початку. А оскільки блоки розподіляються по всьому диску процес перегляду може зайняти багато часу. При такому підході виконання вставки нових блоків або виключати блоки з файлу досить легко. Це робиться шляхом модифікації покажчиків попереднього блоку. В деяких системах для прискорення перегляду та пошуку необхідних записів в списках застосовується подвійне зв’язування, тобто формуються як прямі так і зворотні посилки між блоками. І тоді перегляд блоків може відбутися в будь-якому напрямку.
Б) Схема з ланцюжком індексів.
Покажчик розміщується в окремі індексні блоки. Кожен індексний блок вміщує фіксовану к-сть елементів. Кожен рядок індексного блоку вміщує ідентифікатор запису і покажчик на цей запис. Якщо для опису файла необхідно декілька індексних блоків, то вони створюються і зв’язуються в ланцюжки. Основна перевага ланцюжка індексних блоків полягає в тому, що для пошуку потрібного блоку необхідно продивитись тільки індексні блоки. Для скорочення часу пошуку індексні блоки можна розташувати поруч один одного в зовнішні пам’яті. Якщо вимагається дуже швидкий пошук індексні блоки можуть зберігатись в основній ...