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 відповідає не останньому МСВ - блоку в ланцюжку. Для останнього МСВ - блоку буде отримано значення, що задає сегмент границі оперативної пам’яті комп'ютера.