Супервизор

Базовый модуль, с которого начинается Xameleon, называется Supervisor. Он отвечает за управление виртуальной памятью, за управление процессами и программными потоками. В терминах спецификации L4 этот модуль именуется roottask. Supervisor стартует первым после модулей микроядра и анализирует блок MBI (Multi-Boot Information). На основе информации MBI, Supervoisor старует модули системы. Запуск модулей происходит параллельно, на основе оригинального стартового протокола. Помимо этого Supervisor реализует основной цикл обработки запросов управления потоками, процессами и памятью. При разработке Supervisor использованы оригинальные алгоритмы хранения объектов - используется совмещённая модель массивов и списков, которая обладает достоинствами обеих подходов хранения данных. Однотипные структуры данных, такие как объекты управления процессами или объекты управления программными потоками, хранятся в потоках виртуальных страниц. Каждый поток виртуальных страниц предоставляет динамически растущий массив однотипных данных, чей размер ограничен лишь размером физической памяти. Таким образом, с точки зрения драйвера, объекты хранятся в массиве. При этом отпадает необходимость динамического выделения памяти. С другой стороны, элементы массива обладают свойствами списков и связывают элементы массива по различным критериям. В то же время, память под массивы выделяется постранично (для платформы x86 размер страницы составляет 4Кб), соответственно, алгоритм выделения памяти для массива более прост, менее ресурсоемок и более быстр, чем традиционные алгоритмы выделения памяти произвольного размера.

Следует отметить, что вышеописанный подход не отменяет динамического выделения памяти произвольного размера на уровне пользовательских задач. Пользовательские задачи используют традиционный malloc(), выделяющий память задаче в её сегменте BSS через системный вызов sbrk(). Xameleon использует библиотеку работы с динамической памятью, написанную Владимиром Давиденко.

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

Supevisor создаёт отладочный программный поток, работающий на виртуальной консоли /dev/vty3. Для перехода к отладчику используйте комбинацию клавиш Alt + F4. Список доступной отладочной информации можно получить нажав клавишу '?'.