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

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

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

Звичайно в подібних системах обмін інформацією між користувачами будується на базі сегментів. Тому сегменти є окремими логічними одиницями інформації, які необхідно захищати, і саме на цьому рівні вводяться різні режими доступу до сегментів. Можна виділити два основних типи сегментів: програмні сегменти і сегменти даних (сегменти стека є часткою случаємо сегментів даних). Оскільки загальні програми повинні мати властивість повторної входимості, те з програмних сегментів допускається тільки вибірка команд і читання констант. Запис у програмні сегменти може розглядатися як незаконна і заборонятися системою. Вибірка команд із сегментів даних також може вважатися незаконної і будь-який сегмент даних може бути захищений від звертань по записі або по читанню.

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

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

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

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