
- •1. Віртуальна пам’ять. Види віртуальної пам’яті.
- •3 Види вірт.Памяті:
- •2. Перетворення лінійної адреси у фізичну при сторінковій організації пам’яті.
- •3. Визначення ос наявності або відсутності сегмента у пам’яті.
- •4. Визначення ос наявності або відсутності сторінки у пам’яті.
- •5. Механізм включення віртуальної пам’яті.
- •6. Плоска модель пам’яті.
- •9. Дескриптор сегменту. Види дескрипторів....
- •10. Таблиця сегментів переривань та її призначення.
- •11. Виключення. Види виключень.
- •12. Структури даних.Опис структур
- •13. Доступ до примірників структур даних.
- •14. Записи даних. Застосування записів даних.
- •15. Доступ до примірників записів даних. Див. Пункт 14.
- •16. Порядок виконання команд після повернення з обробки відмови.
- •17. Структура tss та її призначення. Бітова карта введення/виведення, її призначення.
- •18. Перемикання задач. Умови повернення в основну задачу.
- •19. Дескриптор сегменту. Види дескрипторів.
- •20. Класифікація дескрипторів користувача.
- •21. Шлюзи. Призначення шлюзів. Види шлюзів
- •22. Байт доступу. Його структура та призначення.
- •23. Система привілеїв та її застосування.
- •24. Захист пам’яті.
- •25. Рівні привілеїв дескриптора.
23. Система привілеїв та її застосування.
Всі нерівності тут арифметичні, тобто А > В означає, що рівень привілеїв А менше, ніж У:
при завантаженні регістра DS, ES, FS або GS повинна виконуватися умова: DPL >= max(RPL,CPL);
при завантаженні регістрів SS повинна виконуватися умова: DPL = CPL = RPL;
при дальніх JMP, CALL, RET на непідлеглий сегмент коду повинна виконуватися умова: DPL = CPL (RPL ігнорується);
при дальніх JMP, CALL, RET на підлеглий сегмент коду повинна виконуватися умова: CPL >= DPL. При цьому CPL не змінюється;
при дальньому CALL на шлюз виклику повинні виконуватися умови: CPL =< DPL шлюзу, RPL =< DPL шлюзу, CPL >= DPL сегмента;
при дальньому JMP на шлюз виклику повинні виконуватися умови: CPL =< DPL шлюзу, RPL =< DPL шлюзу, CPL >= DPL сегмента, якщо він підлеглий, CPL = DPL сегмента, якщо він непідлеглий.
При виклику процедури через шлюз на непідлеглий сегмент коду з іншим рівнем привілеїв процесор виконує перемикання стека. В сегменті TSS поточної задачі завжди зберігаються значення SS:ESP для стеків рівнів привілеїв 0, 1 і 2 (стек для рівня привілеїв 3, тому що не можна виконувати передачу управління на рівень 3, окрім як за допомогою команд RET/IRET). При перемиканні стека в новий стек поміщаються, до зворотної адреси, параметрів (їхнє число указано в дескрипторі шлюзу виклику), прапорів або коду помилки (у разі INT), старі значення SS:ESP, які команда RET/IRET використовує для зворотного перемикання. Те, що треба виконати повернення з процедури, RET визначає так: RPL селектора, залишеного в стеку, більше (менш привілейований), ніж CPL.
Навіть якщо операційна система не підтримує багатозадачність, вона повинна оформити сегмент TSS з дійсними SS:ESP для стеків всіх рівнів, якщо вона збирається використовувати рівні привілеїв.
Виконання привілейованих команд
Команди LGDT, LLDT, LTR, LIDT, MOV CRn, LMSW, CLTS, MOV DRn, INVD, WBINVD, INVLPG, HLT, RDMSR, WRMSR, RDPMC, RDTSC, SYSEXIT можуть виконуватися, тільки якщо CPL = 0 (хоча біти РСЕ і TSD регістра CR4 дозволяють використання команд RDPMC і RDTSC з будь-якого рівня).
Команди LLDT, SLDT, LTR, STR, LSL, LAR, VERR, VERW і ARPL можна виконувати тільки в захищеному режиме — в реальному і V86 виникає виключення #UD.
Команди CLI і STI виконуються, тільки якщо CPL =< IOPL (IOPL — це двухбитная область в регістрі прапорів). Якщо встановлений біт PVI в регістрі CR4, ці команди виконуються з любим CPL, але управляють прапором VIF, а не IF.
Команди IN, OUT, INSB, INSW, INSD, OUTSB, OUTSW, OUTSD виконуються, тільки якщо CPL =< IOPL і якщо біт в бітовій карті введення-висновку, відповідний даному порту, рівний нулю. (Ця карта — бітове поле в сегменті TSS, кожний біт якого відповідає за один порт введення-висновку. Ознакою її кінця служить слово, в якому всі 16 біт встановлено в 1.)
24. Захист пам’яті.
Тепер розглянемо механізм, який дав назву режиму процессора, — механізм захисту. Захист може діяти як на рівні сегментів, так і на рівні сторінок, обмежуючи доступ залежно від рівня привілеїв (4 рівня привілеїв для сегментів і два для сторінок). Захист запобігає можливості для програм вносити зміни в області пам'яті, зайняті операційною системою або більш привілейованою програмою. Процесор перевіряє привілеї безпосередній перед кожним зверненням до пам'яті і, якщо відбувається порушення захисту, викликає виключення #GP.
Якщо процесор знаходиться в захищеному режимі, перевірки привілеїв виконуються завжди і їх не можна відключити, але можна використовувати у всіх дескрипторах і селекторах один і той же максимальний рівень привилегий — нульовій, і створиться видимість відсутності захисту. Саме так ми і поступали у всіх прикладах до сих пор — всі поля DPL і RPL ініціалізувалися нулями. Щоб зробити непомітною перевірку прав на рівні сторінкової адресації, треба встановити біти U і W у всіх елементах таблиць сторінок, що ми також робили в програмі pm3.asm.
За механізм захисту відповідають наступні біти і поля:
в дескрипторах сегментів:
біт S (системний сегмент)
поле типу (тип сегмента, включаючи заборони на читання/запис)
поле ліміту сегмента
поле DPL, визначальне привілеї сегмента або шлюзу, указує, принаймні, який рівень привілеїв повинна мати програма, щоб звернутися до цього сегмента або шлюзу
в селекторах сегментів:
поле RPL, визначальне запрошувані привілеї, дозволяє програмам, що виконуються на високих рівнях привілеїв, звертатися до сегментів, неначе їхній рівень привілеїв нижче
поле RPL селектора, завантаженого в CS, називається CPL і є поточним рівнем привілеїв програми
в елементах таблиць сторінок:
біт U (визначає рівень привілеїв сторінки)
біт W (разрешает/запрещает запис)
Рівні привілеїв в процесорах Intel визначені як:
0 — максимальний (для операційної системи);
1 і 2 — проміжні (для допоміжних програм);
3 — мінімальний (для призначених для користувача додатків).
Перед зверненням до пам'яті процесор виконує декілька типів перевірок, що використовують всі указані прапори і поля. Розглянемо їх по порядку.