Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО / конспект_укр.doc
Скачиваний:
43
Добавлен:
03.03.2016
Размер:
634.37 Кб
Скачать

Тема 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.

Алгоритм:

  1. перевірити зайнятий або вільний даний блок (блок вільний, якщо адреса власника в полі MCB = «0»);

  2. якщо блок вільний, то необхідно перейти на наступний блок і перевірити чи не є він системним, тобто містить в полі власника значення «8». При цьому для цих блоків символи «SC» в полі імені означають, що блок містить системний код, а «SD» - системні дані.

Перехід на наступний блок здійснюється по формулі:

ADR_I2 = ADR_I1 + SIZE_I1 + 1;

  1. далі передбачаємо, що це програмний блок, тобто ADR_OWNER = ADR_BLOCK + 1

  2. якщо припущення було не вірне, то передбачаємо, що даний блок відноситься до блоку оточення.

У PSP будь-якого програмного блоку повинна стояти сегментна адреса блоку оточення. Але не у всіх PSP знаходитиметься реальна адреса блоку оточення. Вибираємо по зсуву «2С» адресу, в припущенні, що він відноситься до блоку змінних середовища, і порівнюємо цю адресу з адресою даного блоку. Якщо вони рівні, то для достовірності, необхідно переконатися, що даний блок дійсно містить змінні оточення. Якщо ж адреси не рівні, то можливі два випадки:

  • невірним було припущення про те, що це блок змінних середовища;

  • припущення було вірним, але по якихось причинах програмний модуль знищив свій блок оточення і по зсуву «2С» в PSP вказана не вірна адреса.

Блоки змінних оточення містять ASCII рядки, що включають опис змінних середовища та деякі команди. Для того, щоб визнати шлях до файлу, з якого була завантажена програма, необхідно знайти два що підряд йдуть байти зі значенням «0», відразу після них повинен знаходитися байт зі значенням «1» (найчастіше саме так), після якого знаходитиметься рядок з вказівкою шляху до завантаженого файлу. Наприклад:

....0 0 0 1 C:\PROGRAM FILES\WINAMP\WINAMP.EXE

Якщо це не блок оточення, то це блок даних, власником якого є програма з сегментною адресою власника.

Соседние файлы в папке СПО