- •Кафедра комп'ютерної інженерії опорний конспект лекцій до дисципліни "Системне програмне забезпечення "
- •Тема1. Загальне уявлення про операційну систему
- •Першою системою, побудованою таким чином була проста пакетна система the, яку побудував Дейкстра і його студенти в 1968 році.
- •Модель клієнт-сервер і мікроядра
- •Об'єктно-орієнтований підхід
- •Класифікація ос
- •Тема 2. Файлова система fat
- •Файлова система типа fat
- •7 Головка0
- •Структура логічних дисків
- •Алгоритм визначення ланцюжка кластерів
- •Функції створення і доступу до об'єктів файлової системи
- •Порушення структури файлової системи
- •Тема 3. Файлова система ntfs
- •Базові поняття в ntfs
- •Характеристики ntfs
- •Додаткові можливості ntfs
- •Фізична організація файлової системи ntfs
- •Mft і його структура
- •Метафайли
- •Файли і потоки
- •Каталоги
- •Атрибути файлів і каталогів
- •Короткі імена
- •Алгоритм визначення номера запису mft відповідною файлу із заданим ім'ям
- •Алгоритм пошуку номера запису mft для поточного елементу шляху по каталогу, який описаний записом mft з заданим номером
- •Каталогу із заданим номером запису mft
- •Алгоритм визначення повного списку елементів в каталозі за вказаним шляхом
- •Алгоритм отримання списку файлів в заданому індексному записі
- •Заголовок індексного запису для атрибуту index_root
- •Заголовок індексного запису для атрибуту index_allocation
- •Тема 4 . Організація пам'яті реального режиму
- •Організація пам'яті реального режиму
- •Звільнення і виділення блоків
- •Тема 5. Організація доступу до пам'яті в захищеному режимі
- •Сегмент
- •Структура дескриптора сегменту
- •Атрибут 2
- •Розподіл пам'яті в Windows
Тема 4 . Організація пам'яті реального режиму
Пам'ять, як логічний об'єкт
Класифікація блоків пам'яті
Структура блоку пам'яті
Алгоритм ідентифікації блоків
Стратегії виділення пам'яті
Організація пам'яті реального режиму
Робота з пам'яттю як з ресурсом системи, передбачає дві операції:
виділення;
звільнення.
Особливість реалізації цих 2-х операцій залежатиме від типу фізичної пам'яті, її об'єму і від конкретної ОС.
Однозадачна операційна система працює з пам'яттю як з логічним об'єктом, представляючи пам'ять у вигляді послідовності блоків. Ця послідовність утворює однонаправлений список, вершина якого фіксується в системній області ОС і може бути отримана 52h функцією 21-го переривання. Дана функція повертає в регістрах [ES:BX] адресу деякої області даних ОС, яка іменується «list of list, – список списків». Згідно структури, по зсуву «-2» від початку даної області знаходиться адреса першого блоку в списку блоків пам'яті.
На відміну від класичної структури однонаправленого списку, даний список блоків пам'яті не містить посилань на наступний елемент цих блоків. По наявних параметрах можна обчислити адресу наступного елементу списку.
Ознакою останнього елементу є спеціальний маркер, який записаний в цьому блоці. Будь-який блок пам'яті містить в своєму складі частину, що містить службові дані– (MCB) та інформаційну частину. Ці дві складові завжди слідують один за одним нерозривно.
Вміст MCB дозволяє однозначно ідентифікувати інформаційну частину блоку.
Для реального режиму характерне жорстке закріплення блоків за їх вказаними адресами. Це означає, що в даному режимі неможливе переміщення блоків по пам'яті.
Розрізняють 2 класи блоків пам'яті - основні та залежні.
До першого класу відносяться блоки, які зайняті програмними модулями або додатками. Ці блоки можуть генерувати запити на звільнення або виділення пам'яті.
До залежних блоків відносять блоки двох типів:- дані та змінні оточення. Ці блоки є пасивними по відношенню до операцій роботи з пам'яттю. Ідентифікувати блок – значить, визначити, до якого класу відноситься даний блок та його тип. Крім означених блоків в окремий клас виділяються системні блоки, які теж поділяються на програмні та блоки даних.
Структура службової частини блоку (МСВ) представлена нижче:
Зсув
|
Розмір байт
|
Інформація
|
0 |
1 |
Маркер блоку – це ASCII код букв «M»або «Z», де «M» - означає поточний блок, а «Z» - останній блок. |
1 |
2 |
Сегментна адреса власника блоку. Всі блоки вирівняні на межу параграфа. Адреса вказує на інформаційну частину програмного блоку. |
3 |
2 |
Розмір блоку в параграфах. |
5 |
3 |
Резерв. |
8 |
8 |
Ім'я власника блоку (лише для програмних блоків. Для останніх – значення поля не визначене). |
Ідентифікація блоків пам'яті
Будь-який програмний блок на початку інформаційної частини має область в 256 байт, іменовану PSP. Адреса власника завжди вказує на початок будь-якого програмного блоку, тобто на PSP.
Алгоритм:
перевірити зайнятий або вільний даний блок (блок вільний, якщо адреса власника в полі MCB = «0»);
якщо блок вільний, то необхідно перейти на наступний блок і перевірити чи не є він системним, тобто містить в полі власника значення «8». При цьому для цих блоків символи «SC» в полі імені означають, що блок містить системний код, а «SD» - системні дані.
Перехід на наступний блок здійснюється по формулі:
ADR_I2 = ADR_I1 + SIZE_I1 + 1;
далі передбачаємо, що це програмний блок, тобто ADR_OWNER = ADR_BLOCK + 1
якщо припущення було не вірне, то передбачаємо, що даний блок відноситься до блоку оточення.
У PSP будь-якого програмного блоку повинна стояти сегментна адреса блоку оточення. Але не у всіх PSP знаходитиметься реальна адреса блоку оточення. Вибираємо по зсуву «2С» адресу, в припущенні, що він відноситься до блоку змінних середовища, і порівнюємо цю адресу з адресою даного блоку. Якщо вони рівні, то для достовірності, необхідно переконатися, що даний блок дійсно містить змінні оточення. Якщо ж адреси не рівні, то можливі два випадки:
невірним було припущення про те, що це блок змінних середовища;
припущення було вірним, але по якихось причинах програмний модуль знищив свій блок оточення і по зсуву «2С» в PSP вказана не вірна адреса.
Блоки змінних оточення містять ASCII рядки, що включають опис змінних середовища та деякі команди. Для того, щоб визнати шлях до файлу, з якого була завантажена програма, необхідно знайти два що підряд йдуть байти зі значенням «0», відразу після них повинен знаходитися байт зі значенням «1» (найчастіше саме так), після якого знаходитиметься рядок з вказівкою шляху до завантаженого файлу. Наприклад:
....0 0 0 1 C:\PROGRAM FILES\WINAMP\WINAMP.EXE
Якщо це не блок оточення, то це блок даних, власником якого є програма з сегментною адресою власника.