Из записок полного чайника (О разработке своей ОС)

Тема в разделе "WASM.HEAP", создана пользователем newMaximYCH, 25 сен 2007.

Статус темы:
Закрыта.
  1. newMaximYCH

    newMaximYCH New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2007
    Сообщения:
    209
    Итак, хочу чуть чуть обобщить вешесказнное на васме, других форумах и в других статьях, книгах и т.д.
    --------------------------------------
    Во первых как я понял написание ос нужно начать с книг Таненбаума, Фроловых и классики программирования на ассемблере и с/с++.
    --------------------------------------
    Следующее как я понял существует более 30 русский осей, которые предназначенны для разных целей.
    --------------------------------------
    Начать нужно с программирования загрузчика.
    --------------------------------------
    Загрузчик должен как я понял должен:
    - Перейти в pm, причём лучше не основываться на 16 битном коде, так как amd64 уже не поддерживает 16 битный код.
    - проверить состояние и наличие необходимых файлов (ядро ос).
    - загрузить ядро и передать ему управление
    --------------------------------------
    Разработчику также нужно определится с некоторыми вопросами:
    - Архитертура ядра
    - Способ распределения памяти
    - Для чего он её пишет.
    - Если разработка идёт на ассемблере желательно изучить более-менее ассемблер и составить примерный план ос
    --------------------------------------
    Как пример можно взять посмотреть NEOS (nextos.osdev.ru), GLUKOS (sources.ru), Miraculix(miraculiux.ru) и некоторые другие
    --------------------------------------
    Как я понял если лень писать свой загрузчик можно взять GRUB или LILO
    --------------------------------------
    Как результат того. что может получится после 2-3 лет усилий 4 разработчиков как я понял - QNX.
    --------------------------------------
    В разработке ОС нужно знать хотя бы на уровне средней школы английский. без него как я убедился, некуда.
    --------------------------------------
    В нагрузку:
    www.osdev.org- wiki и forum, английские, но если вам нужна помощь, то вам объязательно нужно посмотреть ил и задать вопрос.
    www.osdev.ru- как вариант посмотреть некоторые моменты на начальной или средней ступени развития вашей оси - непомешает
    www.lowlewel.ru - единственный русский портал, который нормальный и действительно нужный по osdev`ингу.
    www.osdever.net - BonaFide - здесь лежат спецификации, доки и т.д. как правило в 100-500 КБ на английском
    www.osrc.info - центр информации по осям.
    P.S. другие английские ресурсы даже приводить не буду, число 1-3 объясню почему.
    --------------------------------------
    Буду рад услышать другие вещи, полезные новичкам.
    P.S. Пост пишу что бы начать разрабатывать ос. Сначала хочу подковаться теоретически.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    1. Еще мануалы от intel или amd нужно читать. И вообще ос и на паскале писать можно.
    2. С загрузчика, можно и не начинать- есть уже готовые. Вполне можно начать с ядра. Просто многие предпочитают начинать с загрузчика. А вообще вначале предлагается написать свой компилятор.
    3. 16 битный код есть, он не куда не делся.
    4. Английский язык знать не обязательно. По дороге выучишь =). Ровно, как и ассемблер.

    Некоторые так и начинаю писать ос дабы выучить ассемблер.
     
  3. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    - Фроловых в данном случае вместе с классикой отставить - все равно не помогут. Мануалы с Интела и АМД - единственная реальная помощь. Как и мануалы по контроллеру hdd и спецификация VESA.

    - английский надо знать как минимум до состояния "читаю без словаря", причем технический.

    - ассемблер придется знать превосходно, даже если потом что-то планируется писать на С.

    - писать на ассемблере придется без обращения к функциям ДОС (естественно), а все, что работает в защищенном режиме - даже и без обращения к БИОС (что тоже естественно, но иногда забывается). Если пишется далее на паскале или Си, то очень осторожно с юнитами и стандартными библиотеками - то и дело обнаруживается какой-нибудь обработчик ошибок рун-тайм, который в твоей ос вызовет GPF, вместо ожидаемого. А главное, в момент сборки ты даже не будешь предполагать, что этот обработчик вообще существует...

    - наплевать, сколько существует русских осей - если собираешься написать еще одну, на чужие лучше не смотреть. Все равно они все - отстой, а наша ОС будет единственной правильной. Если конечно не идти альтернативным путем (об этом ниже)...

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

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

    - сделать загрузчик, который boot. Который будет грузить ядро. А, кстати - ядро и все сопутствующие надо загрузить ДО перехода в защищенный режим (если об этом еще не догадывались). Сначала загрузить, потом расположить как-то в памяти, потом настроить эти проклятые таблицы (легче всего грузить ядро и базовые драйвера одним куском с уже настроенными таблицами), потом перейти в защищенный режим и надеяться, что все работает (щаз!). Естественно, что загрузчик и стартовая часть "ядрышка" будет 16-битными, что вполне нормально на всех машинах, включая amd64 - реальный режим никуда не делся.

    - замечание - под словом "драйвер" тут понимается именно драйвер, собственный, уникальный. То есть книги по драйверам для ДОС (Фроловы) или Виндоуз нам не помогут - могут только запутать.

    - следующий этап после таймера и клавиатуры - драйвер видео. Тут придется переделать немного загрузчик, чтобы заранее получить адрес в БИОС для вызова функций из защищенного режима или полностью написать свои собственные драйвера, получив детальное описание от ведущих производителей видеокарт (гомерический хохот за кадром). Вначале, в отладочных целях, проще установить заранее какой-нибудь режим попроще, с которым удобнее работать. Потом - драйвер hdd и флоппи, можно объединить. Потом к ним прилепить способность понимать FAT32, а если есть желание и информация - то и NTFS. Потом придумать собственную файловую систему, убедится, что получается лажа и принять за основу все-таки FAT32, тем более, что драйвер с ней уже работает.

    - остается мелочи - сделать пользовательский интерфейс и решить, как будут запускаться программы. Сначала конечно же возникнет мысль все сделать по хорошему, с программами в 3-м кольце, потом окажется, что для отладки надо временно все делать в 0-м, потом еще несколько раз перебрать ядро... Пользовательский интерфейс вначале лучше делать командной строкой, потом прикрутить графический, убедившись попутно, что кроме оконного ничего лучше не придумать, а авторы остальных ОС все-таки гении.

    - к этому моменту владение техническим английским будет как раз на нужном уровне, как и знание ассемблера, даже если вначале с этим были какие-то проблемы. Ты будешь помнить наизусть все базовые порты - клавиатура, мышь, жесткий диск, флоппи, таймер... и точки входа к защищенным вызовам VESA для некоторых карт. Собственная ОС будет абсолютно ненужной поделкой и ты сам начнешь это понимать. Потому что вроде все работает, но никто кроме тебя самого это не поймет. А уже существующие оси гораздо более продвинуты, и самое время перейти к альтернативному пути...

    (альтернативный путь) Берется исходник уже готовой оси, выкидываются нафиг все копирайты, и с минимальными переделками перекомпилируем все с новым названием. Если на альтернативный путь встали после длительных мучений, то переделки могут быть значительными, до полной неузнаваемости первоначальной ОС. Иначе не исключена возможность неспособности разобраться с чужим кодом, поэтому кое-какие копирайты все-таки проскакивают, а большая часть из упомянутых 30-ти русских осей в принципе похожи, как наследуемые классы.

    Шутка-шуткой, но доля правды все-таки в этом есть ;)
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    newMaximYCH
    почему бы на вашем новеньком сайте, где живёт документация, не написать статейку под названием "Из записок полного чайника (О разработке своей ОС)"?
     
  5. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    мож из newMaximYCH получится MS2....
    и будете на него лохматить:dntknw:
    хоть и очень пиаристый он:dntknw:
     
  6. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Мой совет ОДУМАЙСЯ и брось это неблагодарное дело.

    Занятие для мазохистов :)
     
  7. booratino

    booratino New Member

    Публикаций:
    0
    Регистрация:
    11 май 2007
    Сообщения:
    11
    я смог бы один написать аналог w98... . . . за пару лет... но страна денег не даст.

    уверен, что на этом форуме найдутся люди покруче меня,
    которые тоже смогли б это сделать.

    вот только не нужно это никому.

    "за державу обидно". :-(



    всем читать!! вот кого из нас хотят сделать:
    http://beamlet.livejournal.com/1825.html
     
  8. sp3cz

    sp3cz New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2007
    Сообщения:
    68
    гсопода мы кажется не понимаем с кем разговариваем

    http://www.wasm.ru/forum/search.php?action=show_user&user_id=13639

    особенно убило - osdevres тама где ему профиль отдефейсили ))))

    Максимыч тебе разве не надо уроки делать?
     
  9. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    newMaximYCH

    Дан двумерный массив целых чисел NxM (N и M с клавиатуры), заполни его по спирали от центра числами от 1 до количества элементов, программа в виде консольного приложения. Сделай с минимальным количеством действий.

    Если не осилишь за сорок минут, о какой разработке ОС идет речь?
     
  10. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    newMaximYCH
    1) простыня на два экрана (#1) - не является топиком на форуме, читать неудобно;
    2) обобщать надо в отдельных статьях, а не с бухты-барахты.
     
  11. FreeHunter

    FreeHunter New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2007
    Сообщения:
    17
    Ну что, максимыч? Не осилил? Тогда, иди осиливай уроки.
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    EP_X0FF
    с минимальным количеством действий и я не возьмусь =)
    можно дял примера заюзать movdqa/u и сразу по 4 ячейки массива заполнять.
     
  13. newMaximYCH

    newMaximYCH New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2007
    Сообщения:
    209
    Редакция 2.
    Спасибо всем ответившим ...
    --------------------------------------
    Итак, хочу чуть чуть обобщить вешесказнное на васме, других форумах и в других статьях, книгах и т.д.
    --------------------------------------
    Во первых как я понял написание ос нужно начать с книг Таненбаума, классики программирования на ассемблере и с/с++, и обязательно почитать доки intal, amd а также мануалы по контроллёру hdd и спецификацию VESA.
    --------------------------------------
    Ос может разрабатываться на:
    -ассемблер
    -си
    -си++
    -фортан
    -паскаль
    --------------------------------------
    После перехода в pm можно использовать 32 битный код (интересно а в amd64 64 битный можно???)
    --------------------------------------
    Начать нужно с программирования загрузчика, или если лень, можно взять GRUB или LILO.
    --------------------------------------
    Загрузчик должен как я понял должен:
    - Перейти в pm.
    - проверить состояние и наличие необходимых файлов (ядро ос).
    - загрузить ядро и передать ему управление
    --------------------------------------
    Разработчику также нужно определится с некоторыми вопросами:
    - Архитертура ядра
    - Способ распределения памяти
    - Для чего он её пишет.
    - Если разработка идёт на ассемблере желательно изучить более-менее ассемблер и составить примерный план ос
    --------------------------------------
    Как пример можно взять посмотреть NEOS (nextos.osdev.ru), GLUKOS (sources.ru), Miraculix(miraculiux.ru) и некоторые другие
    --------------------------------------
    Как результат того. что может получится после 2-3 лет усилий 4 разработчиков как я понял - QNX.
    --------------------------------------
    В разработке ОС нужно знать хотя бы на уровне средней школы английский (без словаря). без английского как я убедился, некуда.
    --------------------------------------
    Народные советы:
    - FatMoon: Начать нужно с ядра, которое будет переходить в защищенный режим и устанавливать обработчики исключений и аппаратных прерываний (как минимум от таймера). Если вы думаете, что это не ядро, а комплект загрузчика с драйверами таймера и клавиатуры - то называйте как хотите :) (Кстати, то, что вначале будет практически заглушкой на "драйвере таймера", потом как раз и вырастет в ядро)
    - FatMoon: Желательно написать ядро так. что бы его можно было отлаживать отдельно от загрузчика со всякими информаторами, которые выводили бы :"функция идёт, идём дальше" "pm включён" и прочее, и т.д. и т.п.
    - FatMoon: Когда кодите драйверы, кодьте именно драйверы а не шаблоны драйверов от Фроловых
    P.S на этот подраздельчик: альтернативный путь от FatMoon лучше не использовать.
    --------------------------------------
    В нагрузку:
    www.osdev.org- wiki и forum, английские, но если вам нужна помощь, то вам объязательно нужно посмотреть ил и задать вопрос.
    www.osdev.ru- как вариант посмотреть некоторые моменты на начальной или средней ступени развития вашей оси - непомешает
    www.lowlewel.ru - единственный русский портал, который нормальный и действительно нужный по osdev`ингу.
    www.osdever.net - BonaFide - здесь лежат спецификации, доки и т.д. как правило в 100-500 КБ на английском
    www.osrc.info - центр информации по осям.
    P.S. другие английские ресурсы даже приводить не буду, число 1-3 объясню почему.
    --------------------------------------
    Буду рад услышать другие вещи, полезные новичкам.
    P.S. Пост пишу что бы начать разрабатывать ос. Сначала хочу подковаться теоретически.
     
  14. newMaximYCH

    newMaximYCH New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2007
    Сообщения:
    209
    во первых нужно этот материал обсудить, во вторых smartdocs теперь ведёт некто другой, поскольку я новость 19.09.07 не добовлял, и какое интересное совподение, я не могу войти в почту на которой были пароли. имея предыдущий опыт я понимаю что это legos. числа 10 я опубликую эту статью где нибудь. когда она будет более-менее закончена.
    Конкретные причины: ___
    Неосилю. Асм я знаю на данный момент довольно поверхностно. Щаз я именно этим (изучением асма и концепцмй написания ос) и изучаю.
    ещё раз говорю, статья будет числа 10. когда будет более-менее закончена.
     
  15. newMaximYCH

    newMaximYCH New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2007
    Сообщения:
    209
    Итак, самое общее я узнал и понял. Можно сказать "Шаг 1. Общее вступление" осилен
    Идём дальше.
    Объясните мне, как человеку программировавшего только на Delphi и немного на Java (экзамен я еле-еле сдал, много упустил, болел всю прошлую осень-зиму) что такое:
    1) Дескриптор
    2) Вот эти все адреса: occx9:23 и подобные, что это из себя представляет? правильно ли я понимаю, что это как бы "ячейки памяти" в которых что -то заложенно? или мне самому туда нужно закладывать? или что-то уже заложенно, а есть места, куда я могу какую-то инфу вставить? попроще, плз
    3) Страничная/Сегментная адресация - что такое и в чём различие?
    ------------
    ЗЫ. Объясните плз как можно проще...
     
  16. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    Смеркалось...
     
  17. asmeradm

    asmeradm New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    26
    Ты просишь тебе объяснить слишком много. Учитывая твои познания в области системного программирования - объяснить тебе эти вещи не представляется возможным. Пустая трата времени. Ставь реальные цели. Ты похож на юнца, решившего завоевать весь мир.
     
  18. newMaximYCH

    newMaximYCH New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2007
    Сообщения:
    209
    Что мне тогда щаз изчАть??? И куда двигаться?
     
  19. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    У Александра Македонского же получилось? :)
     
  20. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    newMaximYCH

    Программирование на Паскале для начала. Задачки типа посчитать линейное уравнение, построить график функция f(x) при условиях и т.д.
     
Статус темы:
Закрыта.