WYOS - Выпуск №18
Организация и рассуждалки
Roman I Khimov, Четверг, 01 Июль 2004, 15:10
Напиши свою ОС! #18Доброе утро всем!И не говорите мне что сейчас день/вечер/ночь. На самом деле - утро. Потому как утреннюю бодрость и настроение можно почувствовать и в другое время суток.
С вами Роман, почти как всегда по пятницам
. Я довольно много думал о том, что же мне делать с рассылкой - я практически не успеваю ее делать, поэтому и сам не рад, да и вам, наверное, обидно. Но, с другой стороны, я готов ее делать, особенно при помощи commrade'а, но в несколько другом стиле. Поэтому я попрошу вас написать мне - какой вы хотите видеть рассылку Write Your Own OS. Это будет рассылка, в которой будет много технических деталей, программировани на ассемблере, C, примеров реализации конкретных вещей, или же здесь будет больше обсуждения/размышлений над общими проблемами операционных систем.
Ну а пока вы затачиваете перья (хотя скорее - разминаете пальцы
, собираясь написать мне письмо, я вам расскажу о том, что же нам делать дальше. После того, как мы разобрались с загрузчиками.
Вот она я - ОС. А что делать-то?Что же делать свежезагруженно операционной системе?! Давайте подумаем. Мы загрузили ядро ОС, передали ему управление, дальше мы, естественно, хотим иметь возможность запускать наши приложения, выполнять какие-то конкретные задачи. Вообще говоря, вариантов дальнейшего процесса загрузки всего необходимого - масса, но самое главное то, что после окончания процесса загрузки мы хотим получить систему, с которой можно будет взаимодействоваь и заставлять ее работать над необходимыми нам задачами.
А что для этого нужно? Для этого необходимо, чтобы у нас были все необходимые драйвера для нашего оборудования, для этого необходимы различные интерфейсы для работы с компьютером. Плюс ко всему мы наверняка захотим, чтобы у нас какие-нибудь задачи выполнялись всегда, на фоне, и чтобы нам не нужно было запускать их ручками. То есть мы хотим запускать их автоматически. Системные сервисы/демоны также входят в число таких программ - это окружение операционной системы, но мы привыкли считать их частью операционной системы, так как от их работы очень многое зависит.
Соответственно, после загрузки ядра, дальнейшая загрузка должна развернуть все необходимые сервисы и программы. Как это делать - вопрос другой. Но важно то, что мы должны уметь это делать.
Маленькое отступлениеПока я писал это у меня возникла идея - если уж наша рассылка называется
Write Your Own OS, то может нам в рамках этой рассылки написать маааленькую, но операционную систему? Кривую, косую, дурацкую, глупую, но минимально работающую и понятную? Высказывайтесь на форуме или мне на почту.
Вернемся...Теперь давайте задумаемся - а как же всем этим хозяйством управлять, мы же хотим иметь кучу программ одновременно работающих?! Процессор у нас один, к сожалению, поэтому придется его делить между различными задачами - как это сделать?
Для начала стоит задуматься - что для этого потребуется. Очевидно, что если процессор будет выполнять код программы, то он будет его выполнять ровно столько, сколько это необходимо программе. Плюс к тому процессор будет выполнять любые команды программы - что не есть хорошо, ведь у нас в системе ресурсы поделены между разными программами и если каждая программа будет использовать ресурсы как хочет - будет полнейшая неразбериха, которую способна уладить операционная система. Но для этого нам понадобится процессор, который будет иметь хотя бы два состояния - привелигерованне и обычное. Привелигерованне - это состояние, в котором исполняется код операционной системы, обычное - режим приложений, когда доступны не все низкоуровневые механизмы.
Если посмотреть на архитектуру x86, то мы увидим, что нам предоставлено четыре кольца защиты, четыре уровня исполнения. При этом все распространенны на сегодняшний день операционные системы используют только два - нулевой и третий. Нулевой - это уровень ОС, третий - уровень приложений.
Хорошо, но как же переключаться между этими режимами, как же заставить выполняться код операционной системы? Ответ очень прост - обработка прерываний возложена на операционную систему (так как считается, что только она может правильно работать с оборудованием на низком уровне), поэтому при возникновении прерывания текущая задача прерывается и управление передается операционной системе, которая обрабатывает это прерывание, после чего запускает приостановленну задачу.
Что при этом важно - прерывание вообще говоря, это один из способов/методов ввода-вывода, когда устройство сообщает о своей готовности к вводу/выводу путем установления прерывания. Очевидно, что если мы будем просто ждать ввода-вывода, то мы получим несбалансированую систему, так как приложение будет выполняться до тех пор, пока не будет ввода/вывода, а это несправедливо по отношению к другим приложениям, так как им тоже необходимо выполняться. Примерно такая схема использовалась в Windows 95/98/Me.
А для нормального распределения ресурсов нам бы неплохо иметь какие-то более гибкие инструменты. Например, таймер! Перед тем как поставить задачу на исполнение мы взводим таймер на какое-то время. По истечении этого времени таймер выдает прерывание, управление получает операционная система и планирует дальнейшую работу системы.
ПослесловиеПока что я хотел бы завершить выпуск, дальнейшая судьба рассылки в ваших руках, пишите мне и я подумаю, как и куда нам двигаться дальше. Вполне закономерно было бы рассмотреть приложения под микроскопом, поговорить о вводе/выводе, разделении ресурсов... Вопросов очень много, но надо определиться, как вы хотите о них узнать - в общих терминах, или более конкретно, при реализации?
И еще хотелось сказать о OSRC - пока что он не готов, и ближайшие недели две ждать его точно не стоит, поскольку я занимаюсь этим сейчас один, а сделать надо многое.
это контент от Центр информации по операционным системам
( http://www.osrc.info/plugins/content/content.php?content.22 )