Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРС 1.docx
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
6 Мб
Скачать
☆

Срс 4: Сегментно-сторінкова модель пам'яті. Плоска модель пам'яті Сегментно-сторінкова модель

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

Віртуальна адреса тепер складається з трьох частин - номери сегменту, номери сторінки в сегменті і зсуву в сторінці. Апарат трансляції адрес, представлений на рисунку 4.1, принаймні, трьохкроковий:

  1. регістр адреси дескриптора указує на таблицю сегментів, з неї вибирається дескриптор сегменту, а з останнього - адреса таблиці сторінок;

  2. з таблиці сторінок вибирається дескриптор сторінки, а з нього - номер сторінкового кадру;

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

Рисунок 4.1 – Трансляція адрес. Cегментно-сторінкова модель

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

Оскільки в моделі, приведеній на рис.4.1, кожен сегмент має власну таблицю сторінок, самі таблиці сторінок можуть займати значний об'єм в пам'яті. Просте вирішення цієї проблеми представляє Windows 3.x: у системі існує єдина таблиця сторінок. Сегментна частина трансляції адреси має, таким чином, на виході адресу загалом для всіх процесів віртуальному сторінковому просторі, об'єм якого перевищує об'єм реальної пам'яті не більш, ніж в 4 рази. Подібне ж, хоча і гнучкіше і захищеніше рішення представляє VSE: система забезпечує загальний об'єм віртуальної пам'яті (до 2 Гбайт), який розбивається на розділи (до 12 статичних і до 200 динамічних), сумарний об'єм адресних просторів всіх розділів не перевищує загального об'єму віртуальної пам'яті. Простота рішення, проте, може істотно позначатися на його ефективності: по-перше, із-за обмежень на розмір віртуальної пам'яті, по-друге, через необхідність виділяти суміжні дескриптори в таблиці сторінок для сторінок, суміжних у віртуальній пам'яті. Тому дійсно багатозадачні системи застосовують множинні таблиці сторінок і включають пам'ять, займану таблицями сторінок, в сторінковий обмін. Витіснення і завантаження приватних таблиць сторінок проводиться або виключно самою ОС (Unix), або ОС використовує для цього наявні апаратні засоби (так, ОС, орієнтовані на Intel-Pentium, використовують каталоги сторінок).

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

Плоска модель пам'яті

Починаючи з моделі Intel-80386, в мікропроцесорах Intel-Pentium адреса складається з 16-розрядного номера сегменту і 32-розрядного зсуву. 32-розрядне поле зсуву дозволяє адресувати до 4 Гбайт в межах одного сегменту, що більш ніж достатньо для більшості мислимих застосувань і дозволяє реалізувати дійсно "плоску" (flat) модель віртуальної пам'яті процесу, що є лінійним безперервним простором адрес.

Проте, при розмірі сторінки 4 Кбайт таблиця сторінок повинна містити більше 106 елементів і займати 4 Мбайт пам'яті. Для економії пам'яті апаратура трансляції адреси мікропроцесора підтримує таблиці сторінок двох рівнів. Сторінкова таблиця верхнього рівня називається каталогом сторінок. Старші 10 байт 32-розрядного зсуву є номером елементу в сторінковому каталозі. Елемент сторінкового каталога адресує таблицю сторінок другого рівня. Наступні 10 байт зсуву є номером елементу в таблиці сторінок другого рівня. Елемент таблиці другого рівня адресує сторінковий кадр в реальній пам'яті, а молодші 12 байт зсуву є зсувом в сторінці. Сегментна частина апарату трансляції адреси виявляється зайвою, в Intel-Pentium вона не може бути відключена, але той же ефект досягається, якщо кожному процесу призначається тільки один сегмент, і для процесу створюється таблиця сегментів, що містить тільки один елемент. Поле base цього елементу адресує сторінковий каталог процесу, а кожен елемент сторінкового каталога - одну таблицю сторінок. Структури елементів каталога сторінок і таблиці сторінок другого рівня ідентичні, кожна таблиця сторінок (каталог або таблиця другого рівня) містить 1024 елементи і сама займає сторінковий кадр в пам'яті. Таблиці сторінок беруть участь в сторінковому обміні так само, як і сторінки, що містять будь-які інші дані і коди.

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

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

  2. далі розміщується приватний адресний простір процесу, що містить його коди, локальні дані, стек;

  3. вище розміщуються "прикладні" загальні області пам'яті, використовувані декількома процесами спільно;

  4. ще вище - системні модулі, що працюють в непривілейованому режимі, ці модулі спільно використовуються всіма процесами;

  5. нарешті, в самій верхній частині розміщуються системні модулі, що працюють в режимі ядра (рівень привілеїв - 0), ці модулі також спільно використовуються.

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

Більшість розробників програмного забезпечення гаряче вітали введення пласкої моделі пам'яті в сучасних ОС (OS/2 Warp, Windows 95, Windows NT), оскільки представлення віртуальної адреси у вигляді одного 32-розрядного слова позбавляє програміста від необхідності розрізняти ближні і дальні покажчики і спрощує програмування. Відмова від сегментної структуризації віртуального адресного простору де в чому обмежує можливості програміста. Велика ж ефективність плоскої моделі пам'яті є об'єктивним чинником, оскільки, по-перше, операція з 32-розрядними адресними словами зменшує число команд в програмі, а по-друге, оскільки в 4-Гбайтному віртуальному адресному просторі процесу можуть бути розміщені і процедури, що реалізовують системні виклики, то звернення процесу до ОС відбуваються як до власних локальних процедур і не вимагають перемикань контексту.