Насколько операционная система могла быть написана, скажем, на Python?

Это довольно теоретический вопрос, но..

Насколько операционная система может быть написана на языке Python, Ruby, Perl или Lisp, Haskell и т.д.

Похоже, что многие вещи, такие как init.d, могут быть тривиально выполнены на языке сценариев. Один из брандмауэров-устройств-ОС (m0n0wall) использует PHP для своей системной конфигурации (в том числе при загрузке). И можно утверждать, что "emacs - ОС, в основном написанный в Lisp".

Конечно, есть бит, который должен быть сборкой /C, но сколько может быть регулярным .py/rb/.pl/.el/.hk files..? Он может не иметь лучшей производительности, но это будет, безусловно, самая простая в использовании ОС...

Ответы

Ответ 1

Технически, любой из них может быть, если вы напишете компилятор для этого. ОС выполнялись в Java (JNode),.NET(MOSA, Singularity, SharpOS, Cosmos), Haskell (HOUSE), Python (Unununium) и т.д.

Изменить: я вижу, что многие люди говорят о самом низком уровне, являющемся областью, где это невозможно сделать; это неверно.

Нет причин, чтобы компилятор для языка X не мог быть расширен, чтобы обрабатывать любую операцию низкого уровня и выставлять его на язык. Вся функциональность может быть достигнута с любого языка, это просто вопрос выбора подходящего инструмента для работы. Иногда это Python, иногда это C, иногда это сборка.

Посмотрите на проекты, такие как Cosmos и SharpOS, чтобы увидеть чистую высокоуровневую ОС Done Right (TM).

Ответ 2

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

Там другой проект, который я только что нашел, называется " Pycorn".

Если бы был процессор байт-кода Python, было бы возможно сделать быструю операционную систему на 100% Python. Процессор может реализовать весь байт-код CPython или все, что совместимо с языком Python (но не с C-модулями!). Процессору придется обрабатывать подсчет ссылок, классы и объекты. Родное хэширование для dicts было бы очень полезно, все сложные манипуляции с данными, которые Python в настоящее время нуждается в программном обеспечении, должны выполняться исключительно в аппаратных средствах. Не было бы понятия указателей, которые я считаю главной мотивацией для построения такого процессора, поскольку было бы невозможно разбить стек.

Все будет объектами! Ядро само вызывало бы методы на объекте памяти, хотя вам не нужно было бы его трогать, так как аппаратное обеспечение в любом случае будет обрабатывать распределение и сборку мусора. Обработчики прерываний могут быть просто настроены на методы python. MSR, кэши, регистры отладки и порты ввода-вывода являются объектами.

Там интересная дискуссия о реализации Python на FPGA здесь.

В другой заметке (относящейся к Python O/S на процессоре, отличном от Python) людям, утверждающим, что вы не можете сделать встроенную сборку Pythonic, довольно просто просто выпустить сборку из абстракции, например:

asm = MetaASM()
asm.r1 = 1234
asm.r2 = r1 + 5
asm.io.out(r1)

При необходимости вы можете перейти на сборку, соответствующую архитектуре, для потребностей в производительности или конкретных операций/регистров, связанных с архитектурой:

asm = ASM("IA-32")
asm.xor(asm.eax, asm.eax)
asm.cr0 = asm.eax
asm.invtlb
asm.fs.0x00123456 = asm.eax
asm.al = 123
asm.dword.ptr.eax = 1234 # mov dword ptr [eax], 1234
asm.push(asm.eax)

CorePy интересуется этой темой.

Ответ 4

Один интересный результат от Singularity - вам больше не нужен MMU (блок управления памятью) в ЦП, так как весь пользовательский код "управляется". Я мог видеть это полезным во встроенных сценариях, используя не-MMU Linux и поверх этих сценариев приложений.

Ответ 5

См. Genera/OpenGenera для примера ОС, написанного в Lisp, который действительно использовался довольно долгое время LispMachines.
Haskell имеет House.

Ответ 6

Python не предоставляет конструкторы для непосредственного общения с оборудованием, таких как raw-указатели для ввода-вывода с отображением памяти и многих других конструкций, предоставляемых C/ASM. Однако есть доказательство того, что большинство всего в ОС может быть написано на более абстрактном языке; ОС Singularity от Microsoft написана почти исключительно в вариантах С#. Там очень мало C/ASM, чтобы делать обработчики прерываний и т.д., Но все остальное, в том числе то, что большинство из нас считают "ядром", может быть выполнено практически по любому языку, содержащему Turing.

Следует отметить, что выбор Singularity для реализации этих низкоуровневых конструкций в C/ASM не должен интерпретироваться как фундаментальное ограничение синтаксиса или других аспектов языков высокого уровня. Можно было бы, конечно, сделать вариант Python, который испускался и обрабатывался соответствующим кодом сборки.

Ответ 7

Помимо ядра (и я имею в виду ядро, стиль микроядра) и что-то, чтобы скомпилировать время выполнения для каждого из указанных динамических языков, почти все и все COULD, если вы строите вашей собственной операционной системы. Это просто не практично. По-моему, init.d написано в основном в sh, насколько мне известно. Но sh, хотя и не мощный, ОЧЕНЬ легкий и, насколько я знаю, эффективен в том, что он делает. Языки более высокого уровня, такие как Python, Perl и т.д., Могут справиться с этим хорошо, но это будет намного медленнее и потребует гораздо больше памяти для экземпляров интерпретаторов.

Возможно, это просто непрактично.

Ответ 8

Сложно представить ядра/драйверы устройств и т.д., написанные на (например, Python) - управление памятью будет немного головной болью.

С другой стороны, почти весь код пользовательского пространства может быть. В Linux нет требования, чтобы "init" был внутренним двоичным кодом машинного кода - он может быть python script или что-то, без проблем.

Ответ 9

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

Ответ 10

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

Окончательный ответ на исходный вопрос - это почти все, но не все. Единственное согласие - это языки, которые могут получить доступ к инструкциям уровня CPU.

Ответ 11

"cleese" - операционная система, написанная почти полностью на Python