- •1. Завдання апаратного захисту
- •2. Підтримка керування пам'яттю
- •2.1. Віртуальні адреси
- •2.2. Віртуальна пам'ять
- •1. Завдання апаратного захисту
- •2. Підтримка керування пам'яттю
- •2.1. Віртуальні адреси
- •2.2. Віртуальна пам'ять
- •2.3. Трансляція адрес
- •3. Підтримка керування процесами
- •4. Особливості архітектури процесорів Intel х86
- •4.1. Регістри процесорів х86
- •4.2. Селектори та дескриптори сегментів і сторінок
- •5. Керування оперативною пам'яттю
- •5.1. Сегментний розподіл пам'яті
- •10. Порівнюються cpl, rpl і dpl:
- •5.2. Сегментно-сторінковий розподіл пам'яті
- •6. Керування задачами
- •6.1. Виклик процедур
- •6.2. Виклик задач
- •6.3. Привілейовані команди
2.2. Віртуальна пам'ять
Слід розрізняти поняття «віртуальна адреса» і «віртуальна пам'ять». Під віртуальною пам'яттю розуміють комплекс апаратних і програмних засобів, які дають змогу процесам використовувати адресний простір, що перевищує обсяг фізичної пам'яті в комп'ютері.
Оскільки
в типових сучасних комп'ютерних системах
адресний простір перевищує обсяг
фізичної пам'яті, використання віртуальної
пам'яті є не лише ефективним, а й
необхідним. Щоб забезпечити зберігання
тих частин віртуального адресного
простору, які не вмістились у фізичну
пам'ять, ОС записує їх
у запам'ятовуючий пристрій більшого об'єму, тобто на жорсткий диск. Для тимчасового зберігання частин віртуального адресного простору процесів на диску створюється спеціальний розділ (як в UNIX-системах) або спеціальний файл. Залежно від того, якими саме частинами ОС переміщує дані між диском і оперативною пам'яттю, розрізняють сегментний, сторінковий і сегментно-сторінковий розподіл пам'яті.
Сегмент — це безперервна область віртуального адресного простору довільного розміру, виділена з урахуванням типу даних, які в ній знаходяться. Сторінка — це безперервна область віртуального адресного простору фіксованого розміру (переважно невеликого), виділена без урахування типу розташованих у ній даних,
У разі сегментного розподілу пам'яті віртуальний адресний простір процесу складається з окремих сегментів, розмір кожного з яких обмежується розряд-ністю адресації. Наприклад, за 16-розрядної адресації максимальний розмір сегмента становить 64 Кбайт, а за 32-розрядної — 4 Гбайт (якщо адресуються байти; в деяких архітектурах адресуються «машинні слова», розмір яких перевищує 1 байт). Адреса в сегменті відраховується від його початку, тобто є зміщенням, а повна віртуальна адреса задається парою чисел — номером сегмента і зміщенням у сегменті. Інформацію про сегменти оформлено як таблицю (рис. 10.1), кожний рядок якої містить відомості про окремий сегмент. Це може бути:
базова фізична, адреса процесу в оперативній пам'яті;
розмір сегмента;
правила доступу до сегмента;
тип сегмента;
ознака наявності сегмента в оперативній пам'яті;
ознака модифікації сегмента.
Таку структуру даних називають дескриптором сегмента, а таблицю, відповідно, — таблицею дескрипторів. Як правило, для кожного процесу створюється окрема таблиця дескрипторів. Сегментний розподіл пам'яті передбачає можливість повного перенесення деяких сегментів з оперативної пам'яті на жорсткий диск, тоді в дескрипторі встановлюється відповідний прапорець. Після звернення до такого сегмента виникає переривання і керування передається на оброблювач цього переривання, який має завантажити сегмент у пам'ять (для цього доведеться визначити місце завантаження сегмента і звільнити його витисканням іншого сегмента (або сегментів) на диск). Переривання виникає також, якщо
здійснюється звернення до сегмента, що не відповідає встановленим правилам.
Ці засоби є надійною основою для створення систем розмежування доступу до
областей адресного простору різних процесів [91].
Альтернативним способом розподілу пам'яті є сторінковий (рис. 10.2). Хоча
за використання сторінок, так само як і сегментів, застосовують дескриптори, вони
мають простішу структуру. Відомості про сторінку містять;
номер фізичйрї сторінки в оперативній пам'яті, в яку завантажено цю віртуальну сторінку;
ознаку наявності в оперативній пам'яті;
о
знаку
того, що сторінку було модифіковано
(якщо сторінку не було змінено, її можна
просто «затерти» за потреби звільнити
пам'ять);ознаку звернення до сторінки (використовується для вибору сторінок-кан-диДатів для витискання на диск).
Оскільки
сторінки мають порівняно невеликий
розмір (типовим є,
наприклад,
використання 4-кілобайтовнх
сторінок), кожний процес може мати велику
їх
кількість.
Для того щоб уникнути постійного
зберігання в пам'яті величезної таблиці
сторінок, віртуальний адресний простір
поділяють на розділи однакового розміру
і для кожного з них формують свою окрему
таблицю сторінок. Розмір розділу обирають
таким чином, щоб таблиця сторінок кожного
розділу займала рівно одну сторінку.
Таблиці сторінок витискаються на диск
разом із відповідними розділами. За
допомогою дескрипторів таблиць сторінок,
які є
абсолютно
аналогічними дескрипторам звичайних
сторінок, формують окрему таблицю, яку
ще називають таблицею
розділів або
каталогом
сторінок.
Як бачимо, сегментний і сторінковий розподіли пам'яті мають свої переваги та недоліки. Перевага сегментів — у їх типізації. Це дає змогу здійснювати диференційоване керування доступом відповідно до типу даних, що містяться в сегменті. Так, логічно обґрунтованою є заборона записування даних у сегмент, де містяться коди програми. Це не може суттєво вплинути на функціонування звичайного ПЗ, але дає змогу запобігти деяким діям шкідливих програм, насамперед вірусам і «троянським коням», позаяк однією з типових поведінок останніх є модифікація програмного коду, що виконується. Також логічною є заборона виконання процесором фрагментів програмного коду, що містяться в певному сегменті даних (тут ідеться про безпосереднє завантаження коду на конвеєр процесора, а не про його інтерпретацію віртуальними машинами). Перевага сторінок полягає у тому, що вони мають однаковий і невеликий розмір. Легше і швидше завантажити та вивантажити певну кількість однакових сторінок, ніж один великий сегмент. Тому сторінковий розподіл частіше застосовують для реалізації механізму обміну інформацією між фізичною пам'яттю і диском, тоді як сегментний розподіл є основою для реалізації захисту областей пам'яті. Обидва механізми можуть працювати разом, доповнюючи один одного, що й реалізують сучасні мікропроцесори та операційні системи. Такий механізм називають сегментно-сторінковим розподілом пам'яті.
