本文是本人对学习操作系统的一些思考。
文章目录
- 计算机硬件
- 资源管理
- 内核架构
-
- 宏内核
- 微内核
- 混合内核
- 后记
计算机由两部分组成:
硬件和
软件。软件又分为
系统软件和
应用软件。
应用软件 |
系统软件 |
硬件 |
操作系统(操作系统内核)是计算机的系统软件,可以被看作是一个裸机程序,主要有两个功能:
- 管理计算机的资源(主要是硬件资源)
- 为应用程序提供访问计算机资源的入口
可以把内核划分为两层。
系统调用接口 |
资源管理 |
计算机硬件
首先了解一下计算机有哪些硬件资源。
在如今的计算机体系中,可以把计算机硬件大致分为两部分:主机和外设。
主机包括CPU和内存,也就是课本上说的运算器、控制器和存储器。它们是计算机执行程序和处理数据的核心。
剩余的计算机硬件都归为外设,这些就是课本上说到的输入设备和输出设备。它们功能多样,有的用于长久保存程序和数据,有的用于和计算机外部通信,有的用于显示图形界面等等。但对于正在运行的程序来说,它们都是输入或输出的对象,可以通过句柄或其他标识进行读写。
计算机硬件模块之间使用总线进行通信。
资源管理
知道了计算机硬件的构成,我们来看看该怎么管理这些硬件。
内核的资源管理模块包括:
- 进程管理就是管理CPU,包括进程调度、进程切换、软硬中断等。
- 内存管理就是管理内存,包括内存分配、虚拟内存等。
- 为保证主机能识别到外设,内核中需要相应外设的驱动程序。设备驱动管理负责这个。
- 因为程序是以文件的方式访问硬盘的,因此文件系统就是管理硬盘。
- 图形系统对应着显卡。
- 网络组件对应着网卡。
- 其他I/O设备管理。
资源管理模块之间的通信方式有:函数调用、消息。
整个资源管理模块中存在硬件相关的代码(如进程切换时要对寄存器进行操作),为了提高内核的可移植性,可以把硬件相关的部分分离出来。
内核逻辑分层:
系统调用接口 |
资源管理 |
硬件相关 |
CPU
在执行用户进程时,通常运行在用户态(也称用户空间),当调用到内核的系统调用接口时,会引发中断,CPU会切换到内核态(也称内核空间)执行内核代码,执行完内核代码CPU又回到用户态,执行用户代码。
内核架构
上面提到,计算机硬件包括主机和外设,资源管理也分为主机管理和外设管理两部分,资源管理模块之间的通信方式有函数调用和消息。这些正是区分宏内核与微内核的关键所在。
没人规定宏内核该怎么实现、微内核该怎么实现、混合内核该怎么实现,能区分这些概念即可。下面的内核架构图是本人的一种理解。
宏内核
内核是一个巨大的进程,主机管理和外设管理都在内核里,管理模块之间通过函数调用进行通信。
优点:
性能高。相比于消息,函数调用的开销更小。当用户代码通过系统调用接口请求内核的服务时,只需要陷入一次中断,内核就可以把请求结果返回给用户。
缺点:
安全性差。内核的资源管理模块之间高度耦合,一旦某个模块出问题,整个内核都会存在安全隐患。此外,代码的高度耦合会导致扩展性和维护性变差。
微内核
内核是一个微小的进程,只包括最核心的资源管理功能(部分主机管理功能)。其他资源管理模块作为服务进程单独存在,管理模块之间通过进程间消息(IPC)进行通信。
进程管理和内存管理的一部分也可能被放到内核外面,我们只需关注宏内核和微内核的异同即可。
优点:
安全性好。资源管理模块被隔离为数个独立的进程,当有一个进程出问题时,不会影响其他进程。符合代码设计的高内聚、低耦合原则,代码的扩展性和维护性都比较好。
缺点:
性能低。进程间通过消息通信,开销远远大于进程内的函数调用。当有一个用户进程请求内核的服务时,CPU先切换到内核态请求内核服务,内核又通过消息请求服务进程,服务进程把结果返回给内核,内核再把结果返回给用户进程,CPU再切回用户态。
混合内核
为了折中宏内核与微内核的优缺点,混合内核便诞生了。
混合内核是微内核的宏内核化,即在微内核的基础上,把部分服务进程安置在内核中。当用户进程请求内核服务时,如果内核自身能响应请求就直接向用户返回结果;如果不能,就通过消息向服务进程请求用户的请求,再把服务进程的响应返回给用户。综合了性能和安全性。
后记
内核的实现方式多种多样,要想知道内核的组成和架构到底是怎么回事,还是得结合具体的内核去分析,甚至自己设计和实现一种内核。