
- •Системне програмування
- •1. Головний завантажувальний запис диску Master Boot Record.
- •2. Таблиця розділів та логічні диски
- •3. Таблиця розміщення файлів (fat). Загальна схема використання fat
- •4. Файлова система iso9660.
- •5. Файлова система udf
- •6. Таблиця відкритих файлів (sft). Стандартні файлові маніпулятори та їх розташування в sft.
- •7. Таблиця файлів завдань jft та її зв’язок з таблицею відкритих файлів sft.
- •9. Файлова система ntfs
- •10. Використання api функцій для роботи з файлами
- •11. Методи налагоджування драйверів та механізм підготовки їх до виконання
- •12. Команда ініціалізації драйверу. Її зміст, призначення та місце розташування. Визначення адреси точки розриву.
- •13. Об’єкти і їх дескриптори в Windows
- •14. Процедура переривання драйвера, її функція. Таблиця переходів
- •16. Загальний зв’язний список драйверів. Правила для встановлення нового драйверу.
- •19. Процедура стратегії драйвера та її основна задача.
- •20. Заголовок запиту драйверу, його складові частини та їх призначення
- •22.Обслуговування пам’яті в dos
- •23. Буфер попередньої трансляції в сторінковій організації пам’яті
- •Привілеї сегмента задаються полем dpl байта управління доступом.
- •26.Глобальні, локальні таблиці дескрипторів та idt.
- •27. Перетворення логічної адреси на лінійну в реальному та захищеному режимах
- •29.Таблиця дескрипторів переривань (idt).
26.Глобальні, локальні таблиці дескрипторів та idt.
Таблиці дескрипторів визначають всі сегменти, що використовуються в системі на базі 80386.
Є три типи таблиць:
1. таблиця глобальних дескрипторів;
2. таблиця локальних дескрипторів;
3. таблиця дескрипторів переривань.
Кожна з таблиць зберігатися в своїй області пам'яті і має розмір від 8 байт до 64 кбайт. Кожна таблиця може містити до 8к 8-ми байтних дескрипторів. Старші 13 біт селектора використовуються в якості індексу дескрипторної таблиці. Для звернення до таблиць є спеціальні регістри, що зберігають 32-х бітовий виконавчий адресу і 16 бітову кордон даної таблиці. Ці регістри GDTR, LDTR і IDTR завантажуються командами LGDT, LLDT, LIDT і зберігаються командами SGDT, SLDT і SIDT. Маніпуляція таблицями здійснюється операційною системою за допомогою привілейованих команд. Таблиця глобальних дескрипторів (GDT)
Таблиця GDT містить дескриптори, доступні для всіх завдань системи. GDT може містити будь-які дескриптори сегментів за винятком дескрипторів, що використовуються для обслуговування переривань. Зазвичай GDT містить сегменти команд і даних, що використовуються ОС і дескриптори таблиць LDT. Першому елементу GDT відповідає неіснуючий селектор, який не використовується. Таблиця локальних дескрипторів (LDT)
Таблиця LDT містить дескриптори, використовувані в даній задачі. Зазвичай ОС розробляються таким чином, щоб кожна задача мала окрему LDT. LDT може містити тільки дескриптори команд, даних, стека, номери завдання і виклику номеру. Таблиці LDT служать механізмом для ізоляції сегментів команд і даних окремих завдань від ОС, в той час, як GDT зберігає дескриптори сегментів, які є загальними для всіх завдань. Сегмент не може бути доступний завданню, якщо його дескриптор відсутня всередині поточної LDT чи GTR. Це забезпечує захист сегментів завдань і в той же час, спільне використання глобальних даних різними завданнями. На відміну від 6-ти байтових GDT і IDT регістрів, які зберігають базовий адресу і обмежувач, видима частина регістра LDT зберігає тільки 16 бітовий селектор. Цей селектор визначає дескриптор LDT в GDT. Таблиця дескрипторів переривань (IDT)
IDT містить дескриптори, що вказують розташування 256 підпрограм обслуговування переривань. IDT може зберігати тільки вектора завдань, вектора переривань і вектора трассіровок. IDT повинна бути не менше, ніж 256 байтовой, щоб зберігати дескриптори 32 переривань, зарезервованих ф. Intel. Кожне переривання, що використовується в системі, має бути описане в IDT. IDT використовується при виконанні команд INT, зовнішніх запитів переривань в особливих ситуаціях.
Дескриптори містяться у двох таблицях, доступних процесу
Глобальна таблиця дескрипторів (Global Descriptor Table, GDT)
Містить дескриптори, що описують програмний код і дані, спільні для усіх процесів (наприклад, бібліотеки, драйвери пристроїв, тощо), а також численні системні об'єкти
На цю таблицю вказує регістр gdtr
Локальна таблиця дескрипторів (Local Descriptor Table, LDT)
Доступна лише тому процесу, який виконується в даний момент
Кожний процес має свою власну локальну таблицю
На цю таблицю вказує регістр ldtr
Обробники переривань доступні через таблицю дескрипторів переривань (Interrupt Descriptor Table, IDT)
На неї вказує регістр idtr
Регістр |
Таблиця (об'єкт) |
Формат регістру |
||
gdtr |
GDT |
Global Descriptor Table |
48 |
Містить базову адресу і межу таблиці |
ldtr |
LDT |
Local Descriptor Table |
16 |
Селектор у таблиці GDT |
idtr |
IDT |
Interrupt Descriptor Table |
48 |
Містить базову адресу і межу таблиці |
tr |
TSS |
Task Status Segment |
16 |
Селектор у таблиці GDT |
Сегменти, що вказують на глобальні системні об'єкти (gdtr та idtr) містять базові лінійні адреси цих об'єктів, а також задають розмір об'єктів
Сегменти, що вказують на локальні для кожного процесу об'єкти (ldtr та tr) містять лише селектори, які адресують відповідні дескриптори у глобальній таблиці
Таким чином, таблиця GDT містить дескриптори, що описують сегменти стану задач і локальні таблиці дескрипторів усіх процесів, що виконуються в системі
Для переходу до виконання іншого процесу необхідно просто завантажити у регістри ldtr та tr відповідні дескриптори