Может ли быть написана целая операционная система без использования даже одной строки кода C / C ++? - PullRequest
13 голосов
/ 09 марта 2009

Может ли быть написана целая операционная система без использования даже одной строки кода C / C ++?

РЕДАКТИРОВАТЬ: еще один добавить в список - сборка

Ответы [ 11 ]

51 голосов
/ 09 марта 2009

Да и нет.

Прежде всего, важно помнить, что независимо от вашего выбора языка, в конце концов, скомпилированный продукт будет на языке ассемблера (или, точнее, машинного кода). Даже интерпретаторы (такие как интерпретатор cpython) в конечном итоге переводят ваши скрипты в машинный код.

Но это, вероятно, чересчур технично и не хватает сути вашего вопроса:

«Могу ли я написать операционную систему на языке более высокого уровня?»

Ответы на это как личные, так и технические.

Во-первых, личная сторона: если вы еще не знаете, как написать операционную систему на смеси ассемблера и языка Си, то у вас нет абсолютно никаких попыток попробовать свои силы в разработке ОС.

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

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

Это не мешает идти по пути к возможному дизайну ОС! Если это ваша страсть, то начните с вершины и двигайтесь вниз. Получите книги по сетевым протоколам, управлению памятью, многопоточности и т. Д., Разберитесь с каждой основной подсистемой и познакомьтесь с ней хорошо. Вы не можете написать новый, если не можете использовать старый!

Затем читайте книги по проектированию и внедрению операционной системы, пока вы не мечтаете о методологиях управления процессами.

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

Теперь технический ответ. Вам понадобится загрузчик, и это должно быть написано на ассемблере. В конце концов, ваш процессор не знает C #. После фазы загрузчика вы можете написать свой код ОС на любом языке, который вам нужен, и он запустится, при условии, что ваш язык может компилироваться в двоичные файлы машинного кода (а не в байт-код!)

Однако даже в нашей нынешней вычислительной среде с «переполнением циклов» операционная система должна быть компактной и эффективной, чего почти невозможно достичь на языке более высокого уровня, особенно на интерпретируемом языке.

Скорее всего, вам нужно будет написать свой собственный компилятор / интерпретатор данного языка в качестве основного компонента вашей ОС. Этот основной компилятор, вероятно, разрешит только ограниченное подмножество языка (и вы начнете загрузку, написав более надежный компилятор на ограниченном подязыке). В противном случае производительность будет ужасной.

Но все это ужасно сложно, и реальное обсуждение проблем требует глубоких знаний, которых вам, вероятно, в настоящее время не хватает. Но если у вас есть желание сделать это, вы можете легко это изменить, и тогда я с радостью буду обсуждать подходы весь день!

Если вам от этого станет легче, я знаю достаточно, чтобы написать операционную систему, и все же сижу и мечтаю, пытаясь выяснить, какую часть ОС я могу написать на python. ;)

16 голосов
/ 09 марта 2009

Да. Используйте ассемблер. Я бы использовал Forth. Genera была операцией, созданной символикой **, написанной на Лиспе. C в основном используется, потому что ему доверяют, мы знаем, как это работает. И существуют c компиляторы для каждого процессора во вселенной. Компиляторы для C просты в сборке.

** Symbolics зарегистрировала первый домен в интернете. (интересный факт)

14 голосов
/ 09 марта 2009

Конечно. Вы можете использовать чистый ассемблер или выбрать другой язык высокого уровня.

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

C дает хороший промежуточный уровень абстракции, который по-прежнему позволяет писать довольно низкоуровневый код, не сталкиваясь с всеми деталями, с которыми приходится иметь дело разработчикам ассемблера.

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

10 голосов
/ 09 марта 2009

Да, MenuetOS - пример операционной системы, написанной с использованием только ассемблера.

Поскольку вас не интересует ассемблер, см. Также JNode , операционную систему, написанную на Java, и Singularity , операционную систему, написанную на C #.

8 голосов
/ 09 марта 2009

Существует множество попыток создать аппаратную реализацию JVM. Конечно, ОС для такого оборудования будет написана на Java. См. Например: http://www.jopdesign.com/

Также Nokia S40 , кажется, разработан в основном на Java.

4 голосов
/ 09 марта 2009

Конечно. Код C / C ++ компилируется в код ASM, но есть много других языков, которые вы можете использовать таким же образом.

Возможно, вы не сможете использовать Java или C #, так как они основаны на виртуальной машине и могут быть написаны на C.

На самом деле я считаю, что был проект по созданию ОС на основе LISP, но он провалился.

3 голосов
/ 09 марта 2009

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

2 голосов
/ 09 марта 2009

Проверьте http://common -lisp.net / project / movitz / . Это ОС, полностью написанная на Лиспе. Я думаю, что у него есть свой собственный Assmebler, например Лисп в переводчик машинного кода.

Мне нравится идея ОС без C / C ++ и особенно на основе Lisp.

1 голос
/ 08 января 2014

Если вы действительно хотите, то да, вы можете написать целую операционную систему без использования Assembly, C или C ++, но я считаю, что это было бы просто потерей времени. Вы можете получить бинарный редактор и запрограммировать весь язык в двоичном или шестнадцатеричном формате, если хотите, это займет много лет, но это вполне возможно.

1 голос
/ 09 марта 2009

Да. Очевидно, что все возможно в сборке, но часто не практично. Было несколько попыток создания операционных систем в управляемом коде (.NET, Java) с различной степенью успеха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...