Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Архитектура ЭВМ и систем. Лабораторная работа. Учебное пособие
.pdf
нительная память, которую могут использовать система для загрузки драйверов и резидентных программ, а также сами прикладные
программы.
Старшая память
Старшая память (HMA – high memory area) – это область расширенной памяти, расположенная выше границы 1 Мб. Ее размер
составляет 64 Кб минус 16 байт. В отличие от всей расширенной
памяти эта ее часть доступна в реальном режиме при условии, что
разрешено использование старших линий адресной шины.
Обращаться к старшей памяти программы могут благодаря механизму формирования адреса, принятому
в процессорах фирмы
Intel. Адрес состоит из двух частей: сегмента и смещения. Размер
каждой – 16 бит. Внутри процессора, для того чтобы получить линейный адрес, значение смещения складывается со значением сегмента, умноженным на шестнадцать. Можно заметить, что при этом
можно получить значения адреса больше, чем один мегабайт. Максимально возможное значение
адреса – 1114095 байт, что составляет
1048576 + 65519 байт, т.е. один мегабайт плюс 64 килобайта без ше-
стнадцати байт.
Эта возможность была в свое время использована фирмой Microsoft для увеличения доступной программам оперативной памяти.
Постоянная память
В архитектуре машин линий IBM PC XT/AT и IBM PS/2 (MCA)
предусмотрено выделение верхней зоны первого мегабайта адресного пространства для постоянного запоминающего устройства (ПЗУ).
Физически постоянная память представляет собой набор БИС
ПЗУ, которые, как правило, устанавливаются в контактные разъемы
на системной плате. Часть ПЗУ управляет работой аппаратуры
ПЭВМ; другая часть отведена под управляющие программы общего
назначения
, так называемые «системные»; содержимое третьей час-
ти определяется конкретным пользователем.
Функционально все пространство ПЗУ можно разделить на четыре части:
− область базовой системы ввода/вывода (BIOS);
− область интерпретатора языка Бейсик;
− область, определяемая пользователем;
101

− область, зарезервированная фирмой IBM для будущих примене-
ний или определяемая пользователем.
В некоторых системах предусмотрена возможность копирования медленной памяти BIOS в более быструю оперативную память.
Такую же возможность предоставляет драйвер EMM386.
Использование расширенной памяти
Для совместного использования операционной системой и прикладными программами расширенной памяти необходимо установить специальный драйвер – менеджер расширенной памяти. В MS-
DOS этот драйвер называется himem.sys. Он поставляется также с
MS Windows различных версий.
Использование верхней памяти
Вместе с MS-DOS и Windows различных версий поставляется
драйвер EMM386.EXE, который предоставляет доступ к верхней
памяти и позволяет эмулировать дополнительную память с использованием расширенной. Он загружается при помощи команды
device файла config.sys. Его использование возможно только на
машинах с процессором 80386 или выше.
Задания для выполнения
Задание № 1. Сконфигурировать выбранную для проведения
экспериментов систему на базе MS-DOS без использования дополнительных средств управления оперативной памятью.
Привести в качестве отчетности файлы конфигурации с комментариями к каждой строке, карту распределения памяти, полученную при помощи инструмента mem.exe, входящего в стандартную
поставку MS-DOS.
Задание № 2. Изучить способ поддержки расширенной памяти
при помощи драйвера himem.sys. Загрузить ядро операционной системы в область старшей памяти. Проанализировать полученные результаты.
Привести в качестве отчетности файлы конфигурации с комментариями к каждой строке, карту распределения памяти, полученную при помощи инструмента mem.exe, входящего в стандартную
поставку MS-DOS. Сделать выводы
.
102

Задание № 3. Написать программу, выполняющую поиск сво-
бодных блоков в области расширений ПЗУ BIOS.
Привести в качестве отчетности распечатку листинга программы и результатов вывода программы.
Задание № 4. Составить таблицу свободных участков в памяти
выше адреса A000:0000, пользуясь результатами, полученными при
выполнении предыдущего задания. Для этого необходимо проанализировать расположение модулей расширения BIOS,
возможность
использования участков видеопамяти в зависимости от типа видеоадаптера и т.д. Добавить поддержку блоков верхней памяти с использованием драйвера emm386.exe.
Привести в качестве отчетности составленную таблицу, файлы
конфигурации с комментариями к каждой строке, карту распределения памяти, полученную при помощи инструмента mem.exe, входящего в стандартную поставку MS-DOS. Сделать
выводы.
Задание № 5. Проанализировать распределение памяти под резидентные программы и загружаемые модули и расположение блоков верхней памяти, пользуясь результатами предыдущей лабораторной работы. Провести расчет наиболее эффективного способа
использования верхней памяти и принять решение по настройке
системы.
Привести в качестве отчетности файлы конфигурации с комментариями к каждой
строке, карту распределения памяти, полученную при помощи инструмента mem.exe, входящего в стандартную
поставку MS-DOS. Сделать выводы.
Задание № 6. Провести настройку системы с помощью стандартного средства memmaker.exe, проанализировать полученные результаты. Изучить сгенерированные файлы конфигурации.
Привести в качестве отчетности файлы конфигурации с комментариями к каждой строке, карту распределения памяти, получен-
при помощи инструмента mem.exe, входящего в стандартную
ную
поставку MS-DOS. Сделать выводы.
103

Контрольные вопросы
1. Какие типы оперативной памяти существуют в архитектуре
ПЭВМ IBM PC?
2. Что такое обычная оперативная память? Какой диапазон адре-
сов она может иметь?
3. Каков минимальный размер блока памяти, выделяемого MS-
DOS?
4. Какой тип памяти доступен программам напрямую в реальном
режиме работы процессора?
5. Каким образом MS-DOS распределяет оперативную память
между
программами?
6. Опишите общую структуру 1-го мегабайта оперативной памя-
ти операционной системы MS-DOS.
7. Каков максимальный размер обычной оперативной памяти?
8. Для чего предназначена базовая система BIOS?
9. Для чего предназначена процедура ROM-SCAN?
10. Каким образом происходит инициализация дополнительных
устройств, установленных в виде интерфейсных карт?
11. Опишите структуру модуля дополнительного ПЗУ.
12. Каким
образом проверяется целостность модуля дополни-
тельного ПЗУ?
13. Что такое расширенная память, каков диапазон ее адресов?
14. Каким образом программы MS-DOS получают доступ к рас-
ширенной памяти?
15. Что такое дополнительная память? Какие существуют вари-
анты ее реализации?
16. Каким образом программы MS-DOS осуществляют доступ к
дополнительной памяти?
17. Что такое верхняя память
, каков диапазон ее адресов?
18. Каким образом реализуется верхняя память?
19. Что такое старшая память? Каков диапазон ее адресов?
20. Каким образом реализуется старшая память?
104

ЛАБОРАТОРНАЯ РАБОТА № 10
ПРОЕКТИРОВАНИЕ ДРАЙВЕРОВ УСТРОЙСТВ
Цель: познакомить учащихся с неотъемлемой компонентой
любой операционной системы – драйвером устройства на примере
загружаемых драйверов MS-DOS.
Назначение: рассмотреть вопросы формата файла, содержащего драйвер устройства, создание драйвера, установку драйвера.
Подсистема управления устройствами ДОС связывает драйверы
устройств в цепочку. Это дает возможность добавлять новые драйверы для дополнительных устройств.
Формат драйвера
Драйвер устройства хранится в файле, являющемся образом памяти (.sys), или в файле типа .exe и содержит все необходимые программы управления устройством. В начале файла имеется заголовок,
который указывает, что это драйвер, определяет стратегию, точки
входа для программ обработки прерываний и различные параметры
устройства.
Примечание: в драйвере, хранящемся в виде образа памяти
, не
следует задавать ORG 100H, так как он не использует префикс программного сегмента (PSP), а просто загружается. Поэтому начальный адрес должен быть нулевым (ORG 0 или без команды ORG).
Типы устройств
Различают два типа устройств: посимвольные и поблочные.
Посимвольные устройства производят ввод/вывод символов
последовательно (аналогично CON, AUX и PRN). Эти устройства
имеют имена, подобные CON, AUX или CLOCK$, и для обмена с
ними можно открывать каналы, используя логические номера или
FCB. Каждый драйвер может обслуживать только одно посимвольное устройство, так как за ним закрепляется определенное имя
.
Поблочные устройства – это дисковые устройства с произвольным доступом. Обмен с ними производится блоками, размер
которых равен размеру сектора диска. Эти устройства не имеют
имен, и их нельзя открывать для непосредственного обмена. Вместо
этого они помечаются буквами латинского алфавита A, B, C и т.д.
105

Одно устройство может состоять из нескольких логических устройств. Таким образом, один драйвер с поблочным обменом может
обслуживать одно или более логических устройств.
Здесь мы будем рассматривать только драйверы первого типа
как простейшие.
Заголовок драйвера
В начале драйвера размещается заголовок, который содержит
следующую информацию.
Поле
Длина
Указатель на заголовок следующего драйвера Двойное слово
Атрибуты Слово
Указатель на программу стратегии Слово
Указатель на программу обработки прерываний Слово
Имя драйвера 8 байтов
Указатель на заголовок следующего драйвера
Это поле содержит указатель на заголовок следующего драйвера. Оно занимает два слова и заполняется DOS при загрузке драйвера. В первом слове содержится смещение, а во втором – сегмент.
Если в файле содержится только один драйвер, то это поле
должно содержать –1 перед загрузкой драйвера. Если в файле содержится сразу несколько драйверов
, то первое слово этого поля
должно содержать смещение заголовка следующего драйвера устройства. Поле указателя последнего драйвера должно быть установлено в –1.
Поле атрибутов
В этом поле длиной в слово содержатся атрибуты, описываю-
щие устройство.
Бит 15 = 1 посимвольное устройство
= 0 поблочное устройство
Бит 14 = 1 устройство поддерживает IOCTL
= 0 устройство не поддерживает IOCTL
106

Бит 13 = 1 поддерживается обработка сигнала готовности
= 0 не поддерживается обработка сигнала готовности
Бит 11 = 1 поддерживается открытие/закрытие устройства
= 0 не поддерживается открытие/закрытие устройства
Биты 10–7 Должны содержать нули, так как зарезервированы
ДОS
Бит 15 = 1 устройство поддерживает обобщенный IOCTL-
вызов
= 0 устройство не поддерживает обобщенный
IOCTL-вызов
Биты 5, 4 Должны содержать нули, так как зарезервированы
ДОS
Бит 3 = 1 устройство является системными часами
= 0 не является
Бит 2 = 1 устройство NUL
= 0 не устройство NUL
Бит 1 = 1 стандартное устройство вывода
= 0 иное
Бит 0 = 1 стандартное устройство ввода
= 0 другое
Указатели на программы стратегии и обработки прерываний
Эти два поля являются указателями на точки входа в программы стратегии и обработки прерываний. Они занимают по слову, поэтому точки входа должны быть в том же сегменте, что и заголовок
драйвера.
Поле имени
Это поле занимает 8 байтов и содержит имя для посимвольного
устройства. Оно выровнено по левой границе поля и дополняется в
случае необходимости пробелами до конца.
Создание драйвера
Создание загружаемого драйвера устройства состоит из следующих этапов.
107

1. Создать файл, содержащий образ памяти, или файл типа .exe в
начале которого расположен заголовок.
2. Программа (включая заголовок) должна начинаться со смещения
0, а не 100H.
3. Заполнить поле ссылки на следующий драйвер.
4. Заполнить поле атрибутов.
5. Заполнить поля, содержащие точки входа в программы стратегии
и обработки прерываний.
6. В поле
имени должно быть занесено имя устройства.
DOS всегда обрабатывает загружаемые драйверы посимволь-
ных устройств до драйверов, устанавливаемых по умолчанию. Поэтому для того чтобы подменить устройство CON, нужно просто
присвоить устройству имя CON и задать соответствующим образом
биты 0 и 1 в поле атрибутов. Поиск в списке загружаемых драйверов
заканчивается на первом подходящем устройстве, поэтому
загру-
жаемые драйверы имеют больший приоритет.
Загрузка и работа драйвера
DOS загружает драйвер нового устройства динамически во время начальной загрузки, прочитав и обработав команду DEVICE в
файле CONFIG.SYS. Например, если драйвер называется driver1, то
для его загрузки необходимо поместить в CONFIG.SYS команду de-
vice=driver1.
При обращении к драйверу DOS сначала передает управление
на точку входа программы стратегии драйвера, передавая в заголовке запроса информацию о том, что
необходимо сделать.
Программа стратегии не обрабатывает запрос, а ставит его в
очередь запросов или сохраняет указатель на заголовок запроса.
Вторая точка входа в драйвер – это программа обработки прерываний, которая вызывается DOS сразу после возврата из программы
стратегии. Этой программе не передается никаких параметров. Она
должна выполнить операцию по запросу из
очереди и вернуть необ-
ходимую информацию.
DOS передает указатель на заголовок запроса в ES:BX. Запрос
состоит из заголовка запроса фиксированной длины и данных, необходимых для запроса.
108

Примечание: за сохранение состояния процесса отвечает драйвер. Он должен, например, сохранять значения регистров при входе
и восстанавливать их при выходе.
Стек, предоставляемый DOS, достаточен для сохранения всех
регистров. Если требуется стек большего размера, драйвер может
сам выделить другой и использовать его.
Все обращения к драйверу используют команды типа FAR
(дальнего межсегментного
вызова), и, соответственно, для возврата
должны использоваться команды типа FAR.
Заголовок запроса
Заголовок запроса передает информацию, описывающую, что
DOS хочет от драйвера.
Поле Длина
Длина запроса в байтах (включая заголовок) Байт
Код логического устройства (только для поблоч-
Байт
ных устройств)
Код операции
Байт
Состояние Слово
Зарезервировано для DOS 8 байтов
Данные к операции Переменная
Поле кода операции
Поле кода операции может иметь следующие значения для по-
символьных устройств:
Код Операция
0 Инициализация (INIT)
3 Ввод управляющей последовательности (IOCTL) (только
если бит IOCTL установлен в 1)
4 Ввод
5 Опережающий ввод без ожидания
6 Состояние готовности при вводе
7 Сброс операции ввода
8 Вывод
109

9 Вывод с проверкой
10 Состояние готовности при вводе
11 Сброс операции вывода
12 Вывод управляющей последовательности (IOCTL)
(только если бит IOCTL установлен в 1)
13 Открыть устройство (только если бит поддержки закры-
тия/открытия установлен в 1)
14 Закрыть устройство (только если бит поддержки закры-
тия/открытия установлен в 1)
19 Обобщенный IOCTL-запрос
Поле состояния
После состояния содержит следующую информацию:
15 14–10 9 8 7–0
Ошибка Зарезерви-
ровано
Занято Закон-
чено
Код ошибки, если
установлен в 1
бит 15
Значение поля состояния устанавливается программой обработки прерывания при выходе. При входе оно содержит нулевое значение.
Бит 15 является битом ошибки. Если он равен 1, то в младших
8 битах (7–0) содержится код ошибки.
Биты 14–10 являются резервными.
Бит 9 является признаком занятости (неготовности). Он устанавливается операцией «Состояние».
Бит 8 является признаком завершения операции. Если
он равен 1,
то это значит, что операция закончена. При возврате драйвер устанавливает его в 1.
Биты 7–0 являются младшими 8 битами слова состояния. Если
бит 15 установлен в 1, то они содержат код ошибки. Коды ошибок и
их значения приведены в следующей таблице.
Код ошибки Значение
02 Устройство не готово
03 Недопустимая команда
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
