Распределение оперативной памяти в MS-DOS


Как известно, MS-DOS – это однопрограммная ОС. В ней, конечно, можно орга­низовать запуск резидентных или TSR-задач1, но в целом она предназначена для выполнения только одного вычислительного процесса. Поэтому распределение памяти в ней построено по самой простой схеме, которую мы уже рассматривали в разделе «Простое непрерывное распределение и распределение с перекрытием (оверлейные структуры)». Здесь мы лишь уточним некоторые характерные детали.

В IBM PC использовался 16-разрядный микропроцессор i8088, который за счёт введения сегментного способа адресации позволял адресоваться к памяти объёмом до 1 Мбайт. В последующих ПК (IBM PC AT, AT386 и др.) было приня­то решение поддерживать совместимость с первыми, поэтому при работе с DOS прежде всего рассматривают первый мегабайт. Вся эта память разделялась на не­сколько областей, что проиллюстрировано на рис. 2.10. На этом рисунке изобра­жено, что памяти может быть и больше, чем 1 Мбайт, но более подробное рас­смотрение этого вопроса мы здесь опустим, отослав желающих изучить данную тему глубже к монографии [9].

Если не вдаваться в детали, можно сказать, что в состав MS-DOS входят следую­щие основные компоненты:

¨ Базовая подсистема ввода/вывода – BIOS (base input-output system), вклю­чающая в себя помимо программы тестирования ПК (POST2) обработчики прерываний (драйверы), расположенные в постоянном запоминающем уст­ройстве. В конечном итоге, почти все остальные модули MS-DOS обращают­ся к BIOS. Если и не напрямую, то через модули более высокого уровня иерархии.

¨ Модуль расширения BIOS – файл IO.SYS (в других DOS-системах он может называться иначе, например, IBMBIO.COM).

¨ Основной, базовый модуль обработки прерываний DOS – файл MSDOS.SYS. Именно этот модуль в основном реализует работу с файловой системой. (В PC-DOS аналогичный по значению файл называется IBMDOS.COM).

¨ Командный процессор (интерпретатор команд) – файл COMMAND.COM.

¨ Утилиты и драйверы, расширяющие возможности системы.

¨ Программа загрузки MS-DOS – загрузочная запись (boot record), располо­женная на дискете (подробнее о ней и о других загрузчиках см. главу 4).

 

 


Рис. 2.10. Распределение оперативной памяти в MS-DOS

Вся память в соответствии с архитектурой IBM PC условно может быть разбита на три части.

В самых младших адресах памяти (первые 1024 ячейки) размещается таблица векторов прерываний (см. раздел «Система прерываний 32-разрядных микропро­цессоров i80x86», глава 3). Это связано с аппаратной реализацией процессора i8088, на котором была реализована ПК. В последующих процессорах (начиная с i80286) адрес таблицы прерываний определяется через содержимое соответст­вующего регистра, но для обеспечения полной совместимости с первым процес­сором при включении или аппаратном сбросе в этот регистр заносятся нули. При желании, однако, в случае использования современных микропроцессоров i80x86 можно разместить векторы прерываний и в другой области.

Вторая часть памяти отводится для размещения программных модулей самой MS-DOS и для программ пользователя. Рассмотрим их размещение чуть ниже. Здесь, однако, заметим, что эта область памяти называется Conventional Memory (основная, стандартная память).

Наконец, третья часть адресного пространства отведена для постоянных запо­минающих устройств и функционирования некоторых устройств ввода/вывода. Эта область памяти получила название UMA (upper memory areas – область верхней памяти).

В младших адресах основной памяти размещается то, что можно назвать ядром этой ОС – системные переменные, основные программные модули, блоки дан­ных для буферирования операций ввода/вывода. Для управления устройствами, драйверы которых не входят в базовую подсистему ввода/вывода, загружают­ся так называемые загружаемые (или инсталлируемые) драйверы. Перечень инсталлируемых драйверов определяется специальным конфигурационным файлом CONFIG.SYS. После загрузки расширения BIOS – файла IO.SYS – последний (за­грузив модуль MSDOS.SYS) считывает файл CONFIG.SYS и уже в соответствии с ним подгружает в память необходимые драйверы. Кстати, в конфигурацион­ном файле CONFIG.SYS могут иметься и операторы, указывающие на количест­во буферов, отводимых для ускорения операций ввода/вывода, и на количество файлов, которые могут обрабатываться (для работы с файлами необходимо заре­зервировать место в памяти для хранения управляющих структур, с помощью которых выполняются операции с записями файла). В случае использования мик­ропроцессоров i80x86 и наличия в памяти драйвера HIMEM.SYS модули IO.SYS и MSDOS.SYS могут быть размещены за пределами первого мегабайта в области, которая получила название HMA (high memory area).

Память с адресами, большими, чем 10FFFFh, может быть использована в DOS-программах при выполнении их на микропроцессорах, имеющих такую возмож­ность. Так, например, микропроцессор i80286 имел 24-разрядную шину адреса, а i80386 – уже 32-разрядную шину адреса. Но для этого с помощью специаль­ных драйверов необходимо переключать процессор в другой режим работы, при котором он сможет использовать адреса выше 10FFFFh. Широкое распростране­ние получили две основные спецификации: XMS (eXtended Memory Specification) и EMS (Expanded Memory Specification). Поскольку основные утилиты, необходи­мые для обслуживания ПК, как правило, не используют эти спецификации, мы не будем здесь их рассматривать. Остальные программные модули MS-DOS (в принципе, большинство из них является утилитами) оформлены как обычные исполняемые файлы. В основном они являются транзитными модулями, то есть загружаются в память только на время своей работы, хотя среди них имеются и TSR-программы.

Для того чтобы предоставить больше памяти программам пользователя, в MS-DOS применено то же решение, что и во многих других простейших ОС – командный процессор COMMAND.COM сделан состоящим из двух частей. Первая часть явля­ется резидентной, она размещается в области ядра. Вторая часть – транзитная; она размещается в области старших адресов раздела памяти, выделяемой для программ пользователя. И если программа пользователя перекрывает собой об­ласть, в которой была расположена транзитная часть командного процессора, то последний при необходимости восстанавливает в памяти свою транзитную часть, поскольку после выполнения программы она возвращает управление резидент­ной части COMMAND.COM.

Поскольку размер основной памяти (conventional memory) относительно неболь­шой, то очень часто системы программирования реализуют оверлейные структу­ры. Для этого в MS-DOS есть специальные вызовы.

 



Дата добавления: 2022-02-05; просмотров: 262;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.