
- •1. Управление памятью
- •1.1 Типы памяти
- •1.2 Стандартная память
- •Р ис. 2. Цепочка блоков памяти
- •1.3 Отображаемая память
- •1.4 Расширенная память
- •1.5 Высокая память
- •1.6 Верхняя память
- •2. Использование средств управления памятью
- •2.1. Общие положения
- •2.2. Драйвер himem.Sys: управление расширенной и высокой памятью
- •3. Использование драйвера himem.Sys для программирования.
- •3.1. Проверка подключения драйвера
- •3.2. Получение адреса управляющей программы
- •3.3. Описание функции драйвера h1mem.Sys
- •Локальное открывание линии а20
- •Локальное закрывание линии а20
- •Освободить область umb
- •3.4. Коды ошибок
- •3.5. Ограничения при использовании области нмa
- •4. Примеры использования драйвера himem.Sys.
1.6 Верхняя память
Мы уже говорили о том, что в UMA обычно остаются «дыры». Одна из 64-Кбайт «дыр» может задействоваться под окно отображаемой памяти. Но даже при этом условии в UMA можно было бы дополнительно разместить почти 100 Кбайт так нужной памяти. Оставшиеся «дыры» можно «заполнить» расширенной памятью, если обеспечить отображение их адресов на их физические адреса, превышающие 1М. Это с успехом можно сделать на компьютере с микропроцессором 80386 и выше, поскольку такие процессоры способны реализовать преобразование одних адресов (логических) в другие: адреса (физические). Описания техника аналогична эмуляции отображаемой с использованием расширенной памяти, но имеются два существенных отличия:
невозможно использовать память, превышающую размеры «дыр» (то есть механизм переключения страниц не поддерживается);
в заполненные памятью «дыры» можно загружать не только данные, но также драйверы и резидентные программы, что высвобождает стандартную память для других программ.
Память, заполняющая «дыры» в UMA, называется верхней (upper memory), или UMB-памятью (Upper Memory Biocks – блоки верхней памяти). Очевидно, верхняя память состоит из нескольких фрагментов, называемых регионами. Поэтому, видимо, вместо UMB лучше было бы использовать термин «Upper Memory Reqions» (UMR).
Из-за присущей верхней памяти фрагментированности, определяющей небольшие размеры регионов, в нее не удается загрузить большие программы (как известно, программный код должен быть непрерывным). Вот почему о возможности загрузки в верхнюю память нерезидентных программ обычно не вспоминают, хотя она в принципе допустима.
Некоторые, но отнюдь не все функции управления верхней памятью зафиксированы в спецификации XMS и их реализует HIMEM.SYS. Однако всеобъемлющая поддержка верхней памяти осуществляется в DOS не этим, а другим драйвером, который еще и эмулирует отображаемую намять, а именно, драйвером EMM386.ЕХЕ. Есть много других администраторов верхней памяти различных производителей. Некоторые администраторы «умудряются» даже реализовать верхнюю память на ПК классов XT и AT, используя для ее эмуляции отображаемую память.
Разновидность компьютеров класса AT, снабженных специальными схемами управления памятью, аналогично компьютерам с МП 80386 и выше, способен производить переадресацию на логическом уровне и тем самым способен поддерживать верхнюю память.
Разновидность верхней памяти, о которой только что рассказано, является программной, поскольку она формируется программными средствами при наличии соответствующей аппаратной поддержки.
Некоторые модели ПК различных классов, начиная с XT, имеют аппаратную верхнюю память, то есть оперативную память емкостью 384 Кбайт, заполняющую UMA. В этом случае регионы верхней памяти доступны изначально.
Распознать наличие аппаратной верхней памяти можно двумя способами:
узнав общий размер оперативной памяти, из сообщений при ее тестировании во время загрузки DOS и сравнив с количеством, указанным в документации на ПК (аппартная верхняя память имеется, если протестированной памяти на 384 Кбайт меньше чем указано в документации);
выдав команду MEM и проанализировав поле Total в строке Reserved отчета о статусе памяти (аппаратная верхняя память имеется, если в этом поле указано значение 384 К).
Первый способ основан на том, что BIOS не тестирует память, логически размещенную в UMA. Аналогичным первому способу можно считать сравнение сведений о размере расширенной памяти, отображаемых командой MEM, с общим ее количеством по документации.
ПК с процессорами 80386 и выше иногда способны аппаратно менять базовый адрес фрагмента расширенной памяти размером 384 Кбайт (только такого, но не меньшего размера). Тогда можно получить как аппаратную, так и программную верхнюю память. Верным признаком такой способности является поддержка теневой памяти (копии BIOS в оперативной памяти). Смена базового адреса обычно и происходит при изменении статуса поддержки теневой памяти, осуществляемом в среде встроенной в BIOS утилиты Setup. Правда, есть BIOS, которые, отключая теневую память, не перемещают высвободившиеся 384 Кбайт в ХМА, — это поле памяти оказывается неиспользуемым.
В дальнейшем речь пойдет только о программной верхней памяти.
Верхняя память выделяется блоками. Блок не может быть больше региона, в котором он формируется. В любом регионе может быть создано несколько блоков.
При использовании верхней памяти важно понимать, что драйверы и резидентные программы, загружаемые в нее, не обязаны использовать какие-либо специальные приемы для этого. Функция загрузки всецело ложится на «плечи» DOS, и она ее с честью реализует.
Обобщенные структуры памяти ПК
Различные классы ПК имеют неодинаковые структуры памяти, что определяется размером адресного пространства различных микропроцессоров, а также их возможностями по переадресации ячеек памяти.
В соответствии с этим. можно выделить три структуры памяти компьютеров:
структура памяти ПК класса XT (рис. 3);
Р
ис.
3 Структура памяти ПК класса ХТ.
структура памяти ПК класса AT (рис.4);
структура памяти ПК на базе микропроцессора 80386, 80486 или Pentium (рис.5).