Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsiya_10.docx
Скачиваний:
5
Добавлен:
05.09.2019
Размер:
2 Mб
Скачать

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

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

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

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

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

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

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

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

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

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

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

Рис. 10.8. Перетворення віртуальної адреси при сегментної організації пам'яті

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

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

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

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

Одним з суттєвих відмінностей сегментної організації пам'яті від сторінкової є можливість завдання диференційованих прав доступу процесу до його сегментах. Наприклад, один сегмент даних, що містить вихідну інформацію для програми, може мати права доступу "тільки читання", а сегмент даних, що представляє результати, - «читання і запис». Ця властивість дає принципову перевагу сегментної моделі пам'яті над сторінкової.

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