6.1.2. Блок керування пам’яттю та його
структура
Для того щоб
відслідковувати розподіл пам’яті, MS-DOS веде спеціальний зв'язний список
керуючих блоків - блоків керування пам’яттю,
або МСВ (Memory
Control Block), кожний
МСВ займає цілий параграф і безпосередньо передує власне блоку пам’яті -
безперервної області пам’яті, що починається на 16-байтовій границі. Спеціальна
внутрішня перемінна MS-DOS містить покажчик
на перший МСВ ланцюжка. Значними є перші 5 байт МСВ:
байт 0 -
ASCII-символ 5А ('Z'), якщо даний блок останній у ланцюжку МСВ - блоків;
ASCII-символ 4Dh ('M') у противному випадку;
байти
1-2 - рівні нулю, якщо блок вільний; більш нуля, якщо блок зайнятий. У
останньому випадку байти 1-2 МСВ містять PID програми, для якої MS-DOS розподіляла
блок;
байти
3-4 - розмір блоку в 16-байтових параграфах.
Рис 6 1 ланцюжок блоків керування пам’яттю
Параграф, по якому розташовується перший МСВ,
зберігається MS-DOS в спеціальній внутрішній змінній. Рис. 6.1 ілюструє
використання МСВ.
Номер параграфа (сегмент
адреса) seg_mcb, по якому розташовується наступний
МСВ - блок в ланцюжку, визначається по формулі
seg_mcb = seg__mcb__old
+ length + 1,
де seg_mcb_old
- сегмент, по якому розташовується попередній МСВ - блок ланцюжка блоків; length - довжина попереднього блоку в параграфах (байти 3-4
попереднього МСВ - блоку ланцюжка блоків). Фізична адреса, з якого
розташовується в пам’яті наступний МСВ - блок, рівний seg_mcb().
Обчислення мають зміст, якщо seg_mcb_old відповідає
не останньому МСВ - блоку в ланцюжку. Для останнього МСВ - блоку буде отримано
значення, що задає сегмент границі оперативної пам’яті комп'ютера.
![]() |
![]() |
![]() |