АРХИТЕКТУРА ОПЕРАЦИОННОЙ СИСТЕМЫ ДЛЯ ОБЕСПЕЧЕНИЯ ПОДДЕРЖКИ ПОКОЛЕНИЙ МИКРОЯДЕР
OPERATING SYSTEM ARCHITECTURE FOR SUPPORTING GENERATIONS OF MICROKERNEL

ОБЛАСТЬ ТЕХНИКИ
Настоящее техническое решение относится к области вычислительной техники, в частности, к архитектуре операционной системы (ОС), которая выполнена с возможностью одновременной работы микроядер разных поколений.
УРОВЕНЬ ТЕХНИКИ
Большинство современных операционных систем представляет собой хорошо структурированные модульные системы, способные к развитию, расширению и переносу на новые аппаратные платформы. Один из вариантов структуризации ОС - выделение монолитной и микроядерной архитектуры.
Ядро (англ. kernel) - центральная часть операционной системы (ОС), обеспечивающая приложениям координированный доступ к ресурсам компьютера, таким как процессорное время, память, внешнее аппаратное обеспечение, внешнее устройство ввода и вывода информации. Также обычно ядро предоставляет сервисы файловой системы и сетевых протоколов. Микроядро (англ. microkernel) или μ-ядро (англ. μ-kernel) - ядро операционной системы, реализующее минимальный набор функций.
Микроядра условно делят на поколения. Микроядра разных поколений отличаются устройством и технологическими решениями.
В настоящее время существует ряд решений, описывающих архитектуру ОС.
Из уровня техники известно решение, описывающее компьютерную операционную систему (US2006282899A1, MICROSOFT CORP, опубл. 14.12.2006). Недостатком данного решения является то, что нет возможности менять элементы самого ядра, только модульно дополнять функционал на уровне ядра и на уровне приложений.
Из уровня техники известно решение (US6075939А, LYNX REAL TRIME SYSTEMS INC, опубл. 13.06.2000), которое описывает компьютерную операционную систему, содержащую множество различных компонентов. В известном решении компонент включает в себя таблицы импорта и экспорта к функциям. Недостатком данного решения является то, что в нем отсутствует возможность обеспечить взаимозаменяемость любого компонента архитектуры.
Известны также решения, которые описывают различные архитектуры ОС. Такие решения, например, раскрыты в следующих документах: US20100251265A1, US20090158299A1, US20080148277A1, US6308247В1.
Однако, известные из уровня техники решения, описывающие архитектуру ОС, имеют ограниченную функциональность, в части ни в одной из них не предусмотрена возможность одновременной работы микроядер разных поколений.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Технической проблемой, на решение которой направлено заявленное техническое решение, является создание архитектуры операционной системы, выполненной с возможностью одновременной работы микроядер разных поколений, которое охарактеризовано в независимом пунктом формулы.
Техническим результатом является создание архитектуры операционной системы, выполненной с возможностью одновременной работы микроядер разных поколений. Это дает возможность запуска прикладных компонент и приложений, разработанных под разные поколения ядер (разные версии операционной системы) одновременно, а также возможность более полно использовать аппаратные ресурсы платформы, развивая ядро ОС без ущерба функционирования имеющегося прикладного ПО.
Дополнительным техническим результатом, проявляющимся при решении данной технической задачи, является обеспечение модульности микроядерной ОС, модульный принцип позволяет запускать или останавливать, входящие в состав компоненты по необходимости; например, для исправления ошибки можно внести изменения в код компонента, скомпилировать новый компонент, остановить старый и запустить новый.
В предпочтительном варианте реализации заявлена архитектура операционной системы, выполненная с возможностью одновременной работы микроядер разных поколений, содержащая:
набор взаимосвязанных между собой компонентов Адаптированной Объектной Модели Компонентов (АОМК), построенных по модульному принципу, при этом набор АОМК состоит из компонентов ниже приведенной группы, причем может быть более одного экземпляра компонента для любого из типов:
• компонента управления, который выполнен с возможностью обеспечивать доступ и управление ресурсами компьютерной системы;
• компонента представления, который отвечает за пользовательский интерфейс;
• прикладного компонента, который выполнен с возможностью реализации алгоритма решения задач операционной системы;
• компонента микроядра, выполненного в виде контейнера, внутри которого расположены:
a. компонент планировщика, который выполнен с возможностью задания и запуска задач;
b. компонент интерфейсной шины, который выполнен с возможностью загрузки и регистрации дополнительных компонентов в операционной системе;
при этом в заголовок каждого компонента включена таблица интерфейсов, которая содержит: указатель на системный интерфейс для доступа к интерфейсам импортируемых компонентов и их функций, и указатель на интерфейс фабрики компонентов для регистрации компонентов в интерфейсной шине и доступа к интерфейсам самих компонент;
при этом модульный принцип выполнен с возможностью одновременно работы микроядер нескольких поколений в одном экземпляре операционной системы, каждое новое поколение микроядра в зависимости от аппаратных возможностей включает или агрегирует предыдущее поколение микроядра.
ОПИСАНИЕ ЧЕРТЕЖЕЙ
Реализация изобретения будет описана в дальнейшем в соответствии с прилагаемыми чертежами, которые представлены для пояснения сути изобретения и никоим образом не ограничивают область изобретения. К заявке прилагаются следующие чертежи:
Фиг. 1 иллюстрирует архитектуру ОС;
Фиг. 2 иллюстрирует архитектуру микроядра;
Фиг. 3 иллюстрирует микроядро нового поколения, которое включает в себя микроядро предыдущего поколения;
Фиг. 4 иллюстрирует процесс загрузки компонентов микроядра;
Фиг. 5 иллюстрирует пример механизмов повторной применяемости компонентов;
Фиг. 6 иллюстрирует пример циклического планирования;
Фиг. 7 иллюстрирует общий формат исполняемого файла.
ДЕТАЛЬНОЕ ОПИСАНИЕ ИЗОБРЕТЕНИЯ
В приведенном ниже подробном описании реализации изобретения приведены многочисленные детали реализации, призванные обеспечить отчетливое понимание настоящего изобретения. Однако, квалифицированному в предметной области специалисту, будет очевидно каким образом можно использовать настоящее изобретение, как с данными деталями реализации, так и без них. В других случаях хорошо известные методы, процедуры и компоненты не были описаны подробно, чтобы не затруднять понимание особенностей настоящего изобретения.
Кроме того, из приведенного изложения будет ясно, что изобретение не ограничивается приведенной реализацией. Многочисленные возможные модификации, изменения, вариации и замены, сохраняющие суть и форму настоящего изобретения, будут очевидными для квалифицированных в предметной области специалистов.
Настоящее изобретение направлено на обеспечение архитектуры ОС, выполненной с возможностью одновременной работы микроядер разных поколений.
Микроядро отвечает за выполнение следующих функций:
1) Диспетчеризацию процессов - одним из компонентов микроядра является планировщик, который решает какому из запущенных процессов должно быть передано управление, включает в себя механизмы синхронизации;
2) Делегирующий обработчик прерываний - все аппаратные прерывания и исключения передаются соответствующему процессу, зарегистрированному на обработку того или иного прерывания без вмешательства микроядра, за исключением тех событий на которые зарегистрировано и обслуживает само микроядро (для примера обработчик прерывания от таймера, используемый планировщиком);
3) Межпроцессное взаимодействие - для обеспечения связи между процессами используется интерфейсная шина, посредством запроса на получение того или иного интерфейса и регистрации на события того или иного интерфейса.
В заявленном решении основой архитектуры ОС является использование технологии АОМК. Архитектура ОС содержит набор взаимосвязанных между собой компонентов АОМК, построенных по модульному принципу с поддержкой работы микроядер разных поколений. Компонент - составная часть распределенного приложения. Модульный принцип позволяет запускать или останавливать, входящие в состав компоненты по необходимости; например, для исправления ошибки можно внести изменения в код компонента, скомпилировать новый компонент, остановить старый и запустить новый.
Все базовые элементы ОС включая микроядро состоят из компонентов с интерфейсами для взаимодействия. Само микроядро также является компонентом с интерфейсом. В заявленной технологии АОМК есть механизмы повторной применяемости компонентов: агрегирование и включение, которые позволяют повторно использовать в новом поколении микроядра более старые версии микроядер.
АОМК - это технология, в основе которой лежит концепция технологии COМ компании Microsoft.
В заявленном решении основами архитектуры операционной системы для обеспечения поддержки поколений микроядер является использование:
1) интерфейса IUnknown с методами QueryInterface, AddRef и Release. В АОМК интерфейс именуется как IEcoUnknown, также идентификатор компонента GUID в известной технологии COM имеет размер только 128 бит, а в заявленном решении он может быть, как и 64 бита, 128 бит, так и 256 бит.
2) фабрики класса, только интерфейс IClassFactory, В АОМК интерфейс именуется как IEcoComponentFactory и используется как механизм создания экземпляров компонент.
3) механизмов повторной применяемости компонентов - это включение (containment) и агрегирование (aggregation). Включение и агрегирование - это приемы программирования, в которых один компонент (внешний) использует другой (внутренний), т.е. внешний компонент агрегирует или включает в себя внутренний. Разница в этих приемах заключается в том, что при включении, внешний компонент реализует интерфейсы внутреннего компонента, тем самым может контролировать внутренний компонент перед передачей вызова. В случае использования агрегирования, внешний компонент не реализует интерфейсы внутреннего, а сразу передает управление внутреннему компоненту. На рисунке ниже (Фиг.5) отображено различие в данных приемах.
Данные приемы в совокупности с концепцией использования интерфейсов (таблицы виртуальных функций) и дают возможность поддержки микроядер разных поколений.
4) механизм маршалинг (marshal).
В отличии от известных из уровня техники архитектур ОС, предлагаемая архитектура ОС обладает следующими отличиями:
Во-первых - это поддержка поколений компонента микроядра с возможностью одновременной работы микроядер нескольких поколений. Каждое новое поколение микроядра (N+1, где N - текущее поколение) обуславливает необходимость поддержки новых аппаратных процессорных архитектур, что происходит в процессе эволюции и технологического развития компьютерной техники. Это может включать изменения в архитектуре и логике вычислений как в самом ЦПУ или контроллере, так и в части разрядности или предоставляемым им программных интерфейсов управления и ввода-вывода. Для поддержки таких изменений на уровне ОС разрабатывается новое поколения микроядра. При запуске прикладного приложения, разработанного под определенную процессорную архитектуру (а значит и поколение микроядра) ОС проверяет наличие факта загруженности данного компонента и, при его отсутствии, загружает требуемое поколение микроядра в память компьютера. При этом загруженное микроядро поколения N регистрирует указатель на себя в микроядре N+1, если оно запущено, либо в следующем более новом N+M микроядре, работающем в ОС. Факт одновременной работы нескольких поколений микроядер в одном экземпляре операционной системы позволяет использовать любые прикладные приложения, разработанные под разные платформенные архитектуры (и, следовательно, под разные микроядра ОС) одновременно. С выходом новых версий (поколений) ОС, она не теряет совместимость и работоспособность для приложений, разработанных давно, тем самым сохраняя инвестиции как разработчиков, так и конечных пользователей ПО, избавляя их от проблем несовместимости прикладного ПО в виду изменений программных интерфейсов и ядер в новых версиях альтернативных ОС и покупки новых версий ПО соответственно.
Вторым отличием является факт, что сам компонент микроядра выполнен в виде контейнера и состоит из таких компонентов, как компонент планировщика и компонента интерфейсной шины, что позволяет использовать различные реализации внутренних компонент в зависимости от требуемых задач и режимов работы операционной системы. Например, существует возможность включения режима реального-времени или других специфичных реализаций механизма планирования или распределения доступа к ресурсам.
Как представлено на Фиг. 1, заявленная архитектура ОС (100) построена по модели клиент-сервер с использованием технологии АОМК. Все элементы архитектуры ОС включая микроядро (Фиг.2), являются компонентами. Каждый компонент имеет спецификации с описанием интерфейсов, что в свою очередь позволяет любому разработчику реализовывать тот или иной компонент архитектуры самостоятельно согласно спецификации. Архитектура построена на компонентах по модульному принципу, что позволяет включать в ОС только необходимые компоненты (модули) исходя из поставленных задач. За счёт механизмов повторной применяемости компонентов: агрегирование и включение технологии АОМК, микроядро нового поколения может включать в себя микроядра предыдущего поколения (Фиг.3). Использование механизмов повторной применяемости компонентов, справедливо ко всей архитектуре ОС, построенной на компонентах по технологии АОМК.
При этом набор АОМК состоит из компонентов ниже приведенной группы, причем может быть более одного экземпляра компоненты для любого из типов:
• компонента управления (101), который выполнен с возможностью обеспечивать доступ и управление ресурсами компьютерной системы;
• компонента представления (102), который отвечает за пользовательский интерфейс;
• прикладного компонента (103), который выполнен с возможностью реализации алгоритма решения задач операционной системы;
• компонента микроядра (104), выполненного в виде контейнера, внутри которого расположены:
a. компонента планировщика, который выполнен с возможностью задания и запуска задач;
b. компонента интерфейсной шины, который выполнен с возможностью загрузки и регистрации дополнительных компонентов в операционной системе.
При этом в заголовок каждого компонента включена таблица интерфейсов, которая содержит: указатель на системный интерфейс для доступа к интерфейсам импортируемых компонентов и их функций, и указатель на интерфейс фабрики компонентов для регистрации компонентов в интерфейсной шине и доступа к интерфейсам самих компонент. Модульный принцип выполнен с возможностью одновременной работы микроядер нескольких поколений в одном экземпляре операционной системы, каждое новое поколение микроядра в зависимости от аппаратных возможностей включает или агрегирует предыдущее поколение микроядра. Что дает возможность поддержки поколений микроядр при техническом развитии микропроцессорной архитектуры, что обеспечивает поддержку работоспособности программ, написанных для первого поколения микроядра на последующих поколениях микроядр ОС.
На Фиг. 4 показан процесс загрузки компонентов микроядра.
Загрузчик системы - является частью системы, напрямую зависящей от аппаратной части.
В самой минимальной конфигурации, загрузчик выполняет загрузку микроядра системы и «стартового приложения».
Опционально загрузчик может загружать такие компоненты как:
- Менеджер памяти;
- Менеджер устройств;
- Файловый менеджер;
- Специализированные компоненты.
Загрузчик, загрузив микроядро в память, в зависимости от сценария компоновки регистрирует загружаемые компоненты системы в интерфейсной шине, такие как менеджера памяти, менеджер устройств, файловый менеджер, специализированный компонент. Далее загрузчик загружает «Стартовое приложение», контекст задачи которого сохраняется в планировщике и передает управление ему. На этом процесс запуска ОС считается завершенным. Далее стартовое приложение может создавать и управлять задачами.
В зависимости от типа задач, «Стартовое приложение» может быть самостоятельной единицей исполнения или выполнять роль оболочки ОС для порождения процессов.
Ниже приведены этапы загрузки минимальной конфигурации ОС:
- При включении компьютера запускается базовая процедура загрузки программного обеспечения выполняющая поиск и считывание загрузочного сектора, после чего процедура передает управление программе из загрузочного сектора.
- В зависимости от типа файловой системы, программа, располагаемая в загрузочном секторе, загружает основной загрузчик ОС, располагаемый на файловой системе в свободный участок памяти и передает управление загрузчику.
- Загрузчик ОС является программой, которая реализует сценарии загрузки ОС в зависимости от состава компонентов для первичного запуска Стартового приложения. Одним из вариантов реализации сценария загрузки ОС - это использование интерактивного меню с выбором компонентов находящихся на файловой системе.
- Первым шагом Загрузчик ОС загружает компонент микроядра. Загрузчик в зависимости от сценария, может загрузить компонент в любой свободный участок памяти и проинициализировать (подготовить к работе) его через интерфейсы, описанные в спецификации к компоненту микроядра, такие как размер стека, область памяти и т,п.
- Вторым шагом Загрузчик ОС загружает компонент планировщика. Загрузчик в зависимости от сценария, может загрузить компонент планировщика в любой свободный участок памяти.
- Третьим шагом Загрузчик ОС загружает компонент интерфейсной шины. Загрузчик в зависимости от сценария, может загрузить компонент интерфейсной шины в любой свободный участок памяти.
- После успешной загрузки компонентов микроядра, таких как планировщик и интерфейсная шина. Загрузчик инициализирует компоненты планировщика и интерфейсной шины в микроядре вызвав метод инициализации интерфейса микроядра передав в качестве параметров указатели на интерфейсы компонентов планировщика и интерфейсной шины.
При этом, следует отметить, что так как сам компонент микроядра, а также компоненты планировщика и интерфейсной шины имеют интерфейсы, описанные согласно спецификации, то таким образом любой разработчик может сделать собственную реализацию согласно спецификации, будь то компонент микроядра, планировщика или интерфейсной шины. Как пример: независимый разработчик разработал планировщик, в котором время, затрачиваемое на переключение процессов уменьшено на несколько тактов процессорного времени, но при этом компонент имеет те же интерфейсы, которые описаны в спецификации. Тем самым в сценарии загрузки ОС, можно указать загрузку компонента планировщика от независимого разработчика.
- Следующим шагом в сценарии загрузки ОС, является загрузка и регистрация в интерфейсной шине вспомогательных компонентов, от которых зависит запуск стартового приложения. Данный шаг не обязательный и зависит от используемых стартовым приложением компонентов. В качестве примера загрузки вспомогательных компонентов, приводится один из наиболее востребованных - компонент управления памятью. Загрузчик в зависимости от сценария, может загрузить компонент управления памятью в любой свободный участок памяти.
- После успешной загрузки вспомогательного компонента, Загрузчик ОС вызывает метод регистрации интерфейса компоненты интерфейсной шины для регистрации компонента в системе.
При этом, следует отметить, что в большинстве операционных систем управление памятью является неотъемлемой частью операционной системы. Особенностью заявленной архитектуры ОС, является то, что управление памятью является опциональной задачей, так как существуют различные методы распределения памяти: - без использования внешней памяти (фиксированными разделами, динамическими разделами, перемещаемыми разделами) и с использованием внешней памяти (страничное распределение, сегментное распределение, сегментно-страничное распределении). Исходя из этого, спецификация компонента управления памятью описывает требования к интерфейсам, но не регламентирует методы распределения памяти. Благодаря этому разработчики компонентов управления памятью могут использовать наиболее эффективный с их точки зрения метод управления памятью. В заявленной архитектуре ОС важным являются неизменяемые интерфейсы (входные и выходные параметры), строгая реализация согласно спецификации.
Через компонент интерфейсная шина запрашиваются интерфейсы компонентов, расположенных в памяти или в файловой системе.
Загрузчик, загрузив микроядро в память, в зависимости от сценария компоновки регистрирует загружаемые компоненты системы в интерфейсной шине, такие как компоненты менеджера памяти, менеджер устройств, файловый менеджер и т.п.
При этом, следует отметить, что компонент интерфейсная шина содержит в своем реестре информацию только о компонентах, расположенных в памяти. Объем реестра для регистрации компонентов имеет ограниченный размер. Для расширения объема реестра интерфейсной шины, необходимо загрузить менеджер памяти, что выполняется загрузчиком при загрузке микроядра и регистрации в реестре интерфейсной шины. Компоненты, расположенные на файловой системе, загружаются через файловый менеджер. В случае использования компонентов, расположенных на файловой системе, загрузчик должен загрузить файловый менеджер в память системы и зарегистрировать его в реестре интерфейсной шины.
Что касается компонента планировщика, то он также имеет интерфейсы, описанные согласно спецификации, что позволяет создавать набор планировщиков (с разными алгоритмами планирования) с теми или иными характеристиками под те или иные задачи.
Как пример, планировщик может быть реализован с самым простейшим планированием выполнение задач используя алгоритм квантования времени. Каждой задаче предоставляется квант времени процессора. Когда квант заканчивается задача переводится планировщиком в конец очереди (как представлено на фигуре 6).
Ниже описан формат исполняемого файла ОС.
Общий формат исполняемого файла представлен на фигуре 7. Заголовок содержит общую информацию о файле и его основные характеристики. Таблица интерфейсов содержит указатели адресов IEcoUnknown интерфейсов. Основным указателем (ссылкой) является указатель на системный интерфейс (IEcoSystem1), через данный интерфейс процесс получает доступ к интерфейсам импортируемых компонентов и их методов (функций). Вторым немаловажным указателем в таблице интерфейсов, является указатель на интерфейс фабрики компонентов (IEcoComponentFactory), с помощью данного интерфейса система выполняет регистрацию компонентов в интерфейсной шине и создает экземпляры данных. За таблицей интерфейсов следуют специфичные заголовки для операционной системы, блоки (сегменты) кода и данных.
Спецификой (различием) формата является отсутствие таблиц импорта и экспорта функций, что в значительной форме уменьшает объем заголовочной части исполняемого файла. Так как идет постоянное развитие, усовершенствование и добавление новых возможностей, то оболочка (shell) ОС микроядра загружая процесс, создает экземпляр системного интерфейса последней версии на той или иной ступени развития.
А так как, таблица интерфейсов содержит указатели адресов IEcoUnknown интерфейса, то конкретно для системного интерфейса оболочка ОС записывает адрес указателя, к примеру, IEcoSystem4 системного интерфейса 4-ой версии.
Исполняемый процесс (будь то старой версии или последней версии, имеется ввиду разработанный под первую версию ядра, использующего системный интерфейс IEcoSystem1 или разработанный под последнюю версию ядра использующего системный интерфейс IEcoSystem4) используя метод QueryInterface интерфейса IEcoUnknown, запрашивает ту версию системного интерфейса, с которым он может работать. Соответственно для первого случая, системный интерфейс IEcoSystem4 создаст экземпляр системного интерфейса IEcoSystem1 и вернет соответствующий указатель, а для второго случая IEcoUnknown вернет указатель сам на себя, так как адрес интерфейса IEcoUnknown совпадает с адресом IEcoSystem4.
Таким образом достигается поддержка работоспособности программ, разработанных на ранней стадии в последних версиях ОС на бинарном уровне, т.е. не требующей перекомпиляции.
Для сравнения, простая программа «Hello World!» написанная под ОС RedHat ядра версии 2.x использующая функцию printf библиотеки libc, неработоспособна на версии ОС RedaHat ядра 3.x без перекомпиляции, выдаст ошибку: не найдена библиотека libc2.x.
Еще одной уникальной особенностью, при такой схеме взаимодействия является то, что приложение (процесс) разработанное под последнюю версию ОС, может учитывать свои минимальные возможности, и запускаться (исполняться) на ранних версиях ОС. Т.е. процесс (используя метод QueryInterface интерфейса IEcoUnknown) запрашивает системный интерфейс IEcoSystem4, а ему возвращается нулевой указатель, то он может запросить указатель на системный интерфейс ранней версии, к примеру, IEcoSystem3, соответственно ограничив свои возможности. Такого подхода нет ни на одной из известных из уровня техники ОС, на уровне исполняемого файла.
Отсюда преимущество на уровне исполняемого файла:
1) Для импортируемых функций всего один адрес указателя на системный интерфейс;
2) Нет необходимости перекомпиляции ранних версий ПО, под последние версии системных библиотек ОС;
3) Возможность исполнения ПО, разработанного под новые версии системных ОС в ограниченном режиме на старых версиях ОС.
В настоящих материалах заявки было представлено предпочтительное раскрытие осуществление заявленного технического решения, которое не должно использоваться как ограничивающее иные, частные воплощения его реализации, которые не выходят за рамки испрашиваемого объема правовой охраны и являются очевидными для специалистов в соответствующей области техники.