Управление памятью в ms dos

Обновлено: 07.07.2024

В компьютерах, совместимых с IBM PC , управление памятью DOS относится к программному обеспечению и методам, используемым для предоставления приложениям доступа к более чем 640 кибибайт (640 * 1024 байтов) (кБ) «обычной памяти». Предел 640 КиБ был специфическим для IBM PC и близких к нему совместимых устройств; другие машины, работающие под управлением MS-DOS, имели другие ограничения, например ПК Apricot мог иметь до 768 КиБ, а Sirius Victor 9000 - 896 КиБ. Управление памятью в семействе IBM было усложнено из-за необходимости поддерживать обратную совместимость с исходным дизайном ПК [1] и в реальном режиме.DOS, позволяя пользователям компьютеров использовать преимущества больших объемов недорогой памяти и процессоров нового поколения. Поскольку DOS уступила место Microsoft Windows и другим 32-разрядным операционным системам, не ограниченным исходным произвольным пределом в 640 КиБ для IBM PC, управление памятью персонального компьютера больше не требует, чтобы пользователь вручную манипулировал внутренними настройками и параметрами компьютера. система.

Ограничение в 640 КиБ сильно усложнило аппаратное и программное обеспечение, предназначенное для его обхода; Физическая память в машине может быть организована как комбинация базовой или обычной памяти (включая нижнюю память), верхней памяти, верхней памяти (не такой же, как верхняя память), расширенной памяти и расширенной памяти, и все они обрабатываются по-разному.

СОДЕРЖАНИЕ

Процессор Intel 8088 , использовавшийся в оригинальном IBM PC, имел 20 адресных строк и поэтому мог напрямую адресовать 1 МиБ (2 20 байтов) памяти. Различные области этого адресного пространства были выделены для разных видов памяти, используемых для разных целей. Начиная с самого нижнего конца адресного пространства, на ПК была установлена ​​оперативная память для чтения / записи (RAM), которая использовалась DOS и прикладными программами. Первая часть этой памяти была установлена ​​на материнской плате системы (на очень ранних машинах 64 КиБ, позже измененная на 256 КБ). Дополнительная память может быть добавлена ​​с помощью карт, вставленных в слоты расширения; каждая карта содержала перемычки или переключатели для управления тем, какая часть адресного пространства обращается к памяти и устройствам на этой карте.

На IBM PC все адресное пространство размером до 640 КБ было доступно для ОЗУ. Эта часть адресного пространства называется «обычной памятью», поскольку она доступна для всех версий DOS автоматически при запуске. Сегмент 0, первые 64 КБ обычной памяти, также называется областью низкой памяти . Обычно расширяющая память устанавливается непрерывно в адресном пространстве с памятью на материнской плате. Если бы между памятью материнской платы и расширяющей памятью был нераспределенный промежуток, память не была бы автоматически определена как пригодная для использования DOS.

Область верхней памяти (UMA) относится к адресному пространству от 640 до 1024 КиБ (0xA0000–0xFFFFF). На этом участке определены три региона по 128 КиБ. Область размером 128 КБ между 0xA0000 и 0xBFFFF была зарезервирована для экранной памяти видеоадаптера . Область размером 32 КиБ между 0xC0000 и 0xC7FFF была зарезервирована для памяти видеоадаптера BIOS . Область 160 КиБ между 0xC8000 и 0xEFFFF была зарезервирована для дополнительных ПЗУ устройств , а специальная оперативная память обычно используется совместно с физическими устройствами (например, общая память для сетевого адаптера ). IBM PC зарезервировал верхние 64 КиБ адресного пространства от 0xF0000 до 0xFFFFF для BIOS и постоянной памяти Cassette BASIC (ROM). [2]

Например, область памяти монохромного видеоадаптера занимала от 704 до 736 КБ (0xB0000–0xB7FFF). Если бы использовался только монохромный дисплейный адаптер, адресное пространство между 0xA0000 и 0xAFFFF можно было бы использовать для ОЗУ, которое было бы смежным с обычной памятью. [3]

Системные ПЗУ BIOS должны находиться в верхнем конце адресного пространства, поскольку начальный адрес ЦП фиксирован конструкцией процессора. Начальный адрес загружается в программный счетчик ЦП после аппаратного сброса и должен иметь определенное значение, которое сохраняется после отключения питания системы. При перезагрузке или включении ЦП загружает адрес из системного ПЗУ, а затем переходит в определенное место ПЗУ, чтобы начать выполнение самотестирования при включении питания и, в конечном итоге, загрузить операционную систему.

Поскольку плата расширения, такая как видеоадаптер, контроллер жесткого диска или сетевой адаптер, может использовать выделение памяти во многих областях верхнего уровня памяти, настройка некоторых комбинаций карт потребовала внимательного чтения документации или экспериментов, чтобы найти настройки карты и сопоставления памяти, которые работали. Сопоставление двух устройств с одинаковыми адресами физической памяти может привести к остановке или нестабильности системы. [3] Не все адреса в области верхней памяти использовались в типичной системе; неиспользуемые физические адреса будут возвращать неопределенные и зависящие от системы данные, если к ним обращается процессор.

По мере снижения цен на память прикладные программы, такие как электронные таблицы и компьютерное черчение, были изменены, чтобы использовать все больше и больше физической памяти в системе. Виртуальная память в 8088 и 8086 не поддерживалась аппаратным обеспечением процессора, а дисковые технологии того времени делали ее слишком медленной и громоздкой, чтобы ее можно было использовать на практике. Расширенная память - это система, которая позволяла прикладным программам получать доступ к большему объему оперативной памяти, чем напрямую видна адресному пространству процессора. Этот процесс был формой смены банка . Когда требовалась дополнительная оперативная память, драйверпрограммное обеспечение временно сделало бы часть расширенной памяти доступной для процессора; когда данные в этой части памяти были обновлены, другая часть могла быть заменена в адресное пространство процессора. Для IBM PC и IBM PC / XT , имеющих всего 20 адресных строк, были изготовлены специальные карты расширенной памяти, содержащие, возможно, мегабайт или более расширенной памяти, с логикой на плате, чтобы сделать эту память доступной для процессора в определенные части адресного пространства 8088.

Выделение и использование расширенной памяти не было прозрачным для прикладных программ. Приложение должно было отслеживать, в каком банке расширенной памяти содержится конкретный фрагмент данных, и когда требовался доступ к этим данным, приложение должно было запросить (через программу драйвера) плату расширенной памяти, чтобы отобразить эту часть памяти в адресное пространство процессора. Хотя приложения могли использовать расширенную память с относительной свободой, многие другие программные компоненты, такие как драйверы и TSR, по- прежнему обычно ограничивались областью 640 КБ «обычной памяти», которая вскоре стала критически ограниченным ресурсом.

Когда был представлен IBM PC / AT , архитектура сегментированной памяти процессоров семейства Intel имела побочный продукт, позволяющий адресовать чуть более 1 Мбайт памяти в «реальном» режиме. Поскольку 80286 имел более 20 адресных строк, определенные комбинации сегмента и смещения могли указывать на память выше 0x0100000 (2 20 ) места. 80286 может адресовать до 16 Мбайт системной памяти, таким образом устраняя "заворачивание" адресов памяти. Поскольку требуемая адресная строка теперь существует, комбинация F800: 8000 больше не будет указывать на физический адрес 0x0000000, а будет указывать на правильный адрес 0x00100000.

В результате некоторые программы DOS перестали работать. Чтобы поддерживать совместимость с ПК и поведением XT, AT включал линейный вентиль A20 (Gate A20), который заставлял адреса памяти на AT переходить в низкую память, как это было бы на процессоре 8088. Первоначально этим шлюзом можно было управлять с помощью контроллера клавиатуры , чтобы позволить запущенным программам, которые были разработаны для этого, получить доступ к дополнительным 65 520 байтам (64 КБ памяти в реальном режиме . Во время загрузки BIOS сначала включает A20 при подсчете и тестировании всех системной памяти, и отключает ее перед передачей управления операционной системе.Включение линии A20 является одним из первых шагов в защищенном режиме x86. операционная система делает это в процессе загрузки, часто до того, как управление будет передано ядру из начальной загрузки (например, в случае Linux).

Область верхней памяти ( HMA ) является ОЗУ область , состоящую из первой 64 KiB, минус 16 байт , в расширенной памяти на с IBM PC / AT или совместимый микрокомпьютер.

Первоначально логический вентиль был вентилем, подключенным к контроллеру клавиатуры Intel 8042 . Контроль над этим был относительно медленным процессом. С тех пор были добавлены другие методы, позволяющие более эффективно выполнять многозадачность программ, которые требуют этого цикла с программами, которые обращаются ко всей системной памяти. Сначала было множество методов, но в конце концов промышленность остановилась на методе PS / 2, использующем бит в порту 92h для управления линией A20.

Отключение A20 не приведет к обертыванию всех обращений к памяти выше 1 МиБ, а только тех, которые находятся в диапазонах 1 МиБ, 3 МиБ, 5 МиБ и т. Д. Программное обеспечение реального режима заботилось только о площади чуть выше 1 Мбайт, поэтому Gate A20 было достаточно.

Виртуальный режим 8086 , представленный с Intel 80386 , позволяет моделировать циклический переход A20 с использованием средств виртуальной памяти процессора: физическая память может быть отображена на несколько виртуальных адресов, что позволяет отображать память на первый мегабайт виртуальная память может быть снова отображена во втором мегабайте виртуальной памяти. Операционная система может перехватывать изменения в шлюзе A20 и вносить соответствующие изменения в адресное пространство виртуальной памяти, что также делает несущественным эффективность переключения шлюза-A20.

Первым пользователем HMA среди продуктов Microsoft была Windows 2.0 в 1987 году, которая представила драйвер устройства HIMEM.SYS . Начиная с версий 5.0 DR-DOS (1990) и MS-DOS (1991), части операционной системы также можно было загружать в HMA, освобождая до 46 КиБ обычной памяти . Другие компоненты, такие как драйверы устройств и TSR , могут быть загружены в область верхней памяти (UMA).

Обработчик A20 является программное обеспечение , контролирующее доступ к большой области памяти. Расширенные диспетчеры памяти обычно предоставляют эту функцию. В DOS менеджеры области верхней памяти, такие как HIMEM.SYS, имели дополнительную задачу по управлению A20 и предоставляли API для открытия / закрытия A20. Сама DOS могла бы использовать эту область для некоторых своих потребностей в хранилище, тем самым освобождая более обычную память для программ. Эта функция была включена директивой « DOS = HIGH» в файле конфигурации CONFIG.SYS .

Процессоры Intel, начиная с модели 386, допускали виртуальный режим 8086 , который упрощал аппаратное обеспечение, необходимое для реализации расширенной памяти для приложений DOS. Расширенные менеджеры памяти , такие как Quarterdeck «s QEMM продукта и компания Microsoft EMM386 поддерживают стандарт расширенной памяти без потребности в специальном плате памяти.

На 386 и последующих процессорах диспетчеры памяти, такие как QEMM, могут перемещать большую часть кода для драйвера или TSR в расширенную память и заменять ее небольшой опорой для пальцев, способной получить доступ к резидентному коду расширенной памяти. Они могут анализировать использование памяти для обнаружения драйверов, которым во время запуска требовалось больше оперативной памяти, чем впоследствии, а также восстанавливать и повторно использовать память, которая больше не нужна после запуска. Они могут даже переназначить области памяти, обычно используемые для ввода-вывода с отображением в память. Многие из этих уловок основывались на предположениях о функционировании драйверов и других компонентов. Фактически, менеджеры памяти могут «на лету» реконструировать и модифицировать код других поставщиков. Как и следовало ожидать, такие уловки не всегда срабатывали. Поэтому менеджеры памяти также включают очень сложные системы настраиваемых параметров,и условия для восстановления, если выбранный параметр приведет к невозможности загрузки ПК (частое явление).

Установка и настройка диспетчера памяти может потребовать нескольких часов экспериментов с параметрами, многократной перезагрузки компьютера и тестирования результатов. Но обычная память была настолько ценной, что владельцы ПК посчитали, что такое время было потрачено не зря, если в результате высвободилось 30 или 40 килобайт обычного пространства памяти.

В контексте компьютеров, совместимых с IBM PC, расширенная память - это память в адресном пространстве 80286 и последующих процессоров, превышающая ограничение в 1 мегабайт, налагаемое 20 адресными строками 8088 и 8086. Такая память напрямую не доступна для DOS приложения, работающие в так называемом «реальном режиме» процессоров 80286 и последующих. Эта память доступна только в защищенном или виртуальном режимах процессоров 80286 и выше.

MS-DOS – это ОС, работающая в реальном режиме процессора i86, что предполагает использование адресного пространства размером всего лишь 1 Мб. На самом деле, в компьютерах IBM гарантируется наличие лишь 640 Кб основной памяти, старшие же адреса памяти заняты под BIOS и видеопамять, хотя среди них попадаются разрозненные куски оперативной памяти, называемые UMB (верхний блок памяти).

Адрес в реальном режиме записывается в формате [сегмент : смещение], однако здесь сегмент – это не селектор, адресующий строку таблицы сегментов, а просто номер параграфа памяти (1 параграф = 16 байт). Поэтому можно считать, что в MS-DOS используются только физические адреса.

В принципе, программы, работающие в MS-DOS, могут получить доступ к памяти за пределами 1 Мб, но для этого требуется специальный драйвер расширенной памяти.

Поскольку делить имеющуюся память между несколькими процессами не приходится, распределение получается бесхитростное. Основные области памяти показаны на рис. 1.

Нижнюю часть памяти занимают модули ОС: обработчики прерываний, резидентная чисть интерпретатора команд, драйверы устройств. Некоторые системные программы могут быть ради экономии загружены в верхний блок памяти (выше 640 Кб). Все, что остается в середине, может быть предоставлено процессу пользователя.

Для пущей экономии памяти некоторые нерезидентные модули DOS могут занимать верхнюю часть области пользователя, но только до тех пор, пока не будут затерты пользовательской программой, которой потребуется вся имеющаяся память.

Часть системной памяти и вся область пользователя разбита на прилегающие друг к другу блоки, размер которых кратен параграфу. Перед началом каждого блока памяти размещается блок управления памятью (MCB, Memory Control Block), который занимает один параграф и содержит следующие данные:

· признак, определяющий, последний ли это блок памяти или за ним будут еще блоки (соответственно буква ‘Z’ или ‘M’, это, видимо, опять Марк Збиковский отметился);

· адрес PSP программы, владеющей этим блоком (0 означает свободный блок);

· размер блока в параграфах;

· имя программы-владельца (до 8 символов); это поле избыточно (зная PSP программы, можно найти имя ее файла), оно было добавлено, вероятно, чтобы хоть как-то занять пустующие байты параграфа MCB.

Когда система должна выделить блок памяти для собственных нужд или по запросу программы пользователя, она просматривает список блоков от начала, перемещаясь от одного MCB к следующему. Найдя свободный блок достаточного размера, система отмечает его как занятый соответствующим владельцем. Если выделяется не весь свободный блок, то после выделенного блока система записывает еще один MCB, описывающий свободный остаток блока.

При освобождении блока система записывает 0 в поле владельца MCB. Если с одной или с двух сторон от освобождаемого блока лежат свободные блоки, то два или три свободных блока сливаются в один.

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

MS-DOS предоставляет в распоряжение пользователя функции, позволяющие выполнять основные действия с блоками памяти.

· Выделение блока указанного размера. Если свободного блока достаточной величины не имеется, то система возвращает максимальный размер, который может быть выделен.

· Освобождение ранее выделенного блока.

· Изменение размера блока. Уменьшение блока возможно всегда, увеличение – только в том случае, если после данного блока расположен свободный блок достаточного размера.

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




Тема: Конфигурирование операционной системы. Файл CONFIG.SYS

Для того чтобы компьютерная система работала оптимально, необ­ходимо выполнить тщательную ее настройку — сконфигурировать под конкретную аппаратуру.

Под конфигурированиемпонимают настройку операционной системы для работы с конкретным типом процессора и периферийными устройствами:

ü дополнительными устройствами указания, например, мышью,

Обычно в понятие конфигурирования включают также и адаптацию операционной системы к индивидуальным пожеланиям и потребностям пользователя.

Если операционная система найдена, она загружается и начинает работать, т.е. управлять компьютером.

После загрузки обоих скрытых системных файлов разыскивается файл по имени CONFIG.SYS, т.е. файл конфигурации. Этот файл управляет настройкой операционной системы под индивидуальные требования или пожелания пользователя.

Файл CONFIG.SYS должен находиться в корневом каталоге той дискеты (носителя) или того винчестера, с которого компьютер запускается. Только там компьютер может искать и находить этот файл.

Если CONFIG.SYS отсутствует, то компьютер продолжает работу со стандартными парамет­рами (параметрами по умолчанию), заданными разработчиками опера­ционной системы. Эти параметры различаются в зависимости от того, работаете ли Вы с компьютером типа ХТ или с компьютером типа АТ.

Через файл CONFIG.SYS можно сообщить операционной системе свои пожелания в отношении конфигурации и загрузить дополнительные драйверы (программы управления периферийными устройствами).

Благодаря использованию команды SHELL в файле CONFIG.SYS может быть загружен и другой интерпретатор команд, например 4DOS, однако эта возможность используется весьма редко. Если до сих пор все прошло гладко, то МS-DOS ищет файл по имени АUTОЕХЕС.ВАТ (англ. АИТО-ЕХЕСUТЕ — выполнять автоматически). В нем содержится подлежащая выполнению последовательность команд МS-DOS. Речь идет о командах, которые должны выполняться при каждом запуске компьютера.

Тема: Файл автозапуска АUTОЕХЕС.ВАТ

Установки, сделанные в файле CONFIG.SYS, сохраняют свое дей­ствие до следующего запуска системы, т.е. их нельзя изменить без перезагрузки компьютера. Большинство настроек, которые выполнены с помощью файла АUTОЕХЕС.ВАТ, можно изменять в пределах одного сеанса работы. Это обусловлено тем, что файл CONFIG.SYS модифици­рует/настраивает операционную систему, а в файле АUTОЕХЕС.ВАТ только вызывается по очереди любое число программ или команд.

Так как некоторые из программ управле­ния периферийными устройствами, например стандартный драйвер клавиатуры, можно загрузить через файл CONFIG.SYS с помощью команды INSTALL, то файл АUTОЕХЕС.ВАТ нужен лишь для автоматической загрузки оболочки пользователя, редактора командной строки (DOSKEY) или необходимых дополнитель­ных вспомогательных программ (например, программ защиты от виру­сов), При работе с кириллицей здесь также часто загружается кириллизованный драйвер клавиатуры.

В системах без встроенных часов текущую дату и время суток необходимо каждый раз заново вводить после каждого запуска системы. Команды DАТЕ и ТIМЕ приводят к тому, что на экране дисплея автоматически появляются два соответствующих запроса. (Если в файле CONFIG.SYS была предпринята соответствующая настройка (СОUNTRY=049), то запрос о дате и времени суток появляется в немецком варианте, т.е. последовательно день/месс/год.

Кроме этого, в файле АUTОЕХЕС.ВАТ обычно содержится и коман­да вида РROMPT $Р$С. Благодаря этой команде более информативным становится приглашение к вводу (РRОМPТ), т.е. сигнал готовности компьютера. Теперь это приглашение вместо индикации одного лишь имени текущего дисковода информирует Вас дополнительно и об имени активной в данный момент директории.

В файле АUTОЕХЕС.ВАТ можно размещать достаточно большое число команд, каждая из которых должна выполняться после каждого запуска системы.

Пример файла АUTОЕХЕС.ВАТ

C:\DOS\SMARTDRV.EXE C D 912

PATH C:\DOS; D:\TOOLS; C:\DOS\BATCH

@ECHO OFF Последующие команды не будут отображаться на экране
C:\DOS\SMARTDRV.EXE C D 912 Устанавливает размер кэша 912 Кбайт
PATH C:\DOS; D:\TOOLS; C:\DOS\BATCH Задает пути доступа к каталогам
PROMT $P$G Включает приглашение к вводу
SET TEMP=C:\ Устанавливает переменную для размещения временных файлов
SET DIRCMD=/P Позволяет не вводить каждый раз ключ Р
DOSKEY Устанавливает резидентную программу
CLS

Тема: Создание системной дискеты

Так как основным видом блочных устройств являются магнитные и другие диски, то процесс форматирования и подготовки системной дискеты начнем с рассмотрения структуры диска.

Поверхность нового магнитного диска покрыта однородным слоем магнитного материала. У дискеты используется либо одна поверхность, либо (чаще) обе поверхности. Число поверхностей жесткого дискового тома определяется количеством дисков, из которых собран том.

Первой операцией, которая должна быть проделана с диском, является низкоуровневое форматирование. Оно заключается в разметке поверхности на дорожки магнитной записи, разделенные на секторы. Расстояние между дорожками определяется шагом перемещения головок чтения/записи, а разбиение на секторы выполняется программно, путем записи данных на дорожки в моменты, рассчитанные на основании известной скорости вращения диска. Для всех операций с диском, кроме низкоуровневого форматирования, сектор является минимальной единицей чтения или записи данных.

Совокупность дорожек одинакового радиуса на всех поверхностях диска называется цилиндром.

Форматирование дискеты используется для подготовки нового диска к использованию в среде DOS или для быстрого удаления с диска имеющихся файлов.

Форматирование – это разбиение дискеты на определенное количество концентрических окружностей – дорожек. Каждая дорожка разбивается на сектора.

Форматирование дискеты осуществляется с помощью команды FORMAT, содержащейся в файле format.exe.

Формат команды: FORMAT _дисковод:

Если в команде указать параметр /S, то будет подготовлена системная дискета, т.е. дискета, с которой можно загрузить MS DOS

Пример: format a: - форматирование диска a:

Если возникла необходимость в отмене форматирования дискеты, необходимо набрать команду Ctrl+C или Ctrl+Break.


Тема: Командные файлы

При загрузке операционной системы осуществляется ее настройка на работу с различными внешними устрой­ствами компьютера: дисководами, дисплеем, принтером, мышью и т. д. Процесс согласования работы ОС с устройствами компьютера называют конфигурировани­ем системы.

Файл СОNFIG.SYS представляет собой обычный тек­стовый файл, в котором непосредственно задаются:

ü режим прекращения работы прикладных программ;

ü число буферов в оперативной памяти, используемых при записи информации на диски в качестве промежу­точных хранителей информации;

ü количество одновременно открываемых файлов;

ü специальные программы драйверы для настройки на внешние устройства и т. д.

Фрагмент содержания файла СОNFIG.SYS:

Вreak on — режим прекращения работы прикладных программ при

нажатии Сtrl+Break;

buffers =13 — количество буферов;

files = 28 — количество файлов;

device = c:\DOS\mouse.sys — подключение драйве­ра мыши mouse.sys.

Файл АUTOEХЕС.ВАТ называют командным фай­лом. Он содержит в основном команды MS DOS, кото­рые пользователь хотел бы выполнить сразу при загруз­ке, чтобы создать для себя удобную среду для работы.

В файле АUTOEХЕС.ВАТ задаются:

ü вид приглашения в командной строке МS DOS;

ü команды МS DOS и др.

Фрагмент содержания файла АUTOEХЕС. ВАТ:

promt $p$g — задание приглашения DOS-“>”:

nc — запуск Norton Commander

Тема: Установка MS DOS. Разбиение жесткого диска.

Для того чтобы установить MS DOS на винчестер, необходимо воспользоваться программой SETUР.

Для это го необходимо иметь:

ü около 450 Кбайт ОЗУ,

ü как минимум 10 Мбайт свободного объема памяти винчестера (для полной инсталляции) или 4,5 Мбайт для минимальной.

Вначале как обычно запустите свой компьютер с винчестера, а затем с помощью команды

перейдите на дисковод А:, в котором должна находиться инсталляцион­ная дискета (DISK 1).

Запустите процесс установки (инсталляции) с помощью команды SETUР «Еnter»

Вначале автоматически вызывается программа МSD, формирующая файл протокола обследования Вашего компьютера BEFSETUP.MSD, размещаемый в корневом директории диска С:. После завершения инсталляции просмотрите содержимое этого файла — и Вы узнаете о своем компьютере немало интересного: начиная от родословной и кончая конфигурацией памяти. По истечении некоторого времени на экране появится изображение-приветствие.

Особое внимание следует обратить на самую нижнюю строку, в которой содер­жится информация о назначении клавиш.

Если вдруг программа SETUР не запускается, тогда либо переименуйте с помощью команды RENAME файлы СОNFIG.SYS и АUTOEХЕС.ВАТ, нахо­дящиеся на том диске, с которого Вы запустили свой компьютер, либо скопируйте оба файла с помощью команды СОРУ на какую-либо дискету, а затем удалите исходные файлы. После этого запус­тите свой компьютер заново.

Возможно, что свободной памяти на диске С: слишком мало. В этом случае программа SETUР попросит Вас почистить его, указав, сколько свободного места ей необходимо.

Для выполнения инсталляции надлежит нажать «Еnter», для отказа от инсталляции — «FЗ», для получения справочной информации — «F1».

Операционные системы MS-DOS, Windows 95, Windows 98 и старое железо компьютера — установка, настройка, использование.

Работа MS-DOS с памятью.

Работа MS-DOS с памятью - понятная схема.

Работа MS-DOS с памятью.

В статье очень кратко и несколько поверхностно освещена работа MS-DOS с памятью. Если вас не интересуют теоретические вопросы, можете переходить к четвёртой части цикла, где мы рассмотрим практическую настройку памяти DOS для игр и прикладных программ (файлы CONFIG.SYS, AUTOEXEC.BAT ).

Структура памяти MS-DOS 6.22 .

Со временем компьютеры становились более мощными и требовали всё большего объёма оперативной памяти. Первоначально заложенного в архитектуру IBM PC объёма памяти программ (640 килобайт) стало недостаточно для решения сложных задач.

Процессор Intel 80286 мог адресовать уже до 16 мегабайт оперативной памяти. Появилась необходимость расширения доступного программам адресного пространства. Архитектура компьютера IBM AT даёт возможность использовать для программ все 16 мегабайт памяти.

Это связано с тем, что MS-DOS использует так называемый реальный режим работы процессора 80286. В реальном режиме процессор 80286 становится несколько улучшенным аналогом старого процессора 8086, и может адресовать только первые 1024 килобайта памяти.

Не стоит путать расширенную память (extended memory или XMS) с дополнительной памятью (expanded memory или EMS). Дополнительная память располагается на отдельной плате, которая вставляется в слоты расширения материнской платы компьютера. Для работы дополнительной памяти в файле CONFIG.SYS должен быть установлен специальный драйвер, поставляющийся вместе с платой памяти. Дополнительная память (Expanded Memory) сейчас не применяется.

Следует отметить, что произвести одну оптимальную, совместимую для всех программ, настройку DOS не получится по разным причинам. В добрые-старые времена программы писались с учётом особенностей операционок конкретных версий. Причём совместимость не всегда обеспечивалась. Отдельные особенности не получили развития и перестали использоваться более поздними версиями программ (EMS), другие получили развитие и стали использоваться ядром более новых операционных систем Windows (XMA).

MCB (Memory Control Block) является блоком DOS, описывающим каждый распределенный участок памяти. Как правило, MCB всегда строится перед PSP исполняемой программы и для "окружения" программы. Рассмотрим формат MCB.

Размер блока - 16 байт.

Для определения первого блока цепочки можно воспользоваться недокументированной функцией MSDOS 52h, которая в es:bx возвращает list of list, в es:[bx-2] находится сегмент первого MCB блока.

Описатель начала цепочки UMB блоков находится по адресу 9FFF:0000 (недокументировано).

Обработка событий в MSDOS

В процессе работы могут возникать некоторые события. События бывают синхронные и асинхронные. Синхронные события - это те, которые происходят в процессе выполнения программы всегда в одном и том же месте. Асинхронные события - это те, которые происходят независимо от работы программы. К синхронным событиям относятся вызовы системы DOS, BIOS. К асинхронным событиям относятся вызовы обработчиков нажатий клавиши на клавиатуре, поступление символа по каналу связи и т.п. Асинхронные прерывания - это, обычно, аппаратные прерывания.

Internal Stack Overflow. System halted.

  1. полная замена обработчика;
  2. встраивание в цепочку обработчиков прерывания.

К полной замене приходится прибегать довольно редко. Обычно это используется для написания обработчика "пустых" векторов. Встраивание в цепочку обработчиков прерывания используют все программные драйверы, которым необходимо получить управление при возникновении тех или иных событий.

Встраивание в цепочку обработчиков прерывания происходит по следующей схеме:

Иногда необходимо получить управление как до старого обработчика, так и после него. Это производится следующим образом:

Команды Pushf и Call Far имитируют Int, команды Pushf, Popf, Retf 2 делают Iret, но возвращают вызвавшей программе флаги, которые вернул старый обработчик.

В компьютерах, совместимых с IBM PC , управление памятью DOS относится к программному обеспечению и методам, используемым для предоставления приложениям доступа к более чем 640 кибибайт (640 * 1024 байтов) (кБ) «обычной памяти». Предел 640 КиБ был специфическим для IBM PC и близких к нему совместимых устройств; другие машины под управлением MS-DOS имели другие ограничения, например, ПК Apricot мог иметь до 768 КиБ, а Sirius Victor 9000 - 896 КиБ. Управление памятью в семействе IBM было усложнено из-за необходимости поддерживать обратную совместимость с исходной конструкцией ПК и DOS реального режима , позволяя пользователям компьютеров использовать преимущества больших объемов недорогой памяти и процессоров нового поколения. Поскольку DOS уступила место Microsoft Windows и другим 32-разрядным операционным системам, не ограниченным исходным произвольным пределом в 640 КиБ для IBM PC, управление памятью персонального компьютера больше не требует, чтобы пользователь вручную манипулировал внутренними настройками и параметрами компьютера. система.

Ограничение в 640 КиБ сильно усложняет аппаратное и программное обеспечение, предназначенное для его обхода; Физическая память в машине может быть организована как комбинация базовой или обычной памяти (включая нижнюю память), верхней памяти, верхней памяти (не такой же, как верхняя память), расширенной памяти и расширенной памяти, и все они обрабатываются по-разному.

СОДЕРЖАНИЕ

Обычная память

Процессор Intel 8088 , использовавшийся в оригинальном IBM PC, имел 20 адресных строк и поэтому мог напрямую адресовать 1 МиБ (2 20 байтов) памяти. Различные области этого адресного пространства были выделены для разных видов памяти, используемых для разных целей. Начиная с самого нижнего конца адресного пространства, на ПК была установлена ​​оперативная память для чтения / записи (RAM), которая использовалась DOS и прикладными программами. Первая часть этой памяти была установлена ​​на материнской плате системы (на очень ранних машинах 64 КиБ, позже измененная на 256 КБ). Дополнительная память может быть добавлена ​​с помощью карт, вставленных в слоты расширения; каждая карта содержала перемычки или переключатели для управления тем, какая часть адресного пространства обращается к памяти и устройствам на этой карте.

На IBM PC все адресное пространство размером до 640 КБ было доступно для ОЗУ. Эта часть адресного пространства называется «обычной памятью», поскольку она доступна для всех версий DOS автоматически при запуске. Сегмент 0, первые 64 КБ обычной памяти, также называется областью низкой памяти . Обычно расширяющая память устанавливается непрерывно в адресном пространстве с памятью на материнской плате. Если бы между памятью материнской платы и расширяющей памятью был нераспределенный промежуток, память не была бы автоматически определена как пригодная для использования DOS.

Верхняя область памяти

Область верхней памяти (UMA) относится к адресному пространству от 640 до 1024 КиБ (0xA0000–0xFFFFF). На этом участке определены три региона по 128 КиБ. Область размером 128 КБ между 0xA0000 и 0xBFFFF была зарезервирована для экранной памяти видеоадаптера . Область размером 32 КиБ между 0xC0000 и 0xC7FFF была зарезервирована для памяти видеоадаптера BIOS . Область 160 КБ между 0xC8000 и 0xEFFFF была зарезервирована для дополнительных ПЗУ устройств , а специальная оперативная память обычно используется совместно с физическими устройствами (например, общая память для сетевого адаптера ). IBM PC зарезервировал верхние 64 КиБ адресного пространства от 0xF0000 до 0xFFFFF для BIOS и постоянной памяти Cassette BASIC (ROM).

Например, область памяти монохромного видеоадаптера занимала от 704 до 736 КБ (0xB0000–0xB7FFF). Если бы использовался только монохромный дисплейный адаптер, адресное пространство между 0xA0000 и 0xAFFFF можно было бы использовать для ОЗУ, которое было бы смежным с обычной памятью.

Системные ПЗУ BIOS должны находиться в верхнем конце адресного пространства, поскольку начальный адрес ЦП фиксирован конструкцией процессора. Начальный адрес загружается в программный счетчик ЦП после аппаратного сброса и должен иметь определенное значение, которое сохраняется после отключения питания системы. При сбросе или включении питания ЦП загружает адрес из системного ПЗУ, а затем переходит в определенное место ПЗУ, чтобы начать выполнение самотестирования при включении питания и, в конечном итоге, загрузить операционную систему.

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

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

По мере снижения цен на память прикладные программы, такие как электронные таблицы и компьютерное черчение, были изменены, чтобы использовать все больше и больше физической памяти в системе. Виртуальная память в 8088 и 8086 не поддерживалась аппаратным обеспечением процессора, а дисковые технологии того времени делали ее слишком медленной и громоздкой, чтобы ее можно было использовать на практике. Расширенная память - это система, которая позволяла прикладным программам получать доступ к большему объему оперативной памяти, чем напрямую видна адресному пространству процессора. Этот процесс был формой смены банка . Когда требовалась дополнительная оперативная память, программное обеспечение драйвера временно делало часть расширенной памяти доступной для процессора; когда данные в этой части памяти были обновлены, другая часть могла быть заменена в адресное пространство процессора. Для IBM PC и IBM PC / XT , имеющих всего 20 адресных строк, были изготовлены специальные карты расширенной памяти, содержащие, возможно, мегабайт или больше расширенной памяти, с логикой на плате, чтобы сделать эту память доступной для процессора в определенные части адресного пространства 8088.

Выделение и использование расширенной памяти не было прозрачным для прикладных программ. Приложение должно было отслеживать, в каком банке расширенной памяти содержится конкретный фрагмент данных, и когда требовался доступ к этим данным, приложение должно было запросить (через программу драйвера) плату расширенной памяти, чтобы отобразить эту часть памяти в адресное пространство процессора. Хотя приложения могли использовать расширенную память с относительной свободой, многие другие программные компоненты, такие как драйверы и TSR, по- прежнему обычно ограничивались областью 640 КБ «обычной памяти», которая вскоре стала критически ограниченным ресурсом.

80286 и область верхней памяти

Когда был представлен IBM PC / AT , архитектура сегментированной памяти процессоров семейства Intel имела побочный продукт, позволяющий адресовать чуть более 1 Мбайт памяти в «реальном» режиме. Поскольку 80286 имел более 20 адресных строк, определенные комбинации сегмента и смещения могли указывать на память выше ячейки 0x0100000 (2 20 ). 80286 может адресовать до 16 Мбайт системной памяти, таким образом устраняя "заворачивание" адресов памяти. Поскольку требуемая адресная строка теперь существует, комбинация F800: 8000 больше не будет указывать на физический адрес 0x0000000, а на правильный адрес 0x00100000.

В результате некоторые программы DOS перестали работать. Чтобы поддерживать совместимость с ПК и поведением XT, AT включал линейный вентиль A20 (Gate A20), который заставлял адреса памяти на AT переходить в низкий объем памяти, как это было бы на процессоре 8088. Первоначально этим шлюзом можно было управлять с помощью контроллера клавиатуры , чтобы позволить запущенным программам, которые были разработаны для этого, получить доступ к дополнительным 65 520 байтам (64 КБ памяти в реальном режиме) . Во время загрузки BIOS сначала включает A20 при подсчете и тестировании всех системной памяти и отключает ее перед передачей управления операционной системе. Включение строки A20 - один из первых шагов, которые операционная система x86 в защищенном режиме выполняет в процессе загрузки, часто до того, как управление будет передано ядру из начальной загрузки. (например, в случае Linux).

Область верхней памяти ( HMA ) является ОЗУ область , состоящую из первой 64 KiB, минус 16 байт , в расширенной памяти на с IBM PC / AT или совместимый микрокомпьютер.

Первоначально логический вентиль был вентилем, подключенным к контроллеру клавиатуры Intel 8042 . Контроль над этим был относительно медленным процессом. С тех пор были добавлены другие методы, чтобы обеспечить более эффективную многозадачность программ, которые требуют этого цикла с программами, которые обращаются ко всей системной памяти. Сначала было множество методов, но в конце концов промышленность остановилась на методе PS / 2 с использованием бита в порту 92h для управления линией A20.

Отключение A20 не приведет к переносу всех обращений к памяти выше 1 МиБ, а только тех, которые находятся в диапазонах 1 МиБ, 3 МиБ, 5 МиБ и т. Д. Программное обеспечение реального режима заботилось только о площади чуть выше 1 Мбайт, поэтому Gate A20 было достаточно.

Виртуальный режим 8086 , представленный с Intel 80386 , позволяет моделировать циклический переход A20 с использованием средств виртуальной памяти процессора: физическая память может быть отображена на несколько виртуальных адресов, что позволяет отображать память на первый мегабайт виртуальная память может быть снова отображена во втором мегабайте виртуальной памяти. Операционная система может перехватывать изменения в шлюзе A20 и вносить соответствующие изменения в адресное пространство виртуальной памяти, что также снижает эффективность переключения шлюза-A20.

Первым пользователем HMA среди продуктов Microsoft была Windows 2.0 в 1987 году, которая представила драйвер устройства HIMEM.SYS . Начиная с версий 5.0 DR-DOS (1990) и MS-DOS (1991), части операционной системы также можно было загружать в HMA, освобождая до 46 КиБ обычной памяти . Другие компоненты, такие как драйверы устройств и TSR , могут быть загружены в область верхней памяти (UMA).

Обработчик A20

Обработчик A20 является программное обеспечение , контролирующее доступ к большой области памяти. Расширенные диспетчеры памяти обычно предоставляют эту функцию. В DOS менеджеры области верхней памяти, такие как HIMEM.SYS, имели дополнительную задачу по управлению A20 и предоставляли API для открытия / закрытия A20. Сама DOS могла использовать эту область для некоторых своих потребностей в хранилище, тем самым освобождая более обычную память для программ. Эта функция была включена директивой « DOS = HIGH» в файле конфигурации CONFIG.SYS .

Гейт A20 на более поздних процессорах

80386 и последующие процессоры

Процессоры Intel, начиная с модели 386, позволяли использовать виртуальный режим 8086 , что упрощало аппаратное обеспечение, необходимое для реализации расширенной памяти для приложений DOS. Расширенные менеджеры памяти , такие как Quarterdeck «s QEMM продукта и компания Microsoft EMM386 поддерживают стандарт расширенной памяти без потребности в специальном плате памяти.

На 386 и последующих процессорах диспетчеры памяти, такие как QEMM, могут перемещать большую часть кода для драйвера или TSR в расширенную память и заменять ее небольшой опорой для пальцев, способной получить доступ к резидентному коду расширенной памяти. Они могут анализировать использование памяти для обнаружения драйверов, которым во время запуска требовалось больше оперативной памяти, чем впоследствии, а также восстанавливать и повторно использовать память, которая больше не нужна после запуска. Они могут даже переназначить области памяти, обычно используемые для ввода-вывода с отображением в память. Многие из этих уловок основывались на предположениях о функционировании драйверов и других компонентов. Фактически, менеджеры памяти могут «на лету» реконструировать и модифицировать код других поставщиков. Как и следовало ожидать, такие уловки не всегда срабатывали. Поэтому менеджеры памяти также включают в себя очень сложные системы настраиваемых параметров и средств восстановления, если выбранный параметр сделает ПК не загружаемым (частое явление).

Установка и настройка диспетчера памяти может потребовать нескольких часов экспериментов с параметрами, многократной перезагрузки компьютера и тестирования результатов. Но обычная память была настолько ценной, что владельцы ПК посчитали, что такое время было потрачено не зря, если в результате высвободилось 30 или 40 килобайт обычного пространства памяти.

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

В контексте компьютеров, совместимых с IBM PC, расширенная память - это память в адресном пространстве 80286 и последующих процессоров, превышающая ограничение в 1 мегабайт, налагаемое 20 адресными строками 8088 и 8086. Такая память не доступна напрямую для DOS приложения, работающие в так называемом «реальном режиме» процессоров 80286 и последующих. Эта память доступна только в защищенном или виртуальном режимах процессоров 80286 и выше.

Читайте также: