Введение
Операционные системы формируют интерфейс, который обеспечивает связь отдельных программных приложений с аппаратными объектами. Широко распространённые операционные системы, как правило, имеют ограничения по быстродействию, гибкости и функциональной наполненности приложений, так как они применяют зафиксированные модели интерфейсных связей. То есть жёсткая структура интерфейсов понижает производительность и делает не очень удобным проектирование новых приложений.
Как правило, операционные системы скрывают информационные данные о машинных ресурсах под вывесками абстракций высокого уровня, такими как процессы, файловые системы, пространство адресов и взаимосвязь процессоров. Эти абстрактные понятия, по существу, представляют собой некую виртуальную машину, в недрах которой и работают программные приложения. Фиксированную трактовку таких абстракций нельзя считать удовлетворительной по следующим главным причинам:
- Приложения теряют выгоды доменно-зависимой оптимизации.
- Нет возможности что-то изменить в уже реализованных абстракциях.
- Существенно понижается вариативность при проектировании новых программных приложений, поскольку вновь создаваемые абстракции можно выполнить только с применением уже действующих (если такое в принципе можно сделать).
Эти проблемные моменты можно разрешить переносом управления оборудованием и ресурсным потенциалом в компетенцию приложений,
Экзоядро операционной системы
Если применять архитектуру операционной системы на основе экзоядра, то небольшое по размерам ядро, может без нарушений обмениваться данными с имеющимися в наличии аппаратным обеспечением. Абстракции высокого уровня могут быть реализованы специальными библиотеками операционной системы, которые работают на более высоком уровне, чем информационные структуры экзоядра. Разработчики прикладных программ находят необходимые им библиотечные элементы, или разрабатывают их для себя сами. Подключение вновь созданных библиотек выполняется простой привязкой exe-файлов.
Разработчики экзоядра установили, что прикладные программы смогут получить существенные преимущества, за счёт разработки способов контроля реализации абстракций, которые управляют аппаратным обеспечением. Для того чтобы дать возможность прикладным программам контролировать аппаратные ресурсы, экзоядро формирует интерфейс низкого уровня. Архитектурные особенности экзоядра базируются на известном давно факте, чем на более низком уровне находится примитив, тем с большим эффектом его можно использовать, а также появляется больше возможностей для выполнения абстракций высокого уровня.
Для того, чтобы сделать интерфейс на самом низком уровне (идеальный вариант – на уровне аппаратного обеспечения), проектировщики экзоядра сформулировали для себя главную задачу как: отделение функций управления от защиты. Например, экзоядру необходимо обезопасить буфер кадра (framebuffer), не имея представления о системе окон, или обезопасить жёсткий диск, не зная о существовании системы файлов. Решить эту задачу возможно предоставлением всем прикладным программам собственной виртуальной машины. Правда, при этом, снижается общее быстродействие системы. Но экзоядро не выполняет эмуляцию аппаратных ресурсов, а только лишь распределяет их, что даёт возможность применять это не сложное и дающее отличный эффект решение. В распоряжении экзоядра есть три метода надёжного распределения ресурсов:
- Связь на безопасной основе. Прикладные программы получают безопасную связь с аппаратным обеспечением.
- Приложения могут видеть, что ресурсы обнулены.
- При помощи специального протокола отмены экзоядро имеет возможность прервать связь неверно действующей прикладной программы и аппаратным обеспечением.
Проектировщики реализовали один из типов экзоядерной операционной системы, которая основана на безопасной связи, видимости обнуления ресурсов и протоколе для прекращения работы приложений. Она имеет в своём составе экзоядро (Aegis), и непривилегированные библиотечные блоки операционной системы (ExOS). Эта система наглядно показывает самые главные достоинства экзоядерной структуры:
- Зкзоядра имеют в своём составе небольшое число примитивов, которые надо выполнить, что повышает эффективность этих ядер.
- Задержка предоставления ресурсов при безопасном мультиплексировании на низком уровне, достаточно мала.
- Общепринятые абстракции, например, VM и IPC, можно реализовать на уровне прикладных программ, где их также возможно расширить, сделать специализированными или просто заменить.
- Прикладные программы имеют возможность реализовать наиболее специализированные абстракции, что зависит от того, что им нужно.
При практической реализации, прообраз экзоядерной системы обеспечивает больше гибкости при проектировании прикладных программ, и, кроме того, его производительность выше, чем у монолитных или микроядерных систем. Интерфейс низкого уровня ядра Aegis даёт возможность прикладным программам оптимально применять имеющиеся в их распоряжении ресурсные мощности. Предоставление управления в защищённом режиме ядром Aegis, выполняется примерно в семь раз быстрее, чем любые из известных сегодня реализованных систем. Кроме того экзоядро даёт операционной системе ExOS (как и другим прикладным программам) повышенный уровень гибкости, которого нет в системах на основе микроядра. Например, система VM, которая выполнена на уровне прикладных программ, имеет возможность лёгкой интеграции с системами с распределённой базовой памятью и программами сбора «мусора». Используемый в Aegis протокол, который передаёт управление, даёт возможность прикладным программам сделать очень большое число примитивов IPC, делая выбор между удобным применением и быстродействием.