KolibriOS с точки зрения программиста
Прикладное программирование
Одним из первых и наиболее важных вопросов, возникающих при программировании чего бы то ни было, является вопрос о выборе среды разработки в целом и языка программирования в частности. Поэтому для начала следует сказать несколько слов о возможностях, предоставляемых в этом плане Колибри.
Программы для операционной системы KolibriOS представляют собой по сути 32-битные двоичные файлы с небольшим заголовком, поэтому от используемого компилятора требуется возможность получения таких файлов. Для этих задач подойдут многие компиляторы: ассемблеры FASM, NASM, MASM; компиляторы Visual C++ и C++ из Visual Studio, GCC/G++, Borland C++, Sphinx C--. Разработка с использованием этих компиляторов подробно описана в этой статье (английский перевод). Помимо существования нескольких компиляторов под Колибри (TinyC, TinyPy, LUA), основным инструментом разработчиков все же является ассемблер FASM – на нем написано большинство программ (а также ядро).
Графический пользовательский интерфейс (GUI) в Колибри встроен в ядро. Приложениям доступны системные вызовы отрисовки графических примитивов в своем окне. Вот список примитивов: пиксель; текст; изображение (массив в памяти RGB-значений или индексов из палитры); прямоугольник; отрезок; числовые данные (с точки зрения пользователя тоже текст, но приложение задает не строку, а число, которое преобразуется в строку ядром и выводится). Также есть возможность прямого доступа к графике – чтение данных графического экрана без использования системных функций, что существенно быстрее попиксельного сканирования с 1024х768 системными вызовами (в соответствующем разрешении). Недавно появился програмный и аппаратный (для видеокарт Intel и Radeon) блиттер.
Каждый поток может создать и рисовать только в одном окне, но одно приложение способно управлять несколькими окнами, если создаст соответствующее количество потоков.
Кроме того, представлена стандартная динамическая библиотека для консольного ввода и вывода. Использование в программе динамических библиотек увеличивает ее размер лишь незначительно (на величину примерно 300-400 байт), поскольку весь код и данные остаются во внешнем файле, который один и тот же для всех ссылающихся программ. Из элементов управления ядро предоставляет только кнопку (в том числе, с градиентной заливкой). Однако существуют реализации других элементов управления, не опирающиеся на поддержку ядра.
В настоящее время на форуме разработчиков Колибри идет выработка единой динамической библиотеки компонентов и единого стиля интерфейса.
Видимо, любому программисту интересны существующие возможности по отладке приложений. Для Колибри написан отладчик, работающий на уровне машинного кода (команды отдаются через командную строку, отображение состояния – GUI). Вместе с тем можно программно использовать возможности ядра по отладке.
Механизмы межпроцессной связи (IPC, Inter Process Communication) ограничиваются возможностью посылать и принимать IPC-сообщения, представляющие собой произвольные данные с форматом, полностью определяемым приложением. Через IPC реализованы стандартные диалоги открытия и сохранения файла.
Системное программирование
Ядро целиком написано на ассемблере FASM. Этим достигается высокое быстродействие и небольшой размер системы. Ядро монолитное, с возможностью загрузки внешних драйверов.
Пользовательский код исполняется в 3-м кольце, системный – в 0-м кольце. Исключение, вызванное пользовательским потоком (в том числе попытка обращения к не принадлежащей потоку памяти и привилегированная инструкция), приводит к тому, что ядро завершает такой поток, оставляя систему в работоспособном состоянии. Более того, исключения в системном коде во многих случаях также приводят к «падению» только потока, вызвавшего исключение. Процессорное время делится между всеми потоками поровну, каждые 0.01 секунды ядро передает управление очередному потоку (поток может использовать свой квант частично, тогда переключение произойдет раньше, чем через указанный интервал). В этом смысле все потоки равноправны, включая поток операционной системы, который обрабатывает мышь (рисует курсор и отслеживает события, происходящие с мышью типа перемещения/нажатия/нажатия на кнопки, определенные приложениями), сеть, завершает процессы, перемещает окна, отслеживает нажатия <Ctrl+Alt+Del>, а в свободное время дает процессору отдохнуть инструкцией hlt.
Для работы с портами ввода/вывода не обязательно забираться в ядро и/или писать драйвер. Для этого существует специальная системная функция, резервирующая за приложением запрошенные им порты – конечно, если это не противоречит желаниям самой системы и других потоков.
Ядро - концепции работы - специальная тема, где подробно расписаны многие особенности работы ядра, управление основной памятью, процессами, вводом-выводом, файловой системой и т.д.
Источники информации
Основной ресурс разработчиков Колибри – это форум. Весь код хранится в репозиторий svn://kolibrios.org. Его содержимое на чтение доступно также через http-интерфейс с сайта http://svn.kolibrios.org. Для записи нужно получить аккаунт у администраторов форума.
Полная документация (справочник) по системным вызовам включается во все дистрибутивы в формате txt (sysfuncr.txt, sysfuncs.txt – для русского и английского дистрибутивов соответственно) и в формате chm (Windows-Help: klbr_doc.chm и klbr_doc_eng.chm), а также в приложение docpack в самой Колибри.