
- •Системне програмування
- •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).
29.Таблиця дескрипторів переривань (idt).
Замість таблиці векторів переривань система переривань має справу з таблицею дескрипторів переривань (IDT, interrupt descriptor table)
Таблиця IDT пов'язує кожен вектор переривання з дескриптором процедури або завдання, яка буде обробляти це переривання.
Елементами таблиці IDT є дескриптори - Розмір дескриптора = 8 байтам.
(Тобто формат таблиці IDT подібний формату GDT і LDT.)
Дескриптори в таблиці переривань зазвичай називаються шлюзами (іноді комутаторами).
Шлюзи призначені для вказівки точки входу в програму обробки пре ¬ риваніе.
У дескрипторній таблиці переривань IDT можуть міститися шлю ¬ зи трьох типів:
• шлюз пастки;
• шлюз переривання;
• шлюз завдання.
Фізично мікропроцесор відрізняє шлюзи по со ¬ держимому полів.
Особливості таблиці IDT:
• нульовий дескриптор використовується для опису шлюзу для програми обробки виняткової ситуації 0 (помилка поділу);
(У таблиці GDT відсутній)
• дескриптори в таблиці IDT суворо впорядковані відповідно з номерами переривань.
У таблицях GDT і LDT порядок опису дес ¬ кріпторов ролі не грає, хоча і допускається наявність деяких соглаше ¬ ний по їх впорядкованості;
• розмірність таблиці IDT - не більше 256 елементів розміром по вісім байт, за кількістю можливих джерел переривань.
В окремих випадках є сенс описувати всі 256 дескрипторів цієї таблиці, формуючи для невикористовуваних номерів переривань шлюзи-заглушки. Це дозволить кор ¬ ректно обробляти всі переривання, навіть якщо вони і не плануються до використання в даній задачі. Якщо цього не зробити, то при незапланованому перериванні з номером, що перевищує межі IDT для даної заду ¬ чі, виникатиме виняткова ситуація загального захисту (з номером 13 (ODh)).
Адреса і довжина таблиці IDT містяться в регістрі idtr.
Зауважимо, що в реальному режі ¬ ме регістр idtr також містить адресу таблиці переривань, але при цьому кожен вектор займає 4 байти і містить 32-розрядний адреса у форматі CS: IP. Початкове значення цього регістра дорівнює нулю, але внего можна занести й інше значення.
Þ Можливо довільне розміщення в пам'яті цієї таблиці не тільки в за ¬ захищеності режимі, але і реальному.
У захищеному режимі зробити завантаження регістра idtr може тільки код з максимальним рівнем привілеїв.
Доступ до таблиці IDT з боку користувальницьких (прикладних) програм неможливий.
Аналог таблиці векторів переривань, існуючий в захищеному режимі, називається таблицею дескрипторів переривань (Interrupt Descriptor Table, IDT). За форматом і способом ініціалізації IDT практично ідентична GDT. Основні відмінності: Вміст - в IDT знаходяться дескриптори інших типів. Перший буде розглянуто нижче в цьому розділі, другий - у розділі «Зовнішні переривання», третій і останній - у розділі «Багатозадачність». Регістр, що визначає розмір і положення таблиці називається IDTR, команда для його завантаження - lidt. На відміну від GDT, нульовий дескриптор IDT це звичайний, повноцінний дескриптор, до якого цілком можливе звернення.
Розмір IDT не повинен перевищувати 256 дескрипторів. Таким чином, злегка модифікуючи код з попередньої глави, отримуємо приклад ініціалізації IDT:
…
; Вычисляем линейный адрес начала массива дескрипторов
mov eax, 0
mov ax, ds
shl eax, 4
add eax, offset IDT
; Записываем его в структуру
mov dword ptr offset idtr + 2, eax
; Загружаем IDTR. fword ptr – указатель на шестибайтную структуру
lidt fword ptr idtr
…
; Interrupt Descriptor Table
IDT label byte
db … ; Дескриптор #0
…
db … ; Дескриптор #N
idt_len equ $ - IDT ; размер IDT
idtr dw idt_len – 1 ; 16-битный размер IDT – 1
dd ? ; Место для 32-х битного базового адреса IDT
30. Перетворення лінійної адреси на фізичну в системі сторінкової пам’яті.
Основне застосування сторінкового перетворення адреси - організація лінійной пам'яті. Лінійна пам'ять дозволяє використовувати програмами, більший обсяг пам'яті, ніж встановлений на комп'ютері фізичний обсяг пам'яті. Решта інформації може бути скинута на зовнішній носій
Рис. 18. Перетворення лінійної адреси у фізичний. Процес обчислення адреси сторінки часто називають трансляцією сторінок. Старші 10 біт лінійної адреси використовуються як індекс в таблиці, званої каталогом таблиць сторінок. Розміщення каталогу таблиць сторінок у фізичній пам'яті визначається вмістом системного регістра процесора CR3. Каталог таблиць сторінок містить дескриптори таблиць сторінок, що визначають фізичну адресу таблиць сторінок. У каталозі таблиць сторінок за все може бути 1024 дескриптора. Самих же каталогів може бути скільки завгодно, але в кожний момент часу використовується тільки один - той, на який вказує регістр CR3. Наступні 10 біт лінійної адреси призначені для індексації таблиці сторінок, обраної за допомогою старших 10 біт адреси. Таблиця сторінок містить 1024 дескриптора, що визначають фізичні адреси сторінок пам'яті. Розмір однієї сторінки складає 4 кілобайти, тобто 4096 байт. Молодші 12 біт лінійної адреси вказують зміщення до адресуемому байту всередині сторінки.