这是一个非常多的理论问题,但是......
可以使用Python,Ruby,Perl或Lisp,Haskell等语言编写多少操作系统?
似乎很多像init.d这样的东西可以用脚本语言来完成。其中一个防火墙设备操作系统(m0n0wall)使用PHP进行系统配置(包括启动时)。有人可能会说“emacs是一个操作系统,主要是用Lisp编写的”..
当然有些部分必须是汇编/ C,但有多少可能是常规的.py / rb / .pl / .el / .hk文件..?它可能没有最好的性能,但它是迄今为止最容易修改的操作系统......
答案 0 :(得分:21)
从技术上讲,如果你编写一个编译器,它可能是任何一个。操作系统已经用Java(JNode),.NET(MOSA,Singularity,SharpOS,Cosmos),Haskell(HOUSE),Python(Unununium)等完成。
编辑:我看到很多人都在谈论最低级别是一个无法做到这一点的领域;事实并非如此。
没有理由不能扩展X语言的编译器来处理任何低级操作并将其暴露给语言。所有功能都可以通过任何语言实现,只需选择合适的工具即可。有时候这是Python,有时候这是C,有时这就是汇编。
看看像Cosmos和SharpOS这样的项目,看看纯粹的高级OS Done Right(TM)。
答案 1 :(得分:7)
我很惊讶没人提到Java硬件。它应该是我们通过创建更高级别的处理器来进一步推动硬件发展的灵感。
我刚刚发现了另一个名为“Pycorn”的项目。
如果有一个Python字节码处理器,那么用100%Python制作一个快速操作系统是可行的。处理器可以实现整个CPython字节码,或者与Python语言兼容的任何东西(但不是C模块!)。处理器必须处理引用计数,类和对象。对于dicts的原生哈希将非常有用,Python目前在软件中需要的所有复杂数据结构操作应该完全在硬件中完成。没有指针的概念,我认为这是构建这样一个处理器的主要动机,因为它不可能粉碎堆栈。
一切都是对象!内核本身会调用内存对象上的方法,尽管你不需要触及它,因为硬件无论如何都会处理分配和垃圾收集。中断处理程序可以简单地设置为python方法。 MSR,缓存,调试寄存器和I / O端口是对象。
有关在FPGA here上实现Python的有趣讨论。
另一方面,(关于非Python处理器上的Python O / S)声称你无法进行内联汇编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对此主题感兴趣。
答案 2 :(得分:3)
House - Haskell User's Operating System and Environment。它甚至可以在VM内启动,你可以使用它。
来源非常易读,IMO。
答案 3 :(得分:3)
Singularity的一个有趣结果是,您不再需要CPU中的MMU(内存管理单元),因为所有用户区代码都是“托管”的。我可以在嵌入式场景中看到这一点,使用非MMU Linux并在脚本应用程序之上。
答案 4 :(得分:3)
有关使用Lisp编写的操作系统的示例,请参阅Genera / OpenGenera,该操作系统在LispMachines上实际使用了很长时间。
Haskell有House。
答案 5 :(得分:2)
Python本身并不提供直接与硬件对话的结构,例如内存映射I / O的原始指针和C / ASM提供的许多其他结构。但是,有证据表明操作系统中的大多数内容都可以用更抽象的语言编写;来自Microsoft的Singularity OS几乎完全是用C#的变体编写的。有一些极少量的C / ASM来做中断处理程序等等,但其他一切,包括我们大多数人认为是“内核”的东西,基本上可以用任何图灵完备语言来完成。
应该注意的是,Singularity在C / ASM中实现这些低级构造的选择不应该被解释为高级语言的语法或其他方面的基本限制。当然,人们可以使用必要的汇编代码来发布和处理Python的变体。
答案 6 :(得分:2)
超越内核(通过这个,我的意思是内核,微内核风格),以及为每个所述动态语言编译运行时的东西,几乎所有东西和所有 COULD 如果你正在构建你自己的操作系统。这不切合实际。哎呀,就我所知,init.d主要是在sh
编写的。但sh
,虽然不强大,但非常轻量级,据我所知,它的功能很有效。像Python,Perl等高级语言可以很好地处理它,但它会变得更慢,并且会为解释器实例带来更多内存。
这是可能的,这是不切实际的。
答案 7 :(得分:1)
很难想象用(例如Python)编写的内核/设备驱动程序等 - 内存管理会有点头疼。
另一方面,几乎所有用户空间代码都可以。在Linux下,没有要求“init”是本机的机器代码二进制文件 - 它可以是python脚本或其他东西,没问题。
答案 8 :(得分:1)
只要编程语言具有操作二进制文件的能力,您就可以用特定语言编写完整的操作系统。这并不是说它简单或实用。如果您选择的语言可以操作二进制文件,那么您可以根据需要进行低级操作,这是有道理的。
答案 9 :(得分:1)
我想说这是不可能的。对此问题的回答继续引用语言的更改或使用语言生成低级(内核)代码。这只是使用一种语言来编写另一种语言。虽然我同意这两个都允许你编写一个操作系统,但我认为它现在不是同一种语言。因此,操作系统可以用许多不同的语言编写,但并不是每种语言(没有通过更改或语言)都可以用来编写操作系统。
原始问题的最终答案几乎全部,但不是全部。唯一的接受是可以访问CPU级别指令的语言。
答案 10 :(得分:1)
"cleese" - 几乎完全用Python编写的操作系统