При закрытии подписчики были переданы в рассылку "Для бухгалтера: программы, новости, советы" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Сегодня в номере:
Один вопрос мне задают столь часто, что придется ответить на него в интре :)
Как вы помните, в прошлом выпуске мы вкратце разобрали то, каким образом может реализовываться многозадачность. Более подробно мы поговорим об этом, когда будем изучать практическую реализацию многозадачности на процессорах архитектуры IA-32 (x86), а сейчас мы рассмотрим один из самых главных аспектов разработки ОС, который иногда ошибочно понимается (или вовсе не понимается) юными осеписателями :).
Давайте подумаем, каким образом мы можем структурировать ядро операционной системы (тот вариант, при котором оно вообще никак не структурируется, мы не рассматриваем, ибо отсутствие структуры допустимо только для самых простейших и примитивнейших ОС).
Самое первое, что приходит в голову - "слоеная" организация ОС. В гипотетической системе это может выглядеть, например, вот так (если вы вдруг случайно забыли, что такое уровень супервизора и уровень пользователя - напоминаю, что об этом было написано в пятом выпуске):
[Аппаратная часть компьютера] ^ | v ========================================== ========= уровень супервизора ============ [уровень аппаратной абстракции] ^ | v [основные механизмы ядра] ^ | v [распределение ресурсов, вспомогательные модули (ФС и пр.)] ^ | v [системные вызовы ядра] ^ ====================================== ========= уровень пользователя ======= v [пользовательские приложения]
Обратите внимание, что для хорошей структурной организации, каждый слой должен экранировать предыдущий. Т.е., например, единственным способом обратиться к аппаратной части для приложения должны быть системные вызовы и ничего кроме системных вызовов. Для того, чтобы выделить ресурсы, приложение (разумеется, опять через интерфейс системных вызовов) должно обратиться к менеджеру ресурсов (хотя тот также не имеет прямого доступа к этим ресурсам), который переправит запрос далее по цепочке (естественно, обработав его в соответствии со своими алгоритмами, например отказав в доступе, если данный ресурс уже занят другим приложением). Слой аппаратной абстракции, в своем наилучшем проявлении, полностью экранирует особенности аппаратуры от остальной части ядра, так что одно и то же ядро может без изменений использоваться на разных компьютерах
Все вышеперечисленные компоненты операционной системы в общем случае присутствуют в любой ОС. Чем же тогда "глобально" могут различаться архитектуры их ядер?
Основной критерий разделения - это как раз те самые уровни привилегий кода (пользователь/супервизор). По тому, какие части ядра в каком уровне привилегий работают, все архитектуры подразделяются на три типа: архитектуры с монолитным ядром, микроядерные и экзоядерные.
В системах с монолитной архитектурой все ядро работает на уровне супервизора. Именно ядро такой архитектуры приведено на схеме
В системах с микроядерной архитектурой на уровне супервизора работает только очень небольшая часть ОС, которой требуется непосредственный доступ к аппаратуре. Все остальное (например менеджеры ресурсов) работает в пользовательском режиме.
В системах с экзоядерной (наиболее новой из всех) архитектурой на уровне супервизора не работает практически ничего :) В настоящий момент такие системы активно ислледуются, и полноценно работающих прототипов, насколько я знаю, не существует
В следующем выпуске мы подробно рассмотрим микроядерную архитектуру и немного коснемся экзоядерной. Монолитная же нас особенно не интересует - во первых, она достаточно проста для понимания, во вторых она уже сильно устарела (хотя все современные популярные системы: Windows NT, Linux и пр. представляют собой именно монолитные архитектуры).
На сегодня все, уважаемые подписчики.Как всегда, мой почтовый ящик открыт для вас: lonesome@lowlevel.ru Также вы можете задавать интересующие вас вопросы в форуме lowlevel.ru Предыдущие выпуски рассылки вы можете найти по этому адресу: http://subscribe.ru/archive/comp.soft.prog.osdev А все, исходники, опубликованые в рассылке, располагаются здесь: http://www.lowlevel.ru/osdev/sources.htm Всего наилучшего! Lonesome