Можно ли написать целую операционную систему, не используя даже одной строки кода C/C++?
РЕДАКТИРОВАТЬ: еще один, чтобы добавить в список - сборка
Можно ли написать целую операционную систему, не используя даже одной строки кода C/C++?
РЕДАКТИРОВАТЬ: еще один, чтобы добавить в список - сборка
И да и нет.
Прежде всего, важно помнить, что какой бы язык вы ни выбрали, в конечном итоге скомпилированный продукт будет написан на языке ассемблера (или, точнее, на машинном коде). Даже интерпретаторы (например, интерпретатор cpython) в конечном итоге переводят ваши скрипты в машинный код.
Но это, вероятно, слишком техническое и упускает из виду суть вашего вопроса:
«Могу ли я написать операционную систему на языке более высокого уровня?»
Ответы на это как личные, так и технические.
Во-первых, личная сторона: если вы еще не знаете, как написать операционную систему на смеси языка ассемблера и C, то вам абсолютно нечего пробовать свои силы в разработке ОС.
Часто у новичков в программировании возникают такого рода вопросы, потому что они хотят сделать что-то столь же классное, как написание новой ОС без всего необходимого обучения, чтобы даже попытаться сделать такой проект. Они задаются вопросом, могут ли языки более высокого уровня быть способом обойти всю эту грязную учебу.
Так что, если в глубине души это то, к чему вы стремитесь, остановитесь сейчас. Стоп, стоп, стоп. Стать хорошим в чем-то — это тяжелая работа. Ярлыков нет. Будьте готовы засучить рукава и получить синдром запястного канала.
Это не исключает пути к возможному дизайну ОС! Если это ваша страсть, то начните сверху и двигайтесь вниз. Приобретите книги по сетевым протоколам, управлению памятью, многопоточности и т. д., изучите каждую основную подсистему и хорошо ее изучите. Вы не можете написать новый, если вы не можете использовать старый!
Затем читайте книги по проектированию и внедрению операционных систем, пока не начнете мечтать о методологиях управления процессами.
Просто имейте в виду, что объем необходимых знаний (не только о компьютерных операциях, но и о социальных конструкциях, таких как API) огромен. Это долгий путь и благодарный. Если вы действительно любите это ремесло, как я, вы будете рады, что нашли время, даже если вы никогда не писали ОС.
Теперь технический ответ. Вам понадобится загрузчик, и он должен быть написан на ассемблере. В конце концов, ваш процессор не знает C#. После фазы загрузчика вы можете написать код своей ОС на любом языке, который вы хотите, и он будет работать, при условии, что ваш язык может компилироваться в двоичные файлы машинного кода (а не в байт-код!)
Однако даже в нашей текущей вычислительной среде с «перенасыщением циклов» ОС должна быть компактной и эффективной, а этого почти невозможно достичь на языке более высокого уровня, тем более на интерпретируемом языке.
Скорее всего, вам нужно будет написать свой собственный компилятор/интерпретатор данного языка в качестве основного компонента вашей ОС. Этот базовый компилятор, вероятно, разрешит только ограниченное подмножество языка (и вы загрузитесь, написав более надежный компилятор на ограниченном подъязыке). В противном случае производительность будет ужасной.
Но все это ужасно сложно, и для реального обсуждения вопросов нужны глубокие знания, которых вам сейчас, наверное, не хватает. Но если у вас есть стремление сделать это, вы можете легко изменить это, и тогда я с радостью буду обсуждать подходы весь день!
Если вам от этого станет легче, я знаю достаточно, чтобы написать операционную систему, и до сих пор сижу, мечтая, пытаясь понять, какую часть ОС я мог бы сойти с рук, написав на питоне. ;)
да. Используйте ассемблер. Я бы использовал Форт. Genera была ОС, созданной символикой**, закодированной на Лиспе. C в основном используется, потому что ему доверяют, мы знаем, как он работает. И существуют компиляторы c для каждого процессора во вселенной. Компиляторы для c просты в сборке.
** Symbolics зарегистрировала первый домен в Интернете. (интересный факт)
Конечно. Вы можете использовать чистый ассемблер или выбрать другой язык высокого уровня.
Но обычно не хочется. Потому что количество ассемблерного кода, необходимого в современной операционной системе, довольно невелико. Большая часть кода в ОС не нуждается в таком низком уровне.
C обеспечивает хороший промежуточный уровень абстракции, который по-прежнему позволяет писать довольно низкоуровневый код, не имея при этом необходимости иметь дело со всеми деталями, с которыми приходится иметь дело разработчикам на ассемблере.
Изменить: как только вы удалите сборку из уравнения, она станет намного сложнее. Настройка приличной операционной системы требует выполнения нескольких инструкций машинного кода, которые просто не представлены в языках высокого уровня (поскольку они очень, очень специфичны для машины). Теоретически вы можете создать чистый машинный код в двоичном двоичном объекте и перейти в это место из языка высокого уровня, но я считаю это мошенничеством, поскольку вам придется придумать этот двоичный объект в первую очередь.
Да, MenuetOS — это пример операционной системы, написанной только на ассемблере.
Поскольку вы, похоже, не интересуетесь ассемблером, см. также JNode, операционную систему, написанную на Java, и Singularity, операционная система, написанная на C#.
Есть многочисленные попытки создать аппаратную реализацию JVM. Разумеется, ОС для такого оборудования будет написана на Java. См., например: http://www.jopdesign.com/
Кроме того, похоже, что S40 от Nokia разработан в основном на Java.
Конечно. Код C/C++ компилируется в код ASM, но есть много других языков, которые можно использовать таким же образом.
Возможно, вы не сможете использовать Java или C#, поскольку они полагаются на виртуальную машину и могут быть написаны на C.
На самом деле я считаю, что был проект по созданию ОС на основе LISP, но он провалился.
Конечно. Пока есть компилятор, способный создавать соответствующий машинный код, подойдет любой язык.
Посетите http://common-lisp.net/project/movitz/. Это ОС, полностью написанная на Lisp. Я думаю, что у него есть свой Ассмеблер, например. Lisp для транслятора машинного кода.
Мне нравится идея ОС без C/C++ и особенно на основе Lisp.
да. Очевидно, что все возможно в сборке, но часто нецелесообразно. Было несколько попыток создания операционных систем в управляемом коде (.NET, Java) с разной степенью успеха.
Если вы действительно этого хотите, то да, вы можете написать целую операционную систему без использования ассемблера, C или C++, но я считаю, что это будет просто трата времени. Вы можете получить двоичный редактор и запрограммировать весь язык в двоичном или шестнадцатеричном формате, если хотите, это займет целую вечность, но это вполне возможно.
вы могли бы написать это в машинном коде? но это просто двоичный код. вы могли бы написать это на ассемблере, но это имеет сложную структуру. вам, вероятно, следует написать его на C, потому что он транслируется непосредственно в машинный код при компиляции, поэтому он быстрее, чем C#/C++, и проще, чем ассемблер.