При закрытии подписчики были переданы в рассылку "Для бухгалтера: программы, новости, советы" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Сегодня в номере:
В прошлом, четвертом выпуске, рассказывая о функции 0x02 прерывания int 0x13 BIOS, я сказал: "Эта функция нам понадобится только для чтения с дискеты, поэтому можно считать, что номер цилиндра находится в CL, а номер сектора - в CH"
CL
CH
Читать эту фразу следует наоборот - номер цилиндра в CH, а номер сектора - в CL. То есть касательно дискет, таблица параметров для этой функции выглядит вот так:
DL
DH
AL
ES:BX
В предыдущем выпуске я не упомянул два важных момента:
Отсчет головок, цилиндров ведется с нуля, а секторов с единицы. То есть загрузочный (первый) сектор дискеты - это: 0 (головка) : 0 (цилиндр) : 1 (сектор) И в дальнейшем, говоря о конкретных секторах на диске я буду использовать представление адреса сектора в виде 3 чисел - X:X:X.
0 (головка) : 0 (цилиндр) : 1 (сектор)
X:X:X
Обычная дискета 1.44 содержит 2880 секторов, 160 цилиндров и 2 головки (точнее головки содержит не дискета, а дисковод). Каждый цилиндр дискеты содержит 18 секторов, а каждая головка - 80 цилиндров. Системы защиты современных процессоров как краеугольный камень концепции построения операционных систем Хороший получился заголовок, солидный... Но действительно, все современные операционные системы выглядят именно так, как они выглядят, лишь потому, что во всех современных процессорах (по крайней мере во всех получивших распространение) используются одни и те же принципы защиты. Защита процессора - это совокупность приемов, с помощью которых процессор может контролировать выполнение кода, например: Запретить выполнение определенных инструкций Запретить доступ к определенным областям памяти Запретить доступ к определенным внешним устройствам В большинстве современных процессоров используется концепция двух уровней привилегий (уровень Супервизора и уровень Пользователя). Как правило, если текущий код выполняется с уровнем Супервизора, то ему разрешено делать все, что угодно. Если же это пользовательский код, то вступают в силу вышеуказанные ограничения. Фирма Intel пошла дальше и в процессорах архитектуры IA-32 используется не два, а аж четыре уровня привилегий, которые именуются кольцами и отсчитываются от нуля до трех. Причем 0 - наиболее привилегированный уровень, а 3 - наименее привилегированный. Можно считать, что 0 - уровень Супервизора, а 3 - уровень Пользователя. Остальные уровни привилегий в принципе не нужны и обычно не используются. Классический вариант архитектуры ОС таков: ядро системы работает на уровне Супервизора, а пользовательские задачи на уровне Пользователя, причем пользовательские задачи не могут вмешаться в работу друг-друга или ядра, а само ядро (оно же Супервизор) может делать все, что угодно. Именно по такой схеме построены Windows NT, Linux, FreeBSD, OpenBSD, NetBSD Возникает вопрос - как пользовательские приложения могут вызывать функции ядра? Очень просто - процессоры предоставляют механизм переключения уровня привилегий. Какой же смысл тогда в защите, если Пользователь может в любой момент стать Супервизором? Дело в том, что: Супервизор может стать Пользователем, выполняя любой код Пользователь может стать Супервизором лишь выполняя доверительный код Доверительный код - это означает, что Пользователь может выполнять в режиме Супервизора только тот код, который Супервизор разрешит ему выполнять. Внешне это выглядит, как предоставление системой каких-либо функций пользовательским приложениям (часто это называют передачей управления системе, но это не совсем верный, хотя и устоявшийся термин, и мы с вами тоже будем его использовать). Например вызов функции открытия файла open() в UNIX означает, что при передаче управления на точку входа функции open() пользовательская программа получает привилегии Супервизора (благодаря чему становится возможным доступ к диску) Этот механизм передачи управления системе называется механизмом системных вызовов. О возможных его реализациях мы поговорим в следующий раз, т.к. сегодняшний материал и так достаточно сложен. Если вам что-то непонятно в системе защиты процессоров - пишите, - в ней вы должны обязательно разобраться!
Хороший получился заголовок, солидный... Но действительно, все современные операционные системы выглядят именно так, как они выглядят, лишь потому, что во всех современных процессорах (по крайней мере во всех получивших распространение) используются одни и те же принципы защиты. Защита процессора - это совокупность приемов, с помощью которых процессор может контролировать выполнение кода, например:
В большинстве современных процессоров используется концепция двух уровней привилегий (уровень Супервизора и уровень Пользователя). Как правило, если текущий код выполняется с уровнем Супервизора, то ему разрешено делать все, что угодно. Если же это пользовательский код, то вступают в силу вышеуказанные ограничения.
Фирма Intel пошла дальше и в процессорах архитектуры IA-32 используется не два, а аж четыре уровня привилегий, которые именуются кольцами и отсчитываются от нуля до трех. Причем 0 - наиболее привилегированный уровень, а 3 - наименее привилегированный. Можно считать, что 0 - уровень Супервизора, а 3 - уровень Пользователя. Остальные уровни привилегий в принципе не нужны и обычно не используются.
Классический вариант архитектуры ОС таков: ядро системы работает на уровне Супервизора, а пользовательские задачи на уровне Пользователя, причем пользовательские задачи не могут вмешаться в работу друг-друга или ядра, а само ядро (оно же Супервизор) может делать все, что угодно. Именно по такой схеме построены Windows NT, Linux, FreeBSD, OpenBSD, NetBSD
Возникает вопрос - как пользовательские приложения могут вызывать функции ядра? Очень просто - процессоры предоставляют механизм переключения уровня привилегий. Какой же смысл тогда в защите, если Пользователь может в любой момент стать Супервизором? Дело в том, что:
open()
У некоторых подписчиков возник вопрос, можно ли использовать при разработке ОС такие языки, как Pascal или C++.
Основная проблема ЯВУ при разработке ОС заключается в том, что с их помощью нельзя контролировать на низком уровне поведение процессора и внешних устройств, поэтому ассемблер нам понадобится в любом случае. Другое дело, что языки высокого уровня обычно имеют возможность вставки ассемблерного кода в исходник, поэтому использование чистого ассемблера можно свести к минимуму (только для загрузчика). Более того, некоторые ОС изолируют весь низкоуровневый код в т.н. HAL (hardware abstraction layer), а вся остальная часть системы написана только на ЯВУ и, следовательно, портабельна на другие архитектуры
В связи с этим предлагаю разрабатывать основную часть системы на языке Си, а всю аппаратно-зависимую часть - на ассемблере. Если вы несогласны - пишите
На сегодня все, уважаемые подписчикиКак всегда, мой почтовый ящик открыт для вас: lonesome@lowlevel.ru Также вы можете задавать интересующие вас вопросы в форуме lowlevel.ru Всего наилучшего! 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}