定义
对待知识领域,我们总喜欢去下一个定义。操作系统是我们每天工作都要使用的东西,由于现代商业操作系统的复杂性和没有统一的标准,若对一个操作系统下定义并不能精确的描述操作系统所属领域。根据经验我们可以认为操作系统就是在整个应用系统中负责最基本功能和系统管理的那部分。包括内核、设备驱动程序、启动引导程序、命令行Shell或者GUI界面、基本文件管理工具和系统工具。
严格的来讲linux只是操作系统内核本身,广义上的linux则常用来指基于linux内二的完整的操作系统,它包括GUI组件和其它许多工具。
内核到底是什么
GUI其实只是操作系统的表象,内核才是操作系统内在的核心。系统的其它部分必须依靠内核所提供的服务,像管理硬件设备、分配系统资源等,内核有时候被称为管理者或者操作系统核心。
通常一个内核由负责响应中断的中断服务程序,负责进程调度的CPU调度程序,负责管理进程地址空间的内存管理程序以及网络、进程间通信等系统服务共同组成的。
内核态和用户态
内核在有安全机制的操作系统中不同于普通程序,一般处于系统态(内核态),拥有受保护的内存空间和访问硬件设备的所有权限。这种系统状态和被保护起来的内存空间,统称为内核空间。
与内核空间相对的,用户所执行的应用程序在用户空间执行。用户态的应用程序只能访问允许它们使用的系统资源,并且只使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划分给其它应用程序的内存空间。
内核与应用程序
应用程序通过系统调用来和内核通信,当一个应用程序发起系统调用时,内核便代其执行。在这种情况下应用程序通过系统调用在内核空间运行,而内核被称为运行在进程上下文中。应用程序通过系统调用进入内核空间时应用完成其工作的基本方式。
单内核和微内核
操作系统内核可分为两大阵营:单内核和微内核。
单内核
单内核是一种较为简单的设计,通常以单个静态二进制文件存储在磁盘中,整体上作为一个单独的大过程,所有的内核服务都在这样的一个大内核地址空间上运行。内核服务都处于内核态,并身处同一内核地址空间,之间可以几乎无性能损耗的相互通信。
单内核具有简单和高性能等特点。
微内核
微内核根据功能被分割成多个独立的过程,每个过程都叫做一个服务器。所有的服务器都运行在各自的地址空间上(大部分处于用户空间),只有强烈请求特权服务的服务器才运行在特权模式下。
微内核服务器之间不能直接调用函数通信,而是通过消息传递通信。系统采用进程间通信(IPC)机制,服务之间各自独立,通过IPC互换消息,有效的避免了服务之间的失败传染。
IPC机制的开销远高于函数调用,而且在运行时还会牵扯到内核空间和用户空间上下文切换,所以消息传递需要一些开销。所以在内核的实际实现上大部分微内核的操作系统也会让大部分的服务放置与内核中,这样就可以直接调用函数,消除消息传递的开销。
示例
windows NT和Mach(Mac OS X)都是典型的微内核,不过在实际实现上,其所有服务都运行在内核空间。
linux是一个单内核,不过linux汲取了微内核的精华,并拥有模块化设计、抢占式内核、支持内核线程以及动态装载内核模块等特性。
linux内核和UNIX内核
linux内核在设计时充分参考了已有的很多UNIX的内核实现,并且有一些创新方案。linux内核和传统的UNIX系统之间存在一些显著的差异:
- linux支持动态加载内核模块
- linux支持对称多处理(SMP)机制
- linux内核可以抢占
- linux内核并不区分线程和一般进程,对于linux来说所有的进程都一样,只不过是其中的一些共享资源而已。
- linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统sysfs
- linux自由的态度,以及乐于接受改变的心态:任何改变都必须能通过简洁的设计及正确可靠的实现来解决现实中确实存在的问题。
引用
本文的写作和学习中参考了以下资料
1.《Linux Kenel Development ~ Thrid Edition 》