Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ОиФ №2.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.52 Mб
Скачать

Віртуальна пам'ять і організація захисту пам'яті Концепція віртуальної пам'яті

Загальноприйнята в даний час концепція віртуальної пам'яті з'явилася досить давно. Вона дозволила вирішити цілий ряд актуальних питань організації обчислень. Насамперед до числа таких питань відноситься забезпечення надійного функціонування мультипрограмних систем.

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

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

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

Системи віртуальної пам'яті можна розділити на два класи: системи з фіксованим розміром блоків, називаних сторінками, і системи з перемінним розміром блоків, називаних сегментами. Нижче розглянуті обидва типи організації віртуальної пам'яті.

Сторінкова організація пам'яті

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

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

Для збільшення ефективності такого типу схем у процесорах використовується спеціальна цілком асоціативна кеш-пам'ять, що також називається буфером перетворення адрес (TLB trансlаtіоn-lookaside buffer). Хоча наявність TLB не змінює принципу побудови схеми сторінкової організації, з погляду захисту пам'яті, необхідно передбачити можливість очищення його при переключенні з однієї програми на іншу.

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

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

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