ЗНАЕТЕ ЛИ ВЫ?

Методи розподілу пам'яті з використанням дискового простору.



Поняття віртуальної пам'яті.

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

Розвиток методів організації обчислювального процесу в цьому напрямку призвело до появи методу, відомого за назвою “віртуальна пам'ять”. Віртуальним називається ресурс, що користувачу чи користувальницькій програмі представляється таким, що володіє властивостями, котрими він, у дійсності, не володіє. Так, наприклад, користувачу може бути надана віртуальна оперативна пам'ять, розмір якої переверщує всю наявну в системі реальну оперативну пам'ять. Користувач пише програми так, начебто в його розпорядженні є однорідна оперативна пам'ять великого обсягу, але, в дійсності, вci дані, що використовуються програмою, зберігаються на одному чи кількох різнорідних запам'ятовуючих пристроях, звичайно ж, на дисках, i при необхідності, частинами відображаються в реальній пам'яті.

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

• розміщує дані в запам'ятовуючих пристроях різного типу, наприклад, частина програми - в оперативній пам'яті, а частина - на диску;

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

• перетворює віртуальні адреси у фізичні.

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

Сторінковий розподіл

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

Вся оперативна пам'ять машини також поділяється на частини такого ж розміру, названі фізичними сторінками (чи блоками). Розмір сторінки, звичайно, вибирається рівним ступеня двійки: 512, 1024 i т.д., це дозволяє спростити механізм перетворення адрес.

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

При активізації чергового процесу, в спеціальний регістр процесора завантажується адреси таблиці стopiнок даного процесу.

При кожному звертанні до пам'яті відбувається читання з таблиці сторінок інформації про віртуальну сторінку, до якої звертаються. Якщо дана віртуальна сторінка знаходиться в оперативній пам'яті, то здійснюється перетворення віртуальної адреси у фізичну. Якщо ж потрібна віртуальна сторінка в даний момент вивантажена на диск, то відбувається, так назване, сторінкове переривання. Процес, що виконується, переводиться в стан чекання i активізується інший процес, з черги готових. Паралельно, програма обробки cтopiнковoгo переривання “знаходить” на диску необхідну віртуальну сторінку i намагається завантажити її в оперативну пам'ять. Якщо в пам'яті є вільна фізична сторінка, то завантаження виконується негайно, якщо ж вільних стopiнок немає, то вирішується питання, яку сторінку варто вивантажити з оперативної пам'яті.

У даній ситуації використовують багато різних критеріїв вибору, але найбільш популярні з них наступні:

• сторінка яка найдовше не використовувалася;

• перша сторінка, що потрапила;

• сторінка, до якої останнім часом було найменше звертань.

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

Віртуальна адреса, при сторінковому pозпoділі, може бути представлена у вигляді пари (р, s), де р - номер віртуальної сторінки процесу (номерація сторінок починається з 0), a s - зсув у межах віртуальної сторінки. З огляду на те, що poзмір сторінки дорівнює 2 у ступені до, зсув s можна отримати простим віддленням к молодших розрядів у двійковому записі віртуальної адреси. Старші розряди, що залишилися, є двійковим записом номера сторінки р.

При кожному звертанні до оперативної пам'яті апаратними засобами виконуються наступні дії:.

1. на підставі початкової адреси таблиці сторінок (вмicт peгiстpу адреси таблиці сторінок), номера віртуальної сторінки (старші розряди віртуальної адреси) i довжини запису в таблиці сторінок (системна константа) визначається адреса потрібного запису в таблиці;

2. із цього запису витягається номер фізичної сторінки;

3. до номера фізичної сторінки приєднується зсув (молодші розряди віртуальної адреси). Використання в пункті (3) того факту, що розмір сторінки дорівнює ступеню 2, дозволяє застосувати операцію конкатенації (приєднання) замість тривалішої операції додавання, що зменшує час одержання фізичної адреси, а значить підвищує продуктивність комп'ютера.

На продуктивність системи зi сторінковою організацією пам'яті впливають тимчасові витрати, пов'язані з обробкою сторінкових переривань i перетворенням віртуальної адреси у фізичну. При часто виникаючих сторінкових перериваннях, система може витрачати велику частину часу “впусту”, на свопинг сторінок. Щоб зменшити частоту сторінкових переривань, варто було б збільшувати розмір сторінки. Крім того, збільшення розміру сторінки зменшує розмір таблиці сторінок, а значить зменшує витрати пам'яті. 3 іншого боку, якщо сторінка велика, значить велика i фіктивна область в останній віртуальній сторінці кожної програми. У середньому, на кожній програмі губиться половина обсягу сторінки, що в сумі при великій сторінці може скласти істотну величину. Час перетворення віртуальної адреси у фізичну в значній мipi визначається часом доступу до таблиці сторінок. У зв'язку з цим, таблицю сторінок прагнуть розміщувати в "швидких" запам'ятовуючих пристроях. Це може бути, наприклад, набір спеціальних peгістрів пам'яті, що використовують для зменшення часу доступу на асоціативний пошук i кеширування даних.

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

 

Сегментний розподіл

При сторінковій організації, віртуальний адресний простір процесу поділяється, механічно, на piвні частини. Це не дозволяє диференціювати способи доступу до різних частин програми (сегменти). Ця властивість є корисною. Наприклад, можна заборонити звертатися з операціями запису i читання в кодовий сегмент програми, а для сегмента даних дозволити тільки читання. Kpiм того, розбивка програми на "осмислені” частини робить можливим поділ одного сегмента декількома процесами. Наприклад, якщо два процеси використовують ту саму математичну підпрограму, то в оперативну пам'ять може бути завантажена тільки одна її копія.

Розглянемо, яким чином сегментний розподіл пам'яті реалізує ці можливості (малюнок 2.14). Віртуальний адресний пpocтip процесу поділяється на сегменти, розмір яких визначається програмістом з урахуванням значеннєвого значення інформації, що міститься в них. Окремий сегмент може являти собою підпрограму, масив даних i т.п. Іноді сегментація програми виконується за замовчуванням компілятором.

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

 

Мал. 2.14. Розподіл пам'яті сегментами.

 

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

Віртуальна адреса, при сегментній організації пам'яті, може бути представлена парою (g, s), де g -номер сегмента, a s - зсув у сегменті. Фізична адреса обчислюється додавання початкової фізичної адреси сегмента, знайденого в таблиці сегментів за номером g, i зсуву s.

Недоліком даного методу розподілу пам'яті є фрагментація на piвнi сегментів i повільніше, в порівняння з сторінковою організацією, перетворення адреси.

 





Последнее изменение этой страницы: 2016-08-16; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.213.192.104 (0.009 с.)