Информационная структура адресного пространства
Базовая память (convertational memory)
Занимает младшие 640 Кбайт адресного пространства (с адресами от 0000:0000 до 9000:FFFFh). Это оперативная память (ОЗУ, RAM – Random Access Memory – "память с произвольным доступом"), доступная центральному процессору как для чтения, так и для записи. В базовую память загружаются системные и пользовательские программы и обрабатываемые ими данные.
Ряд фиксированных адресов в начале базовой памяти зарезервированы для хранения служебной информации, используемой операционной системой (таблица векторов прерываний, область данных BIOS, данные и программные компоненты DOS, драйверы внешних устройств, резидентные программы), а вся остальная базовая память доступна программам MS DOS.
Более детальные сведения об использовании базовой памяти операционной системой MS DOS приведены в таблице 2.1.
Таблица 2.1 - Распределение базовой памяти
Начальный адрес | Длина | Назначение области памяти | |
0000:0000 | 1 Кб | Таблица векторов прерываний | |
0000:0400 | 256 б | Область данных ROM-BIOS ( таблица 3.3) | |
0000:0500 | ~ 128 Кб | Область DOS : | |
Надстройка над ROM BIOS: программы обработки прерываний, обслуживающие системный ввод/вывод - считываются из файла IO.sys при загрузке MS DOS. Обработчики прерываний DOS (INT 21h) - считываются из файла MSDOS.sys при загрузке MS DOS (в системах Windows файл MSDOS.sys не используется, обработчики прерываний DOS хранятся в файле IO.sys). Стеки MS DOS – используются программами обработки прерываний MS DOS. Число стеков и их размеры задаются параметрами команды STACK в конфигурационном файле CONFIG.sys. Переменные окружения операционной системы – задаются командами SET, PATH, PROMPT и др. Размер области системного окружения задается командой SHELL в файле CONFIG.sys. Буфера ввода – вывода дисковых накопителей. Число буферов задается командой BUFFERS в файле CONFIG.sys, на каждый буфер выделяется 532 байта. Дескрипторы открытых файлов. Каждый дескриптор содержит таблицу доступа к файлу, используемую файловой системой для определения аппаратного адреса (цилиндр, головка, сектор) дисковой страницы (кластера) по номеру байта, запрашиваемого прикладной программой. На каждый дескриптор отводится по 64 байта, число дескрипторов задается командой FILES в файле CONFIG.sys. Программы – драйверы дополнительных устройств, устанавливаемые командой DEVICE в файле CONFIG.sys. Резидентная часть командного процессора COMMAND.COM (около 4Kбайт). Резидентные программы, загружаемые командой INSTALL в файле CONFIG.sys. | |||
~512 Кбайт | Выполняемая прикладная программа | ||
Видеопамять (Video RAM)
Следующие 128 Кб (от А000:0000h до В000:FFFFh) занимает специализированная видеопамять, доступная как центральному процессору (чтение и запись), так и видеоадаптеру (только чтение), и используемая для временного хранения выводимой на экран информации. Видеоадаптер периодически сканирует эту область памяти и вырабатывает соответствующий её содержимому набор сигналов управления дисплеем, который, в свою очередь, формирует "экранный образ" фрагмента видеопамяти[8].
Постоянная память
Следующие 256 Кбайт (от C000:0000h до F000:FFFFh) зарезервированы для постоянной памяти (ПЗУ, ROM – Read Only Memory), используемой для хранения неизменяемых программ и данных. В ПЗУ хранится программа самотестирования компьютера POST (Power_On_Self_Testing), автоматически запускаемая при включении питания, программа начальной загрузки MS DOS, компоненты базовой системы ввода-вывода ROM BIOS, другие программы, таблицы и идентификаторы. Распределение адресов ПЗУ в большой степени зависит от фирмы-производителя и модели ПК.
Расширенная память
Ячейки памяти, расположенные за пределами одно-мегабайтового адресного пространства, образуют так называемую "Расширенную (Extended) память". В MS DOS управление этой памятью осуществляет специальный программный драйвер (например, Himem.sys или Quemm386.sys). В расширенной памяти выделяется зона обмена данными с внешним микропроцессором и зона теневой BIOS (Shadow RAM), в которую копируются программы из системного ПЗУ и плат расширения (так как доступ к ПЗУ осуществляется существенно медленнее по сравнению с ОЗУ). В остальной части расширенной памяти могут размещаться прикладные и системные программы.
Таблица векторов прерываний
Понятием "прерывание" обозначают механизм, обеспечивающий быструю реакцию компьютера на определенное внутреннее или внешнее событие, требующее прерывания выполнения исполняемой программы и перехода к выполнению другой специальной программы, называемой программой обработки прерывания. После завершения обработки прерывания происходит возврат к выполнению прерванной программы.
Процессор способен обработать до 256 различных прерываний. Все возможные события, требующие описанной выше реакции, пронумерованы от 0 до 100h (номер прерывания), и с каждым из них связана определенная программа обработки прерывания. Часть номеров прерываний зарезервированы системой, остальные предоставлены разработчику.
Для запуска программ - обработчиков прерываний используется специальная система указателей на их начальные адреса, называемая таблицей векторов прерываний. Таблица векторов прерываний формируется в ОЗУ и занимает первый килобайт адресного пространства (с 0000:0000 до 0000:3FFFh). Таблица состоит из 256 четырехбайтовых элементов – векторов прерываний. Каждый из элементов описывает один вектор (адрес) в формате <сегмент>:<смещение>, причем в младшем двухбайтовом слове вектора записывается смещение, а в старшем - номер сегмента.
Вектора в таблице расположены в порядке возрастания номеров прерываний: нулевому прерыванию соответствует вектор, записанный по адресу 0000:0000, первому - 0000:0004 и т.д. Таким образом, номер прерывания n, умноженный на 4, однозначно указывает на точку входа в таблицу векторов прерывания (0000:4*n – адрес расположения вектора), в которой, в свою очередь, располагается указатель (адрес) на программу обработки этого прерывания[9].
Таблица векторов прерываний частично инициализируется BIOS перед началом загрузки DOS, частично - при загрузке DOS. Пользовательские программы также могут модифицировать эту таблицу, переназначая некоторые из векторов прерываний (например, программы русификации клавиатуры переключают "на себя" 9-е прерывание).
По типу запроса различают аппаратные и программные прерывания. Аппаратные прерывания, в свою очередь, могут быть внешними или внутренними.
Внешнее аппаратное прерывание является следствием наступления некоторого события, асинхронного относительно тактовой частоты системы, например: прочитан очередной сектор диска, нажата (или отпущена) клавиша клавиатуры или кнопка мыши, принтер готов к вводу очередного символа, сработал датчик внешнего оборудования, управляемого компьютером и т.д.
Запросы центральному процессору на обработку внешних аппаратных прерываний генерируются контроллером прерываний, который принимает от внешнего источника сигналпрерывания, формирует на шине управления запрос на прерывание и на шине данных – номер прерывания (число в диапазоне от 0 до 256), соответствующий номеру линии контроллера, на которую поступил сигнал от внешнего источника прерывания.
Система приоритетов прерываний регулирует ситуации, когда от внешнего оборудования очередной сигнал прерывания поступает в процессе обработки предыдущего прерывания. С некоторыми упрощениями эта система работает следующим образом:
Из двух одновременно поступивших прерываний первым будет обрабатываться прерывание с высшим приоритетом, и только по завершению его обработки – второе прерывание.
Если очередное прерывание поступает в процессе обработки прерывания с высшим приоритетом, оно ставится в очередь и будет обработано только после завершения обработки всех поступивших прерываний, имеющих высший приоритет.
Если в процессе обработки прерывания поступает очередное прерывание с высшим приоритетом, то будет приостановлен процесс обработки первого прерывания (с сохранением в стеке всех необходимых параметров), будет запущен процесс обработки поступившего прерывания, и после его завершения продолжится процесс обработки приостановленного прерывания.
Приоритет прерывания связан с номером линии (уровня) прерывания контроллера, к которой подключен внешний источник прерывания (не путать с номером прерывания !). Все уровни прерываний последовательно пронумерованы и сокращенно обозначаются IRQ<m>, где m – номер уровня.
Внутреннее аппаратное прерывание является следствием каких-либо проблем, возникших при выполнении программы (например, произошло переполнение или деление на ноль при выполнении процессором арифметической операции). Запросы на обработку таких прерываний генерируются внутренними блоками процессора.
Программное прерывание является "искусственным", оно инициируется специальной командой процессора INT n, где n - номер прерывания. По сути дела, программное прерывание реализует специфический способ запуска программ с использованием механизма, созданного для обработки аппаратных прерываний.
Программные прерывания используются для организации доступа из прикладной программы к программным модулям общего пользования – например, к функциям DOS (INT21h), или к функциям BIOS для работы с клавиатурой (INT16h) или видеосистемой (INT10h). Для запуска такого модуля нет необходимости знать адрес его расположения в памяти ПК, достаточно знать номер прерывания, связанного с этим модулем, и номер соответствующей функции.
Процедура обработки прерывания. Если запрос прерывания принят процессором на обслуживание, выполняется следующая процедура:
текущий адрес исполняемой программы и содержимое флаговых регистров процессора сохраняются в стеке, что обеспечивает возможность возврата к прерванной программе;
в процессор вводится номер прерывания, указывающий на точку входа в таблицу векторов прерываний;
вектор прерывания из таблицы вводится в соответствующие адресные регистры процессора, и выполняется программа обработки прерывания;
по завершению обработки прерывания восстанавливается (из стека) старое состояние процессора, и прерванная программа продолжает выполняться с соответствующей команды.
Область данных BIOS
256-байтовая область ОЗУ (0000:0400h ... 0000:04FFh) выполняет функции "адресного справочника" и рабочего поля для процедур ввода-вывода ROM BIOS.
В таблице 2.2 приведена схема распределения этой области данных.
Таблица 2.2 - Схема распределения области данных ROM_BIOS
Начальный адрес | Длина, байт | Назначение |
1 | 2 | 3 |
0000:0400 | Базовый адрес порта первого адаптера последовательного канала RS-232 (COM1) | |
0000:0402 | То же для COM2 | |
0000:0404 | То же для COM3 | |
0000:0406 | То же для COM4 | |
0000:0408 | Базовый адрес порта для 1-го адаптера параллельного канала Centronix (LPT1) | |
0000:040A | То же для LPT2 | |
0000:040C | То же для LPT3 | |
0000:040E | То же для LPT4 | |
0000:0410 | Список установленного оборудования | |
0000:0413 | Общая память (в килобайтах) | |
0000:0417 | Флаги клавиатуры | |
0000:0419 | Текущее (накопленное) значение ввода кода символа (Alt + цифра) | |
0000:041A | Адрес "головы" буфера клавиатуры | |
0000:041C | Адрес "хвоста" буфера клавиатуры | |
0000:041E | 20h | Буфер клавиатуры |
0000:0449 | Номер текущего видеорежима | |
0000:044A | Число символов в строке |
Окончание таблицы 2.2