用解释语言编写OS

时间:2012-05-11 04:27:52

标签: compiler-construction operating-system interpreter

是否可以使用未编译的语言编写操作系统[即解释得像python]或不使用运行时[像Java]?虚拟机是否需要在操作系统之上运行?

4 个答案:

答案 0 :(得分:4)

Microsoft Research已经创建了一个名为Singularity的操作系统。

虽然这是一个研究项目,我认为他们需要一些低级代码来启动启动过程(在某些时候操作系统需要与硬件通信)。

Wikipedia says

  

最低级别的x86中断调度代码用汇编语言和C编写。一旦这段代码完成了它的工作,就会调用内核,其运行时和垃圾收集器是用Sing#编写的(Spec#的扩展版本,本身是C#的扩展,并以不受保护的模式运行。硬件抽象层是用C ++编写的,并以受保护的模式运行。还有一些C代码来处理调试。在16位实模式引导阶段调用计算机的BIOS;一旦处于32位模式,Singularity再也不会调用BIOS,而是调用用Sing#编写的设备驱动程序。在安装过程中,使用Bartok编译器将公共中间语言(CIL)操作码编译为x86操作码。

答案 1 :(得分:3)

不确定。只是不要指望它很快,这就是为什么没有人这样做。

您可能必须在解释器中执行一些有趣的操作(虚拟指令),以允许您的操作系统更改机器状态(寄存器和堆栈,内存映射,I / O设备寄存器)以及特定于机器的内容允许硬件中断转换为解释代码的执行,并退出以从中断返回。你可能在初始启动逻辑上遇到了困难;你的翻译显然无法将自己从磁盘上加载。

但是对于大多数操作系统来说,如果做得正确,例如,使用JIT编译器,它将非常便携,实际上可能相当快。 [您希望JIT编译器使用相同的语言进行编码,并遵循自我JITting]。

我提出了一个类似C的HLL,它编译成虚拟机解释代码,正是在20世纪80年代的OS 360系统的这个架构中,几乎完成了构建它的协议。本来很有趣。好吧。

答案 2 :(得分:0)

是的,如果您在虚拟机中思考,这是可能的。

例如,您可以在java中创建一个小版本的minix,以便在JVM的顶部运行。但我不知道有人这样做的原因,除了太多的空闲时间:)

一个操作系统需要非常薄且快速。如果选择python,则每次操作都会产生python解释器开销。即使你想到系统的一小部分,比如设备驱动程序:想象一下在内核空间运行一段时间的python解释器...

但是对于教育或特殊情况(arduino?embed?),这是可以接受的。我认为lua可能是一个好主意,因为翻译很小。

答案 3 :(得分:0)

有大量本土的Forth操作系统。 Forth有点处于被“解释”的边界(但我宁愿远离这个术语,它太模糊,而且被广泛滥用)。