- •1 Аналітична частина
- •1.1 Віртуальна пам’ять в Windows
- •1.2 Керування віртуальною пам’яттю
- •1.3 Структура віртуального адресного простору
- •1.4 Віртуальний адресний простір 32–бітних систем
- •1.5 Сторінковий файл
- •1.6 Апаратна підтримка
- •1.9 Сегментація пам’яті в захищеному режимі
- •1.7 Сегментна організація пам’яті в реальному режимі роботи мікро процесорів x86
- •1.8 Базові адреси та формування лінійних адрес
- •1.10 Функції системи управління пам’яттю
- •1.10.1 Найпростіші схеми управління пам’яттю
- •1.10.2 Схема з фіксованими розділами
- •1.10.3 Один процес в пам’яті
- •1.10.4 Оверлейна структура
- •1.10.5 Стопінг
- •1.10.6 Схема зі змінними розділами
- •1.10.7 Сторінкова пам’ять
- •1.11 Дескрипторні таблиці
- •1.11.1 Дескриптор
- •1.11.2 Глобальна дескрипторна таблиця
- •1.11.3 Дескрипторна таблиця переривань
- •1.11.4 Локальна дескрипторна таблиця
- •1.12 Стратегії управління сторінковою пам’яттю
- •1.13 Алгоритми заміщення сторінок
- •1.13.1 Алгоритм fifo. Виштовхування першої сторінки що прийшла
- •1.13.2 Аномалія Біледі (Belady)
- •1.13.3 Оптимальний алгоритм (opt)
- •1.13.4 Виштовхування сторінки що довше за все не використовувалася. Алгоритм lru
- •1.13.5 Виштовхування рідко використовуваної сторінки. Алгоритм nfu
- •1.14 Огляд способів і засобів вирішення поставлених задач
- •1.14.1 SoftPerfect ram Disk
- •1.15 Постановка задачі на розробку
- •1.16 Висновки
- •2 Аналіз вимог до програмного забезпечення створення засобів опису програми для побудови її автоматної моделі
- •2.1 Виділення первинних вимог
- •2.2 Виділення детальних вимог через uml–діаграми
- •2.2.1 Діаграма прецедентів
- •2.2.2 Діаграми діяльності
- •2.2.3 Діаграма станів
- •2.3 Висновки
- •3 Проектування програмного забезпечення створення засобів опису програми для побудови її автоматної моделі
- •3.1 Архітектурне проектування
- •3.1.1 Об’єктно орієнтована парадигма
- •3.1.2 Структурна ієрархія системи
- •3.1.3 Структурна схема системи
- •3.2 Детальне проектування
- •3.2.1 Діаграма класів
- •3.2.2 Діаграма послідовності
- •3.3 Висновки
- •4 Конструювання та тестування програмного забезпечення
- •4.1 Розробка інтерфейсу користувача
- •4.2 Кодування системи
- •4.2.1 Вибір мови програмування
- •4.2.2Опис розробки програмних компонентів
- •4.2.2.1 Модуль ядра
- •4.2.2.2 Модуль віджетів
- •4.2.2.3 Модуль алгоритмів заміщення
- •4.2.2.4 Модуль графічного інтерфейсу
- •4.3. Детальне тестування програмного засобу
- •4.4. Висновки
- •Висновки
- •Список використаних джерел
- •Текст програми
1.11 Дескрипторні таблиці
У системах на базі процесорів x86 допускається створення майже будь–якого числа сегментів – необхідна тільки наявність відповідного дескриптора. Всі дескриптори мають довжину 8 байт і зберігаються в спеціальній області оперативної пам’яті, званої дескрипторною таблицею. Порядок розміщення дескрипторів довільний, а максимальне число дескрипторів – 8192. Таким чином максимальний розмір дескрипторної таблиці – 64 Кбайт.
Існує три типи дескрипторних таблиць, вибір яких залежить від призначення сегмента.
1.11.1 Дескриптор
Дескриптор сегмента (в архітектурі x86) – службова структура в пам’яті, яка визначає сегмент. Довжина дескриптора дорівнює 8 байт.
Структура сегментного дескриптора виглядає наступним чином(рис. 1.6.):
Рис. 1.6 – Структура сегментного дескриптора
– База (жовті поля, 32 біта) – початок сегмента в лінійній пам’яті
– Ліміт (червоні поля, 20 біт) – (розмір сегмента в байтах) –1 (База + Ліміт = лінійна адреса останнього байта)
– Права доступу (сині поля, 12 біт) – прапори, що визначають наявність сегмента в пам’яті, рівень захисту, тип, розрядність + один користувальницький прапор.
Байт прав доступу :
– Біт P визначає доступність сегмента (0 – сегмента немає, 1 – є). При зверненні до сегмента з скинутим бітом P відбувається виключення #NP, обробник якого може завантажити/створити сегмент.
Номер привілеїв DPL містить 2–бітний номер (0–3), що визначає, до якого рівня захисту відноситься цей сегмент.
Тип сегмента (біти 8–12 на малюнку). Старший біт (S) визначає сегмент як системний (S = 0) або користувацький (S = 1). Значення інших біт для системних і користувальницьких сегментів описано в таблицях:
Таблиця 1.1 – Типи системних сегментів
№ |
Біти AR |
Опис |
|||
3 |
2 |
1 |
0 |
||
0 |
0 |
0 |
0 |
0 |
Заборонене значення |
1 |
0 |
0 |
0 |
1 |
Вільний 10–бітний TSS |
2 |
0 |
0 |
1 |
0 |
LDT |
3 |
0 |
0 |
1 |
1 |
Зайнятий 16–бітний TSS |
4 |
0 |
1 |
0 |
0 |
16–бітний шлюз виклику |
5 |
0 |
1 |
0 |
1 |
Шлюз задачі |
6 |
0 |
1 |
1 |
0 |
16–бітний шлюз переривання |
7 |
0 |
1 |
1 |
1 |
16–бітний шлюз пастки |
8 |
1 |
0 |
0 |
0 |
Заборонене значення |
9 |
1 |
0 |
0 |
1 |
Вільний 32–бітний TSS |
A |
1 |
0 |
1 |
0 |
Зарезервовано |
B |
1 |
0 |
1 |
1 |
Зайнятий 32–бітний TSS |
C |
1 |
1 |
0 |
0 |
32–бітний шлюз виклику |
D |
1 |
1 |
0 |
1 |
Зарезервовано |
E |
1 |
1 |
1 |
0 |
32–бітний шлюз переривання |
F |
1 |
1 |
1 |
1 |
32–бітний шлюз пастки |
Таблиця 1.2 – Типи користувацьких сегментів
№ |
Біти AR |
Опис |
||
3 |
2 |
1 |
|
|
0 |
0 |
0 |
0 |
Сегмент даних тільки для читання |
2 |
0 |
0 |
1 |
Сегмент даних для читання/запису |
4 |
0 |
1 |
0 |
Сегмент даних тільки для читання, росте в низ |
6 |
0 |
1 |
1 |
Сегмент даниз для читання/запису, росте в низ |
8 |
1 |
0 |
0 |
Сегмент коду тільки для виконання |
А |
1 |
0 |
1 |
Сегмент коду для виконання/читання |
С |
1 |
1 |
0 |
Підлеглий сегмент коду тільки для виконання |
Е |
0 |
0 |
0 |
Підлеглий сегмент коду для виконання/читання |
Молодший біт байта AR користувальницьких сегментів (A, англ. Accessed, біт 8 на малюнку) можна використовувати для збору статистики про сегменти. При першому ж зверненні до сегменту (читання, запис, виконання) він встановлюється процесором в 1.
– Прапорець гранулярності G визначає ліміт сегмента: при G = 0 ліміт дорівнює значенню відповідного поля в дескрипторі, а при G = 1 ліміт дорівнює полю дескриптора, помноженому на (212 = 4096). Таким чином при G = 0 максимальний розмір сегмента 1 МБайт, а при G = 1 4 Гбайт.
– Прапор розрядності DB (біт 22 на малюнку) актуальний для користувальницьких сегментів коду і стека. Визначає розрядність в 16 біт при нульовому і 32 біт при одиничному значенні.
– Зарезервований прапорець (сіре поле) повинен завжди дорівнювати нулю.
– Користувацький прапор AVL (A, біт 20 на малюнку) відданий операційній системі. Його стан ніяк не впливає на роботу з сегментом.
