Можно ли написать всю операционную систему без использования даже одной строки кода C/С++?
Можно ли написать всю операционную систему без использования даже одной строки кода C/С++?
EDIT: еще один, чтобы добавить в список - сборка
Ответы
Ответ 1
Да и нет.
Прежде всего, важно помнить, что, независимо от вашего языка выбора, в итоге скомпилированный продукт находится на языке ассемблера (или, точнее, машинного кода). Даже переводчики (например, интерпретатор cpython) в конечном итоге переводят ваши сценарии в машинный код.
Но это, вероятно, слишком технично и не хватает сути вашего вопроса:
"Могу ли я написать операционную систему на более высоком уровне?"
Ответы на это как личные, так и технические.
Во-первых, личная сторона: если вы еще не знаете, как писать операционную систему в сочетании языка ассемблера и C, то у вас нет абсолютно никакого бизнеса, пытаясь разобраться в дизайне ОС.
Часто эти новинки для программирования имеют такие вопросы, потому что они хотят сделать что-то столь же классное, как писать новую ОС, без обучения, необходимого даже для попытки такого проекта. Они задаются вопросом, могут ли языки более высокого уровня быть способом обойти все это грязное исследование.
Итак, если в ваших сердцах это то, что вам нужно, остановитесь сейчас. Остановить, остановить, остановить. Стать хорошим - это тяжелая работа. Нет ярлыков. Будьте готовы засучить рукава и получить синдром кистевого туннеля.
Это не препятствует следующему пути к возможной разработке ОС! Если это ваша страсть, тогда начните с вершины и начните свой путь вниз. Получайте книги по сетевым протоколам, управлению памятью, потоковым и т.д., Занимайтесь каждой основной подсистемой и хорошо ее узнавайте. Вы не можете написать новый, если вы не можете использовать старый!
Затем прочитайте книги по разработке и внедрению операционной системы, пока вы не мечтаете о методологиях управления процессами.
Просто помните, что объем необходимых знаний (не только компьютерных операций, но и социальных конструкций, таких как API) огромен. Это долгий путь и полезный. Если вы действительно любите этот корабль, как я, вы будете рады, что нашли время, даже если вы никогда не пишете ОС.
Теперь, технический ответ. Вам понадобится загрузчик, и это должно быть написано на ассемблере. В конце концов, ваш процессор не знает С#. За фазой загрузчика вы можете написать свой код ОС на любом языке, который вы хотите, и он будет запущен, предполагая, что ваш язык может компилироваться в машинные двоичные коды (а не байт-код!)
Однако даже в нашей нынешней вычислительной среде "избытка циклов" ОС должна быть тощей и эффективной, а на языке более высокого уровня практически невозможно достичь более высокого уровня языка.
Скорее всего, вам нужно будет написать собственный компилятор/интерпретатор данного языка в качестве основного компонента вашей ОС. Этот основной компилятор, вероятно, разрешит только ограниченное подмножество языка (и вы загрузите его, написав более надежный компилятор на ограниченном субязыке). В противном случае производительность будет ужасной.
Но все это ужасно сложно, и реальное обсуждение вопросов требует глубины знаний, которых вы, вероятно, в настоящее время не хватает. Но если у вас есть диск, чтобы сделать это, вы можете легко изменить это, и тогда я бы с удовольствием обсуждал весь день!
Если вам становится лучше, я знаю достаточно, чтобы написать операционную систему, и все же я сижу вокруг мечты, пытаясь понять, сколько ОС может уйти от написания на питоне.;)
Ответ 2
Да. Используйте ассемблер. Я бы использовал Форта. Роды были os, сделанные символами **, закодированными в Lisp. C используется в основном потому, что ему доверяют, мы знаем, как это работает. И существуют c компиляторы для каждого процессора во вселенной. Компиляторы для c просты в построении.
** Символы зарегистрировали первый домен в Интернете. (интересный факт)
Ответ 3
Конечно. Вы можете использовать чистый ассемблер или выбрать другой язык высокого уровня.
Но вы обычно этого не хотите. Потому что количество кода ассемблера, необходимого в современной операционной системе, довольно низкое. Большинство кода в ОС не нуждаются в этом низком уровне.
C дает хороший промежуточный уровень абстракции, который все еще позволяет писать довольно низкоуровневый код, не имея при этом необходимости обрабатывать все детали, с которыми разработчики ассемблера должны иметь дело.
Изменить: как только вы удаляете сборку из уравнения, она становится намного сложнее. Для создания достойной операционной системы требуется выполнение нескольких инструкций машинного кода, которые просто не представлены на языках высокого уровня (потому что они очень специфичны для конкретной машины). Теоретически вы можете создать чистый машинный код в двоичном блобе и перейти к этому местоположению с языка высокого уровня, но я считаю, что обман, поскольку вам придется придумать этот двоичный код в первую очередь.
Ответ 4
Да, MenuetOS - пример операционной системы, написанной с использованием только ассемблера.
Как вам кажется, вас не интересует ассемблер, см. также JNode, операционную систему, написанную на Java, и Singularity, операционная система, написанная на С#.
Ответ 5
Существует множество попыток создать аппаратную реализацию JVM. Конечно, ОС для такого оборудования будет написана на Java.
См. Например: http://www.jopdesign.com/
Также Nokia S40, как представляется, развивается главным образом на Java.
Ответ 6
Конечно. Код C/С++ скомпилирован в ASM-код, но есть много других языков, которые вы могли бы использовать одинаково.
Возможно, вы не сможете использовать Java или С#, поскольку они полагаются на виртуальную машину и могут быть записаны на C.
На самом деле я считаю, что был проект по созданию ОС на основе LISP, но он не удался.
Ответ 7
Конечно. Пока существует компилятор, который может создать соответствующий машинный код, любой язык будет работать.
Ответ 8
Отъезд http://common-lisp.net/project/movitz/. Это ОС, полностью написанный в Lisp. Я думаю, что у него есть собственный Assmebler, например. Lisp для машинного перевода кода.
Мне нравится идея ОС без C/С++ и особенно <основанная на Lisp.
Ответ 9
Да. Очевидно, что все возможно в сборке, но часто не практично. Было несколько попыток сделать операционные системы в управляемом коде (.NET, Java) с разной степенью успеха.
Ответ 10
Если вы действительно этого хотели, тогда да, вы можете написать целую операционную систему, не используя Assembly, C или С++, но я передумал, это просто талия времени. Вы можете получить двоичный редактор и запрограммировать весь язык в двоичном или шестнадцатеричном формате, если хотите, это потребует возраста, но это вполне возможно.
Ответ 11
вы могли бы написать его в машинный код? bu это просто двоичный файл. вы можете написать его в сборке, но это сложная структура. вы, вероятно, должны написать его на C, потому что он переводится непосредственно в машинный код, когда он компилируется, поэтому он быстрее, чем С#/С++ и проще, чем сборка
Ответ 12
Мне все равно, насколько талантливы вы, ваша ОС, если она вообще выйдет, будет эквивалентом консольного эмулятора. За несколько десятилетий потребовалось многим миллионам людей, чтобы превратить Linux в то, чем он является сегодня (куча конного дерьма), удачи в написании архитектуры с нуля, вы можете даже захотеть написать свой собственный компилятор (-ы), пока вы им занимаетесь, Чистый двоичный файл существует как простой в отключенных состояниях, есть некоторые вещи, которые вы не можете сделать в сборке, независимо от того, как сильно вы пытались. Сборка может быть использована для выполнения вашей операционной системы на любом оборудовании, на котором она была разработана, и, что это, интерфейс должен быть разработан на C или C++.