Введение
Всем сложным системам желательно иметь чёткую и понятную архитектуру, то есть они должны подразделяться на отдельные составляющие элементы (модули), которые имеют ясно обозначенные функции и правила взаимного обмена между модулями. Если каждый модуль играет свою определённую роль, то это обстоятельство сильно облегчает дальнейшее совершенствование всей системы. И наоборот, если сложная система не имеет чётко обозначенной структуры, то её усовершенствование выливается в большую проблему и часто легче спроектировать новую систему, чем заниматься модернизацией старой.
Практически все сегодняшние операционные системы имеют отличную модульную структуру, которую можно улучшать, совершенствовать и переносить на другие платформы. Общей структуры операционных систем нет, но существуют некие общие методы структурной организации операционных систем. В самом обобщённом виде в структуре операционных систем можно выделить две группы модулей:
- Ядро операционной системы. Это модули, которые решают главные задачи операционной системы.
- Программные модули, которые решают остальные, второстепенные задачи операционной системы.
Программные модули ядра решают такие основные задачи операционной системы, как организация работы всех процессов, управление ресурсами памяти, блоками ввода-вывода и тому подобное.
Ядро по сути является сердцем операционной системы, без которого система вообще не может работать. Операции, которые выполняет ядро, используются очень часто, соответственно производительность операционной системы напрямую зависит от быстроты реализации этих операций.
Поэтому практически все программные модули ядра всё время работают в резидентном режиме, то есть загружены в оперативную память. Программы ядра определяют все процессы вычислений в электронной вычислительной машине и сбой в их работе останавливает всю систему. По этой причине проектировщики операционных систем в первую очередь озабочены надёжностью функционирования в первую очередь ядра, что ведёт к значительному увеличению сроков его отладки. Как правило, программы ядра имеют некий специальный формат, который существенно отличается от формата прикладных программ пользователя.
Наноядро операционной системы: сущность и специфика
Под наноядром понимается такая структура ядра операционной системы, при которой функции ядра сильно упрощены, и оно при минимальных размерах решает всего одну задачу, и эта задача – обслуживание прерываний от аппаратного обеспечения электронной вычислительной машины.
По завершению обслуживания прерывания программы от аппаратных блоков компьютера, наноядро отправляет информационные данные об итогах обслуживания (к примеру, это могут быть коды символов, переданных от клавиатуры) находящейся выше по рангу программе, используя такой же самый способ прерывания программы. Примерно с такой же частотой наноядро организует по минимуму поддержание потоков, а именно создать и переключить.
По своей сути идеология наноядра похожа на идеологию HAL (Hardware Abstraction Layer), которая предоставляет программному обеспечению более высокого ранга удобные методы абстракций от аппаратных блоков и методы обслуживания прерываний от этих блоков. Очень часто концепция наноядер в настоящее время применяется для создания виртуального аппаратного обеспечения действующих электронных вычислительных машин или для создания условий для монитора виртуальных машин (гипервизоров), которые позволяют работать совместно набору разных операционных систем на одной электронной вычислительной машине. К примеру, операционная система VMware ESX Server выполнило своё наноядро, которое не зависит от операционной системы и может быть загружено на «голое оборудование». На уровне выше наноядра функционируют утилиты пользователя и администратора VMware, а также и непосредственно операционные системы, виртуальные образы которых созданы в ESX Server. Размеры наноядра могут быть до такой степени небольшими и примитивными, что даже самые важные аппаратные модули, которые находятся прямо на материнской плате или на платах контроллеров различных установленных блоков, таких как, например, таймеры или контроллеры прерываний с возможностью их программирования, обрабатываются различными драйверами аппаратных модулей, а не программами самого ядра.
Иногда такие сверх маленькие по размерам наноядра называют пикоядрами.
Структура наноядер
Как уже указывалось выше, очень простое и с минимальными размерами ядро, решает только одну поставленную задачу, обслуживание аппаратных прерываний, запросы на которые посылают различные модули компьютера. В качестве примера можно привести KeyKOS, это первая операционная система, в основе которой лежит наноядро. Её стартовая версия была представлена в 1983-м году. Удобство структуры наноядра заключается также в том, что она позволяет переносить операционную систему на различную аппаратную основу, и помимо этого обеспечивает возможность установки действующей версии операционной системы на несовместимое аппаратное оборудование без её существенной переработки.
К примеру, компания Apple Computer применила наноядро разработки Mac OS Classic для PowerPC, для трансляции аппаратных прерываний, которые вырабатывают их компьютеры на основе процессора PowerPC в формат, который опознавался и воспринимался Mac OS, разработанной для процессора Motorola 680x0. То есть по факту наноядро выполнило эмуляцию под Mac OS старый процессор. Альтернативным вариантом могло стать написание заново кодировки Mac OS на PowerPC при замене процессора. Уже гораздо позже, когда появилась версия Mac OS 8.6, наноядро выполнило виртуализацию представленных PowerPC мультипроцессорных возможностей, что позволило обеспечить работу SMP в системе Mac OS. Другим удачным примером применения наноядерной структуры можно считать наноядро Adeos, которое работает как модульное ядро для Linux и позволяет работать параллельно с ней другой операционной системе.