Сегментний розподіл
При сторінковій організації віртуальний адресний простір процесу поділяється механічно на рівні частини, що не дозволяє диференціювати способи доступу до різних частин програми (сегментів). Наприклад, можна заборонити звертатися з операціями запису і читання в кодовий сегмент програми, а для сегменту даних дозволити тільки читання. Крім того, розбивка програми на "осмислені" частини робить принципово можливим спільне використання одного сегмента кількома процесами. Наприклад: якщо два процеси використовують одну математичну підпрограму, то в оперативну пам'ять може бути завантажена тільки одна копія цієї підпрограми. Віртуальний адресний простір процесу поділяється на сегменти (рис.16), розмір яких визначається програмістом.
Рис. 16. Сегментний розподіл пам'яті Окремий сегмент може являти собою підпрограму, масив даних і т.п. Іноді сегментація програми виконується за замовчуванням компілятором. При завантаженні процесу частина сегментів розміщається в оперативній пам'яті (при цьому для кожного з цих сегментів операційна система шукає придатну ділянку вільної пам'яті), а частина сегментів розміщується в дисковій пам'яті. Сегменти однієї програми можуть займати в оперативній пам'яті несуміжні ділянки. Під час завантаження система створює таблицю сегментів процесу (аналогічну таблиці сторінок), у якій для кожного сегмента вказується початкова фізична адреса сегмента в оперативній пам'яті, розмір сегмента, правила доступу, ознака модифікації, ознака звертання до даного сегмента за останній проміжок часу та деяка інша інформація. Якщо віртуальні адресні простори кількох процесів включають той самий сегмент, то в таблицях сегментів цих процесів робляться посилання на ту саму ділянку оперативної пам'яті, у який даний сегмент завантажується в єдиному екземплярі. Система із сегментною організацією функціонує аналогічно системі зі сторінковою організацією: час від часу відбуваються переривання, пов'язані з відсутністю потрібних сегментів у пам'яті, при необхідності звільнення пам'яті деякі сегменти вивантажуються, при кожному звертанні до оперативної пам'яті виконується перетворення віртуальної адреси у фізичну. Крім того, при звертанні до пам'яті перевіряються права доступу до даного сегмента. Віртуальна адреса при сегментній організації пам'яті може бути представлена парою (g, s), де g - номер сегмента, а s – зміщення у сегменті. Фізичну адресу отримують шляхом додавання початкової фізичної адреси сегмента, знайденого в таблиці сегментів за номером g, і зміщенням s. Недоліком даного методу розподілу пам'яті є фрагментація на рівні сегментів і більш повільне в порівнянні зі сторінковою організацією визначення фізичної адреси.
|