Лабораторный практикум по курсу Операционных систем

Лабораторный практикум дополняет лекционный курс Операционных систем, давая студентам навыки системного программирования в операционной среде DOS.

Требования к процедуре сдачи программ

Лабораторная работа №1. Адресация памяти в ОС семейства DOS

В рамках лабораторной работы “Адресация памяти в ОС семейства DOS” требуется создать DOS-программу для просмотра фрагментов содержимого оперативной памяти. Основная цель работы – научиться эффективно пользоваться четырехбайтными адресами реального режима процессоров i80x86.

Требования к программе
Варианты задания

Варианты ввода базового адреса:

  1. Базовый адрес задается в шестнадцатиричном виде двумя компонентами: сегментом и смещением.

  2. Базовый адрес задается в десятеричном виде двумя компонентами: сегментом и смещением.

  3. Базовый адрес задается в шестнадцатиричном виде одним компонентом – абсолютным номером ячейки.

  4. Базовый адрес задается в десятеричном виде одним компонентом – абсолютным номером ячейки.

Варианты вывода содержимого памяти:

  1. Содержимое выводится в шестнадцатиричном виде сериями по 8 двухбайтовых слов.

  2. Содержимое выводится в десятеричном виде сериями по 8 двухбайтовых слов.

  3. Содержимое выводится в шестнадцатиричном виде сериями по 16 однобайтовых слов.

  4. Содержимое выводится в десятеричном виде сериями по 16 однобайтовых слов.

  5. Содержимое выводится в символьном виде сериями по 2 восьмибайтовых слова.

  6. Содержимое выводится в символьном виде сериями по 16 однобайтовых слов.

  7. Содержимое выводится в восьмеричном виде сериями по 8 двухбайтовых слов.

  8. Содержимое выводится в восьмеричном виде сериями по 16 однобайтовых слов.

Методические указания

Механизм адресации

Для успешного выполнения работы необходимо четко представлять себе механизм адресации реального режима процессоров i80x86. Важная характеристика этого режима: использование двадцатиразрядной адресной шины и шестнадцатиразрядной шины данных. Ширина адресной шины определяет физический адрес ячейки памяти как дватцатизначное двоичное число, которое для краткости удобно записывать как пятизначное шестнадцатиричное. Например, допустимый физический адрес ячейки памяти: 0011 0101 1100 0001 0000. Двоичная запись адреса наглядно показывает какие сигналы будут направлены на проводники адресной шины. Именно с этой целью мы не опускаем незначимые нули слева. Оперировать таим адресом неудобно в силу большой длины его записи. Тот же адрес в шестнадцатиричной форме выглядит так: 35С10. Перевод чисел между двоичной и шестнадцатиричной системой в обоих направлениях упрощается возможностью выполнять его по частям: каждой серии из четырех двоичных цифр соответствует одна шестнадцатиричная цифра.

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

Для того что бы передавать адреса по шине данных их представляют как пару двухбайтовых слов. Первое называют сегментной частью адреса или просто сегментом (segment), второе называют смещением (offset). В процессоре происходит аппаратное преобразование двухкомпонентного адреса (сегмента и смещения) в физический номер ячейки. Для двадцатиразрядной шины используется формула N = Seg*16 + Off, где N – физический номер ячейки памяти, Seg – сегментная часть адреса, Off – смещение. Число 16 из этой формулы называют также размером параграфа. Подобная схема преобразования адресов использовалась и в более поздних процессорах, при этом с увеличением разрядности адресной шины увеличивался и размер параграфа.

Обычно двухкомпонентный адрес записывается шестнадцатеричными числами через двоеточие, например адрес 4A12:0F00, соответствует физическому номеру 4B020. В силу избыточности используемого кодирования номера ячейки, одна физическая ячейка может быть адресована множеством двухкомпонентных адресов. Так ячейка 4B020 соответствует также, например, адресам 4B02:0000, 4B00:0020, 4000:B020, 4100:A020.

Множество адресов с общей сегментной частью называют сегментом памяти. Например говорят “сегмент 4B02”, подразумевая при этом ячейки с адресами в диапазоне от 4B02:0000 до 4B02:FFFF. Номера ячеек этого сегмента изменяются от 4B020 до 5B01F. Размер любого сегмента – 64 килобайта. Расстояние между начальными ячейками двух соседних сегментов равно размеру параграфа. Параграфом же называют промежутки между начальными ячейками соседних сегментов. Сегменты не являются физическими структурами, они обусловлены только двухкомпонентной схемой представления адресов. При разрядности адресной шины меньше 32, в частности при двадцатиразрядной адресной шине различные сегменты могут пересекаться.

Двухкомпонентную систему адресации используют в частности для динамического связывания объектов программы. Если группа объектов расположена внутри одного сегмента (занимает не более 64 килобайт и выровнена по параграфам), то используются так называемые ближние адреса, состоящие из одного лишь смещения внутри данного сегмента. При этом сегментная часть адреса должна находиться в одном из специальных регистров процессора. В противовес ближним полные двухкомпонентные адреса называют также дальними.

В среде Borland Pascal для обращения к памяти непосредственно по дальним адресам используют либо предопределенный массив mem, либо переменные с абсолютной адресацией описанные с использованием директивы absolute. В Borland C++ можно воспользоваться директивой препроцессора MK_FP для привязки объявляемой переменной к некоторому адресу.

Работа с видеопамятью

Из мегабайта адресного пространства DOS в оперативную память отображаются только первые 640 килобайт. Адресное пространство выше этой границы отображается в память различных устройств, таких как видеоадаптеры, ПЗУ и т.д. Кроме того некоторые диапазоны адресов верхней части адресного пространства используются драйверами расширенной (extended) и дополнительной (expanded) памяти.

Первые 4000 байта сегмента B800 отображаются в память видеоадаптера CGA. Интерфейс этого устаревшего адаптера до сих пор поддерживается видеоподсистемами как текстовый режим работы монитора. Содержимое экрана располагается в памяти построчно, при том что экран имеет 25 строк по 80 символов. На каждый символ приходится по 2 байта: сначала (с четным смещением) идет код символа по таблице ASCII, затем (с нечетным смещением) располагается так называемый атрибут символа – байт содержащий информацию о свете символа и цвете фона.

Лабораторная работа №2. Программные прерывания и структуры данных DOS.

Во второй работе “Программные прерывания и структуры данных DOS” требуется на основе программы, реализованной в первой работе, создать программу, которая демонстрирует содержимое некоторых служебных структур данных DOS. Основные цели работы – научиться находить структуры данных DOS, а также пользоваться программными прерываниями для вызова сервисов DOS.

Требования к программе
Перечень рассматриваемых структур данных DOS
      1. Векторная таблица связи.

      2. Векторная таблица прерываний и обработчики прерываний.

      3. Блоки управления памятью (MCB) и блоки переменных среды.

      4. Префиксы программных сегментов (PSP) и области передачи данных (DTA).

      5. Программные модули.

      6. Список управляющих блоков устройств.

      7. Таблица открытых файлов.

      8. Список загружаемых драйверов устройств.

      9. Дисковые буферы.

Варианты заданий

В каждом варианте нужно рассмотреть две из перечисленных выше структур данных. Ниже следует распределение структур для номеров вариантов.

1 - 1 и 2

2 - 1 и 3

3 - 1 и 4

4 - 1 и 5

5 - 1 и 6

6 - 1 и 7

7 - 1 и 8

8 - 1 и 9

9 - 2 и 3

10 - 2 и 4

11 - 2 и 5

12 - 2 и 6

13 - 2 и 7

14 - 2 и 8

15 - 2 и 9

16 - 3 и 4

17 - 3 и 5

18 - 3 и 6

19 - 3 и 7

20 - 3 и 8

21 - 3 и 9

22 - 4 и 5

23 - 4 и 6

24 - 4 и 7

25 - 4 и 8

26 - 4 и 9

27 - 5 и 6

28 - 5 и 7

29 - 5 и 8

30 - 5 и 9

31 - 6 и 7

32 - 6 и 8

33 - 6 и 9

34 - 7 и 8

35 - 7 и 9

36 - 8 и 9





Сайт создан в системе uCoz