这是一个相当多的理论问题,但是..

有多少操作系统可以用 Python、Ruby、Perl 或 Lisp、Haskell 等语言编写?

似乎很多像 init.d 这样的东西都可以用脚本语言轻松完成。防火墙设备操作系统之一 ( m0n0wall ) 使用 PHP 进行系统配置(包括启动时)。有人可能会争辩说“emacs 是一种操作系统,主要是用 Lisp 编写的”。

当然,有些位必须是汇编/C,但是有多少位可以是常规的 .py/rb/.pl/.el/.hk 文件..?它可能没有最好的性能,但它将是迄今为止最容易修改的操作系统……


从技术上讲,如果您编写编译器来执行此操作,则任何一个都可以。操作系统已经用 Java (JNode)、.NET (MOSA、Singularity、SharpOS、Cosmos)、Haskell (HOUSE)、Python (Unununium) 等完成。

编辑:我看到很多人在谈论最低级别是无法完成的区域;这不是真的。

没有理由不能扩展 X 语言的编译器来处理任何低级操作并将其暴露给该语言。所有功能都可以通过任何语言实现,这只是为工作选择正确工具的问题。有时这是 Python,有时这是 C,有时这是汇编。

看看像 Cosmos 和 SharpOS 这样的项目,看看一个纯粹的高级操作系统 Done Right (TM)。


我很惊讶没有人提到 Java 硬件。它应该是我们通过创建更高级别的处理器来进一步发展硬件的灵感。

我刚刚发现了另一个名为“ Pycorn ”的项目。

如果有 Python 字节码处理器,用 100% Python 制作一个快速的操作系统是可行的。处理器可以实现整个 CPython 字节码,或任何与 Python 语言兼容的东西(但不是 C 模块!)。处理器必须处理引用计数、类和对象。字典的本机散列将非常有用,Python 目前在软件中需要的所有复杂数据结构操作都应该纯粹在硬件中完成。不会有指针的概念,我认为这是构建这样一个处理器的主要动机,因为不可能粉碎堆栈。

一切都是对象!内核本身会调用内存对象上的方法,尽管您不需要太多接触它,因为硬件无论如何都会处理分配和垃圾收集。中断处理程序可以简单地设置为 python 方法。MSR、高速缓存、调试寄存器和 I/O 端口都是对象。

这里有一个关于在 FPGA 上实现 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开始对这个话题感兴趣。


Python 本身并不提供直接与硬件对话的结构,例如内存映射 I/O 的原始指针和 C/ASM 提供的许多其他结构。然而,有证据表明,操作系统中的大部分内容都可以用更抽象的语言编写;Microsoft 的Singularity OS几乎完全是用 C# 的变体编写的。有极少量的 C/ASM 可以执行中断处理程序等,但其他一切,包括我们大多数人认为的“内核”,基本上可以用任何图灵完备的语言来完成。

应该注意的是,Singularity 选择在 C/ASM 中实现这些低级结构不应被解释为对高级语言的语法或其他方面的基本限制。人们当然可以制作一种 Python 的变体,它可以发出并适当地处理必要的汇编代码。


House - Haskell 用户的操作系统和环境它甚至可以在 VM 内启动,您可以使用它。

IMO,来源非常可读。


除了内核(我指的是内核、微内核风格)之外,还有为每种动态语言编译运行时的东西,如果你正在构建自己的操作系统,几乎任何东西都可以这只是不实用。哎呀,sh据我所知,init.d 主要是用 编写的。但是sh,虽然不强大,但非常轻巧,据我所知,它的工作效率很高。Python、Perl 等高级语言可以很好地处理它,但它会慢很多,并且会为解释器实例占用更多内存。

有可能,只是不切实际。


Singularity 的一个有趣结果是,您不再需要 CPU 中的 MMU(内存管理单元),因为所有用户态代码都是“托管的”。我可以看到这在嵌入式场景中是有益的,使用非 MMU Linux 并在脚本应用程序之上。


请参阅Genera/OpenGenera以获取用 Lisp 编写的操作系统示例,该操作系统实际上在LispMachines上使用了很长一段时间。
Haskell 有House


只要编程语言具有操作二进制文件的能力,您就可以用特定语言编写完整的操作系统。这并不是说它很容易或实用。这是有道理的,如果您选择的语言可以操作二进制文件,那么您可以根据需要进行低级操作。


很难想象用(例如 Python)编写的内核/设备驱动程序等——内存管理会有点令人头疼。

另一方面,几乎所有的用户空间代码都可以。在 Linux 下,不要求“init”是本机机器代码二进制文件——它可以是 python 脚本或其他东西,没问题。

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部