ЗНАЕТЕ ЛИ ВЫ?

Архітектура сегментної організації пам'яті



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

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

· base –початкова адреса сегмента в оперативній (фізичної) пам'яті;

· limit– довжину сегмента.

Базовий регістр таблиці сегментів - segment-table base register (STBR)містить адреси таблиці сегментів у пам'яті.

Регістр довжини таблиці сегментів - segment-table length register (STLR)містить число сегментів, використовуване програмою.

Номер сегмента s коректний, якщо s < STLR.

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

Можливий загальний доступ (sharing) декількох процесів до того самого сегмента, тобто підтримується концепція поділюваних сегментів. При цьому логічний номер загального сегмента для різних процесів буде тим самим.

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

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

· validation-біт(аналогічно сторінкової організації): значення біта, рівне 0, означає, що сегмент невірний, тобто не належить логічній пам'яті процесу;

· повноваження читання (read) / запису (write) / виконання (execute)– кожне кодується одним бітом; значення біта, рівне 0, означає, що процес не має даних повноважень.

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

Біти захисту зв'язуються із сегментами. Спільний доступ до коду здійснюється на рівні сегментів.

Оскільки сегменти розрізняються по довжині, розподіл пам'яті у вигляді сегментів – це загальне завдання динамічного розподілу пам'яті.

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

 

Рис. 17.2. Схема адресації при сегментній організації пам'яті.

Користувачі систем UNIX, Linux, Solaris напевно по асоціації згадають системне повідомлення, що часто зустрічається: Segmentation violation (порушеннясегментації) при перериванні. Причина подібного повідомлення звичайно наступна: програма намагається звернутися по порожньому (нульовому) покажчику, номер сегмента в якому, природно, дорівнює 0, а номер сегмента 0 уважається в системі неприпустимим. Таким чином, через перевірку номера сегмента, UNIX захищає від такої помилки, що часто зустрічається, як обіг по порожньому покажчику. Аналогічно, по тій же самій причині, якщо програма намагається практично будь-яке інше число (наприклад, 5) розглядати як адресу й звертатися по ньому, то також генерується переривання й сигнал SIGSEGV (segmentation violation).

 

Сегментно-сторінкова організація пам'яті в системах MULTICS й "Ельбрус"

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

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

Схема трансляції адрес в MULTICS наведена на рис. 17.5.

 

Рис. 17.5. Схема трансляції адрес в MULTICS.

Логічна адреса (s, d) використовується в такий спосіб. Номер сегмента s складається із значенням регістра STBR, після чого відбувається звернення по отриманій адресі в таблицю сегментів. Зсув d зрівнюється з довжиною сегмента; якщо він більший або дорівнює довжині сегмента, то переривання. З елемента таблиці сегментів витягається адреса бази таблиці сторінок даного сегмента, що складається зі старшими розрядами зсуву (p). Молодші розряди зсуву використаються як зсув усередині сторінки, адреса якої витягається з таблиці сторінок даного сегмента.

Не можна не відзначити, що дана схема, трохи ускладнена. Система MULTICS, у якій цей і багато інших механізмів доведені, здавалося б, до досконалості, викликала протилежну тенденцію в розвитку ОС - до спрощення. Як ми вже говорили, навіть назву наступної системи - UNIX - обрано як протилежність MULTICS, що говорить багато про що. Такі тенденції розвитку в багатьох областях, у тому числі й в операційних системах.





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

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