向下之旅(一):Linux内核认知
用户界面是操作系统的外在表象,内核才是操作系统的内在核心。内核通常由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址控件的内存管理程序和网络、进程间通信等系统服务程序组成。一般存在于内核控件,相对的,应用程序在用户空间执行。内核运行时,系统以内核态进入内核空间。相反,普通用户程序以用户态进入用户空间。应用程序通过系统调用和内核通信运行。应用程序通常调用库函数(比如C库函数)在由库函数通过系统调用界面让内核带起完成不同的任务。

操作系统的内核通常可以分为:单内核和微内核,此外还有外内核。
单内核的特点是从整体上作为一个单独的大过程来实现,并同时运行在一个单独地址空间。通常以单个静态二进制文件形式存放在磁盘。因都处于内核态,所以之间通信是微不足道的,因处于同一地址空间:内核可以直接调用函数。具有简单和高性能的特点。大多数Unix系统都设计为单模块。
微内核则将功能划分为独立的过程,每一个过程叫做一个服务器。除非特殊情况,一般运行在用户空间。每个服务器都独立运行在各自的地址空间。无法直接调用函数,而是通过消息传递处理微内核通信:采取进程间通信(IPC)机制。但由于IPC机制的开销比函数调用的多,有涉及到内核空间和用户空间的上下文切换,因此微内核系统让大部分或全部服务器位于内核。这样就可以直接调用函数。
Linux是一个单内核,单独运行在独立的内核地址空间,同时吸取了微内核的精华:模块化设计,抢占式内核,支持内核线程以及动态装载内核模块的能力。同时让所有的事情都运行在内核空间,直接调用函数,无需消息传递。
参考自:《Linux Kernel Development》
浙公网安备 33010602011771号