对于内核/操作系统来说还是C呢?

Rec*_*ion 18 operating-system kernel osdev

我喜欢操作系统,最终想成为一个主要从事内核工作的操作系统开发人员.在未来,C仍然是首选语言,我还应该学习什么?

Nor*_*sey 36

在众多研究人群中,人们对使用基于语言的技术来保证内核不会出现错误有很大的兴趣.很多人都提到了Singularity项目,该项目目前具有(当之无愧)高调.为什么奇点有趣?

  • 该语言包括正确使用锁的有限状态模型.编译器可以针对模型对代码进行模型检查,以确保不会发生死锁.

  • 第三方驱动程序具有有限的系统接口.编译器完成的检查可以保证坏的驱动程序无法取出系统 ---它可以做的最糟糕的事情就是淘汰自己的设备.

  • Singularity使用编译器技术而非OS/MMU技术将一个"进程"与另一个"进程"隔离开来.突然分支一个新的"过程"(真的是一种新的保护领域)是便宜的,这种廉价使新设计成为可能.

Singularity只是一长串项目中的最新项目,这些项目使用语言和编译器技术来解决操作系统问题.我最喜欢的一个是华盛顿大学的SPIN内核,它允许应用程序安全地扩展内核,并用Modula-3编写.

这个研究领域仍然是开放性的,并不知道什么语言或编译器功能是解决操作系统问题的"最佳点".所以回答你的问题:

  • 今天的生产系统中,C仍然是"它".

  • 对于未来操作系统,C几乎肯定不是"它" - 我们知道它可以做得更好 - 但新"它"的确切性质仍然是一个悬而未决的问题.

  • +1.如果有机会,我会支持十几次. (3认同)

mgr*_*rog 11

我认为可以肯定地说,由于速度的原因,操作系统的低级部分(例如内核)将继续用C语言编写.就像在别处提到的那样,你需要知道内核某些部分的汇编程序(需要将内核加载到内存中).但是你可以在很少或没有汇编知识的情况下使用内核.一个很好的例子就是你要实现一个文件系统.

不要担心操作系统的实现语言.重要的是如何使用操作系统,以及可以采取哪些措施来改进它们.一个很好的例子是Unix首次问世.文件系统在磁盘前面有inode,在剩余空间中有数据.由于您正在为所有文件寻找磁盘的不同部分,因此效果不佳.然后创建Berkeley快速文件系统以创建磁盘感知文件系统.这意味着在其相应数据附近有inode.我遗漏了很多细节,但我希望这说明考虑如何改进操作系统而不是编程的语言更为重要.

最近操作系统的一些趋势是虚拟化和分布式计算(参见Google关于MapReduce的论文).即使这些问题不是新问题,文件系统,安全性,调度(尤其是多核处理器)等也是不断感兴趣的领域.

如果您想了解有关内核开发的更多信息,请参阅以下资源:

结论:开始熟悉内核并阅读研究人员正在撰写的论文(USENIX对此非常有用).这种知识比学习一门新语言更有价值,因为如果确实发生了什么操作系统的转变,一种语言的大多数概念都可以很容易地转移到另一种语言.希望这可以帮助!

  • 这忽略了所有在托管内核上进行的研究,正如Chris所链接的那样.此外,坚持使用C与速度无关(Singularity已证明托管操作系统由于托管代码的安全性而更快,更快)并且与标准有关. (3认同)

Chr*_*ung 5

科迪不想为这个问题烦恼,所以我代表他传递了这个.:-P有关使用托管语言编写的操作系统的一些示例,而不是C或程序集,请查看:

当然,科迪也不想提这个: