logo
AOM / Мельник А

10.3.5. Сегментна організація віртуальної пам'яті

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

Принципи сегментної організації пам'яті є наступними:


Щоб виконати звернення до такої сегментованої, або двовимірної пам'яті, програма повинна видати адресу, яка складається з двох частин: номера сегмента і внутрішньої


Як приклад на рис. 10.30 наведено сегменти пам яті деякої програми.

389

адреси сегмента. Тобто до віртуальної адреси необхідно додати додаткові розряди лівіше номера сторінки, які визначають номер сегмента.

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

Так як з точки зору програміста сегменти є самостійними логічними об'єктами, припус­тимо застосування для них різних видів захисту: дозволяється лише читання, запис і т. п.

Таким чином виникає певна ієрархія в організації програм, яка складається з чоти­рьох ярусів: програма, сегмент, сторінка, слово. Цій ієрархії програм відповідає й ієрар­хія таблиць перетворення віртуальних адрес у фізичні, як це показано на рис. 10.31.

Програмна таблиця включає всі завантажені в комп'ютер програми. Кожній програ­мі відповідає своя сегментна таблиця. Сегментна таблиця включає сегменти даної про­грами. Кожному сегменту відповідає своя сторінкова таблиця. Сторінкова таблиця ви­значає фізичне розташування кожної сторінки в пам'яті (основній і зовнішній).

Хоча в логічному відношенні сегментна і сторінкова організація пам'яті тісно пов'я­зані між собою та подібні в реалізації, цілі їх застосування різні. Порівняння сегментної і сторінкової організації пам'яті наведено в табл. 10.1.

390

Таблиця 10.1

№ п/п

Характеристика

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

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

1.

Чи повинен програміст знати, який вид організації пам'яті використовується?

ні

так

2.

Скільки є лінійних адресних просторів?

1

багато

3.

Чи може адресний простір перевищувати ємність пам'яті?

так

так

4.

Чи можуть бути розпізнані та окремо захищені процедури і дані?

ні

так

5.

Чи можна розміщувати таблиці змінного об'єму?

ні

так

6.

Чи можливе спільне застосування процедур декількома користувачами?

ні

так

7.

Для чого була розроблена дана організація пам'яті?

Для отримання великого адресного простору без необ­хідності збільшен­ня фізичної пам'яті

Для отримання можливості розміщувати програми і дані в логічно незв'язаних адресних просторах і для полегшення су­місного використання і захисту інформації

Формат віртуальної адреси та процес її перетворення в фізичну адресу при викорис­танні сегментної та сторінкової організації пам'яті ілюструє рис. 10.32.

Як видно з рисунка, для виконання перетворення необхідно два додаткових звернен­ня до пам'яті. Для скорочення кількості звернень для побудови сегментної таблиці може бути застосована, як і при сторінковій організації пам'яті, асоціативна пам'ять.

391