定义
对待知识领域,我们总喜欢去下一个定义。操作系统是我们每天工作都要用的东西,因为现代商业操作系统的复杂性和没有统一的标准,若对一个操作系统下定义并不可以准确的形容操作系统所属领域。根据经验我们能认为操作系统就是在整个应使用系统中负责最基本功可以和系统管理的那部分。包括内核、设施驱动程序、启动引导程序、命令行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 》