18.2 Micro kernel
Last updated
Last updated
有关微内核的很多思想可以回溯到计算机的发展历史中。微内核从1980年代中后期开始就是一个非常热门的研究课题,它是指一种通用的方法或者概念,它并不特指任何特定的产品。有很多人遵循微内核的设计思想并构建了操作系统,但是这些项目中的每一个具体的操作系统都与另一个非常不一样。
微内核的核心就是实现了IPC(Inter-Process Communication)以及线程和任务的tiny kernel。所以微内核只提供了进程抽象和通过IPC进程间通信的方式,除此之外别无他物。任何你想要做的事情,例如文件系统,你都会通过一个用户空间进程来实现,完全不会在内核中实现。
画个图来展示一下,整个计算机还是分为两层,下面是kernel,上面是用户空间。在用户空间或许还是会有各种各样常见的程序,例如VI,CC,桌面系统。除此之外,在用户空间还会有文件系统以及知道如何与磁盘交互的磁盘驱动,或许我们还会有一个知道如何进行TCP通信的网络协议栈,或许还有一个可以实现酷炫虚拟内存技巧的虚拟内存系统。
当文本编辑器VI需要读取一个文件时,它需要与文件系统进行交互,所以它通过IPC会发送一条消息到文件系统进程。文件系统进程中包含了所有的文件系统代码,它知道文件,目录的信息。文件系统进程需要与磁盘交互,所以它会发送另一个IPC到磁盘驱动程序。磁盘驱动程序再与磁盘硬件进行交互,之后磁盘驱动会返回一个磁盘块给文件系统。之后文件系统再将VI请求的数据通过IPC返回给VI。
这里需要注意的关键信息是,在内核中唯一需要做的是支持进程/任务/线程,以及支持IPC来作为消息的传递途径,除此之外,内核不用做任何事情。内核中没有任何文件系统,没有任何设备驱动,没有网络协议栈,所有这些东西以普通用户进程在运行。所以这提供给你一种非常小的内核,以及相对少的代码去优化,你可以优化IPC,除此之外也没有别的东西了。上图就是我们在这节课剩下的时间要讨论的内容。
在今天仍然有使用微内核的场景。实际上,今天论文要讨论的L4微内核就有很多很多的运行实例,它用在很多手机中用来控制手机的射频,在最近的iphone中的一个旁路处理器中,也使用了L4微内核来隐藏加密密钥。所以在一些微型嵌入式系统中,微内核能够胜出,比如说在一些专门为某种功能设计的计算机中,你需要使用某种操作系统,而你又不需要Linux带来的复杂性。
微内核中的用户进程通过IPC通信,这在很多操作系统都存在。例如我现在运行的macOS,它就是一个普通的monolithic kernel,它也很好的支持用户进程通过IPC进行通信。所以用户进程通过内核内的IPC相互通信,这是一个成功的思想并且被广泛采用。
以上就是微内核的基本架构,我接下来会讨论一下这个架构的优势。