Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
zdolbickij_operacijni_sistemi-konspekt-2009.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
3.06 Mб
Скачать

Односегментна модель

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

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

Ріс.3.4. Односегментная модель

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

Багатосегментна модель

Розширимо модель, розглянуту в попередньому розділі на випадок N сегментів.

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

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

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

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

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

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

Ріс.3.5. Трансляція адрес. Багатосегментна модель

Ріс.3.6. Зразкова структура дескриптора сегменту

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

Які переваги багатосегментної моделі пам'яті?

Найперша перевага полягає в тому, що у процесу з'являється можливість розмістити дані, що обробляються різним чином, в різних сегментах свого віртуального простору (так, в ОС Unix, наприклад, кожен процес має при початку виконання три сегменти: кодів, даних і стека). Кожному сегменту можуть бути визначені свої права доступу. Оскільки звернення до пам'яті можуть бути трьох видів: читання, запис і передача управління, то для опису прав доступу достатньо 3-бітового поля Read-Write-eXecute, кожен розряд якого визначає дозвіл один з видів доступу. Апаратні засоби більшості архітектури забезпечують контроль права доступу при трансляції адрес: поле прав доступу включається в дескриптор сегменту і, якщо вид звернення, що поступив, не дозволений, то виконується переривання-пастка "порушення доступу".

Інша важлива перевага багатосегментної моделі полягає в тому, що процес має можливість використовувати віртуальний адресний простір, розмір якого більший, ніж розмір доступної реальної пам'яті. Це досягається за рахунок того, що не обов'язково всі сегменти процесу повинні одночасно знаходитися в реальній пам'яті. Дескриптор кожного сегменту містить біт present, який встановлений в 1, якщо сегмент підкачаний в оперативну пам'ять, або в 0 - якщо сегмент витиснений з неї. Апаратура трансляції адрес перевіряє цей біт і при нульовому його значенні виконує переривання-пастку "відсутність сегменту" (segment falure). На відміну від більшості інших пасток, які в основному сигналізують про помилки, при яких подальше виконання процесу неможливе, ця не приводить до фатальних для процесу наслідків. ОС, обробляючи це переривання, знаходить образ витисненого сегменту на зовнішній пам'яті, і підкачує його в реальну пам'ять. Природно, що процес, що звернувся до витисненого сегменту, переводиться в очікування, це очікування може затягнутися, якщо у ОС є проблеми з ресурсом реальної пам'яті. Коли сегмент буде підкачаний, процес перейде в чергу готових і буде активізований знов з тієї команди, яка викликала переривання-пастку. У тих апаратних системах, які не обробляють біт присутності в дескрипторі сегменту, можна замість нього використовувати поле size: ОС повинна скидати це поле в 0 при витісненні сегменту і відновлювати при його підкачці.

Надзвичайно важливою перевагою багатосегментної моделі є можливість розділення (сумісного використання) сегментів процесами. Процеси можуть бути розроблені так, щоб віртуальні простори два або більш за процеси перекривалися в якихось областях. Процеси можуть використовувати загальний віртуальний простір для обміну даними. Реалізація цієї можливості в якійсь мірі залежить від апаратних засобів. У багатьох обчислювальних системах процес може працювати з декількома таблицями дескрипторів, оскільки в системі є декілька регістрів адрес таблиць (так в процесорі Intel 80286 і подальших передбачено дві таблиці, звані локальною і глобальною). Рішення, що використовує це властивість, полягає в тому, що дескриптор сегменту, що розділяється, поміщається в загальну для всіх процесів (глобальну) таблицю, такий сегмент може бути доступним для всіх процесів і має загальний віртуальний номер для всіх процесів. Інше рішення, можливе і за наявності тільки однієї таблиці для кожного процесу, полягає в тому, що для загального сегменту створюється по запису в таблиці кожного процесу, з ним що працює, для кожного процесу цей сегмент має свій віртуальний номер. Друге рішення представляється вдалішим з погляду захисту, оскільки, по-перше, доступ до сегменту мають тільки ті процеси, в таблицях яких створені відповідні дескриптори, по-друге, є можливість дати різним процесам разные права доступу до сегменту, що розділяється. Але за таке рішення доводиться платити тим, що при свопінгу сегменту, що розділяється, і при обліку його використання необхідно коректувати його дескриптори в таблицях всіх процесів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]