Создание своего компилятора C а потом своей ОС на нем!!!
Тему видели и если есть чем поделиться пишите.
Если нет, но тема интересна смотрите за обновлениями форума.
PS :!!!:
Только одна просьба не засоряйте форум и не пишите не по делу, например не надо делиться своими впечатлениями(как отрицательными так и положительными).
К стати : в QNX большая дырка обнаружилась - выполнение пользовательского кода в 0 кольце . Есть боольшая вероятность что таже дыра во всех линухах есть (про вин вообще молчу ). :) :)
Дык вот!.. как раз для того, чтобы создать "чистую" ОС, и нужно писать её "с нуля". Зато потом будешь гордиться: вот, эту ОС я написал от начала до конца сам!
Единственно что ещё: чтобы отлавливать ошибки, нужно предельно подробно комментировать код. Да, даже для себя! Я, например, всегда комментирую код, потом просто легче выявить, где в программе ошибка. А тут - целая система!
Конечно, с одной стороны, замучаешься писать первый загрузчик, второй, ядро, драйверы клавиатуры, монитора, принтера (!), ..., описывать файловую систему, работу с дисками, ..., но как потом будет приятно, что ты всё это сделал сам!
Я всё-таки соберусь и начну делать систему. Конечно, пока что она будет работать с дискеты (не хотелось бы гробить компьютер! :)), пока что в текстовом режиме...
Вот, что я скажу - лучше писать не компилятор, а надстройку для С или С++, и сил и нервов меньше потрачено будет. А ещё лучше чтобы такой "крокодил" русский язык понимал, к примеру:
" если а > б
{
a = b^3 + 10;
}
иначе
выход;
"
:D
Ребят, вы, по-моему, отошли от темы - Создание своего компилятора.
Вот, что я скажу - лучше писать не компилятор, а надстройку для С или С++, и сил и нервов меньше потрачено будет. А ещё лучше чтобы такой "крокодил" русский язык понимал, к примеру:
" если а > б
{
a = b^3 + 10;
}
иначе
выход;
"
:D
Вот-вот, в принципе о создании варианта языка C/C++ (зависит от конкретного контекста) радеет чуть ли не каждый программист. Можно вообще сделать довольно сложную штуку: язык программирования, полностью имитирующий естественный язык (в данном случае - русский). Правда, это выходит за рамки нашей задачи, но тем не менее. Ведь с чего всё начиналось? Программисты (тогда - просто энтузиасты) стремились создать язык, на котором человек мог бы на равных общаться с машиной, т.е. выполнял бы коммуникативную функцию. Что же, искусственные языки, которые существуют сейчас, такую функцию выполняют, но лично мне кажется, что Си слишком уж удалён от естественного языка. Нужно придумать что-нибудь попроще, интуитивнее, чем C, т.е. создать вариант этого языка.
Если этот вариант языка использовать в дальнейшем в качестве основного (и единственного) языка в системе, то это будет уникальный случай, когда русскоязычная операционная система основана на русскоязычном же языке программирования. Об этом можно подумать...
КУМИР рулит:D
Что это значит?
Объяснять как и спрашивать пока нечего.
Тему видели и если есть чем поделиться пишите.
Если нет, но тема интересна смотрите за обновлениями форума.
PS :!!!:
Только одна просьба не засоряйте форум и не пишите не по делу, например не надо делиться своими впечатлениями(как отрицательными так и положительными).
Хорошая идея.
В принципе, можно достать любой компилятор с открытыми исходными кодами (gcc, к примеру), а потом убрать от туда все признаки системности - т.е. реализовывать все системные вызовы как вызовы к BIOS или напрямую к устройствам и т.п. Если работать с нуля, то, imho, куча проблем будет - реализация всех стандартных вещей и т.п.
На переписанном таким образом gcc, опять же imho, можно будет достаточно легко реализовать систему.
А фича лучше - убрать все системные вызовы и засунуть функцию-оболочку для вызова BIOS'ных прерываний, обращения напрямую к устройствам.
Ребят, вы, по-моему, отошли от темы - Создание своего компилятора.
Вот, что я скажу - лучше писать не компилятор, а надстройку для С или С++, и сил и нервов меньше потрачено будет. А ещё лучше чтобы такой "крокодил" русский язык понимал, к примеру:
" если а > б
{
a = b^3 + 10;
}
иначе
выход;
"
:D
А теперь подумаем как это запарит: переключаться с
одной разкладки на другую :)
В русской ведь символа } нет (я уже не говорю про другие) :)
А теперь подумаем как это запарит: переключаться с
одной разкладки на другую :)
В русской ведь символа } нет (я уже не говорю про другие) :)
Не проблема - закажем у китайцев произвести новые клавиатуры, кнопок на 10 побольше.
А теперь подумаем как это запарит: переключаться с
одной разкладки на другую
В русской ведь символа } нет (я уже не говорю про другие)
Почему так ограниченно мыслите? Что для нас стоит создать кнопку, по нажатию которой в текст будет вставляться заготовка операторных скобок? Какие здесь сложности-то? Надеюсь, Вы, уважаемый disasm, не в "Блокноте" будете писать систему: для этих целей есть специализированные редакторы. Можно ТАКОЙ сделать, что Борланд будет отдыхать...
Почему так ограниченно мыслите? Что для нас стоит создать кнопку, по нажатию которой в текст будет вставляться заготовка операторных скобок? Какие здесь сложности-то? Надеюсь, Вы, уважаемый disasm, не в "Блокноте" будете писать систему: для этих целей есть специализированные редакторы. Можно ТАКОЙ сделать, что Борланд будет отдыхать...
Не спорю. Только зачем делать русский кимпилер?
Что английских символов не хватает? :)
А я пишу в обычном Midnight Commander на обычном
GCC.
Объяснять как и спрашивать пока нечего.
Тему видели и если есть чем поделиться пишите.
Если нет, но тема интересна смотрите за обновлениями форума.
PS :!!!:
Только одна просьба не засоряйте форум и не пишите не по делу, например не надо делиться своими впечатлениями(как отрицательными так и положительными).
Вообще лучше напиши загрузчик стандартных PE файлов
на ассемблере, тогда наверное проще
будет...
1. Поиск компилера, который не использует особенностей ОС
2. Собственно предложение идей и написание компилятора
А вообще я и не против написания своего компилятора.
А вы вообще кроме C и Pascal-я еще какие-нибудь языки рассматривали "наиболее близкие" к естественным, скажем Smalltalk?
И еще, на русском языке пишите себе, пожалуйста, в VS 2005:
#define если if
и в таком духе... и идентификаторы рускоязычные он прекрасно понимает.
А вообще я и не против написания своего компилятора.
Если тебе знакомы имена Ахо, Ульмана, а также их книги. То тогда еще можно поверить, что создашь свой полноценно работающий компилятор.
Изменения в структуре языка обычно делают только те программисты, которые каждый день над этим языком работают, его создают. Поэтому все языки программирования реализованы без ошибок, на высоком профессиональном уровне. Пусть кто-то попробует упрекнуть Microsoft в том, что дядя Билл криво реализовал язык C или C++ - ничего не выйдет. А вот если каждый начнёт лазать в исходники C/C++, то тут уж стабильности ждать не придётся... Да и зачем нужно что-то менять в этих языках? Хорошие языки - ну и что, что корявые, по крайней мере реализованы идеально. А то ещё создавать компилятор, на котором потом писать ОС... да это сколько же времени уйдёт на один компилятор. Новая ОС - идея хорошая, но свой компилятор зачем создавать? Каждый уважающий себя программист должен написать файловый менеджер, текстовый редактор и операционную систему - это я слышал уже давно. Но писать свой компилятор... Да ещё и переделывать зачем-то C, чтобы команды можно было писать по-русски... Мысль совершенно дикая. Зачем сие нужно? Почему же тогда индийские программисты не переделывают C, чтобы можно было писать на хинди, а арабы не переделывают C, чтобы можно было писать команды на арабском, а французы не переделывают C, чтобы можно было писать команды по-французски? Извините, конечно, но эта ваша идея о переделке C - бред, натуральный бред. Над этим все профессионалы вдоволь посмеялись бы.
Поэтому все языки программирования реализованы без ошибок...
Так не бывает. Даже Бог допускает ошибки. ;)
Пусть кто-то попробует упрекнуть Microsoft в том, что дядя Билл криво реализовал язык C или C++ - ничего не выйдет.
Легко! Но повторяться не буду, пройдись по этому форуму, по rsdn, загляни и на MS.
Хорошие языки - ну и что, что корявые, по крайней мере реализованы идеально.
Я бы сказал, что действительность строго обратная.
А вот тут правильно мыслишь.
Надеюсь, эту шутку ты не воспринимаешь, как призыв к действию?
Ну собственно, вот: :D :D :D :D :D
Так не бывает. Даже Бог допускает ошибки. ;)
Бывает. Например, без единой ошибки реализованы компиляторы языков Delphi, семейства языков C...
Легко! Но повторяться не буду, пройдись по этому форуму, по rsdn, загляни и на MS.
Хорошо, посмотрю, но я хорошего мнения о средах программирования Microsoft'а.
Я бы сказал, что действительность строго обратная.
Вы считаете, что C не корявый язык?! Самый "красивый" (т.е. максимально приближенный к естественному) язык - это Delphi, но на нём, согласен, ОС не сделаешь... Ради одного этого стоит выучить C++.
Originally posted by Delphiprogramer Каждый уважающий себя программист должен написать файловый менеджер, текстовый редактор и операционную систему - это я слышал уже давно.
Надеюсь, эту шутку ты не воспринимаешь, как призыв к действию?
Не воспринимаю, конечно, ибо есть же Total Commander, есть Word (правда, это текстовый процессор)... А вот ОС сделать было бы очень интересно.
Моё мнение таково: берёшь Ассемблер (только какой? посоветуйте, пожалуйста, я могу по eMule скачать), берёшь C/C++ (С++ менее корявый, ИМХО), и пишешь ОС. ВСЁ! Никаких самодельных компиляторов выдумывать не надо - это пустая трата драгоценного времени. Лучше поберечь силы на написание хороших (без ошибок!) загрузчиков и хорошего (тоже без ошибок!) ядра. Ну, и драйверы, само собой, не помешали бы. Неплохо, если бы всё это было стандартизовано. Ну, вот и всё...
Сам бы сделал, только не на чем (нет Ассемблера и C++).
Бывает. Например, без единой ошибки реализованы компиляторы языков Delphi, семейства языков C...
:D
Еще раз повторяю: НЕ БЫВАЕТ. Это противоречит законам физики. :)
А тем более уж в таком широком контексте как "компиляторыя языков" и "семейства языков".
В семействе не без уродства. :D
Кстати, как мне казалось в Делфи один язык - Pascal, а не "компиляторы языков Delphi".
Хорошо, посмотрю, но я хорошего мнения о средах программирования Microsoft'а.
Ну для начала, мы говорим не о средах, а о компиляторах, хотя и в средах багов порядочно.
Да и потом, я хорошего мнения об А.Джоли, но и она не идеал... :)
Вы считаете, что C не корявый язык?!
Критерий "корявости", пожалуйста?
Что же касается моего мнения, то оно такое: язык С в полной мере соответствует своему назначению.
Самый "красивый" (т.е. максимально приближенный к естественному) язык - это Delphi,
Критерий "красоты", пожалуйста?
Что значит "максимально приближеный"?
А если я буду утверждать, что самый красивый язык Python, ты будешь со мной спорить?
А какой язык красивее: турецкий, японский или испанский?
Моё мнение таково: берёшь Ассемблер (только какой? посоветуйте, пожалуйста, я могу по eMule скачать), берёшь C/C++ (С++ менее корявый, ИМХО), и пишешь ОС. ВСЁ! Никаких самодельных компиляторов выдумывать не надо - это пустая трата драгоценного времени. Лучше поберечь силы на написание хороших (без ошибок!) загрузчиков и хорошего (тоже без ошибок!) ядра. Ну, и драйверы, само собой, не помешали бы. Неплохо, если бы всё это было стандартизовано. Ну, вот и всё...
IMHO написание ещё одной ОС - так же пустая трата времени. Для этого нужны очень категоричные основания.
Моё мнение таково: берёшь Ассемблер (только какой? посоветуйте, пожалуйста, я могу по eMule скачать), берёшь C/C++ (С++ менее корявый, ИМХО), и пишешь ОС...Сам бы сделал, только не на чем (нет Ассемблера и C++).
NASM или FASM плюс Watcom C. Лично я пишу только на FASM!
Слишком сложные, накрученные донельзя объявления типов, переменных, подключения модулей и т.д.
Критерии красоты. Чётко выстроенный, синтаксически стройный язык. Это и есть Delphi. Достаточно посмотреть, как объявляются объекты на C/C++ и на Delphi (Object Pascal). Разница колоссальная. Совершенно непонятные, ненужные нагромождения синтаксем и "прозрачность", логичность, интуитивность. Исходники на Delphi очень легко читаются. А на C чего стоят одни эти фигурные скобки. Может быть, кому-то они и нравятся, кажутся удобными, но для меня фигурные скобки - это скорее мусор, чем операторные скобки. Но это ИМХО.
Язык программирования тогда максимально приближен к естественному языку, когда у них максимально схож синтаксис и когда меньше используется всяких подчёркиваний, void'ов, звёздочек * и прочего, без чего можно было бы обойтись. Я слышал, что Страуструп поспорил с кем-то чуть ли не на ящик пива, что он создаст самый корявый язык программирования. Он выиграл это пари - так появился C. Разумеется, это шутка, - но в каждой шутке есть доля шутки.
Таково моё мнение о языке C.
Каждый пишет на том, на чем ему удобнее.
Я не буду разбирать, что лучше, что хуже.
Скажу, что в каждом языке есть свои приимущества и свои недостатки. У Си много дастоинств и много недостатков. Си уже давно рабочая лошадка. Паскаль тоже хороший язык программирования, но по некоторым параметрам не дотягивает до Си. Хотя у него есть свои преимущества перед Си.
PS. Лично мой выбор Delphi.
замучаешься учить и писАть
А на C чего стоят одни эти фигурные скобки. Может быть, кому-то они и нравятся, кажутся удобными, но для меня фигурные скобки - это скорее мусор, чем операторные скобки.
О да... Научный подход - "замучаешься учить", критический недостаток - "эти фигурные скобки".
:D :D :D
Ну и все остальное повкствование - последствие критерия "замучаешься учить".
Достаточно посмотреть, как объявляются объекты на C/C++ и на Delphi (Object Pascal). Разница колоссальная.
Угу просто опупительная разница:
С++: Type object;
Pascal: object: Type;
Исходники на Delphi очень легко читаются.
Поспорим, что китаец скажет, что иероглифы читаются легче, чем это нагромождение букв?
Язык программирования тогда максимально приближен к естественному языку, когда у них максимально схож синтаксис
Схож с чем? С русским языком? С английским?
Begin ты не прав end.
Подчеркиваний? Каких подчеркиваний?
void'ов, звёздочек * и прочего, без чего можно было бы обойтись.
Впрочем, без крышечек (^) и собачек (@) тоже можно обойтись. :D
Ну и заключение:
Если ты выбираешь язык по синтаксису, то надежнее выбирать с помощью монетки. Это просто: орел - С++, решка - Pascal.
Угу просто опупительная разница:
С++: Type object;
Pascal: object: Type;
Да, разница есть! Но спорить больше не буду. C логичнее и стройнее Delphi (который почему-то упорно называется здесь Pascal'ем), C совсем не корявый, в нём все конструкции организованы лучше, интуитивно он более понятен и его можно выучить на досуге, между двумя чашками кофе, когда больше нечего делать.
Но действительно, есть вещи, которые на Delphi не сделаешь. Я говорю о драйверах для будущей ОС. Расписывать ничего не буду, потому что здесь и так все такие умные, куда там... Во всяком случае, программка с заголовком Windows в ОС, сделанной по канонам Linux (не нравится слово "канон"? тогда уж "по образу и подобию", как вам будет угодно), просто не будет запускаться. Вообще-то драйвера лучше вообще писать на masm'е, но это долго.
На masm'е вполне можно написать загрузчик (512 байт), второй загрузчик (до 200 с лишним КБ), ну и кое-какие части драйверов, хотя я пока что не представляю точно, какие именно. Но что должно быть в первом загрузчике, представляю точно. Я даже знаю, где взять информацию, только не хотелось бы всё оттуда списывать. Что-то определённо нужно добавить от себя, хотя бы в ядро.
А не замахнуться ли, в принципе, на "Вильяма нашего Шекспира", т. е. на экзоядерную ОС? Это вариант №1. Вариант №2: попробовать создать систему, под которой запускались бы (и благополучно выполнялись) программы , написанные для ОС: Linux, FreeBSD, Windows, MacOS, Sun OS и... пока всё. Т.е. сделать ОС, способную эмулировать перечисленные выше системы. Либо это будет многоядерная ОС (возможно ли это?), либо что-то ещё, нужно уточнить, но такое возможно. Напоминаю, что речь идёт не о виртуальной машине, а об ОС!
Да, и ещё. ОС должна изначально поддерживать связь с Интернетом, так что придётся ещё драйвер для модема писать. Не представляю, насколько это сложно, но можно. Можно почувствовать себя Биллом Гейтсом (во всяком случае, одним из его сотрудников), создавая API для модема. Как вам такое? :))
И сново ты ошибаешься. На дельфи можно написать драйвер. Примеры найдешь на исходниках. :)
На самом деле все нужно писать на языке программирования высокого уровня. Но так как зачастую средство программирования налогает ограничения, то некоторые этапы нужно будет проделать на ассемблере.
Первичный загрузчик он же бут сектор и вторичный загрузчик придется написать на ассемблере. Все остальное нужно писать на языке высокого уровня с ассемблерными вставками при желании.
Не представляю, как можно совместить две и более совершенно различные ОС. Ядро одно. Система драйвироа тоже должна быть едина, но при этом придоставлять доступ для различных под систем. Ты с этим запаришся. Ты должен будешь эмулировать всю аппаратуру, так как системы драйверов различны а если ты оставишь одну подсистему драйверов, то часть программ не будет работать вовсе. Да и Линукс я все еще плохо знаю.
Про модем ничего не скажу ище не смотрел у нас все больше сетевые карты распростоненны.
Самим проектом я забросил заниматься еще год назад - работа семья и все такое
Но вот мое мнение ко всему выше сказанному
Что ОС, что компилятор стоит писать только для развлечения и собственного развития. Ну не составите вы конкуренции ни Windows, ни Unix. Но если хочется написать что-то полезное полазийте в уже существующих ОС, которые имею распространение.
- В них достаточно дыр.
- Ваша работа имеет шансы на использование,
- да и возможно вас "заметят" (лично я слышал такие истории).
Но если все таки рашили что-то написать для души - пишите OC. это гораздо интереснее.
Алгоритмы писать лучше на C
а работу с железом на Asm (переключение задач, работа с портами)
Почему C?
1)Он создан специально для этой задачи (см. историю)
2)Очень прозрачен - и часто можно сказать что за код будет у тебя после компиляции (а занчит все будет работать так ткак вы хотите).
3)Чем сложнее компилятор, тем больше он вносит своих ошибок. это относиться и к C++ и к Delphy. Сам не раз сталкивался с ошибками, происхождение которых выясняется только после дизассемблирования откомпиленого кода. Пример точно не помню, но смысл решения был в перестановки строк (хотя и так все должно было работать).
4)Прост с линкованием. Имя в Obj = "_" + Имя в программе (но и это можно отключить). В C++ с этим сложнее, но тоже можно справиться. А вот с Delphy задолбаетесь.
Ну покрайней мере каркас пишите на C.
А если дело дойдет до оболочек и пр. тут уже ваш выбор, берите любоя язык, который может создавать объектные файлы в которых не содержиться вызовов операционной системы. Лично мой выбор - C++. Причем Delphy не подходит - я не нашел способа создать Obj-файл, так что бы в нем небыло системных вызовов
И еще один совет придерживайтесь стандартов:
- в том числе написание на существующем языке (хотя это противоречит моим старым взглядам)
- создание стандартных Obj-файлов
- линковка стандартными средствами
Просто чем больше вы их соблюдете тем больше шансов что под вашу ОС будете писать не только вы. Еще тут прозвучала идея поддержки POSIX - тоже не плохая идея. Если вы будете поддерживать какое-нибудь из распространненых API, то автоматическе получаете целый букет уже готовых приложений под вашу ОС :)
Причем всем Delphy-стам и тем кого я задел своей
критикой языков - у каждого из них своя ниша и свои задачи. а наша тема - это ниша C и Asm.
4)Прост с линкованием. Имя в Obj = "_" + Имя в программе (но и это можно отключить). В C++ с этим сложнее, но тоже можно справиться. А вот с Delphy задолбаетесь.
Сложнее - это десять символов:
extern "C"
C++ и к Delphy.
А вот с Delphy задолбаетесь.
Причем Delphy не подходит...
Причем всем Delphy-стам...
Не Delphy, а Delphi!!!
Сложнее - это десять символов:
extern "C"
Да - но тогда мы теряем многие прелести языка C++ для этой функции (например перегрузка функций или шаблоны).
Если взять крайность и все функции объявить как extern "C" от C++ практически ничего не останется
так что решить эту задачу грамотно посложнее чем просто написать extern "C".
за Delphi извиняюсь.
Тему видели и если есть чем поделиться пишите.
Если нет, но тема интересна смотрите за обновлениями форума.
PS :!!!:
Только одна просьба не засоряйте форум и не пишите не по делу, например не надо делиться своими впечатлениями(как отрицательными так и положительными).[/QUOTE]
Свой компилятор C будешь создавать от полугода до нескольких лет.
Хочешь - делай!
Но. Есть два (как минимум) компилятора C, которые подходят для создания ядра операционной системы на C (работающих в среде WinNT). Это микрософтский и интеловский.
Привожу пример. start.c
void main()
{
char * p;
p= ( char * )0xB8000;
*p= 'A';
fl:
goto fl;
}
Компилируем: cl /c /O2 start.c
Получаем:
C6 05 00 80 0B 00 41 mov byte ptr ds:0B8000h, 41h
loc_0:
EB FE jmp short loc_0
Осталось написать(использовать существующий) компоновщик(он же линкер).
На написание простейшего линкера у меня ушло времени ровно 2 недели.
Вопросы есть?
Если ты не знаешь Ассемблера, ты плохо знаешь, как работает комп.
Через пару дней я тебе дам названия и авторов парочки ОЧЕНЬ ХОРОШИХ книг по архитектуре процессора, и ты это поймешь.
И еще. Чуть выше по-моему ты писал, "дайте ссылку на ассемблер по Форточкам". Ассемблер - он и в африке ассемблер, не бывает ассемблера по Windows :) Любая WinAPI-функция может быть вызвана и с ассемблерного, и из C-кода, и из паскаля, это не зависит от языка.
Кстати, я этим делом в свое время немного увлекался, даже написал переход в защищенный режим процессора со страничной трансляцией (на ассемблере), а также свою файловую систему (на С++). Только эти две вещи заняли несколько месяцев.
1. Поиск компилера, который не использует особенностей ОС
2. Собственно предложение идей и написание компилятора[/QUOTE]
Система разработки, не зависящая (по крайней мере, теоретически, концептуально) = C#. Точнее, .NET и C# как один из языков, поддерживаемых платформой .NET. Я, по правде говоря, сам не писал ничего на этой платформе. Знаю только, что нужно "всего лишь" реализовать .NET framework на другой операционке, и твоя программа (причем в скомпилированном виде) будет выполняться одинаково как на Windows, так и на этой операционке. Просто скомпилированный файл содержит промежуточный байт-код, который "на лету" платформой .NET окончательно компилируется в "родной" код операционки и железа. Так что хотите ОС- (и железо-)независимую систему, реализуйте .NET на других операционках :)
Если этот вариант языка использовать в дальнейшем в качестве основного (и единственного) языка в системе, то это будет уникальный случай, когда русскоязычная операционная система основана на русскоязычном же языке программирования. Об этом можно подумать...[/QUOTE]
Насчет наиболее приближенного к естественному языку "общения" с машиной - это, пожалуй, SQL... Хотя некоторые команды выглядят все же не так естественно. В любом случае, SQL ближе к естественному, чем Pascal и тем более C/C++/C#.
Это так, лирическое отступление.
Близость к естественному языку - одна из задач, поставленных в свое время перед разработчиками SQL.
Я писал первые две вещи :):)
Где-то здесь выкладывали ось Idioma.
Довольно странная фраза. Можно знать Ассемблер, но не знать как работает комп, а можно и не знать его, но понимать работу компа. Вряд ли со знанием ассемблера можно объяснить, из чего состоят регистры, почему триггеры работают от переднего фронта напряжения, почему TT-триггеры, а не RS или D? Что такое КМОП и чем он отличается от МОП, а может отличие SRAM от DRAM. Эти вещи необходимы для понимания работы компьютера. Так что знание Ассемблера != знание компьютера.
Может я и не знаю Ассемблер на отлично, но могу объяснить устройство логических узлов компьютера вплоть до полевых транзисторов.
И здесь кто-то сказал, что нельзя писать ОС на C# - да пожалуйста, реализовываете CLR на ассемблере (в случае Java - пишем JVM) и всё. Дело в другом - чем ОС будет лучше/круче - в случае любительской реализации - ничем. Уже на этапе написания планировщика задач можно вешаться, и нужно иметь хорошую математическую подготовку для написания грамотного планировщика, а не так, что бы он после запуска двухсотого по счёту процесса помер вместе с ОС. По этому поводу отличная книга (бывшего противника Линуса) Э. Танденбаума "Современные операционные системы". В ней написаны ВСЕ проблемы и их решение на пути создания ОС.