тем, совместимых с IBM PC.
К счастью, разработчики приложений, которые используют рас-
- 7-2 -
ширенную память, могут не вникать в неясные подробности оборудо-
вания плат расширения памяти для получения высокой производитель-
ности и гибкости. Полный доступ к расширенной памяти
обеспечивается хорошо документированными аппаратурно независимыми
программными интерфейсами, которые были разработаны и поставляют-
ся основными производителями аппаратного и программного обеспече-
ния персонального компьютера.
Наиболее известным из программных интерфейсов является Lotus
/Intel/Microsoft Expanded Memory Specification (LIM EMS) - спе-
цификация расширенной памяти названных фирм. Впечатляющее мно-
жество коммерчески доступных систем пользуется расширенной па-
мятью LIM EMS для снятия ограничения DOS. Windows 2.0 фирмы
Microsoft и DESQView фирмы Quarterdeck Office Systems используют
расширенную память для облегчения нескольких многозадачных прило-
жений. Lotus 1-2-3 и Symphony, Excel фирмы Microsoft, AutoCAD
фирмы Autodesk и другие популярные прикладные программы - все ис-
пользуют расширенную память для предоставления пользователям
средств решения более объемных и более сложных задач реального
мира. PC-DOS и MS-DOS 4.0 содержат драйверы, которые поддерживают
стандарт LIM EMS, как часть операционной системы, хотя ранние
версии DOS 4.0, по-видимому, не поддерживают функцию 19h EMS,
функцию Get/Set Handle Attribute, а первые поставленные с систе-
мой драйверы содержали ошибки. PC-DOS и MS-DOS 4.0 используют па-
мять LIM EMS 4.0 для буферизации секторов из открытых файлов (уп-
равляемая параметром BUFFERS в файле CONFIG.SYS) и проверки
элементов каталогов (которую команда FASTOPEN предоставляет с DOS
3.3 и более поздних версий). Первые версии MS-DOS 4.0, видимо, не
используют средства многозадачности LIM EMS 4.0 никоим образом.
(Заметьте, что во всей данной главе, всегда когда мы ссылаемся на
версию 4.0 MS-DOS, мы также включаем и PC-DOS 4.0, если специаль-
но не указано иное.)
В данной главе проводится глубокий обзор методов, необходи-
мых для использования расширенной памяти в Ваших собственных
программных проектах. Расширенная память может быть мощным, мно-
госторонним средством, увеличивающим возможности Ваших программ
для обработки более объемных задач, для быстрого доступа к боль-
шим базам данных по заказу, хранящихся на диске, для разделения
данных с другими программами или для уменьшения памяти DOS, кото-
рая им требуется.
Вы можете удивиться, когда узнаете, что Ваш персональный
компьютер даже не нуждается в каком-либо специальном оборудова-
нии или платах дополнительной памяти для Вас, чтобы записывать,
тестировать и выполнять приложения расширенной памяти. В данной
главе объясняется, каким образом программное обеспечение эмуляции
расширенной памяти может снабдить Вас недорогим средством для
разработки приложений расширенной памяти.
Вы узнаете, как расширенная память подгоняется к архитектуре
аппаратурного и программного обеспечения персональных компьюте-
ров, совместимых с IBM PC. Вы также узнаете о соглашениях по
программированию и протоколах, которые необходимы для того, чтобы
использовать расширенную память без вмешательства в другие прило-
жения, включая:
- Как определить, когда на персональном компьютере присутс-
твует расширенная память, и, если присутствует, то, сколь-
ко ее установлено.
- Как разместить, освободить и работать с до 32 мегабайтами
расширенной памяти, с помощью интерфейса прерывания 67h
- 7-3 -
менеджера расширенной памяти, определенного спецификацией
расширенной памяти Lotus/Intel/Microsoft.
- Как эксплуатировать функциональные и легко используемые
усовершенствования, включенные в последнюю версию (4.0)
LIM EMS.
- Как интерпретировать и реагировать на условия ошибок,
возвращаемые подсистемой расширенной памяти.
В данной главе мы дадим ссылочные материалы, подробно опре-
деляющие конкретный механизм прерываний и соглашения по использо-
ванию регистров, требующиеся для применения интерфейса программи-
рования LIM EMS. Мы также поможем Вам определять типы структур
данных, которые наиболее пригодны для сохранения в расширенной
памяти.
Мы проследим историю и мотивы спецификации расширенной памя-
ти Lotus/Intel/Microsoft и усовершенствованной спецификации рас-
ширенной памяти AST/Qadram/Ashton-Tate (AQA EEMS). Вы увидите,
каким образом различные средства этих стандартов включаются для
способствования преодоления ограничениям памяти DOS для почти лю-
бого типа программ, включая драйверы устройств, утилиты, остающи-
еся резидентно в памяти после завершения, и усовершенствования
ОС. В данной главе будут приведены соображения по технике и сов-
местимости, относящиеся к каждой из спецификаций расширенной па-
мяти, включая поддержку EMS 4.0, встроенную в MS-DOS 4.0, так,
что приложения, которые Вы пишете, будут совместимы с широчайшим
множеством реализаций расширенной памяти.
Для того, чтобы Вы могли начать программировать расширенную
память, в данной главе содержится ряд программ интерфейса низкого
уровня, написанных на языке С фирмы Microsoft версия 5.0, и при-
мер приложения. Пример состоит из двух законченных, работающих
программ и дает Вам демонстрацию от начала до конца ключевых ме-
тодов программирования LIM EMS, представленных в данной главе.
Некоторые из сложных способов, иллюстрируемых данным приложением,
включают в себя разделение данных между двумя программами и ис-
пользование расширенной памяти в программе обслуживания прерыва-
ния.
Мы начинаем рассмотрение опций расширенной памяти с истории
и событий в промышленности персональных компьютеров, совместимых
с IBM, которые вызвали ее разработку и использование.
Урок истории
В 1981 г. типичный персональный компьютер мог адресовать не
более 64 килобайт основной памяти. Серьезные программисты, рабо-
тавшие на этих машинах, тратили неординарное количество времени
для наскребывания последних нескольких байтов, необходимых для
введения еще одного дополнительного средства. Появление персо-
нального компьютера IBM с ОЗУ, которое было на порядок величины
больше, чем у предшественников, казалось предлагает продолжитель-
ный перерыв в нехватке памяти.
Едва прошло три года, аналог закона Паркинсона для памяти
ЦВМ (работа расширяется, чтобы заполнить время, доступное для ее
выполнения) обеспечил для IBM PC то же, что было для всех преды-
дущих поколений ЦВМ. Сегодня электронные таблицы, интегрированные
приложения, сети и поток резидентных утилит сделали пространство
памяти IBM PC столь же заполненным и ограниченным, как и у пред-
шественников.
- 7-4 -
Идеального решения для предела ОЗУ не существует. Даже, хотя
микропроцессор Intel 8088 в IBM PC поддерживает адресное прост-
ранство 1 Мбайт, 384 Кбайт адресного пространства между 640К и
пределом адресации 1 Мбайт зарезервированы для буферов видеоадап-
теров, системного и Бейсик ПЗУ и модулей ПЗУ BIOS других плат
ввода/вывода. Новые приложения PC-DOS загнаны в ловушку в грани-
цах 640 Кбайт пользовательского ОЗУ, с которым семейство IBM PC
было рождено.
Одним из традиционных решений проблем с памятью является
оверлей. Оно часто используется приложениями персональных компь-
ютеров, в которых компоненты кодов программ можно разложить над-
лежащим образом. Для других типов приложений, таких как электрон-
ные таблицы, данный подход эффективен не до конца. Требования к
памяти для данного типа приложений вызываются главным образом по-
тенциально неограниченным размером их центральных структур дан-
ных, а не размерами их выполняемых кодов.
LIM EMS
В отсутствие универсального решения корпорации Lotus
Development, Intel и Microsoft объединились для получения схемы,
позволяющей индивидуальным приложениям работать за пределом 640К,
который накладывается реализацией DOS IBM PC. Результат называет-
ся спецификацией расширенной памяти Lotus/Intel/Microsoft или LIM
EMS.Intel производит платы, содержащие эту память, Lotus адапти-
ровала свою электронную таблицу для использования этой памяти, а
Microsoft убедилась, что спецификации будут отвечать требованиям
усовершенствований ОС, над которыми ведется работа.
LIM EMS фактически определяет новую реализацию популярного
старого действия при недостатке адресного пространства: переклю-
чение банков памяти. Вкратце, схемы переключения банков памяти
работают с использованием электронных переключателей (в форме
программно адресуемых портов ввода/вывода), которые динамически
изменяют отображение физических блоков памяти на часть процессор-
ного адресного пространства. В этом случае компьютерная система
может обращаться к большему числу байтов физической памяти, чем
обеспечивает архитектура памяти процессора, хотя в данный момент
времени не все байты физической памяти программе доступны.
Как техническое решение проблемы пространства памяти, LIM
EMS вовсе не более впечатляющая или эффективная, чем схемы перек-
лючения банков, присутствовавшие во многих ЦВМ, созданных в тече-
ние эры микропроцессоров 6502 и 8080. Что действительно имеет LIM
EMS, так это - поддержку нескольких лидеров рынка в промышленнос-
ти персональных компьютеров и документацию, которая легко доступ-
на для разработчиков программного обеспечения и не требует запро-
са. Это обстоятельство - весьма большая редкость в настоящее
время, когда основные поставщики программного обеспечения, по-ви-
димому, сконцентрировали усилия на продаже средств создания при-
ложений разработчикам по ценам от 500 до 3000 долларов.
До выхода версии 4.0 PC-DOS IBM оставалась нейтральной по
отношению к LIM EMS, выбрав поддержку принятия OS/2 разработчика-
ми приложений в качестве более устойчивого решения проблемы памя-
ти. В то время как OS/2 представляет решение на долгий срок, для
большинства пользователей MS-DOS относительное запоздание ее вве-
дения и отсутствие полной совместимости вверх с большой долей ги-