2.2. Работа в защищённом режиме процессора
Лабораторная работа 2.2. Работа без ОС.
Цель. Изучение процесса начальной загрузки. Знакомство с защищённым режимом процессора.
Общие сведения.
После включения питания компьютера управление получает специальная программа, являющаяся частью Базовой систему ввода-вывода (BIOS), которая находится в ПЗУ (память, не требующая питания для хранения информации и доступная только для чтения). BIOS производит тестирование оборудования, после чего считывает из CMOS (устройство энергонезависимой памяти, позволяющее записывать и считывать информацию) последовательность устройств для загрузки, которая является частью настроек BIOS. На данном этапе пользователь может прервать процесс загрузки и войти в режим редактирования настроек.
Далее BIOS последовательно опрашивает данные устройства, проверяя наличие специального признака (0xAA55) в конце первого блока (сектора) данных. Как только удовлетворяющее этому требованию устройство найдено, с него считывается первый сектор, который записывается в ОЗУ по адресу 0x7C00 и получает управление.
Дальнейший процесс загрузки полностью определяется программой загрузки, записанной в указанном секторе. Обычно эта программа выводит список доступных для загрузки ОС и предоставляет выбор одной из них.
Эмуляторы виртуальной машины создают для запускаемой программы иллюзию того, что она работает одна на машине, тогда как на самом деле в это же время работают ОС и другие программы.
Эмуляторы делятся на два основных класса: одни, как например Bochs, сами интерпретируют все машинные инструкции выполняемой программы; другие, например VMWare, большую часть инструкций передают реальному процессору, эмулируя только привилегированные инструкции и обращение к внешним устройствам. В некоторых эмуляторах сочетаются оба подхода.
Ясно, что первый способ эмуляции универсален, но гораздо медленнее, зато второй требует использование специальных драйверов для гостевой ОС.
Для выполнения работы потребуется загрузочный образ для MS DOS, который можно скопировать с соответствующей загрузочной дискеты или найти в Интернет.
Ниже приведен пример ассемблерного кода для последнего задания этой работы.
Программа для старта с fdb, вывода приветствия и продолжения загрузки с fda.
[BITS 16]
[ORG 0x7c00]
_start:
cli
mov ax, cs
mov ds, ax
mov ss, ax
mov sp, _start
sti
mov si, msg_start
call kputs
.load:
mov ax, 0x7e0 ; es:bx - адрес памяти для записи данных
mov es, ax
mov bx, 0
mov cl, 2 ; CL - младшие шесть бит - номер сектора
mov ch, 0 ; старшие два бита CL и CH - номер цилиндра (дорожки)
mov dl, 0x80 ; DL - номер диска (начиная с 0x80 – HDD).
mov dh, 0 ; DH - номер головки
mov al, 1 ; AL - количество секторов (не более цилиндра)
mov ah, 0x02 ; функция
int 0x13
jnc .success
%define MAX_READ_ERRORS 5
inc byte [.errors_counter]
cmp byte [.errors_counter], MAX_READ_ERRORS
jl .load
mov si, msg_giving_up
call kputs
hlt
jmp short $
.errors_counter: db 0
.success:
jmp sector2
kputs:
.loop:
lodsb
test al, al
jz .quit
mov ah, 0x0E
int 0x10
jmp short .loop
.quit:
ret
msg_start: db "Startup..",0x0A,0x0D,0
msg_read: db "Second sector loaded.",0x0A,0x0D,0
msg_giving_up: db "Fatal: Too many errors",0x0A,0x0D, 0
times 510-($-$$) db 0
db 0x55,0xAA
sector2:
mov si, msg_read
call kputs
.load:
mov ax, 0x7c0 ; es:bx - адрес памяти для записи данных
mov es, ax
mov bx, 0
mov cl, 1 ; CL - младшие шесть бит - номер сектора
mov ch, 0 ; старшие два бита CL и CH - номер цилиндра (дорожки)
mov dl, 0 ; DL - номер диска (0 - дисковод A:)
mov dh, 0 ; DH - номер головки
mov al, 1 ; AL - количество
mov ah, 0x02 ; функция
int 0x13
jnc .success
inc byte [.errors_counter]
cmp byte [.errors_counter], MAX_READ_ERRORS
jl .load
mov si, msg_giving_up2
call kputs2
hlt
jmp short $
.errors_counter: db 0
.success:
mov si, msg_dos
call kputs2
jmp _start
hlt
jmp short $
kputs2:
.loop:
lodsb
test al, al
jz .quit
mov ah, 0x0E
int 0x10
jmp short .loop
.quit:
ret
msg_dos: db "Jump to DOS..",0x0A,0x0D,0
msg_giving_up2: db "Fatal: Too many errors",0x0A,0x0D, 0
align 512
Программа написана с использованием синтаксиса nasm и может быть скомпилирована командой: nasm -fbin %1 -o %1.bin. Ключ fbin необходим для того, чтобы компилятор создал «чистый» двоичный код (без дополнительной информации, которую содержат исполняемый файлы).
Для запуска эмуляции нужно задать конфигурацию в .bochsrc:
floppya: 1_44=boot622.IMA, status=inserted
ata0-master: type=disk, path=boot.bin, cylinders=100, heads=4, spt=17
boot: disk
В приведенной конфигурации загрузчик запускается с жесткого диска, а MS DOS – с дискеты.
Примеры загрузочных образов из данной работы могут быть запущены на реальной машине, если их перенести на дискету командой dd …fda и произвести загрузку с этой дискеты.
Вопросы для изучения.
1. Формат загрузочного сектора.
2. Прерывания BIOS для чтения данных с диска и для вывода текста на консоль.
3. Настройка Bochs.
4. Запуск гостевой ОС.
Задание.
1. Настроить Bochs, подключив в качестве floppy disk A загрузочный образ MS DOS. Запустить эмуляцию и убедиться в работоспособности гостевой ОС.
2. Откомпилировать и собрать загрузочный образ, осуществляющий вывод приветствия. Подключить его в качестве floppy disk B и проверить работоспособность в эмуляторе.
3. Собрать загрузочный образ, состоящий из двух секторов, причем программа из первого сектора должна загружать второй и передавать ему управление, а программа из второго сектора — выводить приветствие.
4. Написать и отладить загрузчик, который при старте с floppy disk B загружает MS DOS, образ которой находится на floppy disk A.
Контрольные вопросы.
1. Что такое эмулятор?
2. В чем отличие полных и неполных эмуляторов?
3. Может ли эмулятор запускать код для другой архитектуры?
4. В чем плюсы и минусы эмуляторов, исполняющих часть инструкций на реальном процессоре?
- Системное и прикладное программное обеспечение
- Раздел 1. Базовый инструментарий пользователя эвм.
- Раздел 2. Внутреннее устройство ос.
- Раздел 3. Утилиты. Инструментарий пользователя эвм.
- Раздел 4. Эффективное управление ресурсами.
- Раздел 1. Базовый инструментарий пользователя эвм
- 1.1. Графический пользовательский интерфейс
- 1.2. Командная строка
- 1.3. Файловые менеджеры. Архивация данных
- 1.4. Офисные и мультимедийные приложения
- 1.5. Инструментарий разработчика
- 1.6. Загрузчики. Эмуляторы
- Раздел 2. Внутреннее устройство ос
- 2.1. Файловая система (fat, ext2fs)
- 2.2. Работа в защищённом режиме процессора
- Раздел 3. Утилиты. Инструментарий пользователя эвм
- 3.1. Работа в сети
- 3.2. Язык html. Средства css, JavaScript
- 3.3. Издательская система TeX
- 3.4. Программный интерфейс ос
- 3.5. Мобильные платформы
- 3.6. Регулярные выражения
- 3.7. Редакторы vim, emacs
- Раздел 4. Эффективное управление ресурсами
- 4.1. Производительность функций чтения и записи файлов
- 4.2. Производительность функций управления памятью
- 4.4. Производительность функций работы с графикой