Операционные системы

Цель лабораторной работы:
1. Структура распределения памяти в среде DOS
Организация памяти
Память состоит из большого количества отдельных элементов, каждый из которых
предназначен для хранения минимальной единицы информации - 1 байта. Каждому элементу
соответствует уникальный числовой адрес. Первому элементу присвоен адрес 0, второму -
1 и т.д., включая последний элемент, чей адрес определяется общим количеством элементов
памяти минус единица. Обычно адрес определяется шестнадцатеричным числом (в тексте
шестнадцатеричные числа помечаются заглавной «Н», например, 10Н).
Сегменты
Процессор компьютера (CPU) делит память на блоки, называемые сегментами.
Каждый сегмент занимает 64 К и каждому сегменту соответствует уникальный числовой
адрес. Процессор имеет четыре регистра сегмента. Регистр - это внутренняя структура,
предназначенная для хранения информации. Регистры сегмента предназначены для
хранения адресов отдельных сегментов. Они называются CS (сегмент кода), DS (сегмент
данных), SS (сегмент стэка) и ES (запасной сегмент). Кроме указанных, процессор имеет
еще 9 регистров. В данный момент следует отметить регистры IP (указатель команды) и
SP (указатель стэка). Регистры CS и IP в паре составляют длинный адрес команды, которая
будет выполняться следующей. Регистры SS и SP в паре составляют длинный адрес стэка.
Доступ к памяти
Доступ к ячейкам памяти осуществляется посредством соединения содержимого
регистра сегмента с содержимым того или другого регистра. Таким образом определяется
адрес требуемого участка памяти. Например, адрес следующей команды определяется
содержимым регистров CS и IP (записывается «CS:IP»). После выполнения команды и ее
удаления из памяти содержимое IP изменяется так, чтобы в регистрах CS:IP находился адрес
команды, которая будет выполнена после данной.
Способ объединения регистров для определения адреса ячейки памяти не накладывает
ограничений на количество доступной памяти. Верхнее ограничение зависит от
физического строения памяти (т.е. от общего количества ячеек). Первые версии MS-DOS
разрабатывались для процессора Intel 8088 CPU. Каждый регистр этого процессора рассчитан
на хранение 16-битового числа. То есть CPU 8088 комбинирует содержимое сегментного
регистра (скажем, CS) с содержимым другого регистра (скажем, IP), получая 20-битовый
адрес памяти, что ограничивает доступную память до 2^20 байтов или 1 Мб.
Позже появились усовершенствованные версии MS-DOS и соответственно им
усовершенствованные процессоры CPU 80286 и 80386, позволяющие производить
доступ к ячейкам, расположенным за границей первого Мб памяти.
Доступ к памяти организуется соединением содержимого одного из регистров
сегмента с содержимым одного из оставшихся регистров. Значение сегментного регистра
называется адресом сегмента. Значение остальных регистров в этом случае называется
относительным адресом ячейки памяти (от начала сегмента) или ее коротким адресом. Таким
образом, адрес байта вычисляется посредством умножения адреса сегмента на 16, и к
полученному значению добавляется короткий адрес.
Сегментные регистры
Сегментные регистры используются при идентификации сегмента памяти. Сегмент -
это непрерывный блок памяти, длиной 64 К. Сегментные регистры применяются в
комбинации с регистром указателя или индексными регистрами и в этом случае
идентифицируют конкретную ячейку памяти.
Всего сегментных регистра четыре. регистр CS обычно используется при
идентификации блока памяти, в котором хранится код программы. регистр DS при
идентификации участка памяти, в котором находятся данные этой программы. С помощью
регистра SS организуется доступ к стэку. (Стэк - это временно распределенная область
памяти, обеспечивающая интерфейс «MS-DOS-пpикладная программа»). Регистр ES -
дополнительный (или запасной) сегментный регистр. На него возложены разнообразные
функции, часть из которых рассматривается ниже.
Регистры стека
Имеется два регистра стэка. Они применяются в комбинации с регистром SS и
определяют местонахождение стэка. регистр SP называется указателем начала стэка, и в
комбинации с регистром SS идентифицирует первый байт стэка. Регистр BP называется
указателем базы стэка и в комбинации с регистром SS идентифицирует последний байт стэка.
Индексные регистры
Индексных регистра тоже два. регистры SI и DI применяются в комбинации с одним
из сегментных регистров и определяют местонахождение конкретной ячейки памяти. регистр
SI обычно комбинируют с регистром DS, регистр DI - с регистром ES.
Регистры общего назначения
К регистрам общего назначения относятся регистры AX, BX, CX и DX (их четыре).
Это многофункциональные регистры.
Регистр указателя команды
Регистр IP обычно применяется в комбинации с регистром CS и определяет адрес
следующей команды.
Регистр флагов состояния
В регистре флагов обычно находятся девять флагов состояния процессора (каждый флаг
занимает 1 бит). Эти флаги определяют результат конкретных операций, выполняемых под
управлением MS-DOS.
Регистры памяти
регистр памяти включает 2 байта данных (или 16 битов). Реально регистры общего
назначения однобайтные. Так, регистр AX включает регистр AH (который составляет старший
байт регистра AX) и регистр AL (который составляет младший байт регистра AX).
Аналогично, регистры BH, BL, CH, CL, DH и DL - однобайтные.
Вся память делится на conventional (от 1 до 1 Mb) и extended. В данных момент expanded
память встречается редко и мы не будем ее упоминать, кроме как результат использования
эмулятора (EMM386.EXE, QEMM386, 386MAX). Первый 1 Mb состоит из conventional (640K)
и резервных 384K, которые содержат в себе буфера видеопамяти, код BIOSа для видео и
дополнительных устройств. Неиспользованные блоки могут использоваться для загрузки DOS-
пpогpамм. Для этого ваш менеджер памяти создает upper memory blocks (UMB). UMB (или
upper memory) позволяет расширить область памяти, в которую возможна загрузка
резидентных программ/драйверов (на всякий случай, не надо забывать, что мизерная часть
TSR-пpогpамм не работает при загрузке в адресное пространство выше 640 Kb), что
освобождает первые 640K для работы других DOS-пpогpамм.
Существует только один путь создания UMB -- через использование менеджеров
памяти. Мы рассмотрим стандартную и входящий в поставку EMM386.EXE. Итак,
минимальный набор для организации UMB:
config.sys
dos = high,umb
device = himem.sys
device = emm386.exe noems
Если нужна EMS-память, то придется заменить "noems" на "auto" или
"frame= ". Пример:
[...]
device = emm386.exe ram=b000-b7ff frame=c800
Загpузку пpогpамм в UMB нужно производить через использование команд
DeviceHigh= .
Вывод: Мы разобрали структуру распределения памяти в среде DOS.