OSDev

для всех
Текущее время: 28 мар 2024, 16:59

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: ОС? Или с чего же начать...
СообщениеДобавлено: 31 янв 2011, 16:30 

Зарегистрирован: 31 янв 2011, 16:26
Сообщения: 5
Здравствуйте. Решился взяться за написание ОС. Хотелось бы получить несколько советов и ответов на вопросы.
Первое прочитал что основные компоненты ОС:
- загрузчик
- ядро
- драйвера
- API
А значит с чего стоит начать? Статьи, литература... Думаю нужно начать с написания загрузчика. Что и где можно почитать о его написании? Также интересует структура ядра и драйвера, литература о них и их устройстве. Сейчас потихоньку купил и начал читать:
Э.Таненбаум Современные операционные системы. Но данная книга в основном содержит теорию(поэтому и начал с теории устройства).
Так что на данный момент меня интересуют вопросы написания, как, что, на чем.

Имею опыт в программировании:
C++
Java
Delphi


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС? Или с чего же начать...
СообщениеДобавлено: 31 янв 2011, 20:03 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Что касается языков, то на Жабе или там Си-шарпе ОС как таковую не напишешь: созданные на этих языках программы ведь работают не с реальным железом, а на виртуальной машине, а соответственно, ОС на них можно сделать для этой виртуальной машины, но не для реальной. Ну а "нормальные" компилируемые языки (Си/Си++, Паскаль-Модула-Оберон-Ада, да хоть Фортран с Коболом) для осеписания пригодны, хотя и в разной степени. Большинство выбирают Си/Си++, хотя, например, лично я категорический противник этих языков из-за их ужасного синтаксиса и крайне низкой надёжности (в Паскале и тем более в Аде многие ошибки, элементарно совершаемые на Си/Си++, допустить невозможно в принципе). Правда, тут надо смотреть ещё на доступность инструментария. На Дельфях, например, большую часть модулей ОС написать можно, но это весьма непросто (надо, в частности, делать свой модуль System, поскольку штатный, понятное дело, жёстко завязан на Винду); кроме того, пока существует лишь 32-разрядный компилятор.

Однако ни на одном языке высокого уровня ОС целиком не сделаешь: есть ряд вещей, которые можно реализовать только на ассемблере; соответственно, знание его является абсолютно необходимым. Кроме того, без глубокого понимания того, как работает железо (и, в частности, процессор), за ОС браться бесполезно, ведь управление железом -- одна из главных функций ОС. Ну а разобраться с железом... Годы чтения всяких умных книжек, а главным образом -- буржуйских спецификаций (на буржуйском же языке, понятное дело), плюс эксперименты, ну и т.д. и т.п. В общем, дело долгое и сложное, хотя и подъёмное.

Что же касается чтения, то в первую очередь как раз теория и нужна. ОС -- слишком сложная вещь, чтобы можно было ограничиться пошаговыми инструкциями "сделай А, потом Б, потом Ц"; тут нужно, чтобы осеписатель действительно понимал, что он делает, а не механически повторял. Можно написать книжку "Дельфи за 21 день", прочтя которую, читатель сможет делать не слишком сложные программы (правда, при этом он не будет понимать, как же в реальности эти программы работают, поскольку работа дельфозной библиотеки целиком и полностью остаётся за кадром подобных книг, а 90% работы именно в библиотеке выполняется), однако с ОС такой номер не пройдёт.

Кстати говоря, надо бы неплохо изучить существующие системы (хотя бы одну), чтобы понять, как можно решить ту или иную задачу. Не факт, что существующее решение окажется оптимальным, но оно, по крайней мере, будет рабочим, а заодно даст пищу для размышлений.

Ну а собственно написание ОС... Как пишутся прикладные программы? По большому счёту, начинается с определения, а что же эта программа должна делать (грубо говоря, какие данные у неё на входе, что она с ними делает и какие данные даёт на выходе). ОС существуют не ради самих себя, а для обеспечения работы прикладных программ; соответственно, исходная информация для создания ОС -- это что она должна предоставлять прикладным программам, т.е. АПИ этой ОС. Как этот АПИ будет реализован, уже вторично. Например, стандарт POSIX (фактически это набор заголовочных файлов Си плюс набор утилит) можно реализовать кучей разных способов, но, если ОС реализует этот стандарт в полном объёме, то любая прикладная программа, использующая соответствующий АПИ, сможет без проблем работать на любой такой ОС (максимум, что потребуется, -- это перекомпиляция программы).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС? Или с чего же начать...
СообщениеДобавлено: 31 янв 2011, 23:18 

Зарегистрирован: 31 янв 2011, 16:26
Сообщения: 5
SII писал(а):
Что касается языков, то на Жабе или там Си-шарпе ОС как таковую не напишешь: созданные на этих языках программы ведь работают не с реальным железом, а на виртуальной машине, а соответственно, ОС на них можно сделать для этой виртуальной машины, но не для реальной. Ну а "нормальные" компилируемые языки (Си/Си++, Паскаль-Модула-Оберон-Ада, да хоть Фортран с Коболом) для осеписания пригодны, хотя и в разной степени. Большинство выбирают Си/Си++, хотя, например, лично я категорический противник этих языков из-за их ужасного синтаксиса и крайне низкой надёжности (в Паскале и тем более в Аде многие ошибки, элементарно совершаемые на Си/Си++, допустить невозможно в принципе). Правда, тут надо смотреть ещё на доступность инструментария. На Дельфях, например, большую часть модулей ОС написать можно, но это весьма непросто (надо, в частности, делать свой модуль System, поскольку штатный, понятное дело, жёстко завязан на Винду); кроме того, пока существует лишь 32-разрядный компилятор.

Однако ни на одном языке высокого уровня ОС целиком не сделаешь: есть ряд вещей, которые можно реализовать только на ассемблере; соответственно, знание его является абсолютно необходимым. Кроме того, без глубокого понимания того, как работает железо (и, в частности, процессор), за ОС браться бесполезно, ведь управление железом -- одна из главных функций ОС. Ну а разобраться с железом... Годы чтения всяких умных книжек, а главным образом -- буржуйских спецификаций (на буржуйском же языке, понятное дело), плюс эксперименты, ну и т.д. и т.п. В общем, дело долгое и сложное, хотя и подъёмное.

Что же касается чтения, то в первую очередь как раз теория и нужна. ОС -- слишком сложная вещь, чтобы можно было ограничиться пошаговыми инструкциями "сделай А, потом Б, потом Ц"; тут нужно, чтобы осеписатель действительно понимал, что он делает, а не механически повторял. Можно написать книжку "Дельфи за 21 день", прочтя которую, читатель сможет делать не слишком сложные программы (правда, при этом он не будет понимать, как же в реальности эти программы работают, поскольку работа дельфозной библиотеки целиком и полностью остаётся за кадром подобных книг, а 90% работы именно в библиотеке выполняется), однако с ОС такой номер не пройдёт.

Кстати говоря, надо бы неплохо изучить существующие системы (хотя бы одну), чтобы понять, как можно решить ту или иную задачу. Не факт, что существующее решение окажется оптимальным, но оно, по крайней мере, будет рабочим, а заодно даст пищу для размышлений.

Ну а собственно написание ОС... Как пишутся прикладные программы? По большому счёту, начинается с определения, а что же эта программа должна делать (грубо говоря, какие данные у неё на входе, что она с ними делает и какие данные даёт на выходе). ОС существуют не ради самих себя, а для обеспечения работы прикладных программ; соответственно, исходная информация для создания ОС -- это что она должна предоставлять прикладным программам, т.е. АПИ этой ОС. Как этот АПИ будет реализован, уже вторично. Например, стандарт POSIX (фактически это набор заголовочных файлов Си плюс набор утилит) можно реализовать кучей разных способов, но, если ОС реализует этот стандарт в полном объёме, то любая прикладная программа, использующая соответствующий АПИ, сможет без проблем работать на любой такой ОС (максимум, что потребуется, -- это перекомпиляция программы).

Я это прекрасно понимаю. Можете посоветовать что-либо из литературы? Допустим по устройству ос, драйверам. Ну и конечно больше интересует что из книг можно почитать по асемблеру.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС? Или с чего же начать...
СообщениеДобавлено: 01 фев 2011, 09:44 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
С этим весьма тяжело: я учился давным-давно, на совершенно другой литературе и другой технике; соответственно, с современными книгами учебного толка практически не знаком (по слухам, по большому счёту). По ассемблеру часто хвалят Зубкова и ещё кого-то, по железу главным источником из книг является достаточно старая парочка "Программирование дисковых подсистем" и "Программирование на аппаратном уровне" (автор -- Кулаков). Эти две у меня есть, сам иногда пользуюсь (правда, редко, в т.ч. и из-за того, что по работе сосредоточен на программировании под микроконтроллеры); могу сказать, что они весьма полезны, но, к сожалению, содержат ошибки, что иногда создаёт большие проблемы, особенно для любителей копипастинга (скопировать приведённый пример и заставить работать, не понимая, что там делается). В общем, соображалка должна быть включённой всегда :)

Подробное изучение процессора и периферии, особенно современной, возможно только по официальным спецификациям, а они все на английском, так что к этому нужно быть готовым. В частности, книги по ассемблеру ограничиваются либо программированием под ДОС (в реальном режиме), либо прикладным программированием под Винду и дают очень мало сведений о том, что необходимо для системного программирования. Кроме того, там не упоминаются сколько-нибудь новые команды (а среди них есть крайне полезные именно для системных вещей, хотя основная масса, конечно, носит довольно узкий прикладной характер), не обсуждаются "продвинутые" возможности устройства управления памятью и т.п. -- без всего этого можно прожить и даже создать работоспособную ОС (работали ж системы на 80386, где всех этих "продвинустей" не было), но лучше всё ж быть знакомым с современным уровнем, а для этого придётся обращаться к официальным мануалам Интел и/или АМД (обычно к первым, даже если на компьютере стоит процессор от АМД: основная масса вещей у них одинакова, поскольку все эти процессоры относятся к одной и той же архитектуре IA-32, ну а зависящие от конкретной модели вещи разработчику ОС не нужны, такими штуками занимается только БИОС).

Наконец, не стоит забывать о том, что программирование не сводится к владению одним или несколькими языками программирования. В первую очередь это "алгоритмистика", умение находить эффективные пути решения стоящих задач. Например, при создании ОС не обойтись без интенсивного динамического выделения и освобождения памяти, работы со списками и т.п., причём "спрятаться" за готовой библиотекой (например, STL в Си++), которая сама за программиста решает основную массу подобных вещей, либо вообще невозможно, либо очень неэффективно. Кроме того, нельзя пользоваться многими стандартными библиотечными функциями языка высокого уровня, поскольку они "завязаны" на конкретную ОС, а тут как раз ОС и создаётся; следовательно, если принято решение разрабатывать её в основном на ЯВУ, придётся по мере надобности писать свою библиотеку (например, GetMem в Паскале или операция new в Си++ в реальности сводятся к выполнению кучи кода, в конечном итоге обращающегося к VirtualAlloc или чему-нибудь в этом роде из Windows API). Изрядную часть подобных функций проблематично сделать (во всяком случае, по-человечески, а не через задницу) без "общеалгоритмической" подготовки. Если Вы в подобных вопросах достаточно сильны, то всё в порядке, если же чувствуете, что слабоваты, следовало бы почитать что-нибудь и на эту тему (ИМХО, лучшими по-прежнему остаются Вирт и Кнут, причём обычно вполне хватает первого, второй полезен для очень глубокого погружения во всякие специфические вещи вроде алгоритмов сортировки и поиска, что на практике нужно редко, хотя совсем лишним, конечно, не будет).

Пы.Сы. Лучше большие куски не цитировать, если и так понятно, о чём речь: загромождает форум без всякой нужды...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС? Или с чего же начать...
СообщениеДобавлено: 01 фев 2011, 12:44 

Зарегистрирован: 31 янв 2011, 16:26
Сообщения: 5
Вот собственно подобрал несколько книг, что скажете. И в каком порядке начинать тогда покупать и читать?
http://www.ozon.ru/context/detail/id/2637682/
http://www.bhv.ru/books/book.php?id=184270
http://www.ozon.ru/context/detail/id/1352955/
http://www.ozon.ru/context/detail/id/4803785/
http://www.ozon.ru/context/detail/id/1335648/
http://www.ozon.ru/context/detail/id/2527041/
http://www.bhv.ru/books/book.php?id=836


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС? Или с чего же начать...
СообщениеДобавлено: 01 фев 2011, 13:34 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Alexeiko писал(а):
Вот собственно подобрал несколько книг, что скажете. И в каком порядке начинать тогда покупать и читать?
http://www.ozon.ru/context/detail/id/2637682/


Кажется, я её видел. Если это действительно она, то весьма полезная книга, хотя, по сути, не учебник. Правда, в Вашем случае это вряд ли будет проблемой: если у Вас имеется неплохой опыт работы на ЯВУ (Дельфи, Си++), то, надо полагать, Вы уже знаете, что такое программирование, и самым-самым азам учиться не требуется.

Цитата:
http://www.bhv.ru/books/book.php?id=184270


Работать напрямую с железом из-под Винды невозможно в принципе, если не писать драйвер режима ядра -- ну а это совершенно отдельная сложная и объёмная тема. Судя по аннотации, в каком-то объёме она затронута, но уместить в одной книге несколько совершенно разных тем невозможно. Боюсь, что в результате там будет очень поверхностное изложение ряда вопросов, но в итоге недостаточно ни для самостоятельной работы с железом на голой машине (без ОС, что, по понятным причинам, требуется для создания своей ОС), ни для хорошего понимания того, как работает ввод-вывод в Винде (а разобраться с этим было бы очень полезно: драйверная модель WDM хорошо продуманна и весьма эффективна, а заодно проверена временем: она восходит к драйверам ОС RSX-11 начала 1970-х годов, откуда в модернизированном виде перекочевала в VAX/VMS, а уже оттуда -- в ВинНТ, что, в общем-то, неудивительно: разработчиком первых двух систем -- написанных, кстати, целиком на ассемблере, а потому немыслимо по нынешним меркам компактных и эффективных, -- и главным архитектором третьей был Дэвид Катлер; правда, начиная с Вислы, используют главным образом WDF, но она на самом деле является "объектно-ориентированной" надстройкой над WDM, более простой и удобной в использовании, но менее эффективной и скрывающей многие детали реализации). В общем, определить полезность сей книги затрудняюсь, но в любом случае она не является "товаром первой необходимости".

Цитата:
http://www.ozon.ru/context/detail/id/1352955/


Есть такая буква. Освещается ряд специфических вопросов, но к числу книг первой необходимости явно не относится. Кроме того, уже довольно прилично устарела. Если нет нужды работать со SCSI, то надобность в ней сомнительна.

Цитата:
http://www.ozon.ru/context/detail/id/4803785/


Очередное переиздание классики, которой примерно полвека :) Собственно, об этой книге я и говорил, упоминая Вирта. Если хорошо знакомы со всякими там списками, деревьями и т.д. и т.п., то нужды в ней нет, но в качестве учебника по базовым структурам данных и алгоритмам лучше вряд ли что существует: всё сводится к ней же с различными вариациями (например, как-то попадалась похожая книжка, но с использованием для примеров Си++, а не Модулы/Оберона или, как в первом издании, Паскаля -- что, ИМХО, хуже, поскольку запутанный синтаксис Си/Си++ ухудшает восприятие текста программы и заставляет сосредотачиваться на самом языке, а не на алгоритме).

Цитата:
http://www.ozon.ru/context/detail/id/1335648/
http://www.ozon.ru/context/detail/id/2527041/


Не менее классический труд примерно того же возраста. Превосходит Вирта во всём, кроме одного: доступности и компактности. То, что у Вирта излагается на 20 страницах, у Кнута будет на 200 -- с кучей дополнительных комментариев, нетривиальными математическими выкладками для расчёта эффективности того или иного алгоритма и т.п. Оправдана ли повышенная глубина и связанная с ней сложность изложения -- решать не мне.

Цитата:
http://www.bhv.ru/books/book.php?id=836


Довольно толковая книжка по виндузовым драйверам (особенно учитывая её небольшой объём, ведь тема-то очень обширная и сложная). В принципе, можно использовать, разбираясь с организацией ввода-вывода в ВинНТ, хотя далеко не всё там изложено хотя бы в силу ограниченного объёма издания.

Кстати говоря, по устройству и работе Винды вообще -- Соломон и Руссинович. По Висле на русском её вроде бы ещё нет, по 2000/ХП/2003 -- существует, причём вышла довольно давно. Если говорить об изучении принципов работы операционных систем вообще, то она будет весьма полезной, хотя это не учебник, и понять её неподготовленному читателю будет проблематично. Вероятно, по устройтству осей для начала лучше всё-таки Танненбаум (это ж учебник, по сути), хотя я его не читал за отсутствием такой нужды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС? Или с чего же начать...
СообщениеДобавлено: 01 фев 2011, 13:44 

Зарегистрирован: 31 янв 2011, 16:26
Сообщения: 5
Ну тогда думаю продолжу читать Таненбаума и прикуплю пока http://www.ozon.ru/context/detail/id/2637682/
А вот про драйверы и дисковые подсистемы найти проблематично книги...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС? Или с чего же начать...
СообщениеДобавлено: 01 фев 2011, 14:01 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
На самом деле не так уж они и нужны, всё равно для серьёзных вещей придётся пользоваться главным образом буржуйскими спецификациями. Справочную информацию по отдельным темам можно и на русском найти (кое-что, например, есть на ru.osdev.wikia.com). Учебников же на всё и про всё в принципе не существует: начиная с некоторого уровня, человек должен уметь думать полностью самостоятельно, пользуясь лишь справочной информацией.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС? Или с чего же начать...
СообщениеДобавлено: 01 фев 2011, 14:47 

Зарегистрирован: 31 янв 2011, 16:26
Сообщения: 5
Посмотрю. Вот что ешё попалось по алгоритмам http://www.ozon.ru/context/detail/id/5531965/


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB