| Пользователь | | |
10000 |-------------------------| | |
| Используется системой | V V
00000 ------------------------------------------
Рис.3-1. Стандартный формат памяти IBM PC/XT/AT для MS-DOS
Непосредственно никакая, но в большинстве случаев эта допол-
нительная "расширенная память" (поскольку она простирается выше
границы в 1 Мбайт) может часто быть использована как псевдодиск
или в более общем плане, как другой тип дополнительной памяти MS-
DOS, называемой "расширяемой памятью" (потому, что она "расширя-
ет" основной предел MS-DOS в 640 Кбайт).
Для MS-DOS версии 3.3 и более ранних версий продукты расширя-
емой памяти доступны в трех разновидностях. Первая спецификация
расширяемой памяти была разработана совместно фирмами "Лотус",
"Интел" и "Майкрософт" и называлась LIM EMS версии 3.2 (Limit
Expanded Memory Specification - предельная спецификация расширяе-
мой памяти). Несколько позже фирмы "Аштон-Тэйт", "Квэдрим" и
"АСТ" разработали улучшенный стандарт AQA EEMS (the Enhanced
Expanded Memory Specification - улучшенную спецификацию расширяе-
мой памяти). Фирмы "Лотус", "Интел" и "Майкрософт" соединили луч-
шие стороны AQA EEMS в LIM EMS версии 4.0. Все системы EMS состо-
ят из памяти (на соединительной плате или плате расширения) и
администратора улучшенной памяти EMM (the Enhanced Memory
Manager) - устанавливаемого драйвера устройства. Для установки
функций EMS резервируется прерывание MS-DOS с номером 67h. MS-DOS
версии 4.0 и выше, как часть операционной системы, поддерживает
стандарт LIM EMS версии 4.0. Реализация аппаратных средств от
производителя к производителю меняется. Программное обеспечение
EMS MS-DOS версии 4.0 состоит из устанавливаемого драйвера уст-
ройства, а, фактически, любого драйвера устройства EMS и совмес-
тимого соединения аппаратных средств, которые могут быть заменены
- 3-3 -
применяемой операционной системой.
Расширяемая память является результатом появления в среде
MS-DOS устойчивых традиций использования страничной памяти или
памяти коммутации банков. При этом подходе большой раздел памя-
ти, который лежит вне адресного пространства процессора, "отобра-
жается" малыми областями на многие маленькие разделы памяти, ле-
жащие внутри адресного пространства процессора. В то время как
процессор не может адресовать большой раздел памяти непосредс-
твенно, он может выбрать или дойти до любой конкретной части, по-
добно выбору страницы в книге.
В спецификации расширяемой памяти MS-DOS или EMS большая фи-
зическая память отображается в 16-килобайтные разделы памяти
MS-DOS, называемые страницами. Соответствующее 16-килобайтное ад-
ресное пространство в памяти MS-DOS называется страничным фрей-
мом. Количество поддерживаемых страничных фреймов и размещение их
внутри системы MS-DOS изменяется в зависимости от типа платы ис-
пользуемой расширяемой памяти, и существующей конфигурации систе-
мы.
Глава 7 посвящена обзору памяти EMS, описывающей методы дос-
тупа, стандарт EMS и пр. В данном обсуждении мы хотя и признаем
существование памяти EMS, но не уделяем ей большого внимания.
Прежде всего нас будет интересовать, как сама MS-DOS использует
память, и для нас достаточно отметить, что память EMS должна быть
отображена на стандартное адресное пространство памяти для того,
чтобы быть доступной для MS-DOS. (Имеются соображения о том, что
последующие версии MS-DOS могут использовать память EMS непос-
редственно, реально преодолевая границу в 640 Кбайт).
Использование памяти MS-DOS
К этому моменту мы установили, что по текущему стандарту фак-
тически MS-DOS имеет 640 Кбайт памяти для использования ею самой
и прикладными программами пользователя. В типовой системе MS-DOS
эта память будет распределяться так, как показано на Рис. 3-2.
Рассматривая Рис.3-2, можно заметить, что большинство приведенных
адресов указано приблизительно и зависит от версии MS-DOS, физи-
ческой конфигурации системы и опций, указываемых пользователями в
файлах конфигурации системы CONFIG.SYS и AUTOEXEC.BAT. Кроме то-
го, размеры сегментов, указанные на Рис. 3-2, показаны не в масш-
табе, а в соответствии с данной относительной позицией различных
компонентов.
На Рис.3-2 есть несколько областей, которые требуют поясне-
ния. Заметим, что первая область COMMAND.COM появляется на схеме
памяти дважды. Загружены две копии COMMAND.COM? Нет, просто
COMMAND.COM загружается в две отдельные области. Область, разме-
щенная выше драйверов устройств, сохраняется в памяти постоянно и
называется резидентной частью. Эта часть отвечает за корректность
завершения программ обработки и любые ошибки программы пользова-
теля, которые возникают в результате завершения работы программы.
Этот раздел является "порождающей программой" любой выполняемой
программы пользователя. Другой раздел COMMAND.COM, размещенный в
верхней части схемы памяти, является частью, которая обеспечивает
интерфейс пользователя с MS-DOS. Эта часть называется нерезидент-
ной, потому что она представлена только тогда, когда не выполня-
ются программы пользователя, или когда программа пользователя пы-
тается загрузить другую программу.
- 3-4 -
Адрес Использование памяти
А0000 .-----------------------------------------
или вершина облас-| COMMAND.COM | ^ ^
ти пользователя |-----------------------| | |
| | | |
| Нерезидентная область |Используется |
| программы | программами |
| | | |
|-----------------------| | |
| Резидентные программы | V |
|--------------------------------- |
| COMMAND.COM | Область
|-----------------------| пользователя
| Драйверы устройств | (максимум
|-----------------------| 640 кбайт)
| Буферы MS-DOS | |
10000 - 14000 |-----------------------| |
| | |
| Ядро MS-DOS | |
| | |
08000 - 0A000 |-----------------------| |
| Интерфейс BIOS | |
00040 |-----------------------| |
| Векторы прерываний | V
00000 -----------------------------------------
Рис.3-2. Использование памяти пользователя MS/PC-DOS
Нерезидентная часть обрабатывает внутренние команды MS-DOS (DIR,
COPY, SET и др.) и содержит загрузчик программ. Он используется
для загрузки программ либо при обращении к COMMAND.COM (в ответ
на внешние команды) или по запросу программы пользователя. Позд-
нее в этой главе будет показано, как одна программа может исполь-
зовать эту возможность для загрузки других программ или перекры-
тия программ.
Раздел Рис.3-2, помеченный как "Резидентные программы", со-
держит резидентные программы, завершаемые и оставляемые в памяти
(TSR), такие как, например, программа "Borland's Sidekick". Раз-
мещение памяти, показанное на Рис.3-2, применяется для TSR, заг-
ружаемых из файла AUTOEXEC.BAT, или непосредственно при инициали-
зации системы. В главе 4 программы TSR рассматриваются более под-
робно.
Раздел "Драйверы устройств" относится к устанавливаемым драй-
верам устройств, т.е. к тем драйверам, которые указываются с по-
мощью команды DEVICE = в файле CONFIG.SYS. Устанавливаемые драй-
веры устройств являются предметом рассмотрения главы 6. Драйверы
устройств, назначаемые по умолчанию и применяемые в системе, при-
ведены в разделе "Интерфейс BIOS", где они используются во время
загрузки или инициализации системы MS-DOS.
"Ядро MS-DOS" - это раздел MS-DOS, который обрабатывает раз-
личные функции MS-DOS, такие, например, как функция прерывания
21h. Этот раздел является "мостом" между программами пользователя
или COMMAND.COM и различными драйверами устройств, а также аппа-
ратными средствами.
Раздел "Векторы прерываний" содержит описание 256 векторов
прерываний системы.
Оставшаяся область - это "Нерезидентная область программы"
- 3-5 -
(TPA). (Название TPA восходит ко временам операционной системы
CP/M - прародительнице MS-DOS). Эта область, куда загружаются
программы пользователя, и которой мы и будем заниматься далее.
В некотором смысле Рис.3-2 не совсем точно отражает действи-
тельную ситуацию. Не все элементы, показанные на нем, имеют свой
собственный блок памяти,и, наоборот, имеются элементы, которые не
показаны на Рис.3-2, но имеют свои отдельные блоки памяти. Рас-
смотрим сначала более подробно, каким методом пользуется MS-DOS
для организации своих собственных областей TPA.
Цепочки памяти MS-DOS
Управление памятью MS-DOS начинается при загрузке MS-DOS.
Все блоки памяти MS-DOS либо свободны, либо распределены, начи-
ная с блока управления памятью (MCB - memory control block). Эти
блоки управления, показанные на Рис.3-3, идентифицируют тип и
размер блока памяти и программу (или процесс), которая владеет
им.
Два типа блоков управления памятью являются цепочками блоков,
тип которого есть 4Dh, и конечный блок цепочки - тип 5Ah. Тип
блока хранится в первом байте блока MCB.
Следующие два байта в блоке MCB являются словом, которое
идентифицирует владельца блока памяти. Значение нуль указывает,
что блок нераспределен или свободен. Если поле владельца ненуле-
вое, то это значит, что блок распределен. Это слово содержит
идентификатор владельца процесса (PID - process identifier). PID
для процесса пользователя получается от адреса сегмента, взятого
из сегмента программного префикса (PSP - program segment prefix)
данного процесса.
Четвертый и пятый байты в MCB являются словом, которое содер-