我喜欢操作系统,最终想成为一个主要从事内核工作的操作系统开发人员.在未来,C仍然是首选语言,我还应该学习什么?
在众多研究人群中,人们对使用基于语言的技术来保证内核不会出现错误有很大的兴趣.很多人都提到了Singularity项目,该项目目前具有(当之无愧)高调.为什么奇点有趣?
该语言包括正确使用锁的有限状态模型.编译器可以针对模型对代码进行模型检查,以确保不会发生死锁.
第三方驱动程序具有有限的系统接口.编译器完成的检查可以保证坏的驱动程序无法取出系统 ---它可以做的最糟糕的事情就是淘汰自己的设备.
Singularity使用编译器技术而非OS/MMU技术将一个"进程"与另一个"进程"隔离开来.突然分支一个新的"过程"(真的是一种新的保护领域)是便宜的,这种廉价使新设计成为可能.
Singularity只是一长串项目中的最新项目,这些项目使用语言和编译器技术来解决操作系统问题.我最喜欢的一个是华盛顿大学的SPIN内核,它允许应用程序安全地扩展内核,并用Modula-3编写.
这个研究领域仍然是开放性的,并不知道什么语言或编译器功能是解决操作系统问题的"最佳点".所以回答你的问题:
在今天的生产系统中,C仍然是"它".
对于未来的操作系统,C几乎肯定不是"它" - 我们知道它可以做得更好 - 但新"它"的确切性质仍然是一个悬而未决的问题.
我认为可以肯定地说,由于速度的原因,操作系统的低级部分(例如内核)将继续用C语言编写.就像在别处提到的那样,你需要知道内核某些部分的汇编程序(需要将内核加载到内存中).但是你可以在很少或没有汇编知识的情况下使用内核.一个很好的例子就是你要实现一个文件系统.
不要担心操作系统的实现语言.重要的是如何使用操作系统,以及可以采取哪些措施来改进它们.一个很好的例子是Unix首次问世.文件系统在磁盘前面有inode,在剩余空间中有数据.由于您正在为所有文件寻找磁盘的不同部分,因此效果不佳.然后创建Berkeley快速文件系统以创建磁盘感知文件系统.这意味着在其相应数据附近有inode.我遗漏了很多细节,但我希望这说明考虑如何改进操作系统而不是编程的语言更为重要.
最近操作系统的一些趋势是虚拟化和分布式计算(参见Google关于MapReduce的论文).即使这些问题不是新问题,文件系统,安全性,调度(尤其是多核处理器)等也是不断感兴趣的领域.
如果您想了解有关内核开发的更多信息,请参阅以下资源:
Linux Kernel Newbies - 为那些想要开始修改Linux内核的人提供的资源.
xv6 source - Unix版本6的x86端口.由MIT用于教授操作系统类.简单,易于扩展(更多信息).
Linux内核映射 - 在Linux中调用系统调用链.用于可视化系统调用的功能.
结论:开始熟悉内核并阅读研究人员正在撰写的论文(USENIX对此非常有用).这种知识比学习一门新语言更有价值,因为如果确实发生了什么操作系统的转变,一种语言的大多数概念都可以很容易地转移到另一种语言.希望这可以帮助!
科迪不想为这个问题烦恼,所以我代表他传递了这个.:-P有关使用托管语言编写的操作系统的一些示例,而不是C或程序集,请查看:
奇异
SharpOS
宇宙
MOSA
幻影
当然,科迪也不想提这个:
Renraku