Графические устройства



     

Расширенная память (Extended Memory)

Термин Extended memory относится к тому же пространству памяти, которое описано в предыдущем разделе, но обозначает другой способ доступа, а именно, непосредственную работу с его адресами. Такой способ доступа возможен при работе микропроцессора в защищенном режиме (protected-address mode). Напомним, что свое название режим получил потому, что микропроцессор контролирует адреса при любых обращениях к внешним устройствам, в том числе и к оперативной памяти.

Начиная с модели Intel 386, в защищенном режиме микропроцессоры оперируют 32-разрядными адресами, что соответствует пространству в 4 Гбайт или 4096 Мбайт. Это очень большое пространство, для рационального использования и контроля допустимости адресов оно делится на страницы размером по 4 Кбайт. Учитывая, что реальный объем оперативной памяти намного меньше 4 Гбайт, предусмотрен механизм подкачки страниц.

Как и при работе в реальном режиме, адрес ОЗУ состоит из двух частей, одна из которых находится в сегментном регистре, а другая — в индексных регистрах, регистрах указателях или в регистрах общего назначения. Отличие в том, что доступное пространство может быть больше чем 65 536 байтов, но оно всегда ограничено конкретной величиной, иначе будет невозможен контроль адресов. Также изменяется содержимое сегментных регистров (cs, ds, es, fs, gs, ss), в них кроме кода сегмента хранятся его характеристики, необходимые микропроцессору для контроля адресов.

DOS сама не использует и не поддерживает выполнение прикладных задач в защищенном режиме. Тем не менее задача может самостоятельно перевести микропроцессор в защищенный режим, а после выполнения, восстановить реальный режим перед возвратом в DOS. Однако в таком случае в ней придется выполнять много специфических действий, которые обычно возлагаются на операционные системы. Для выполнения таких действий предназначены расширители (DOS extenders), которые подключаются к прикладной задаче и создают на время ее выполнения вычислительную среду, необходимую для работы в защищенном режиме. Наиболее известными из них являются DOS4GW, DOS32A, PMODE/W.

В некоторых случаях DOS и служебные программы все же переключаются в защищенный режим для использования Extended memory. Поэтому BIOS выполняет простейшую форму поддержки работы в защищенном режиме. В данном разделе приведена ее краткая характеристика.

Менеджер Extended memory

В состав DOS входит драйвер, хранящийся в файле himem.sys, его спецификация обязательно указывается в первой строке файла config.sys. Этот драйвер выполняет несколько функций, связанных с доступом к дополнительной памяти режиме Extended memory.

Одна из них заключается в тестировании и определении объема дополнительной памяти, сообщение о том, что himem тестирует память, можно увидеть в процессе загрузки DOS. Тестирование можно запретить, указав в config.sys ключ /testmem:off. Основное назначение himem.sys заключается в загрузке в дополнительную память резидентной части DOS.

В дополнительную память могут загружаться и драйверы различного назначения. В autoexec.bat признаком этого является команда LH, которая предшествует спецификации файла драйвера. В config.sys в таком случае вместо команды DEVICE используется DEVICEHIGH. При первоначальной установке DOS на компьютере все драйверы загружаются в обычную память. После того как файлы autoexec и config окончательно сформированы (завершено конфигурирование системы), выполняется специальная задача memmaker.exe, которая перемещает драйверы в старшую память, для увеличения свободного пространства в обычной памяти.

Драйвер himem. sys только загружает резидентные задачи в старшую память. Для выполнения таких задач надо либо переводить микропроцессор в защищенный режим, либо вызывать их так, как будто они находятся в Expanded memory. При работе в среде DOS используется второй способ.

Поддержка BIOS

После выпуска микропроцессора Intel 286 в состав BIOS была включена группа функций с названием AT services, доступных через прерывание int ish. Две из них имеют отношение к работе с Extended memory, а еще одна используется для перехода в защищенный режим. Следует отметить, что изначально они создавались для специальных целей и не рассчитаны на использование в прикладных задачах. Полное описание всех функций группы ish можно найти в Tech Help или в одном из руководств по BIOS.

Функция 87h Move Extended Memory Block перемещает блок данных из расширенной памяти в обычную, или в обратном направлении. Размер блока, выраженный в словах, указывается в регистре сх, он не может превышать воооь, т. е. 32К слов, или 64 Кбайт. В регистры es:si помещается адрес Global Descriptor Table (GOT), содержащий описание источника и приемника.

Признаком успешного выполнения пересылки является очищенный С-разряд при возврате из BIOS. При возникновении аварийной ситуации BIOS прекращает пересылку, устанавливает С-разряд при возврате в задачу, а в регистре ah указывает код ошибки (1,2, 3).

Для GDT надо зарезервировать 48 байтов памяти, 38 из которых имеют постоянное значение, а 10 заполняются задачей перед обращением к BIOS, они содержат адреса и размеры источника и приемника. Напомним, что данные читаются из источника и записываются в приемник. Таблицу можно зарезервировать, например, с помощью директив, приведенных в примере Б.9.

Пример Б.9. Структура таблицы GDI

GDtab: db 16 dup (0) 16 пустых байтов
dw ? размер источника в байтах (2*[сх]+1)
dw ? младшая часть адреса источника
db ? старшая часть адреса источника
db 93h разрешены чтение и запись
dw 0 пустое (резервное) слово
dw ? размер приемника в байтах (2*[сх]+1)
dw ? младшая часть адреса приемника
db ? старшая часть адреса приемника
db 93h разрешены чтение и запись
dw 0 пустое (резервное) слово
db 16 dup (0) 16 пустых байтов

Формат GDT должен строго соблюдаться, поэтому обратите ьнимание на то, в каких случаях в примере Б.9 употребляются директивы db, а в каких dw. Важно также правильно указывать коды доступа к источнику и приемнику, в частности, эзь разрешает чтение и запись.

Коды адресов источника и приемника 24-разрядные. Адрес обычной памяти вычисляется по схеме, показанной в табл. Б.1. Адрес'Extended memory может
ИЗМеНЯТЬСЯ В Пределах ОТ 10:ООООпДО OFF:OFFFFh.

Замечание
Именно эту функцию используют: DOS для загрузки своей резидентной части в старшую память, задача memmaker.exe для перемещения драйверов в старшую память, а также драйверы vdisk и ramdrive. Для ее использования прикладными задачами в Extended memory надо выделить блок нужного размера. Для этого в файле config.sys после имени драйвера himem.sys укажите ключ /intlS = xxxx, где хххх соответствует размеру (в килобайтах) пространства ОЗУ, которое будет доступно при работе с функцией 87п прерывания int 15h.

ФУНКЦИЯ 88h Get Extended Memory Size возвращает В регистре ах размер
доступного пространства расширенной памяти, выраженный в килобайтах. Это то значение, которое указано при установке драйвера himem.sys, адрес его первого байта юооооь (1 Мбайт).

При работе с Extended memory задача, прежде всего, должна издать эту функцию для проверки наличия требуемого пространства ОЗУ. Если его недостаточно, то выполнение задачи надо прервать, поскольку она не может затребовать дополнительный объем расширенной памяти. Доступным пространством памяти задача распоряжается самостоятельно. Ни DOS, ни драйвер himem.sys не выполняют никаких функций контроля и распределения пространства Extended memory.

ФУНКЦИЯ 89h Enter Protected Moded выполняет действия, необходимые ДЛЯ
перехода в защищенный режим и переводит микропроцессор в этот режим, т. е. после возврата из BIOS задача уже будет выполняться в защищенном режиме. Напомним, что временный переход в защищенный режим производится при выполнении функции 87h перед пересылкой блока, но он не заметен для задачи. В данном случае речь идет о полном переходе на выполнение задачи в защищенном режиме.

Перед обращением к BIOS надо сформировать специальную структуру данных (Global Descriptor Table И Interrupt Descriptor Table). Для заполнения этой структуры вы должны иметь представление о том, что такое дескриптор сегментного регистра, зачем и как надо изменять содержимое векторов прерываний и другие особенности перехода из реального режима в защищенный и обратно. Поэтому советуем отложить эксперименты с данной функцией до тех пор, пока вы не начнете изучать программирование для защищенного режима.

Виртуальный диск

Если на компьютере установлен достаточно большой объем оперативной памяти, то часть его можно использовать для размещения виртуального (или электронного) диска. Большой объем понятие условное, но при наличии 64 Мбайт памяти 32 Мбайт можно отдать под виртуальный диск, причем с явной пользой для дела. Если, например, вы измените настройки Windows так, чтобы область свопинга находилась на виртуальном диске, то система будет работать гораздо быстрее.

В состав устаревших версий DOS входил специальный драйвер vdisk.sys, предназначенный для создания и поддержки работы диска в дополнительной памяти ПК. Для чтения с диска и записи на него драйвер использовал функцию 87ь прерывания int I5h, т. е. при каждом обращении к виртуальному диску происходил временный переход в защищенный режим.

В состав современных версий DOS входит улучшенная версия драйвера ramdrive.sys. При его установке можно выбирать способ доступа к дополнительной памяти. При указании ключа /Е диск будет расположен в области Extended memory, 3 При указании КЛЮЧЗ /А — В Expanded memory. При каждом обращении к диску в первом случае будет происходить временный переход в защищенный режим, а во втором случае для пересылки данных будут использоваться функции EMS, описанные в предыдущем разделе.

Для установки виртуального диска в конец файла config.sys надо записать следующую команду:

device = c:\dos\ramdrive.sys 8192 /а.

В данном случае предполагается, что файл ramdrive.sys хранится на диске С: в каталоге DOS, а для размещения виртуального диска выделяется 8192 байта В Expanded memory.

Если ваша графическая задача будет использовать виртуальный диск для выборки и временного хранения данных, то это ускорит ее работу. Только не забывайте, что содержимое виртуального диска теряется при выключении или перезагрузке ПК.

Заключение.
При создании задач, предназначенных для выполнения в реальном режиме работы микропроцессора, дополнительную память ПК имеет смысл использовать как Expanded memory. Функции EMS позволяют прикладным задачам распоряжаться пространством расширенной памяти без существенных ограничений. Работа с Extended memory применяется, если задача выполняется в защищенном режиме. В таком случае использовать функции EMS не целесообразно, поскольку задаче доступно все свободное пространство оперативной памяти без каких-либо ограничений.

     
Назад Начало