关于LMOS的架构
有几个朋友,想知道LMOS内核的系统架构,我那篇文章也没提到架构方面的内容,所以今天就来说说吧。
我在LMOS内核的设计之初,是参考了L4、Mach、等微内核架构,很自然的LMOS也就变成了一个微内核架构的系统。但是后来我改变了主意……但是是什么原因让我改变了主意呢。
首先容我简单介绍什么是微内核,这虽然显得很些罗嗦,但是我还要罗嗦一下,呵呵。说实话我也不太了解微内核的历史,但它的特性我很了解。
首先微内核的内核部分只实现最基本的中断响应、线程调度、消息通信等必不可少的机制,把诸如,文件系统、内存管理、进程管理、IO管理、以及硬件驱动,都弄成了一个个外部进程,这些个特殊的进程还有个好听的名字——“服务器”。它们之间靠定义良好而统一的消息机制通信。而内核就像个邮局在那儿收发信件——消息,那些个服务器就分别给其它服务器发送消息或者接收消息并作出相应的响应。啊,总算是用最简单的语言说明了微内核。
看到这里如果大家对上述架构,感觉很优雅,很“摸灯”的话,那么大家至少在思想上和我是一致的。如果单从美学意义上说,大家这样想是完全正确的。可是这个世界有许多的事不能单从美学意义上考虑,有许多近乎完美的设计,在实际应用中却不能发挥它的光和热。微内核就是这样的一个例子。
我来列举一下研究微内核的人员们所述微内核的优点:
(1)高安全(这个问题不是三言两语就说的清楚的,所以我就选择不说,呵呵)
(2)高可靠
(3)高可伸缩
(4)可以很简单的实现分部式系统
(5)等等(呵呵 卖个关子)
从上面这些优点来看,没有哪一点不是对设计操作系统内核架构有利的。然,事实并非像说的那么美好。
高安全,安全从来就是争议性话题,我就不说了……
高可靠,大家可能这样想,应用软件进程经常失败了可以重启,就算有重大bug也没有什么事。由此就可以想到,既然在微内核下,大部分功能都实现成了服务器进程,那么一个进程崩溃了,并不会影响到其它进程,而且还可以重启呢。但是我举个例子,例如内存管理服务器和文件系统服务器挂掉的化,还能恢复和重启吗,当然不能。可见从可靠性上说微内核并不能提供多大优势,不是吗。
可伸缩和分部式,这确实是微内核的优点,无话可说。呵呵。
其实微内核和其它形式的内核,最大的争议性还是性能,似乎一谈操作系统,那么性能就是一个无法回避的问题。
微内核架构系统出现性能问题在哪些方面:
(1)消息传递
(2)CPU特权级切换
(3)那些个服务器进程调度时发生的上下文切换
不多说了,以上三点,已经足于说明问题了,经过本人测试消息传递所产生的CPU开销并不算什么,而且还有许多降低开销的手段,比如尽量缩小消息本身的大小,比如消息不传递而采用消息内存地址映射的机制。
CPU特权级切换,大家都知道现在通用CPU都提供保护模式,就以X86为例,事实上LMOS目前也只能运行在X86CPU上。x86的cpu提供了4个特权级,我为了简化设计只用两级0和3,言归正转CPU在进行特权级变化时会检查一些保护特性,至少会把5个寄存器压栈,并且会从内存中的GDT中读入相关信息用这些信息刷新段寄存器的影子寄存器和装载一些寄存器,进行一系列检查,这一系列过程开销不小。还会摧毁CPU的高速缓存中的数据,这种代价不可不擦。
既然说到CPU的高速缓存,那么就不怕罗嗦的说说它,因为它也是个很重要的东东。首先做高速缓存的材料和方式我就不说了,总之一点比内存条快的多,也贵的多。大家都知道代码指令在运行的过程中,大部分时间会访问它附近的指令或者是在一循环中运行,人们把这种特性称为程序的局部性。根据这一特性人们就想啊,把正在运行的这一小块指令装入比内存快得多的高速缓存,这样就可以大大提高计算机的性能又能把造价控制在一个范围内。 其实在SMP系统中高速缓存显得更为重要,比如4个CPU同时访问同一内存地址,这就需要某种总线仲裁机制加于控制。这时让一个CPU去访问其它3个CPU在这个时间内就得等待。如果能良好的运用高速缓存就会大大降低这种内存地址冲突。好了不罗嗦了,我们回过头来……
微内核频繁的服务器进程调度发生的上下文切换,势必会破坏程序的局部性,势必会降低高速缓存数据的命中率,这个性能损失相当可观,这并不是空穴来风。
说了那么多微内核的特性,也该说说我的LMOS的内核架构了。大家可能不愿意看这么多的文字,可是为了说明问题又不得不说这么多,所以只有请大家耐心了。由前面的说明可知,微内核并不能在可靠性方面提供什么优越性,一个系统组件服务器进程出问题了,也还是会同样导致整个系统崩溃。那么我也就一步步的“退而求次”,把LMOS变成了一个变形的宏内核,宏内核在我眼中是“简单”的,可能对于我们人来说它不简单,可是它对于计算机硬件来说是简单的,简单——即为可靠,即为高效。为什么呢,因为简单就不容易犯错,没错误当然可靠,因为简单就不需要执行那些“罗哩罗嗦”的指令,当然更高效。呵呵,当然这是我的理解。为什么我说LMOS是变形的宏内核呢,由上面的文字可知,微内核最大的优点是可伸缩性强,可以很轻松就实现动态增加删减内核功能。因为只需新建个服务器进程而已。而宏内核就不那么容易了,因为宏内核所有的功能模块都封装在一个大二进制文件中,要增加和删减功能就得重要编译整个内核,重新安装在计算机上。这很不方便。当不断的加入新功能时,内核就会变得相当臃肿,这是可怕的。那么在我的想像中内核也只有最基本的功能,其它的功能可以动态加载和缷载。这种东西叫动态可加载内核功能模块,我以后会提供这种机制,大家等着吧,到时大家就可以应用这种机制为LMOS加入新功能了。其实我并不是第一个采用这种机制的人,MS的windows NT 和GNU的linux都是用这种机制工作的。所以我说我的LMOS是变形的宏内核,综合了微/宏内核的优点。
虽然,这种举措会让很多人说话的,在今天还去写一个古老的宏内核,我是有病吧,呵呵。可是大家放眼看看现在所有流行的操作系统有几个是微内核,没有吧。在我看来微内核就一群书呆子们干的事。(此话可能不够文明,大家莫怪。)我也想开发一种前所未有的系统架构,我后来还是放弃了,一、我只有一个人,二、时间不够,开发一种全新的架构这不是一个人能干的了的。而且宏内核已经稳定运行了这么多年了,所以我也就没从架构上做太多革新。就像我想着要开发一种全新的语言一样,这样的事从来就是天才干的,只可惜我不是……
阅读(7479) | 评论(8) | 转发(1) |