The Menuet Operating System.

Packing a lot of punch into a small package.

by Ville Mikael Turjanmaa

Операционная система Menuet.Размещение большого количества кода в маленькой упаковке.

Вилле - студент в области информатики из Финляндии. (*в 2002 году закончил обучение)

С ним можно связаться по е-mail: villemt@cc.jyu.fi (*устарело)

Cтатья из Dr. Dobb's Journal of Software Tools Volume 26, Number 12, December, 2001. PP. 32, 36

Перевод – Сергей Кузьмин (http://coolthemes.narod.ru), 28 июня 2005
* - мои комментарии
При копировании ссылка на сайт
http://coolthemes.narod.ru обязательна!

Menuet - это маленькая многозадачная операционная система реального времени с графическим интерфейсом пользователя (см. рис. 1). Написав её полностью на 32-битном ассемблере для х86, я спроектировал Menuet так, что она помещается на дискету 1.44 Mб, требуя при этом всего лишь процессор 80386 (или лучше), 32 Mб оперативной памяти и мышь. Menuet обеспечивает защиту памяти (*ядра) и приложений, работает с 16 миллионами цветов и 44.1 КГц звуком, на настоящий момент поддерживает файловые системы FAT12 и FAT32. Menuet свободно доступна (*для скачивания) на сайте http://www.menuetos.org и из DDJ, распространяется по лицензии GPL. Для система имеются 32-битный ассемблер, текстовый редактор, демки и другая сопутствующая информация.

Среди моих принципов проектирования есть убеждение: чем сложнее операционная система, тем больше она может содержать ошибок. Из-за этого большинство функций Menuet'a реализованы так, как это чаще делается в монолитных ядрах, чем в микроядрах(см. рис. 2). Поскольку сложность приводит к плохой производительности, другой моей целью в Menuet было исключить встроенные прослойки(*высокоуровневые слои абстракции типа HAL) между программами и "железом", которые тормозят и усложняют программирование.

Рис.1.Графический инфтерфейс пользователя Menuet.

Разработка Menuet на 16-битным ассемблере была бы очень сложной задачей. Однако, 32-битный ассемблер, с его шестью регистрами и линейным доступом к памяти, делает программирование относительно простой задачей. Из-за этого, если Вы хотите использовать программы из других операционных систем в Menuet, лучше будет начать с написания слоя (*совместимости) вне (*ядра) ОС, вроде того как это делает Wine c Win32 API.

Menuet позволяет тебе использовать как обработку, основанную на событиях, так и обработку в реальном времени. Системные функции доступны при использовании int 0x40, при этом номер функции должен быть в регистре eax. Остальные параметры могут находиться в других регистрах или в структуре данных(memory table). Во время создания программ для Menuet, ты должен уделить особое внимание функции system_event. Системные события могут быть от кнопок, нажатий клавиатуры, прерываний (IRQs) и т.п. У тебя есть три разных доступа к событиям: ждать события (функция 10); проверить, нет ли событий без ожидания (функция 11); ожидать события в течении указанного времени (функция 23). Когда произойдет событие, ты получишь тип события в eax.

Функции 10, 11 и 23 возвращают тип события в eax. Для нажатия клавиши клавиатуры - 2, для кнопки - 3. Когда происходит event_button, ты можешь спросить номер кнопки у системы с помощью функции номер 17, которая возвращает идентификатор кнопки, сохраненный в ah. Если в буфере есть клавиша, ты можешь запросить код ASCII с помощью функции 2, которая возвращает код ASCII в ah. Если в буфере нет событий, то функции 2 и 17 устанавливают значение al в 1 (единицу).

Рис. 2. Архитектура Menuet.

Есть три типа событий, которые устанавлены по умолчанию: нажатие клавиши, нажатие кнопки и рисование окна. Программы должны обрабатывать их по умолчанию. Когда случается событие window_draw, операционная система запрашивает программу перерисовать его содержимое, так как из-за активности на экране некоторые части программы были искажены.

Место, с которого надо начинать программирование с Menuet API, это рисование окна, учитывая то, что ты имеешь место для рисования(* в оригинале canvas-холст) на экране. Функция draw_window начинается с подтверждения прорисовки окна для операционной системы. Затем, используя функцию 0 с соответствующими параметрами, установите положние окна, его размер и цвета. Эта функция рисует основной интерфейс пользователя(текст и кнопки). Кнопки устанавливаются с помощью функции 8, которая берет цвет, координаты, число идентификатора кнопки как входные параметры. Когда кнопка нажата, операционная система объявляет программе о system_event и идентификатор кнопки может быть получен.Текст рисуется с помощью функции 4, которая берет положение, текст и цвет как входные параметры.

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

Среди моих будущих планов по развитию Menuet - улучшить совместимость, добавить поддержку протокола TCP/IP(*уже добавлено), портировать ядро на Flat Assembler (FASM) (*уже сделано) так, чтобы внешние компиляторы были бы больше не нужны.



Hosted by uCoz