|
||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Примітка
Інформація про векторну таблицю зв’язку приведена для версії MS DOS 6.22. Дана інформація відсутня у документації на операційну систему MS DOS, і відповідно може змінюватись від версії до версії.
Блоки керування пам¢ятю МСВ (Memory Control Block) Зона оперативної пам¢яті, починаючи з області програм MS DOS і до відеопам¢яті, розбита на фрагменти. Перед кожним фрагментом знаходиться блок керування пам¢ятю. Всередині блоку МСВ зберігається довжина, що описується даним МСВ (табл. 2.5), фрагменту пам¢яті. Наступний фрагмент пам¢яті, починається одразу за попереднім. Усі блоки керування пам¢ятю зв¢язані у список. Блоки МСВ бувають двох типів – М і Z. М-блоки – це проміжні блоки. Блок типу Z є останнім і єдиним блоком у списку.
Таблиця 2.5 – Формат блоку МСВ
Приклад 5. Програма знаходить у пам¢яті програмні блоки МСВ і виводить для кожного ім¢я власника. /*Компілятор Turbo C, Turbo C++ або Borland C++*/ #include <stdio.h> #include <dos.h> int main (void) { union REGS regs; struct SREGS segregs; typedef struct { unsigned char marker; unsigned int owner; unsigned int sizePara; unsigned char dummy [3]; unsigned char name [8]; }mcb; mcb far *ptr; unsigned int segm, i; regs.h.ah=0x52; intdosx(®s, ®s, &segregs); segm=peek (segregs.es,regs.x.bx-2); printf(" Адреса МСВ Розмір блока ім¢я власника\n" " пам¢яті(байт) \n\n "); ptr=MK_FP(segm,0); print ("04X:0000 8lu*,segm, (long) ptr->size Para*16); if (! Ptr->owner) printf("Блок вільний"); else if (_osmajor>=4&&(segm +1)=ptr->owner) { for (i=0;i<=7;i++) (printf("c",ptr->name[i]); } printf("\n\"); while (ptr ->>marker=’M’) { segm=segm+ptr->sizePara+1; ptr=MK_FP(segm,0); printf(" 04X:0000 8lu*, segm, (long)ptr->sizePara*16); if (!ptr-> owner) printf ("Блок вільний"); else if (_osmajor>=4&&(segm+1)==ptr->owner) { for(i=0;i<=7;i++)(printf ("C", ptr->name[i]); } printf ("\n"); } return 0; }
Розширена пам¢ять Пам¢ять, вища ніж 1 Мб, називається розширеною пам¢яттю -Extended Memory. Є дві специфікації використання цієї пам¢яті: а) EMS (Expanded Memory Specificatson) – програмна специфікація використання розширеної пам¢яті DOS-програмами через 4 сторінки по 16 Кбайт, які відображають розширену пам¢ять в область UMA (здебільшого з адреси D0000h); б) XMS (Extended Memory Specification) - програмна специфікація використання розширеної пам¢яті DOS-програми через переключення у захищений режим і навпаки. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |