2008-09-24 132 views
32

我打算为x86架构开发操作系统。为x86架构开发操作系统

  • 我有哪些编程语言选项?
  • 有哪些类型的编译器可用,最好在Windows环境中?
  • 有没有什么好的资源可以帮助我学习更多关于操作系统开发的知识?
  • 在虚拟机或物理硬件上测试我的操作系统会更好吗?

有什么建议吗?

+1

什么是最好的语言?在X86架构中,x86汇编语言和C是最好的选择! – AminM 2013-04-26 13:03:03

+1

投票结束太宽泛。另请参阅:http://stackoverflow.com/questions/254149/how-do-you-write-a-basic-operating-system?rq=1u – 2015-08-15 20:23:53

回答

1

如果您要制作完整的操作系统,则需要使用多种语言。我期望至少Assembly,C和C++。

我会在大多数测试中使用虚拟机。

+0

为什么你可能需要C++和C? – 2008-09-24 21:37:44

+0

@Daniel:虽然C对于硬件级别附近的高性能,低级编程非常有用,但我会推荐C++用于所有其他更高级别的东西。 不知道为什么你/不会/需要C和C++。 – GEOCHET 2008-09-25 00:49:22

+3

@Rich:你不需要超过一种语言。你可能想要使用多个。让我们不要把“需要”和“非常想要很好”混为一谈。 – 2008-12-04 14:47:40

3

您可能想查找XINU。这对x86来说是一个很小的操作系统,除了被学生解析之外,它并不是真正用于其他任何东西。

-5

如果你想写一个操作系统,那么你需要几个人。一个操作系统不能写一个人。我觉得这是更好地在现有的OS项目

这仅仅是一个OS项目的短名单。你如何看到每个可能的语言都有一个项目。

+1

编写操作系统是CS本科生的标准项目。只需要他们一个学期。 – 2008-09-24 21:38:34

2

我已经为386SX做过一次,这是在PCI板上。关于如何在保护模式下启动X86 CPU的一个很好的资源是linux的源代码。这只是几个汇编语句。之后,您可以使用gcc编译您的C代码。结果是ELF格式的objectcode。我编写了自己的链接器,用来编写目标代码。是的,它的工作!祝你好运。

5

语言和编译器完全依赖于你正在尝试完成的内容。不过,我会建议你可能会由于水平太低而接近问题。

操作系统基础知识中有一些材料。 MIT has OpenCourseware on the subject。请仔细阅读Andrew TannenbaumOperating Systems series,然后看看诸如Minix之类的内容。

想一下有什么。开始修补东西。借鉴想法,并看看他们去哪里。如果你真的想要,你可以重新发明轮子,但你会通过建立在别人的作品上来学习更多。

3

使用ANSI C,并从模拟器开始。 当您移植到真机上时,会出现一些汇编代码。上下文切换和中断处理(例如)更容易在汇编器中编写。

Andy Tannenbaum在OS上写了一本好书。还有许多其他好的存在。

祝你好运!没有什么比写自己的操作系统要小,

3

另外检查出OSDev.org哪些有你需要的所有信息开始。

41

对于我在拼贴中的最后一年项目,我开发了一个带有虚拟内存管理器,虚拟文件​​系统和完全抢先式多任务的小型x86操作系统。我做到了开放源码和代码是大量注释,在检查其源锻造页:

https://github.com/stephenfewer/NoNameOS

从我的经验,我可以提出以下建议:

需要x86汇编语言对于各个部分来说,这是不可避免的,但可以保持在最低限度。相当快你会得到运行C代码,这是一个经过验证的操作系统开发的选择。一旦你有了某种可用的内存管理器,如果你愿意,你可以进入C++(你需要一些内存管理器来处理新的和删除的东西)。

不管你选择哪种语言,你仍然需要汇编& C,以使系统从BIOS引导到你离开你进入任何可用的形式。

最终,您选择的主要语言将取决于您要开发的操作系统类型。

我的开发环境是GNU开发工具DJGPP的Windows端口以及NASM汇编器。对于我的IDE,我使用了IBM的Eclipse和CDT插件,该插件在Eclipse中提供了C/C++开发环境。

对于测试我推荐BOCHS,一个开源的x86 PC模拟器。它可让您快速启动您的操作系统,这对测试非常有用,并且可以集成到eclipse中,因此您只需按一下按钮即可构建和运行您的操作系统。我也建议偶尔使用VMWare和物理PC,因为您可以通过这种方式获取一些微妙的错误。

P.S.操作系统的开发非常有趣,但非常密集,我的12个月的时间最好。我的建议是计划好,你的设计是关键!享受:)

5

它并不重要,你选择什么语言。如果语言是图灵完成的,那么你可以在其中编写一个操作系统。

但是,语言的表现力会使某些设计非常容易或很难实现。例如,旧的Smalltalk操作系统的“活力”和动态取决于它们在Smalltalk中实现的事实。你也可以用这样做,但它可能会很难,你甚至不会去想它。 JavaScript或Ruby OTOH可能会非常适合。

Microsoft Research's Singularity是另一个例子。除了Sing#,Spec#C#(或类似语言)以外,其它任何内容都无法实现,因为体系结构的大部分依赖于这些语言的静态类型安全性和静态可验证性。

有一点需要记住:在C中实现的操作系统的设计空间已经得到了充分的探索。其中几乎有成千上万。然而,在其他语言中,您可能会发现以前没有人发现过的东西!有大约只有十几操作系统用Java编写的,大约有一半在C#中有十几个,某项内容的两个操作系统的哈斯克尔的顺序,只一个在Python和没有用Ruby或JavaScript。

试着写在二郎山或Io操作系统,并看看如何影响你对操作系统的思维!

4

有一个在马里兰州的利用GeekOS大学提供的课程OS。这是一个小型的,广泛评论的操作系统,专为教育目的而设计,可以使用Bochs或QEMU仿真器运行。

对于它是如何在一个过程中使用,在类webpage检查过程中的以前的产品的例子。在那里,你会发现你必须为GeekOS添加不同的功能。

它是一种伟大的方式来获得熟悉的x86架构上运行的小型和简单的操作系统。

1

毫无疑问,我会使用阿达。这是我遇到的最好的通用系统编程语言,无论如何。举一个例子,Ada在指定记录中对象的位布局方面比C更好.Ada还支持在特定内存位置上叠加记录。 C要求你玩指针来获得相同的效果。这有效,但更容易出错。 Ada也有中断的语言支持。

另:安全。 Ada默认绑定检查数组赋值,但可以在需要时将其关闭。 C“默认”在数组上不进行绑定检查,所以你必须自己手动执行它,只要你想要它。时间已经显示这是不是正确的默认值。你会忘记需要的地方。缓冲区溢出攻击是破解者使用的最常见的安全缺陷。他们有整个网站解释如何找到并使用它们。

至于学习这样做,我知道的两本书是XINU(Unix向后,与Scientology无关)和Project Oberon。第一个是在我的操作系统研究生课程中使用的,第二个是由Pascal的创建者Nikalus Wirth编写的。

1

C最有可能...所有主要的操作系统都是用C/C++或Objective-C(Apple)编写的