D.2. Распределение (карта) памяти шиноцентричных Intel-совместимых компьютерах.

В августе 1981 года фирма IBM выпустила свой первый персональный компьютер, основанный на микропроцессоре Intel 8088. Этот процессор способен был адресовать 1 Мбайт оперативной памяти, которой, как тогда казалось, персональным компьютерам хватит надолго. В связи с этим проблеме распределения памяти уделили меньше внимания, чем другим проблемам. С легкой руки компании Microsoft это распределение памяти "укоренилось" в мире и стало стандартом де-факто для всех Intel-совместимых компьютеров.

В памяти Intel-совместимых компьютеров можно выделить три зоны памяти:

  1. Базовая (Conventional) память - первые 640 Кбайт памяти с адресами 0000:0000h - 0009:FFFFh.
  2. Старшая (Upper) память - следующие 384 Кбайта (адреса 000A:0000h - 000F:FFFFh).
  3. Расширенная (Extended) - вся остальная память. Она начинается с адреса 0010:0000h. Максимальное значение адреса - FFFF:FFFFh.

Рассмотрим эти три зоны по-подробнее.

D.2.1. Базовая память.

Со времен микропроцессора 8088 здесь находятся все исполняемые программы, в том числе и операционная система. Эта преемственность сохранилась до сих пор. В самом начале этой области находится:

  1. Таблица векторов прерываний. Она всегда находится в диапазоне адресов 0000:0000h - 0000:0400h (первый килобайт памяти). Таблица определяет адреса прерываний - готовых процедур операционной системы, которые компьютер вызывает для выполнения определенной задачи. Программы прерываний стандартизованы для всех операционных систем фирмы Microsoft.
  2. Файл надстройки над системой BIOS - файл IO.SYS. В этом файле находятся программы-прерывания ввода/вывода, специфичные для операционной системы Microsoft.
  3. Система обработки прерывания (Int 21h) системы MS-DOS - файл MSDOS.SYS

    Примечание: эта часть отсутствует в операционных системах Windows. Она целиком помещается в файле IO.SYS.

  4. Стеки операционной системы MS-DOS. Эти стеки используются исключительно программами - прерываниями операционной системы. Число стеков варьируется в MS-DOS в пределах от 8-ми до 64-х, а их размер - от 32-х до 512-ти байт. Стеки устанавливаются командой STACKS в файле Config.sys.
  5. Системное окружение. Здесь расположены переменные окружения операционной системы (задаваемые командами SET, PATH, Prompt, Lastdrive и некоторыми другими.) Размер системного окружения задается в опциях команды SHELL файла Config.sys.
  6. Буфера ввода/вывода дисковых накопителей. Число буферов ввода/вывода задается командой Buffers файла Config.sys. На каждый буфер выделяется по 532 байта.
  7. Дескрипторы открытых файлов. На каждый дескриптор отводится 64 байта. Число дескрипторов устанавливается командой FILESфайла Config.sys.
  8. Драйверы, запускаемые командой Device файла Config.sys. Среди них могут быть драйверы расширенной памяти Himem.sys, дополнительной памяти Emm386.exe, а также совмещенный драйвер Quemm386.sys.
  9. Резидентные программы, загружаемые в память командой Install файла Config.sys.
  10. Резидентная часть командного процессора Command.com.
  11. Резидентные программы, загружаемые из файла Autoexec.bat и командной строки.

Вся остальная базовая память доступна для программ MS-DOS. Общий объем базовой памяти, занятой системными программами, не должен превышать 256 Кбайт, а рекомендуемый максимальный размер этой области - 128 Кбайт. Только при свободном объеме 512 Кбайт большинство программ DOS будут чувствовать себя комфортно.

Конечно, любой драйвер подключенного к компьютеру устройства, любая запущенная резидентная программа забирает под свои нужды определенную часть памяти, и лимит в 128 Кбайт может быть достигнут очень быстро. Чтобы избежать этого, возможны два сценария:

  1. (Для MS-DOS версий 5.0 и выше.) Загрузить большинство резидентных программ и драйверов, а также часть основных файлов MS-DOS в верхнюю и старшую память.
  2. (Для всех операционных систем.) Создать несколько конфигураций из файлов Config.sys и Autoexec.bat (или им подобных), содержащих необходимый минимальный набор драйверов и резидентных программ, и переключаться между конфигурациями путем перезагрузки компьютеров.

Любой из сценариев имеет свои достоинства и недостатки. Поэтому выбор любого сценария либо их комбинации должен решаться индивидуально.

D.2.3. Расширенная память.

D.2.3.1. Зоны в расширенной памяти.

Не вся область расширенной памяти доступна для выполнения программ. В этой области памяти находится зона теневого BIOS (Shadow RAM) и зона микропроцессора Weitec.

D.2.3.2. Зона теневого BIOS.

Из-за низкой скорости доступа к блокам ПЗУ процессор должен тратить несколько циклов ожидания на то, чтобы считать данные. При этом общая скорость работы приложения снижается. При использовании теневого BIOS программы из ПЗУ копируются в более быструю оперативную память (RAM) и там выполняются.

При создании теневого BIOS необходимо учитывать следующее: ПЗУ от ОЗУ отличается тем, что его содержимое нельзя изменить. Поэтому, в принципе, содержимое теневого BIOS можно изменить. Чтобы избежать этого, в настройках материнской платы необходимо запретить доступ программ "на запись" к теневому BIOS.

Зона теневого BIOS расположена по адресам памяти 00FE:0000h - 00FF:FFFFh. При этом зона системного BIOS расположена в первых 64 Кбайт этой области. Остальное пространство используется для теневого BIOS плат расширения. Весьма нежелательно, чтобы эта область памяти рагментировалась.

D.2.3.3. Зона микропроцессора Weitek.

Микропроцессор Abacus фирмы Weitek спроектирован так, что он обменивается данными с центральным процессором через расширенную память. Для обмена данными используется диапазон адресов C000:0000h - C000:FFFFh. Центральный процессор просто пересылает данные в эту область, а затем считывает из нее готовые результаты.

При использовании микропроцессора Abacus часто возникает конфликт между ним и драйверами расширенной и дополнительной памяти. Чтобы избежать его, мало прописать в BIOS использование этого микропроцессора. Необходимо также установит опции поддержки микропроцессора Weitek в драйверах.

Примечание: стандартные драйверы расширенной и дополнительной памяти MS-DOS поддерживают этот микропроцессор начиная с версии DOS 6.0.

Назад | Содержание | Вперед