我计划为x86架构开发一个操作系统.
我有哪些编程语言选项?
有哪些类型的编译器可用,最好是在Windows环境中?
是否有任何好的资源可以帮助我了解有关操作系统开发的更多信息?
在虚拟机或物理硬件上测试我的操作系统是否更好?
有什么建议?
对于我拼贴的最后一年项目,我开发了一个带有虚拟内存管理器,虚拟文件系统和完全抢占式多任务处理的小型x86操作系统.我把它作为开源代码并且代码被大量评论,请查看其源代码页面:
https://github.com/stephenfewer/NoNameOS
根据我的经验,我可以推荐以下内容:
您将需要x86汇编语言的各个部分,这是不可避免的,但可以保持在最低限度.相当快,您将获得运行C代码,这是OS开发的可靠选择.一旦你有了某种内存管理器,如果你愿意,可以使用C++(你需要某种内存管理器来处理新的和删除的东西).
无论您选择何种语言,您仍然需要汇编和C才能将系统从BIOS启动后带入任何可用的形式.
最终,您选择的主要语言将取决于您要开发的操作系统类型.
我的开发环境是GNU开发工具DJGPP的Windows端口以及NASM汇编器.对于我的IDE,我使用IBM的Eclipse和CDT插件,该插件在Eclipse中提供了一个C/C++开发环境.
为了测试,我推荐BOCHS,一个开源的x86 PC仿真器.它允许您快速启动操作系统,这非常适合测试,并且可以集成到eclipse中,因此您只需按一下按钮即可构建和运行操作系统.我还建议偶尔同时使用VMWare和物理PC,因为你可以通过这种方式获取一些微妙的错误.
PS OS开发真的很有趣,但非常密集,我的12个月中最好的部分.我的建议是计划好,你的设计是关键!请享用 :)
语言和编译器完全取决于您尝试完成的任务.不过,我建议您可能从太低的水平接近问题.
有关于操作系统基础知识的材料. 麻省理工学院有关于这个主题的OpenCourseware.阅读Andrew Tannenbaum的操作系统系列,看看像Minix这样的东西.
了解那里有什么.开始摆弄东西.借用想法,看看他们去哪里.如果你真的想要,你可以重新发明轮子,但你可以通过建立他人的作品来学习更多.
这并不重要,你选择什么语言.如果语言是Turing-complete,那么您可以在其中编写OS.
然而,语言的表现力会使某些类型的设计变得非常容易或很难实现.例如,旧的Smalltalk操作系统的"活力"和动态取决于它们是在Smalltalk中实现的.你也可以在C中做到这一点,但它可能会很难你甚至不会想到它.JavaScript或Ruby OTOH可能非常合适.
Microsoft Research的Singularity是另一个例子.除了Sing#,Spec#和C#(或类似语言)之外,它根本无法实现,因为很多架构都依赖于这些语言的静态类型安全性和静态可验证性.
需要记住的一件事是:用C实现的操作系统的设计空间已经得到了充分的探索.其中有成千上万.但是,在其他语言中,您可能会发现以前没有人发现过的东西!只有大约十几个用Java编写的操作系统,大约有六个用C#编写,有些是Haskell中两个操作系统的顺序,只有一个在Python中,而在Ruby或JavaScript中没有.
尝试在Erlang或Io中编写操作系统,看看它会如何影响您对操作系统的思考!