- •Системне програмування
- •1. Головний завантажувальний запис диску Master Boot Record.
- •2. Таблиця розділів та логічні диски
- •3. Таблиця розміщення файлів (fat). Загальна схема використання fat
- •4. Файлова система iso9660.
- •5. Файлова система udf
- •6. Таблиця відкритих файлів (sft). Стандартні файлові маніпулятори та їх розташування в sft.
- •7. Таблиця файлів завдань jft та її зв’язок з таблицею відкритих файлів sft.
- •10. Використання api функцій для роботи з файлами
- •9. Файлова система ntfs
- •11. Методи налагоджування драйверів та механізм підготовки їх до виконання
- •12. Команда ініціалізації драйверу. Її зміст, призначення та місце розташування. Визначення адреси точки розриву.
- •13. Об’єкти і їх дескриптори в Windows
- •14. Процедура переривання драйвера, її функція. Таблиця переходів
- •16. Загальний зв’язний список драйверів. Правила для встановлення нового драйверу.
- •19. Процедура стратегії драйвера та її основна задача.
- •20. Заголовок запиту драйверу, його складові частини та їх призначення
- •22.Обслуговування пам’яті в dos
- •23. Буфер попередньої трансляції в сторінковій організації пам’яті
- •Привілеї сегмента задаються полем dpl байта управління доступом.
- •26.Глобальні, локальні таблиці дескрипторів та idt.
- •27. Перетворення логічної адреси на лінійну в реальному та захищеному режимах
- •29.Таблиця дескрипторів переривань (idt).
Привілеї сегмента задаються полем dpl байта управління доступом.
DPL визначає найбільший номер рівня привілеїв (фактично, найменші привілеї), з яких можливий доступ до даного дескриптору. Самий захищений (привілейований) дескриптор має DPL = 0, до нього мають до ¬ ступ тільки задачі з CPL = 0. Самий загальнодоступний дескриптор має DPL = 3, його можуть використовувати завдання з CPL = 0, 1, 2, 3. Це правило застосовується до всіх дескрипторах, за винятком дескриптора LDT.
Привілеї
селектора задаються полем RPL (Requested
Privilege Level) - двома молодшими
бітами селектора.
При зверненні в сегмент даних за допомогою RPL можна обмежити привілеї (щодо CPL), вводиться поняття ефективний рівень привілеїв EPL (Effective Privilege Level), ко ¬ торий визначається як максимальне з значень CPL і RPL, Селектор з RPL = 0 не вводить додаткових обмежень.
EPL = MAX ( CPL, RPL )
Контроль доступу до сегментів даних виробляється при виконанні команд, що завантажують селектори в SS, DS, ES, FS і GS. Команди завантаження DS, ES, FS і GS повинні посилатися на дескриптори сегментів даних або сегментів кодів, допус ¬ кающих читання. Для отримання доступу ефективний рівень привілеїв EPL повинен бути рівним або меншим (арифметично) рівня привілеїв DPL де ¬ скрипторій.
EPL £ DPL
Винятком з цього правила є читаний підлеглий сег ¬ мент коду, який може бути прочитаний завданням з будь-яким CPL. Якщо ефек ¬ вий рівень привілеїв не дозволяє доступ або посилання виробляється на некоректний тип дескриптора (на дескриптор шлюзу або на дескриптор тільки виконуваного кодового сегмента), виробляється виключення # GP. При посиланні на неіснуючий дескриптор виробляється виключення # NP.
Команди завантаження SS повинні посилатися на дескриптор сегменту даних, до-пускає запис. При цьому DPL і RPL повинні бути рівні CPL. Порушення цієї умови і посилання на дескриптор іншого типу породжують виключення # GP, при посиланні на неіснуючий дескриптор виробляється виключення # SS.
Контроль типів і привілеїв при передачі управління проводиться при завантаженні селектора в регістр CS. Тип дескриптора, на який посилається дан ¬ ний селектор, повинен відповідати виконуваної інструкції. Порушення типу (наприклад, посилання інструкції JMP на шлюз виклику) породжує исклю ¬ чення # GP. При передачі управління діють наступні правила привілей ¬ гий, порушення яких також призводить до виключення # GP:
• Команди JMP або CALL можуть посилатися або на підлеглий сегмент коду з DPL, більшим чи рівним CPL, або на непідлегла сегмент з DPL рівним CPL;
• Переривання всередині завдання або виклики, які можуть змінити рівень привілеїв, можуть передавати управління кодовому сегменту з рівнем привілеїв, рівним або більшим рівня привілеїв CPL, тільки через шлюзи з тим же або меншим рівнем привілеїв, ніж CPL;
• Інструкції повернення, що не перемикають завдання, можуть передати управління тільки кодовому сегменту з таким же або меншим рівнем привілеїв;
• Перемикання завдань може виконуватися за допомогою виклику, переходу або переривання, які посилаються на шлюзи завдання або сегмент стану задачі (TSS) з тим же або меншим рівнем привілеїв.
Зміна рівня привілеїв, яка відбувається при передачі управління, автомати ¬ тично викликає перевизначення стека. Початкове значення покажчика стека SS: SP для рівня привілеїв 0, 1, 2 міститься в TSS. При передачі управ ¬ ня по командах JMP або CALL в CS: SP завантажується нове значення покажчика стека, а старі значення поміщаються в новий стек. При поверненні на колишній уро ¬ вень привілеїв його стек відновлюється (як частина інструкції RЕТ або IRЕТ). Для викликів підпрограм з передачею параметрів через стек і зміною рівня при ¬ привілеї з попереднього стека в новий копіюється фіксоване число слів, задане в шлюзі. Команда міжсегментного повернення RET з вирівнюванням ука ¬ зателя стека при поверненні коректно відновить значення попереднього покажчика.
ЗАХИСТ з привілеїв
Специфічною особливістю захищеного режиму є захист з привілеїв. У процесорі є два рівня захисту: захист на рівні сегментів і захист на рівні сторінок.
Захист на рівні сегментів
Захист на рівні сегментів представлена чотирма рівнями привілеїв. Найбільш привілейовані нульовий рівень, найменш привілейовані - третій. У реальних операційних системах зазвичай не використовуються всі чотири рівні. UNIX та Windows, наприклад, використовують тільки два рівня привілеїв - 0 (для ядра системи) і 3 (для всього іншого), а OS / 2 використовує рівні 0 (для ядра системи), 2 (для процедур введення-виведення) і 3 ( для прикладних програм).
Для опису механізму захисту користуються такими поняттями:
Рівень привілеїв дескриптора (Descriptor Privilege Level: DPL) - рівень привілеїв, на який поміщений описуваний дескриптором об'єкт. Поле DPL зберігається в байті прав доступу дескриптора.
Поточний рівень привілеїв (Current Privilege Level: CPL) - рівень привілеїв виконуваного сегмента коду. Це значення відповідає DPL сегменту коду (крім підкоряємося сегментів коду). Значення CPL зберігається в полі RPL селектора сегмента коду, який поміщений в регістр CS.
Запитуваний рівень привілеїв (Requested Privilege Level: RPL) - використовується для тимчасового зниження свого рівня привілеїв при зверненні до пам'яті. RPL заноситься в молодші біти селектора.
Рівень привілеїв введення-виведення (Input / Output Privilege Level: IOPL) - вказує який рівень привілейовані для роботи з портами вводу-виводу. Це значення зберігається в регістрі EFLAGS і може бути різним для різних завдань (див. "Мультизадачність").
Захист на рівні сторінок
Захист сторінок забезпечується двома рівнями привілеїв: супервізор і користувач. Рівню супервізора відповідають 0-й, 1-й, 2-й рівні привілеїв сегментів, а рівню користувача - 3-й. Для кожної сторінки вказується (в PDE / PTE), з якого рівня привілеїв вона доступна. Правило привілеїв таке: з рівня супервізора доступні всі сторінки, а з рівня користувача - тільки сторінки з бітом U / S = 1. Крім того, в PDE / PTE вказується тип доступу до сторінки (чи доступна сторінка для запису): R / W = 0 - тільки читання, R / W = 1 - доступні читання і запис. Слід зазначити дію біта 16 (Write Protect) в регістрі CR0. Коли цей біт виставлений, сторінки рівня користувача з поміткою "read-only" захищені від запису при зверненнях з рівня супервізора
25. Обчислення лінійної адреси в захищеному режимі.
У захищеному режимі існує три різних типи адрес і три відповідних їм адресних простору (address space):
логічне (logical)
лінійне (linear)
фізичне (physical).
лінійний адресу
«Проміжний» адреса, вводить додатковий рівень абстракції, саме завдяки його існуванню можливе використання сторінкової адресації (докладніше - в розділі про віртуальну пам'ять). 32 розряду, плоске (несегментоване) адресний простір розміром 4 Гб.
Стосовно до пам'яті розрізняють три адресних простори: логічне, лінійне і фізичне. Основним режимом роботи 32розрядних проце
сорів вважається захищений режим, у якому працюють усі механізми пер етворення адресних просторів.
Логічна адреса
, також називана віртуальною, складається із селектора
сегмента (у реальному режимі просто адреси сегмен
та) і ефективної адреси, називаного також зсувом (offset). Ефективна адреса формується підсумовуванням компонентів base, index, displacement з урахуванням масштабу scale. Оскільки кожна задача може мати до 16 К селекторів, а зсув,
обмежений розміром
сегмента, може досягати 4 Гбайт, логічний адресний
простір для кожної задачі
може досягати 64 Тбайт. Весь цій простір віртуально
ї пам'яті в принципі
доступний програмісту (за умовою підтримки з боку о
пераційної системи).
Блок сегментації транслює логічний адресний простір
у 32бітний простір
лінійних адрес.
Лінійна адреса
утворюється додаванням базової адреси сегмента з
ефективною адресою. Базова адреса сегмента в реальн
ому режимі утворюється
множенням вмісту використовуваного сегментного регі
стра на 16 (як і в 8086). У
захищеному режимі базова адреса завантажується з де
скриптора, що зберігається
в таблиці, по селектору, завантаженому у використов
уваний сегментний регістр.
