Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОПС.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
138.62 Кб
Скачать
  1. Багатосегментна модель пам'яті.

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

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

• вибирається сегментна частина віртуальної адреси, вона служить індексом в таблиці дескрипторів; по індексу вибирається запис тієї таблиці, адреса якої знаходиться в регістрі адреси таблиці дескрипторів;

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

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

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

2. Семафори.

ОС може надавати семафори в розпорядження користувача, як засіб для самостійного вирішення завдань, що вимагають взаємного виключення і/або синхронізації. При роботі з іменованим семафором один з процесів повинен створити системний семафор за допомогою виклику createSemapore, інші процеси дістають доступ до створеного системного семафора за допомогою виклику openSemaphore. Серед вхідних параметрів цих викликів є зовнішнє ім'я семафора, виклики повертають маніпулятор для семафора, використовуваний для його ідентифікації при подальшій роботі з ним. При закінченні роботи з системним семафором процес повинен виконати виклик closeSemaphore. Семафор знищується, коли він закритий у всіх процесах, що його використали. Крім основних для семафорів P- і V-операций, конкретні семафорні API ОС можуть включати розширені і сервісні функції, такі як безумовна установка семафора, установка семафора і очікування його очищення, очікування очищення семафора. При виконанні системних викликів - аналогів P-операции, як правило, є можливість задати опцію очікування - блокувати процес, якщо виконання P-операции неможливе, або завершити системний виклик з ознакою помилки. У багато сучасних ОС разом з семафорами "в чистому виді" API представляє ті ж семафори і у вигляді "прикладних" об'єктів - об'єктів взаємного виключення і подій. Хоча зміст цих об'єктів одне і те ж - семафор, ОС відносно цих об'єктів представляє для прикладних процесів специфічну семантику API, відповідну завданням взаємного виключення і синхронізації. Всі сучасні ОС надають прикладному процесу можливість працювати з "масивами семафорів", тобто, задавати список семафорів і виконувати операцію над всім списком, наприклад, чекати очищення будь-якого семафора в заданому списку. Найбільш розвинений цей засіб в ОС Unix, де є можливість виконувати за один системний виклик semop (аналог нашого semaphoreOp) відразу декількох різних операцій над декількома семафорами, причому весь список операцій виконується, як одна транзакція. Неіменовані семафори зазвичай використовуються як засіб взаємного виключення і синхронізації роботи ниток одного процесу.

БІЛЕТ № 16