Перспективы создания ОС

Сколько вы знаете операционных систем? Если вы не разработчик какой-то крупной фирмы по работе с данными высочайшей важности и не разработчик машин, работающих на основе компьютерной обработки информации, то вряд ли ваш запас названий будет шире, чем Windows, Windows Mobile и Linux (заранее извиняюсь перед теми, кто знает больше). А между тем операционных систем очень много. Их разрабатывают как большие компании, так и одиночные разработчики, стремящиеся познать, "как оно работает".

И действительно, несколько лет назад я думал, что процесс написания ОС — дело лишь избранных. Всерьез заинтересовавшись этим, я начал поиск операционных систем, разработанных одиночными программистами. Каково же было мое удивление, когда я наткнулся на работу некоего студента, который в качестве дипломного проекта написал операционную систему. Интерес был подогрет тем, что на сайте разработчика был выложен исходный код ОС, написанный на MASM. Откомпилировать проект мне так и не удалось, но чувство присутствия чего-то интересного мне осталось. Впоследствии я нашел очень большой каталог самодельных ОС на сайте www.osdev.org. К сожалению, примерно с лета 2004 года этот сайт был полностью переделан, и теперь весь каталог исчез. Однако я понял то, что большинство разработчиков хотят стать очередными нечаянными революционерами подобно Линусу Торвальдсу — разработчику операционной системы Linux. Большинство таких проектов закрывалось, дойдя до стадии написания ядра, работающего в режиме 16-битной адресации, и банальной командной строки. Некоторые проекты шли дальше, представляя какие-то планы на будущее и потихоньку обновляясь. И уж совсем немногие разработчики добивались чего-то действительно стоящего.

Первая основа написания ОС — это полное осознание того бесспорного факта, что без чего-то нового твой проект — это еще пять минут потраченного конечным пользователем времени. На данный момент более-менее смыслящие в своем деле разработчики ставят в основу своего проекта микроядро. Для непосвященных замечу, что ядро ОС — это специально составленная программа, которая руководит распределением памяти, контролирует процессы и системные функции. Микроядро наряду с экзоядром — это два наиболее перспективных типа ядер, где первое отличается великолепной защитой ОС, а второе — невероятной скоростью. Большинство ядер существующих ОС (как любительских, так и довольно известных) построено по принципу монолитного ядра. Этот тип ядер базируется на более старых концепциях, довольно простых в реализации. Суть такого принципа заключается в том, что в ядро помещается все начиная с функции работы с экраном и заканчивая функциями работы с винчестерами. Само собой разумеется, ядро получается большим и однонаправленным, что практически лишает систему возможности перестроить ядро. Гораздо больше преуспела в этом плане микроядерная архитектура. Микроядро предоставляет программисту только некую платформу, на которую он может "намотать" все, что пожелает. В отличие от монолитного ядра, микроядро пользуется внешними модулями и драйверами, которые позволят выполнять все те же операции с дисками или экраном. Наряду с этим микроядро имеет относительно небольшой размер, так что грамотно спроектированное ядро может спокойно работать на старых машинах. Что касается функций микроядра, то главная его задача, помимо инициализации всей системы, — выполнение функций IPC (Inter-Process Communication — взаимодействие процессов). И, на мой взгляд, важнейшее преимущество микроядра заключается в том, что на хорошем микроядре может быть построена какая угодно система, будь то ваша ОС или ОС тех, кто вас даже не знает. То есть на одном ядре можно построить не одну и даже не две, а больше операционных систем, совершенно не похожих друг на друга. К тому же, микроядро обладает хорошей защищенностью. Это достигается благодаря тому, что программисту не разрешается выполнять никаких привилегированных функций из программы кроме как путем использования системных вызовов, которые контролирует ядро и в нужный момент может предотвратить порчу важных данных.

Немного об экзоядрах. Архитектура экзоядер — это наиболее новое направление в строительстве операционных систем. Что предоставляет нам в распоряжение экзоядро? Ответ: все! Возможности для деятельности приложений практически безграничны. Каждая программа имеет полное право записывать информацию напрямую на винчестер и в память, что в системах типа Windows NT кажется просто катастрофой. В экзоядерных ОС нет функций, предоставляющих стандартный доступ к данным. Все функции заменены стандартными библиотеками для программистов, что, однако, нисколько не мешает им удобно писать программы. Конечно, легко понять, что размер программ для экзоядерных ОС возрастет, но в свете соотношения возможности/недостатки это кажется просто мелочью.
Что же выбрать? Если вы — всего лишь программист, пытающийся понять принципы работы операционных систем, ответ однозначен: монолитное ядро. Проектирование этого ядра не создаст трудностей при знании архитектуры процессоров Intel. Если же у вас большие планы, то здесь действуйте в зависимости от ситуации: если преобладающий фактор для вас — скорость, то изучайте экзоядра. Если же вам нужна защита, то ваш выбор должен пасть на микроядро. Хотя дополнительно в выбор вклинивается еще один фактор — желание изучать технологии и наличие определенного опыта. Дело в том, что экзоядро гораздо сложнее проектировать потому, что оно должно включать в себя очень важную функцию — проверку бинарного кода программы, которая запускается в данный момент. Так как программисту предоставляется возможность полностью контролировать содержимое источников данных (память, винчестеры и др.), необходимо пресечь любые попытки записать что-то туда, куда записывать явно ничего нельзя. Из этого следует вывод, что сама операционная система должна, по-сути, декомпилировать приложение, выявить попытки записи в память и проверить, можно ли это сделать. Безусловно, если программа начинает обращаться по адресу, который вычисляется динамически, отловить несанкционированное изменение данных очень сложно. Тут в дело можно пустить модули, проверяющие программу в процессе ее работы, но, я думаю, это недостаточно надежно. Реально можно написать хорошее экзоядро, месяцами вылизывая концепцию ядра. Но если это у вас получится — считайте, что ваши труды не пропали зря. Так что решайте сами.

Вторая основа написания ОС — это понимание того, что ты должен сделать. Хотя этот пункт необязателен для тех, кому просто хочется узнать об общих принципах работы ОС. Важнейшая часть написания операционной системы — наличие четко составленной концепции. Примером проекта с весьма революционными идеями может служить 3OS (www.3os.ru). Разработчики этого проекта более двух (!) лет составляли организацию операционной системы. Противоположностью 3OS может служить очень известный проект Menuet. Его автором является Вилле Турьянмаа — земляк Торвальдса. К сожалению, "концепцией" этой ОС стал только интерес автора к тому, можно ли написать операционную систему на ассемблере (о чем говорит сам автор в интервью — www.coolthemes.narod.ru). Из-за этого в рядах пользователей Menuet происходит разлад, некоторые даже бросают работу над проектом. Из-за отсутствия генерального плана развития создается впечатление, что Вилле сам не знает, чего он хочет. Недавно он реализовал Menuet для 64-битного процессора AMD, но недоделок даже в самой последней версии Menuet OS тьма. Весьма поучительный пример.
Третья основа написания ОС — выбор лицензии. Его обуславливают несколько факторов. Для выбора закрытого типа лицензии вы должны иметь относительно большой штат соразработчиков (примерно 5 человек как минимум). При этом ваши идеи должны быть действительно передовыми, а не повторять Linux или Windows. Из-за этого (и, возможно, из-за своих морально-этических соображений) подавляющее большинство разработчиков выбирает тип лицензии GPL — General Public License. Этот тип лицензии предполагает, что исходный код продукта должен быть открытым, и каждый человек имеет право изменять его для своих нужд. Таким образом, более-менее перспективные проекты развиваются усилиями десятков, а может, даже и сотен, программистов по всему миру.

И, наконец, четвертая основа — ощущение того, что это вам надо. Писать операционную систему насильно просто нереально. Если вам по душе какой-то проект — поговорите с администрацией или главными разработчиками. Возможно, вас примут как разработчика или консультанта. В любом случае у вас вряд ли что-то получится, если вы будете чувствовать, что вам это не надо. Выбирайте не рациональным умом, а чувствами. Будьте готовы просиживать ночи с книгами, разбирая каждую деталь того или иного компонента ОС. И ничто не пропадет бесследно: полученные знания вам очень пригодятся. "Зачем это нужно?" — спросите вы. Отвечаю. Далеко не секрет, что некоторые компании избирают не путь готовых решений, отдавая предпочтение Microsoft Windows, Linux или тот же QNX, а путь создания системы под себя. Этим компаниям, естественно, нужны программисты, которые решили не ограничивать себя банальным Object Pascal. К тому же, не исключено, что ваш проект может купить какая-то компания. Разработчики, которые знают пути применения всему, что находится на кристалле кремния, очень ценятся. По крайней мере, их уважают.

Что же надо для того, чтобы начать разработку ОС? Безусловно, вы должны знать хотя бы азы архитектуры процессора. Посетите сайт www.wasm.ru. Это довольно интересный и популярный русскоязычный ресурс по архитектуре процессора. Особого внимания заслуживает портал для разработчиков, находящийся по адресу www.developer.intel.com. Здесь вы найдете самые свежие спецификации IA-32, обширнейшую документацию и даже сможете бесплатно заказать книги. Сразу предупреждаю жителей Беларуси: с получением книг могут возникнуть большие проблемы, так что лучше скачайте 22 мегабайта System Guide. Не лишним будет упомянуть сайт www.lowlevel.ru. Сайт создан разработчиками для разработчиков. Хоть он и не обновляется очень продолжительное время, но на нем лежат 26 номеров рассылки для начинающих программистов и вдобавок всегда работает форум. Особого внимания заслуживают сайты www.osrc.info и www.3os.ru. На них уже не раз велись жесточайшие споры относительно организации новых операционных систем, а также устройства уже существующих. Также новичкам можно посоветовать сайт www.codenet.ru. Здесь вы найдете давно заброшенную, но работающую операционную систему под названием GlukOS. Конечно, название говорит само за себя, но проект достоин внимания еще и потому, что позволяет реализовать некий прототип многозадачности в режиме 16-битной адресации.

Чего же мне еще остается пожелать разработчикам ОС? Вот чего: искать, изобретать и добиваться! Как бы то ни было, компьютер — это не только Windows и Linux, какими бы монстрами они ни были. Всегда найдется человек, который заметит что-то блестящее среди груды мусора, нечто такое, что может перевернуть представления о компьютере. Не смотрите на других. Оценивайте свою повседневную работу за компьютером и сравнивайте с тем идеалом работы, который хотели бы видеть вы. И тогда все получится. И чаще общайтесь с умными людьми. Если программист хоть что-то смыслит в конкретной области — он вам поможет. Иначе он не программист.

Влад Маслаков, Vladislav_1988@mail.ru


Компьютерная газета. Статья была опубликована в номере 07 за 2005 год в рубрике soft :: ос

©1997-2024 Компьютерная газета