microkernel and macrokernel

经典对白(Andy(AndrewS. Tanenbaum)VS linus):

Andy(AndrewS. Tanenbaum):
老一点的操作系统都是宏内核的,也就是说,整个操作系统是一个运行在核心态的单独的a.out文件,这个二进制文件包含进程管理、内存管理、文件系统以及其他。具体实例包括UNIX、MS-DOS、VMS、MVS、OS/360、MULTICS等。

另一种便是微内核,在这种系统中操作系统的大部分都运行在单独的进程,而且多数在内核之外。它们之间通过消息传递来通信。内核的任务是处理消息传递、中断处理、底层的进程管理,以及可能的I/O。这种设计的实例有RC4000、Amoeba、Chorus、Mach,以及还没有发布的Windows/NT。

Linus:
是的,Linux是宏内核,我同意微内核更好些。如果不是你使用了具有争论性的主题,我可能会同意你大部分的观点。从理论上(以及美学上)讲Linux是输了。如果去年春天GNU内核已经做好,我可能不会这么麻烦地开始我的工作:问题是它没有做好而且到现在都没有。在已经实现这一方面Linux赢大了。

>>Minix是微内核系统……Linux则是宏内核的。

如果这是评价内核好坏的唯一标准,那么你是对的。你没有提到的是Minix的微内核实现得并不好,而且(内核内)多任务存在问题。如果我做一个多线程文件系统存在问题的操作系统,我可能不会这么快就声讨别人:事实上我会尽最大努力让别人忘掉我的失败。

内核按照体系结构分为两类:微内核(microkernel)与宏内核(macrokernel).微内核的系统有WindowNT,Minix,Mach,etc.宏内核的系统有Unix,Linux,etc.


微内核,大部分的内核服务运行在单独的进程中,它们之间是通过消息进行通讯的。内核的主要任务是,处理消息传递,中断处理,底层的进程管理,及可能的I/O操作。它尽可能的保持内核尽量小,将多数的服务都运行在内核之外。比如内存管理,文件系统等。其中心思想是将内核按功能模块进行分解,不同的功能分别运行在自己的地址空间中,一个功能的崩溃不会影响其他模块的正常运行。而内核只是负责消息传递,进程调度等最基本的服务。设计思想:除了是必须放在内核空间中运行的东西,否则就让它去用户空间。内核只做最最简单的工作:访问硬件,进行个进程间通讯,从而保证内核足够的灵活,精炼。一个微内核的操作系统,其实是一个功能精炼的内核,加上一堆程序,比如文件系统、显卡驱动、网卡驱动、声卡驱动等都是普通的进程。

假设某进程要读取一个文件。首先通过内核告诉进程 FS (独立的进程),然后 FS 再通过内核告诉驱动程序(独立的进程),驱动程序读取硬盘,返回结果。这样一来,一项工作的完成编程多个功能模块协同完成,进程间通信是至关重要。


宏内核,内核中所有的服务均运行在内核空间,不同功能模块之间的通信是直接调用相应模块的函数完成,不存在运行空间的变换导致的上下文切换的开销还有消息传递及处理返回等的开销,运行效率更高。但是一旦有某个模块崩溃,则整个kernel也就无法工作。宏内核的内核功能模块运行全部在统一个内核空间,运行的效率是要比微内核高的。宏内核是一个静态的不可分割的二进制文件,不过现在集成了可加载特性,对于不使用的模块亦可按需加载。


微内核为了达到减少开销而向单内核倾斜让内核管理较多的东西。而Linux作为单内核也在灵活性方面向微内核倾斜。

代表性的成果:

微内核中有执行效率非常高的内核(L4)

单内核中也有灵活性很高的内核(Linux)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值