终结C内核时代

C内核坚挺了太多年了,这在软件行业是一件非常不寻常的事情。无数次的技术爆炸和框架的诞生都没有威胁到C在内核编程的地位,不得不对D.M.Ritchie表示崇高的敬意。

不过任何技术都有老去的一天,C也一样。C这朵奇葩还会茂盛下去很久,甚至永远不会消亡,但是终结C内核时代的脚步早就迈出了。

写这篇文章的起因是在CSDN看到甲骨文计划将JavaME做成移动设备的操作系统,不知道小编翻译的缘故还是其他什么原因,正文并没有明确的说JavaME将要编写内核,但是这种可能性仍然存在的。

微软应该是在03年左右做了Singularity系统的原型,目标是一个安全可靠的系统,而非性能。历时一年完成内核,之后并没有因为原型完成而结束,而是迁移到了微软内部的其他项目上,不过后面的消息已经非常难以寻觅到了,掌握的资料也只有几个名字,不过我想这一系列动作都说明微软开始重视这个托管内核项目了——就像WinFX最后辗转反侧变成现在的WPF / Silverlight一样。

Singularity以及之后的系统都有一个明确的特征,C语言和汇编编写了最基本的启动代码,基础结构,不会超过整个内核代码的1%,剩余都是由C#完成的。在托管系统上运行内核不可避免的引起性能的急剧下降,这点也是被测试证实的,系统调用的速度为其他内核系统的一半都不到的样子。不过他却能带来极高的安全性和可靠性,通过对托管代码的审查,微软的一个分支原型中甚至实现了信息安全领域最高级别的OS安全模型,通过proof和二进制扫描来确定代码的安全性和授权方法——这个我想纯理论的意义更大一些,毕竟一段代码的proof要比这段代码大很多了。

Singularity推出那阵儿.net还在用那个不完善巨复杂和有一些安全风险的安全模型,对那个我了解不多,不过自从.net4推出之后,微软使用了新的安全模型,我想利用这个安全模型,可以大大加快托管系统的系统调用速度,超过C内核OS也不是不可能。

如果应用新的安全模型,那么用户代码的系统调用就是简简单单的函数调用了,甚至可以在当前调用栈上陷入内核态,在理论上是完全可行的。用户的Security Transparent代码调用Security Critical代码,这段代码检查权限,然后调用内核Critical代码,完全不需要中断的帮助就可以进入内核态。当然这么做完全废弃的硬件提供的保护环,不过实际上我觉得硬件保护环在托管系统上的作用已经没什么了。

这样做的结果就是系统调用几乎就是简单的几次函数调用而已,速度会快上很多。

我想微软应该会在这方面投入更多资金,对于服务器系统而已,安全和稳定要比性能更重要——性能可以用钱买来,但是安全和稳定不能。

posted @ 2011-03-23 10:46  SnowDreamist  阅读(582)  评论(0编辑  收藏  举报