Microkernel

来自osdev
跳到导航 跳到搜索
内核设计
模型
其它概念

设计

微内核的基本概览

微内核尝试将大多数服务 - 例如网络,文件系统等 - 作为用户空间中的守护程序/服务器运行。 剩下的内核要做的就是基本服务,例如物理内存分配 (实际内存 “管理器” 可以在用户空间中实现),调度和消息传递 (进程间通信)。

从理论上讲,这个概念使内核更具响应性 (因为许多功能驻留在可抢占的用户空间线程和进程中,从而无需将上下文切换为内核),并通过减少在内核空间中运行的代码数量来提高内核的稳定性。 支持多CPU计算机 (更简单的重入保护和对异步功能更好的适用性) 和分布式操作系统 (代码可以在不知道服务提供者是否在同一台计算机上运行的情况下使用服务) 还有其他好处。 一个缺点是所涉及的消息传递和上下文切换的数量,这使得微内核在理论上比单内核慢。 (这并不是说设计巧妙的微内核无法击败设计愚蠢的单内核。)

实际上,情况可能会和概念上的不一样。 例如,如果文件系统崩溃,虽然微内核仍将继续运行,但用户的数据还是丢失了 - 除非做出了重启文件系统服务器/守护程序规定,并且存在数据恢复系统。 微内核可以更稳定,但它需要额外的设计工作; 它的好处不是免费从体系结构获得的。 同样,为使微内核设计正确而必须进行的各项设计工作也可以被用于单内核上。

例如,AmigaOS是一个微内核,也是其中不寻常的一个: 由于原始的AmigaOS没有内存保护,因此它的消息传递尽可能快 (传递指向内存的指针),使AmigaOS内核成为有史以来最快的内核之一。 另一方面,缺乏内存保护也意味着微内核体系结构没有增加稳定性 (更高版本确实实现了MMU支持,但是又会面临和其他微内核系统一样的速度损失)。

使用微内核设计 (或模块化单内核) 的副作用之一是引导操作系统所需的更改。 如果文件系统由内核加载的用户空间进程处理,则内核本身首先不包含用于处理文件系统或存储设备驱动程序以加载文件系统进程的代码。 解决此问题的一种方法是bootloader加载一个“RAM磁盘映像”,其中可以包含内核和几个支持文件 (设备驱动程序等)。

操作系统设计也可以同时从单内核和微内核中借用概念,以便在适当的情况下使用这两种方法的好处。

例子

另见

论坛主题

推荐阅读