
- •Огляд і характеристика операційних систем Узагальнена структура програмного забезпечення обчислювальних систем
- •Класифікація операційних систем
- •1. По призначенню ос діляться на:
- •2. По режиму обробки даних розрізняють:
- •3. За засобом взаємодії з обчислювальною системою ос діляться на:
- •4. За основним архітектурним принципом ос діляться на:
- •1. Принцип модульності
- •2. Принцип функціональної вибірковості
- •3. Принцип генерованості ос
- •4.Принцип функціональної надлишковості
- •5. Принцип віртуалізації
- •Принцип незалежності програм від зовнішніх пристроїв
- •Принцип сумісності
- •Принцип відкритої і нарощуваної ос
- •Принцип мобільності (переносимості)
- •10. Принцип забезпечення безпеки обчислень.
- •Планування процесів Дисципліни планування - вимоги, показники, класифікація
- •Базові дисципліни планування
- •Управління пам'яттю Віртуальна і реальна пам'ять
- •Фіксовані розділи
- •Односегментна модель
- •Багатосегментна модель
- •Сторінкова модель
- •Сегментно-сторінкова модель
- •Плоска модель пам'яті
- •Монопольно використовувані ресурси Властивості ресурсів і їх уявлення
- •Філософи, що обідають
- •Тупики: попередження, виявлення, розв'язка
- •Нескінченне відкладання
- •Файлові системи Структура магнітного диска
- •Файлова система fat
- •Структура завантажувального запису dos
- •Файлові системи vfat і fat32
- •Файлова система ntfs (New Technology File System)
- •Основні можливості файлової системи ntfs
- •Структура тому з файловою системою ntfs
- •Можливості файлової системи ntfs по обмеженню доступу до файлів і каталогів
- •Основні відмінності fat і ntfs
- •Файлові системи операційних систем класу Unix Структура файлової системи
- •Захист файлів
- •Системні засоби взаємодії процесів Дужки критичних секцій.
- •Віртуальні переривання або сигнали
- •Модель віртуальних комунікаційних портів
- •Загальні області пам'яті
- •Семафори
- •Програмні канали
- •Черги повідомлень
- •Література
- •Операційні системи
- •43018, Луцьк-18, вул. Львівська,75.
Односегментна модель
Нам невідомі ОС, що підтримують односегментную модель "в чистому вигляді", але її розгляд полегшить розуміння складніших моделей.
Зовні (з погляду програміста) ця модель дуже схожа на модель з фіксованими розділами: програма-процес готується в плоскому віртуальному адресному просторі. Процес займає безперервний простір віртуальної пам'яті, і в реальну пам'ять він також завантажується в один безперервний розділ (сегмент). Сегмент може починатися з будь-якої адреси реальної пам'яті і мати будь-який розділ, що не перевищує, проте, розміру реальної пам'яті. Істотна відмінність сегментної моделі полягає в тому, що вона використовує апаратну динамічну трансляцію адрес. Завантажений в реальну пам'ять і процес, що виконується, продовжує звертатися до пам'яті, використовуючи віртуальні адреси, і лише при кожному конкретному зверненні віртуальна адреса апаратний переводиться в реальний. У обчислювальній системі, що підтримує односегментную модель, повинен існувати регістр дескриптора сегменту, вміст якого складається з двох полів: початкової (базового) адреси сегменту в реальній пам'яті і довжини сегменту. Коли процес розміщується в пам'яті, для виділеного йому сегменту формується дескриптор, який записується у вектор полягання в контексті процесу. При перемиканні контексту дескриптор сегменту завантажується в апаратний регістр дескриптора сегменту і служить тією "таблицею трансляції", по якій апаратура переводить віртуальні адреси в реальні. Сама трансляція адрес відбувається по простому алгоритму. Оскільки віртуальний адресний простір процесу є лінійною послідовністю адрес, що починається з 0, віртуальна адреса є простим зсувом відносно початку сегменту. Реальна адреса виходить складанням віртуальної адреси з базовою адресою, вибраною з дескриптора сегменту, як показано на Малюнку 3.4. Єдиний шлях для виходу процесу за межі свого віртуального адресного простору - завдання віртуальної адреси, більшої, ніж розмір сегменту. Цей шлях легко може бути перекритий, якщо апаратура при трансляції адрес порівнюватиме віртуальну адресу з довжиною сегменту і виконуватиме переривання-пастку, якщо віртуальна адреса більша.
|
Та обставина, що процес працює у віртуальних адресах, робить можливим переміщення сегментів в реальній пам'яті. Перемістивши процес в іншу область реальної пам'яті, ОС просто змінює поле базової адреси в дескрипторі його сегменту. Оскільки, як і в моделі з фіксованими розділами, реальна пам'ять розподіляється безперервними блоками змінної довжини, тут застосовуються ті ж стратегії розміщення. Але можливе тут переміщення сегментів є ефективним способом боротьби із зовнішніми дірками. Сегменти переписуються в реальній пам'яті так, щоб вільних місць між ними не залишалося, весь вільний простір зливається в один великий вільний блок і, таким чином, виявляється доступним для подальшого розподілу.
Багатосегментна модель
Розширимо модель, розглянуту в попередньому розділі на випадок N сегментів.
Віртуальний простір процесу розбивається на сегменти, які нумеруються від 0 до N-1. Віртуальна адреса, таким чином, складається з двох частин: номери сегменту і зсуву в сегменті. Ці частини можуть або представлятися окремо кожна, або упаковуватися в одне адресне слово, в якому певне число старших розрядів інтерпретуватиметься як номер сегменту, а частина, що залишилася, - як зсув. У першому випадку сегменти можуть розміщуватися довільним чином у віртуальному адресному просторі. У другому випадку створюється враження плоского адресного простору з адресами від 0 до максимально можливої при даній розрядності віртуальної адреси, але в цьому просторі можуть бути дірки - віртуальні адреси для процесу недоступні - через відсутність відповідних сегментів або із-за сегментів, довжина яких менше максимально можливою.
Кількість сегментів і максимальний розмір сегменту обмежується апаратурою - розрядністю полів адресного слова. При виділенні процесу реальної пам'яті кожен сегмент розміщується в безперервній області реальної пам'яті, але сегменти, суміжні у віртуальній пам'яті, можуть потрапляти в несуміжні області пам'яті реальної. Тепер для процесу вже недостатньо одного дескриптора сегменту - він повинен мати таблицю таких дескрипторів у складі свого блоку контексту. Апаратний регістр дескриптора сегменту перетворюється на регістр адреси таблиці дескрипторів, він зберігає покажчик на таблицю дескрипторів активного процесу і перезавантажується при зміні активного процесу. Обчислення реальної адреси апаратурою декілька ускладнюється, як показано на Малюнку 3.5:
вибирається сегментна частина віртуальної адреси, вона служить індексом в таблиці дескрипторів; по індексу вибирається запис тієї таблиці, адреса якої знаходиться в регістрі адреси таблиці дескрипторів;
вибраний запис є дескриптором сегменту, частина віртуальної адреси, відповідна зсуву, порівнюється з полем довжини в дескрипторі;
якщо зсув в сегменті не перевищує його довжини, обчислюється реальна адреса як сума базової адреси з дескриптора сегменту і зсуву з віртуальної адреси.
Зразкова структура апаратного підтримуваного дескриптора сегменту приведена на Малюнку 3.6. Підкреслюємо, що дана структура не є обов'язковою, для всієї комп'ютерної архітектури, ми привели лише найбільш поширений її варіант і використовували найбільш імена полів, що часто вживалися.
|
|
|
|
Допустима кількість сегментів визначається розрядністю відповідного поля віртуальної адреси і може бути вельми великим. Або апаратура повинна мати спеціальний регістр розміру таблиці дескрипторів (такий регістр є в Intel-Pentium), або ОС повинна готувати для процесу таблицю максимально можливого розміру, відзначаючи в ній дескриптори неіснуючих сегментів (наприклад, нульовим значенням поля size). Відзначимо, що для систем, що упаковують номер сегменту і зсув в одне адресне число, розрядність зсуву не є обмеженням на довжину віртуального сегменту. Віртуальний сегмент більшого розміру представляється в таблиці двома і більш обов'язково суміжними дескрипторами. З погляду процесу він звертається до одного сегменту, задаючи в нім великий зсув, на самій же справі переповнювання поля зсуву переноситься в полі номера сегменту. Якщо ж проста двійкова арифметика не забезпечує модифікацію номера сегменту, можливість роботи з великими сегментами може підтримуватися ОС шляхом особливої обробки переривання-пастки "захист пам'яті".
Які переваги багатосегментної моделі пам'яті?
Найперша перевага полягає в тому, що у процесу з'являється можливість розмістити дані, що обробляються різним чином, в різних сегментах свого віртуального простору (так, в ОС Unix, наприклад, кожен процес має при початку виконання три сегменти: кодів, даних і стека). Кожному сегменту можуть бути визначені свої права доступу. Оскільки звернення до пам'яті можуть бути трьох видів: читання, запис і передача управління, то для опису прав доступу достатньо 3-бітового поля Read-Write-eXecute, кожен розряд якого визначає дозвіл один з видів доступу. Апаратні засоби більшості архітектури забезпечують контроль права доступу при трансляції адрес: поле прав доступу включається в дескриптор сегменту і, якщо вид звернення, що поступив, не дозволений, то виконується переривання-пастка "порушення доступу".
Інша важлива перевага багатосегментної моделі полягає в тому, що процес має можливість використовувати віртуальний адресний простір, розмір якого більший, ніж розмір доступної реальної пам'яті. Це досягається за рахунок того, що не обов'язково всі сегменти процесу повинні одночасно знаходитися в реальній пам'яті. Дескриптор кожного сегменту містить біт present, який встановлений в 1, якщо сегмент підкачаний в оперативну пам'ять, або в 0 - якщо сегмент витиснений з неї. Апаратура трансляції адрес перевіряє цей біт і при нульовому його значенні виконує переривання-пастку "відсутність сегменту" (segment falure). На відміну від більшості інших пасток, які в основному сигналізують про помилки, при яких подальше виконання процесу неможливе, ця не приводить до фатальних для процесу наслідків. ОС, обробляючи це переривання, знаходить образ витисненого сегменту на зовнішній пам'яті, і підкачує його в реальну пам'ять. Природно, що процес, що звернувся до витисненого сегменту, переводиться в очікування, це очікування може затягнутися, якщо у ОС є проблеми з ресурсом реальної пам'яті. Коли сегмент буде підкачаний, процес перейде в чергу готових і буде активізований знов з тієї команди, яка викликала переривання-пастку. У тих апаратних системах, які не обробляють біт присутності в дескрипторі сегменту, можна замість нього використовувати поле size: ОС повинна скидати це поле в 0 при витісненні сегменту і відновлювати при його підкачці.
Надзвичайно важливою перевагою багатосегментної моделі є можливість розділення (сумісного використання) сегментів процесами. Процеси можуть бути розроблені так, щоб віртуальні простори два або більш за процеси перекривалися в якихось областях. Процеси можуть використовувати загальний віртуальний простір для обміну даними. Реалізація цієї можливості в якійсь мірі залежить від апаратних засобів. У багатьох обчислювальних системах процес може працювати з декількома таблицями дескрипторів, оскільки в системі є декілька регістрів адрес таблиць (так в процесорі Intel 80286 і подальших передбачено дві таблиці, звані локальною і глобальною). Рішення, що використовує це властивість, полягає в тому, що дескриптор сегменту, що розділяється, поміщається в загальну для всіх процесів (глобальну) таблицю, такий сегмент може бути доступним для всіх процесів і має загальний віртуальний номер для всіх процесів. Інше рішення, можливе і за наявності тільки однієї таблиці для кожного процесу, полягає в тому, що для загального сегменту створюється по запису в таблиці кожного процесу, з ним що працює, для кожного процесу цей сегмент має свій віртуальний номер. Друге рішення представляється вдалішим з погляду захисту, оскільки, по-перше, доступ до сегменту мають тільки ті процеси, в таблицях яких створені відповідні дескриптори, по-друге, є можливість дати різним процесам разные права доступу до сегменту, що розділяється. Але за таке рішення доводиться платити тим, що при свопінгу сегменту, що розділяється, і при обліку його використання необхідно коректувати його дескриптори в таблицях всіх процесів.