Rambler's
Top100

Разработка ОС - Frequently Asked Questions. Часть 1

Автор: lonesome TSH/Digital Daemons
Дата: 07.05.2003
Раздел: Разработка ОС

Q. С чего начинать разработку ОС?
A. ИМХО - чтобы сразу почувствовать вкус программирования аппаратуры, надо начинать с загрузчика. Самого простенького, в несколько десятков строк.

Q. Как происходит процесс загрузки ОС?
A. После включения компьютера, BIOS выполняет тесты аппаратуры и ищет на дисках загрузчик. Если находит, то загружает его в оперативную память и передает ему управление. Самый простой способ загрузки - с дискеты

Q. Как сделать, чтобы ОС грузилась с дискеты?
A. В загрузочный сектор дискеты (512 байт) необходимо записать программу-загрузчик, которая выполнит все необходимые действия.

Q. Как записать что-нибудь в загрузочный сектор?
A. Лучше сначал сделать образ дискеты - файл, равный объему дискеты по размеру или меньше. Первые 512 байт этого файла будут загрузочным сектором. Затем этот образ можно записать на дискету (В Windows для этого используются программы WinImage, rawrite и пр., а в Linux просто скопируйте файл в устройство, соотвествующее дисководу - обычно это /dev/fd0), а можно на дискету не записывать, а запускать его в эмуляторе.

Q. В каком еще эмуляторе?
A. Эмулятор - программа, полностью эмулирующая компьютер. Внешне это выглядит, как будто у вас в окошке запущен еще один компьютер, со своей ОС и пр. Такую штуку очень удобно использовать при разработке ОС для быстрого тестирования кода.

Q. Что именно должно находиться в программе-загрузчике?
A. Обычно в первичном загрузчике (загрузочном секторе) находится программа, которая считывает с дискеты вторичный загрузчик, т.к. в 512 байтах полноценный загрузчик не разместишь. Вторичный загрузчик должен выполнить следующее:
- Включить шлюз A20
- Перенастроить базовый вектор контроллера прерываний
- Загрузить GDT
- Перейти в защищенный режим
- Передать управление ядру системы (не забыв его загрузить)

Q. Какого формата должен быть загрузчик?
A. Чистный binary. Ну а по досовски - COM-файл. А писать его нужно на ассемблере. Для создания чистых бинарных файлов лучше всего использовать NASM, FASM или GAS.

Q. Можно ли писать ОС на языке высокого уровня? (например Си)
A. Конечно. После перехода в защищенный режим процессор может исполнять 32-битный код, поэтому можно использовать любой современный компилятор. Если же компилятор/компоновщик умеют создавать чистые бинарные файлы (например ld с опцией --oformat binary), то тогда вообще проблем никаких не возникает. Ну и не забывайте, что никакой стандартной библиотеки (а значит функций strcmp(), memcpy()...) в вашей системе нет до тех пор, пока вы их сами не напишете.

Rambler's Top100