Семинар 01. - chrislvt/OS GitHub Wiki
Режимы работы компьютера
Компьютеры на базе процессора Intel могут работать в 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 функции:
- Инкремент счетчика реального времени
- Декремент счетчика времени до отключения моторчика дисковода
- Вызов пользовательского прерывания 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
- Регистры общего назначения:
Док-во того, что аппаратно поддерживается реальный режим.
2 - Индексные регистры и указательные
3 - Сегментные регистры
В защищенном режиме 6 сегментных регистра, в реальном режиме 4.
4 - Управляющие регистры (нет в реальном режиме)
CR0 - слово состояния процессора. Устанавливает следующие флаги: PE (protection enable) - определяет, в каком режиме работает комп. (0 - реал. режим, 1 - защищ. режим), PG (paging enable) - ?страничная адресация?. CR2 - регистр линейного адреса ошибки обращения к странице. CR3 - регистр начального адреса каталога таблиц страниц
5 - Регистры системы адресов
GDTR - начальный адрес таблицы дескрипторов
IDTR - начальный адрес таблицы дескриптора прерываний
LDTR - линейный адрес таблицы глобальных дескрипторов
Линейный адрес - физический адрес оперативной памяти
6 - Текстовые регистры 7 - Отладочные регистры