1.3 操作系统的基本概念
为了便于后续内容的理解,我们简单介绍与操作系统相关的几个基本概念。
1.3.1 微内核与大内核
微内核与大内核是操作系统设计中的两种不同的思想,这与CPU的设计中RISC和CISC构架类似。其中,微内核的思想是,把尽量少的操作系统机制放到内核模块中进行实现,而把尽量多的操作系统功能以单独进程或线程的方式实现,这样便于操作系统体系结构的扩展。比如,一个常见的设计思路就是,把进程(或线程)调度、进程间通信机制(IPC)与同步、定时功能、内存管理功能、中断调度等功能放到内核中实现,由于这些功能需要的代码量不是很大,所以可使得内核的尺寸很小。另外,把操作系统必须实现的文件系统、设备驱动程序、网络协议栈、IO管理器等功能作为单独的进程或任务来实现,用户应用程序在需要这些功能的时候,通过核心提供的IPC机制(比如消息机制)向这些服务进程发出请求,即典型的客户-服务器机制。
这种微内核的实现思路有很明显的优势,比如体系结构更加清晰、扩展性强等,且由于内核保持很小,所以移植性(不同CPU之间的移植)也很强。但此思路也有很大的弊端,其中最大的一个弊端就是效率相对低下,因为系统调用等服务都是通过IPC机制来间接实现的,若服务器进程繁忙,对于客户的请求可能无法及时响应。因此这种微内核的设计方式,不太适合嵌入式操作系统的设计,因为效率是嵌入式操作系统追求的最主要目标。
图1-3示意了微内核的设计思路。
图1-3 微内核操作系统的设计思路
大内核则是一种相反的设计思路,这种思路是,把尽可能多的操作系统功能拿到内核模块中实现,在操作系统加载的时候,把这些内核模块加载到系统空间中。由于这些系统功能是静态的代码,不像微内核那样作为进程实现,而且为这些代码直接在调用进程的空间中运行,不存在发送消息、等待消息处理、消息处理结果返回等延迟,因此调用这些功能代码的时候,效率特别高。因此,在追求效率的嵌入式操作系统开发中,这种大内核模型是合适的。
但大内核也有一些弊端,最明显的就是内核过于庞大,有时候会使得它的扩展性不好(这可以通过可动态加载模块来部分解决)。但在嵌入式操作系统开发中,这种弊端表现得不是很明显。图1-4示意了大内核的开发思想。
图1-4 大内核操作系统的设计思想