Семинар 01. - chrislvt/OS GitHub Wiki

Режимы работы компьютера

Компьютеры на базе процессора Intel могут работать в 3-х режимах:

  1. Реальный режим
  2. Защищенный режим
  3. Длинный режим

1. Реальный режим

Реальный режим - 16разрядный режим. В нём 16-и разрядные регистры, шина адреса - 20-и разрядная.

В реальном режиме доступно 2^20 байт памяти или 1024 КБ или 1МБ.

2. Защищенный режим

Защищенный режим - 32-х разрядный режим. В нём 32-х разрядные регистры и 32-х разрядная шина адреса (в основном).

Компьютер в защищенным режиме может работать или в собственно защищенном режиме или в режиме виртуального 86-ого процессора.

V86 - специальный защищенный режим, в котором запускаются виртуальные машины реального режима. В каждой такой машине может выполняться 1 программа реального режима. В защищенном режиме поддерживается виртуальная память.

3. Длинный режим

Длинный режим - long. В нём 64-х разрядные регистры, но адреса меньше 64-х разрядов (это связано с аппаратными ограничениями).

У режима long есть специальный режим - режим совместимости. В этом режиме можно запускать 32-х разрядные приложения. Но режим long не поддерживает v86.

Обработчик восьмого прерывания в режиме эмуляции DOSа

В первой лабораторной работе мы дизассемблируем код операционной системы режима v86 (эмуляции DOSa). В прошлом семестре мы писали обработчик прерывания от системного таймера BIOS - 1Ah. В этом семестре мы дизассемблируем 8-е прерывание - прерывание DOSа.

DOS - дисковая операционная система, написанная для 16-и разрядных компьютеров. Сначала у них была 16-и разрядная шина адреса и доступно было 640 килобайт памяти, но память нарастили за счет увеличения шины адреса. При 16-и разрядных регистрах, шина адреса стала 20-и разрядной, поэтому в реальном режиме адрес формировался за 2 такта (сегмент:смещение). Для поддержки этой адресации в состав процессора были включены 4 сегментных регистра.

Обработчик 8-ого прерывания выполняется в DOS'е 18,2 с копейками раз в секунду. Само слово таймер для компьютера - условное. В наших компьютерах есть тактовые генераторы. Огромную частоту генерирует специальная микросхема, которая называется 'кварцевый генератор'. Из этой микросхемы схемами, делителями и линиями задержки выделяются отдельные импульсы, в частности, импульс, который выполняется 18,2 раза в секунду. Этот импульс называется тиком.

То есть, обработчик прерывания вызывается по тику. Частота такого импульса будет 18,2 раза в секунду. Обработчик начинает выполняться с сохранения регистров. Это прерывание наивысшего приоритета в DOS'е , он прерывает всю выполняемую работу.

Функции 8-ого прерывания в DOS

У обработчика восьмого прерывания всего 3 функции:

  1. Инкремент счетчика реального времени
  2. Декремент счетчика времени до отключения моторчика дисковода
  3. Вызов пользовательского прерывания 1Ch

1. Инкремент счетчика реального времени.

У счетчика реального времени есть старшая и младшая часть. Этот счетчик считает то время, на которое настроен компьютер

Нормальные пользователи настирывают на то время, в котором они живут.

Этот счетчик находится в оперативной памяти по известному адресу - это область данных BIOS. Происходит инкремент счетчика по известному адресу и мы утверждаем, что в этом счетчике находится реальное время.

И как только мы выключаем компьютер, из памяти все исчезает. В составе наших компьютеров есть энергонезависимая микросхема, которая питается от аккумуляторной батареи, которую продвинутые USERы называют 'таблетка'. И эта CMOS микросхема содержит счетчик реального времени. В ней разрядность больше, поэтому там храниться дни, месяцы, годы и так далее. Когда компьютер включается, значение из микросхемы копируется в счетчик по указанному адресу. В программе SOURCE.EXE в комментариях мы можем посмотреть это число (количество тиков), а тики уже можем перевести в секунды, минуты, часы...

2. Декремент счетчика времени до отключения моторчика дисковода.

Первые компьютеры не были оснащены даже винчестером. У них был только дисковод. Дисковод - устройство, которое разгоняет дискетку до определенной скорости, после чего можно считывать данные. В составе этого дисковода имеется ремённая передача. И вся информация писалась на дискеты. А у нас в программах операции чтения/записи следуют одна за другой. Если мы на каждой операции будем останавливать дисковод, нам придется опять ждать, чтобы он разогнал дискету.

У инженеров это называется непроизводительными расходами.

Было принято решение выполнять отключение моторчика дисковода как отложенное действие. То есть, если к дисководу в течении 2-х секунд не было обращений, то дисковод отключался. Такую функцию можно возложить только на таймер. Каждая операция чтения/записи в счетчик по известному адресу заносит значение 2 секунды, и каждый тик это значение декрементируется, и когда в счетчике достигается нулевое значение в порт дисковода посылается команда на отключение моторчика дисковода

В порт посылается команда, а не сигнал!

Эта команда поступает в регистр контроллера и контроллер отключает моторчик дисковода.

3. Вызов пользовательского прерывания 1Ch

Почему вызывается косвенно 1Ch - все вопросы к Microsoft.

Пользовательское прерывание 1Сh - заглушка (чисто для iret). Написано фирмой Microsoft для того, чтобы пользователи не вешались на 8-е прерывание, а вешались на 1Ch (так как можно нарушить важные функции).

Прочие интересные моменты

О контроллерах

Наши компьютеры имеют шинную архитектуру. В отличии от канальной архитектуры, в шинной внешними устройствами управляют специальные устройства, которые принято называть контроллерами. Контроллер - программно управляемое устройство. Процессор посылает команду контроллеру.

В порт дисковода посылается команда, и эта команда как раз контроллеру (см. декремент счетчика реального времени до отключения моторчика дисковода выше).

Это действие асинхронное, то есть не зависит от того, какое действие выполняет процессор.

О контроллерах прерываний

Еще интересном моментом является сброс контроллера прерываний (команда в порт 20h), называется End Of Interrupt. Контроллер прерываний - отдельное устройство в системе и у него есть порт.

В наших компьютерах два адресных пространства:

  • Пространство оперативной памяти

  • Адресное пространство портов ввода/вывода.

И в наших компьютерах смешанная схема работает с внешними устройствами. Различаются два способа работы с внешними устройствами:

  • Memory mapping - отображение на адресное пространство оперативной памяти (команда mov)

  • I/O mapping - отображение на адресное пространство портов ввода/вывода (команды in, out)

О команде lock

Кроме того, в коде субратины мы можем видеть префиксную команду lock. Команда lock делает следующую команду неделимой. Это значит, что выполнение такой команды нельзя прервать. Технически это делается блокировкой локальной шины памяти.

В компьютерах процессор и память связаны локальной быстродействующей шиной. Это сделано для того, чтобы увеличить скорость обмена процессора с памятью.

В архитектуре Фон Неймана процессор собственной памяти не имеет. (Кеши не находятся в процессоре, они находятся в том же кристалле, что и процессор). И внешние устройства подключаются к шинам.

Вторая лабораторная работа. Защищенный режим (32р)

Регистры(32р)

Основных 34

  1. Регистры общего назначения:

Док-во того, что аппаратно поддерживается реальный режим.

2 - Индексные регистры и указательные

3 - Сегментные регистры

В защищенном режиме 6 сегментных регистра, в реальном режиме 4.

4 - Управляющие регистры (нет в реальном режиме)

CR0 - слово состояния процессора. Устанавливает следующие флаги: PE (protection enable) - определяет, в каком режиме работает комп. (0 - реал. режим, 1 - защищ. режим), PG (paging enable) - ?страничная адресация?. CR2 - регистр линейного адреса ошибки обращения к странице. CR3 - регистр начального адреса каталога таблиц страниц

5 - Регистры системы адресов GDTR - начальный адрес таблицы дескрипторов IDTR - начальный адрес таблицы дескриптора прерываний LDTR - линейный адрес таблицы глобальных дескрипторов

Линейный адрес - физический адрес оперативной памяти

6 - Текстовые регистры 7 - Отладочные регистры