02-18-96 10:30am
vved_8.lek
Роберт Журден "Справочник
программиста на компьютере фирмы
IBM".
А.Г.Шевчик, Т.В.Демьянков
"Справочник программиста и
пользователя" серия
"Карманная энциклопедия"
М."Кварта" 1993.
П.Нортон, Р.Уилтон "IBM PC и PS/2
руководство по
программированию" перевод
В.Н.Григорьева М "Радио и
связь" 1994
Общие вопросы создания системного программного обеспечения.
ВВЕДЕНИЕ
ПРИМЕЧАНИЕ: Будут рассматриваться системы, построенные на микропроцессорах i8086 и более поздних разработках фирмы INTEL.
Процессоры современных компьютеров могут работать в одном из двух основных режимах:
Реальный режим. "Традиционный" режим работы микропроцессора, предоставляющий программисту полную свободу выполнения любых операций в системе. Если процессор находится в этом состоянии, то принципы его работы мало отличаются от принципов работы процессора i8086 и более ранних разработок;
Защищенный режим. Появился в микропоцессорах начиная с i80286 и отличается от реального способом формирования физического адреса, что накладывает определенные ограничения на возможности конкретного программного обеспечения с точки зрения доступности ресурсов компьютера.
Эти ограничения малозаметны программам, работающим корректно (обращающимся к ресурсам через стандартные точки входа DOS или BIOS) и активно мешают "жить" программистам, разрабатывающим системное программное обеспечение.
В "недрах" защищенного режима существуют два дополнительных подрежима
Режим виртуального процессора i8086 (режим V86), который позволяет, программе, подготовленной для i86 "чувствовать себя как дома" при выполнении ее на более мощном микропроцессоре. Идентичность работы достигается специальными усилиями системного программиста;
Режим виртуальной памяти. Использует механизм СВОПИРОВАНИЯ (выгрузки "ненужных" и загрузки "нужных") страниц, что позволяет выполнять программы, размер которых превышает размер доступной оперативной памяти. Наличие этого режима повышает эффективность мультизадачных систем.
ПРИМЕЧАНИЕ: Излогаемый в рамках курса материал, в основном, касается реального режима работы процессора. Попытка "попробовать" в защищенном режиме, без дополнительных усилий (написав пользовательскую программу), может привести к непредсказуемым результатам!
КОНФИГУРАЦИЯ И ДИАГНОСТИКА СИСТЕМЫ.
Конфигурация и диагностика вычислительной системы (проверка наличия оборудования и его работоспособности) выполняются в одном из двух вариантов:
ХОЛОДНЫЙ СТАРТ - Процедура инициализации ВС после включения питания или нажатия кнопки "Reset".
ТЕПЛЫЙ СТАРТ - Процедура повторной инициализации системы при получении ею специальной команды.
В основном выполняемые действия при различных способах инициализации ВС совпадают, но при "теплом" старте существует возможность неполной переинициализации в следствии наличия программных закладок в ОП компьютера.
Операции, выполняемые при старте системы:
При подаче питания запускается генератор импульсов и выдается сигнал "нормальное питание" на шину;
Происходит инициализация процессора и его самотестирование (при необходимости);
Запрещаются немаскируемые прерывания;
Выбирается первая команда по адресу FFFF:0000h (реально обращение может происходить по другому адресу - процессор i486 принудительно устанавливает старшие разряды адреса в "1" до первого "длинного" перехода);
Устанавливаются начальные значения регистров микропроцессора, может проверяться контрольная сумма ROM BIOS;
Инициализируется контроллер ПДП и таймер, начинается процес регенерации памяти;
Тестируются первые 32 Кбайта ОП (нужны для организации стека и буферов);
Инициализируется и тестируется контроллер прерываний, устанавливаются основные вектора прерываний;
Инициализируются и тестируются адаптеры видеомонитора и клавиатуры;
Тест "оставшейся" ОП;
Поиск дополнительного оборудования и его инициализация;
Тест встроенного Бейсика;
Тест НГМД и портов в/в;
Разрешаются немаскируемые прерывания;
Выполняется команда INT 19h - управление передается начальному загрузчику.
Последовательность начальной загрузки:
Выполняются попытки прочитать загрузочный сектор (цилиндр 0, поверхность 0, сектор 1) при обращении к устройствам в специальнооговоренном порядке;
Если чтение удается, то прочитанная информация помещается в ОП по адресу 7C00:0000h и осуществляется передача управления по данному адресу;
Если при обращении ко всем оговоренным устройствам чтение не удалось, то управление передается встроенному Бейсику или выдается запрос о наличии системного устройства.
Инициализация встроенных адаптеров с ПЗУ
Устанавливаемые адаптеры могут иметь ПЗУ с программой их обслуживания. Микросхемы с дополнительными попрограмами должны иметь схемы дешифрации адреса, настроенные на один из блоков в диапазоне C0000h - E0000h.
С целью их обнаружения и выполнени инициализации дополнительного оборудования BIOS просматривает область отведенную под устанавливаемые ROM блоками по 2Кбайта.
Устанавливаемая ROM должна иметь заголовок, следующего формата:
Если модуль обнаружен, то проверяется его контрольная сумма (производится суммирование его байт по модулю 256) и если результат 0 - ему передается управление как подпрограмме (длинный вызов). После выполнения необходимых операций управление должно быть возвращено BIOS.
Предварительно информация может переписываться в ОЗУ.
Диагностические сообщения.
При
выполнении тестирования возможно
обнаружение ошибок.
При этом система определяет
характер повреждения и возможные
их последствия.
Если обнаружена фатальная ошибка, то дальнейшее тестирование прекращается. При наличии несущественных ситуаций формируется предупрежение (можно указать компьютеру как поступать в таких случаях). Сообщение об ошибках выдается в текстовом, числовом виде или в виде звуковых сигналов. Последние используются при обнаружении неустранимых ошибок.
Некоторые звуковые коды:
Один короткий - нормальная ситуация.
Отсутствие сигнала - процессор или отсутствие питания.
Постоянный сигнал - отсутсвие некоторых питающих напряжений.
Постоянные короткие сигналы - ошибка системных шин (замыкание линий).
1 длинный, 3 коротких - первые 64К памяти.
1 длинный, 8 коротких - видеоадаптер.
РЕВИЗИЯ СИСТЕМНЫХ РЕСУРСОВ.
При создании системных программ ограниченного размера и максимального быстродействия необходимо точно знать характеристики используемых устройств. Подобная задача стоит и при разработке BIOS-а для открытых систем.
Определить количество ВУ их параметры можно тремя способами:
Спросить у пользователя в момент запуска программы;
Прочитать необходимую информацию из системных регистров (информация указывается установкой переключателей или хранится в энергонезависимой памяти);
Обратиться непосредственно к устройствам.
Первые два способа наиболее просты, но и наименее достоверны - все сводится к знаниям пользователя, который может ошибиться в ответах или в установке регистров.
С точки зрения системного программирования наиболее интересен третий способ, а первые два могут служить отправной точкой в настройке программы дляконкретной машины.
ROM - BIOS
Имеющиеся
различия в ПЗУ машин могут влиять
на рабочие характеристики
программ. Это связано с различным
набором встроенных фукций BIOS и
различным балансом между
аппаратными и программными
ресурсами компьютеров.
Маркер даты выпуска BIOS и номера
модели обычно храниться в конце
области постоянной памяти машины. В
компьютерах фирмы IBM дата записана
в области с F000:FFF5h до F000:FFFCh, а код
машины по адресу F000:FFFEh.
Кроме этого для ROM-BIOS после 6/10/85 возможно получение таблици с дополнительной информацией, если обратиться к службе C0h прерывания 15h.
Примечания:
1 Дата представлена в американском формате: месяц/число/год
2 Модели машин:FFh PC
FEh, FBh PC/XT
FCh PC/AT, PS/2-50, PS/2-60, PC/XT-286
FAh PS/2-25, PS/2-30
F8h PS/2-80
FDh PCjr
F9h PC Convertible
3 Формат таблици конфигурации:
0 размер таблици
2 байт модели
3 байт подмодели
4 байт уровня ревизии ROM BIOS
5 байт специальной информации
Определение версии MS DOS
Эта операция необходима если Вы используете функции, отсутствующие в более ранних версиях. Номер версии DOS возвращает функция 30h прерывания 21h. Старшая часть номера содержится в AL младшая в AH. Если в AL будет 0, то значит номер версии меньше 2.00
Не следует забывать о наличии некоторых особенностей в указании информации о конфигурации системы. При написании системных программ необходимо единообразно осуществлять запрос о наличии ресурсов и работу с ними.
Например: Проверка количества COM-портов выполняется BIOS с учетом их работоспособности. Поэтому логические и физические номера портов могут не совпадать. Если запрос и наличии порта выполнялся через BIOS, то и обращаться к нему необходимо через соответствующие службы. Если предполагается работа через регистры, то наличие порта необходимо проверять на физическом уровне.