При закрытии подписчики были переданы в рассылку "Для бухгалтера: программы, новости, советы" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Сегодня в номере:
Один вопрос мне задают столь часто, что придется ответить на него в интре :)
Как вы помните, в прошлом выпуске мы вкратце разобрали то, каким образом может реализовываться многозадачность. Более подробно мы поговорим об этом, когда будем изучать практическую реализацию многозадачности на процессорах архитектуры 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
{#template MAIN} {#include js_tmpl_auth_reg_tab} {#if $P.login_register_tab == 1} Войти на сайт {* {#include js_tmpl_auth_reg_button} *} {#include js_tmpl_auth_reg_action} {#include js_tmpl_auth_reg_descr} Если вы еще не с нами, то начните с регистрации Вход для авторов {#/if} {#if $P.login_register_tab == 2} Регистрация {* {#include js_tmpl_soc_auth_reg_descr} *} {#include js_tmpl_auth_reg_soc} {#include js_tmpl_auth_reg_agree} {* #include js_tmpl_auth_reg_descr *} {#include js_tmpl_auth_reg_action} {* {#include js_tmpl_auth_reg_button} *} {#include js_tmpl_auth_reg_descr} {#include js_tmpl_soc_auth_reg_descr} {#/if} {* *} {#/template MAIN} {#template js_tmpl_auth_reg_tab} Вход на сайт Регистрация {#/template js_tmpl_auth_reg_tab} {#template js_tmpl_auth_reg_action} {#if $P.login_register_tab == 1} {#include js_tmpl_auth_reg_soc} {#/if} {#if $P.login_register_tab == 1} E-mail или код подписчика Пароль Русская раскладка клавиатуры! У вас включен Caps Lock! У вас включен Caps Lock и русская раскладка клавиатуры! Чужой компьютер Забыли пароль? {#/if} {#if $P.login_register_tab == 2} E-mail Я ознакомился и согласен с условиями сервиса Subscribe.ru Нажимая на кнопку "Готово!", я даю согласие на обработку персональных данных {* Я хочу получать новости о скидках на одежду *} Готово! {#/if} {#/template js_tmpl_auth_reg_action} {#template js_tmpl_auth_reg_agree} Я ознакомился и согласен с условиями сервиса Subscribe.ru {#/template js_tmpl_auth_reg_agree} {#template js_tmpl_auth_reg_button} {#if $P.login_register_tab == 1} Email OpenID Вконтакте Mail.Ru {#/if} {#if $P.login_register_tab == 2} Email OpenID Вконтакте Mail.Ru {#/if} {#/template js_tmpl_auth_reg_button} {#template js_tmpl_auth_reg_descr} {#if $P.login_register_tab == 1} Для оформления подписки на выбранную рассылку, работы с интересующей вас группой или доступа в нужный вам раздел, просим авторизоваться на Subscribe.ru {#/if} {#if $P.login_register_tab == 2} Для регистрации укажите ваш e-mail адрес. Адрес должен быть действующим, на него сразу после регистрации будет отправлено письмо с инструкциями и кодом подтверждения. {#/if} {#/template js_tmpl_auth_reg_descr} {#template js_tmpl_soc_auth_reg_descr} Или зарегистрируйтесь через социальную сеть. {#/template js_tmpl_soc_auth_reg_descr} {#template js_tmpl_auth_reg_soc} {#if $P.login_register_tab == 1} {#/if} {#if $P.login_register_tab == 2} {#/if} {#/template js_tmpl_auth_reg_soc}
{#include js_tmpl_auth_reg_descr}
{#template MAIN} {#include js_tmpl_auth_reg_tab} {#include js_tmpl_auth_reg_descr} {#include js_tmpl_auth_reg_action} {#/template MAIN} {#template js_tmpl_auth_reg_tab} Регистрация {#/template js_tmpl_auth_reg_tab} {#template js_tmpl_auth_reg_descr} Пожалуйста, подтвердите ваш адрес.Вам отправлено письмо для подтверждения вашего адреса {$P.register_confirm_mail}.Для подтверждения адреса перейдите по ссылке из этого письма. {#/template js_tmpl_auth_reg_descr} {#template js_tmpl_auth_reg_action} Или введите код из письма: Не пришло письмо? Пожалуйста, проверьте папку Спам (папку для нежелательной почты). Вышлите мне письмо еще раз! Готово {#/template js_tmpl_auth_reg_action}