1.2 运行环境、体系结构、引导与虚拟机
内核态与用户态、特权指令,操作系统内核的功能,中断与异常的分类与处理,系统调用的执行过程;分层、模块化、宏内核与微内核结构;操作系统的引导;虚拟机。
处理器的运行模式
计算机系统中,通常 CPU 执行两种不同性质的程序:一种是操作系统内核程序;另一种是用户自编程序(即系统外层的应用程序,简称”应用程序”)。对操作系统而言,这两种程序的作用不同,前者是后者的管理者,因此”管理程序”(即内核程序)要执行一些特权指令,而”被管理程序”(即用户自编程序)出于安全考虑不能执行这些指令。
- 特权指令:不允许用户直接使用的指令,如 I/O 指令、置中断指令(开/关中断)、存取用于内存保护的寄存器、送程序状态字到程序状态字寄存器、修改时钟等;
- 非特权指令:允许用户直接使用的指令,它不能直接访问系统中的软硬件资源,仅限于访问用户的地址空间,这也是为了防止用户程序对系统造成破坏。
在具体实现上,将 CPU 的运行模式划分为用户态(目态)和内核态(管态、核心态)。CPU 处于内核态时,可以执行所有的指令;处于用户态时,只能执行非特权指令。CPU 中有一个寄存器(PSW 中的某一位)标志当前处于哪种模式。
内核
内核是计算机上配置的底层软件,它管理着系统的各种资源,可以看作连接应用程序和硬件的一座桥梁,是计算机上最基本、最核心的部分。内核的内容主要包括:
- 时钟管理:计时,向用户提供标准的系统时间;通过时钟中断的管理,可以实现进程的切换(如分时系统的时间片轮转);
- 中断机制:在中断机制中,只有一小部分功能属于内核,它们负责保护和恢复中断现场的信息,转移控制权到相关的处理程序;
- 原语:处于操作系统的最底层,是最接近硬件的部分;这些程序的运行具有原子性,其操作只能一气呵成(通常通过关中断实现);运行时间都较短,而且调用频繁,如设备驱动、CPU 切换、进程通信中的部分操作;
- 系统控制的数据结构及处理:进程管理(进程状态管理、进程调度和分派、创建与撤销 PCB 等)、存储器管理(存储器的空间分配和回收、内存信息保护程序、代码对换程序等)、设备管理(缓冲区管理、设备分配和回收等)。
中断和异常
引入中断技术的初衷是提高多道程序运行环境中 CPU 的利用率,而且主要是针对外部设备的。后来逐步得到发展,形成了多种类型,成为操作系统各项操作的基础。
- 中断(外中断):来自 CPU 执行指令外部的事件,通常用于信息输入/输出,如设备发出的 I/O 结束中断,表示设备输入/输出处理已经完成;时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等;
- 异常(内中断):来自 CPU 执行指令内部的事件,如程序的非法操作码、地址越界、运算溢出、虚存系统的缺页及专门的陷入指令等引起的事件。异常不能被屏蔽,一旦出现,就应立即处理。
- 陷入(trap,自陷):应用程序有意引发的,如系统调用。处理后返回到下一条指令;
- 故障(fault):由指令引起的、可能被修复的错误,如缺页、除数为 0(有的教材将除 0 视为终止)。故障被修复后返回引起故障的指令重新执行;
- 终止(abort):出现了使得 CPU 无法继续执行的硬件故障,如控制器出错、存储器校验错,不再返回。
中断处理过程:关中断 → 保存断点(PC)→ 引出中断服务程序(以上由硬件完成,称为中断隐指令)→ 保存现场和屏蔽字 → 开中断 → 执行中断服务程序 → 关中断 → 恢复现场和屏蔽字 → 开中断、中断返回。其中 PC 等由硬件自动保存,通用寄存器等现场信息由操作系统(中断服务程序)保存。
系统调用
系统调用是指用户在程序中调用操作系统所提供的一些子功能,系统调用可视为特殊的公共子程序。系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O 传输及文件管理等),都必须通过系统调用方式向操作系统内核提出服务请求,由操作系统内核代为完成。系统调用按功能大致可分为:设备管理、文件管理、进程控制、进程通信、内存管理。
1// 用户程序2n = read(fd, buf, 100); // 调用库函数3// C 库中的 read()4mov eax, 3 // 系统调用号5mov ebx, fd / ecx, buf ... // 传递参数6int x80 / syscall // 陷入指令:用户态 → 内核态7// 内核:系统调用处理程序8保存现场;按 eax 查系统调用表9sys_read(fd, buf, 100) // 执行内核服务例程10恢复现场;iret // 返回用户态11// 回到用户程序12使用 n 与 buf 中的数据
read()- 传递系统调用参数(把调用号和参数放入寄存器或栈中);
- 执行陷入(trap)指令,引发内中断,CPU 从用户态转为内核态;
- 执行相应的内核服务程序;
- 返回用户态(中断返回)。
操作系统体系结构
| 结构 | 特点 |
|---|---|
| 分层法 | 将 OS 分为若干层,最底层(层 0)为硬件,最高层(层 N)为用户接口,每层只能调用紧邻它的低层的功能和服务(单向依赖)。优点:便于系统的调试和验证,易扩充和易维护;缺点:合理定义各层比较困难,效率较差(每次功能调用都要上下穿越多层) |
| 模块化 | 将操作系统按功能划分为若干具有一定独立性的模块,每个模块具有某方面的管理功能,并规定好各模块间的接口,使各模块之间能通过接口进行通信。优点:提高了操作系统设计的正确性、可理解性和可维护性;增强了适应性;加速了开发过程。缺点:模块间的接口规定很难满足对接口的实际需求;各模块设计者齐头并进,每个决定无法建立在上一个已验证的正确决定的基础上 |
| 宏内核(大内核) | 将操作系统的主要功能模块都作为一个紧密联系的整体运行在内核态,从而为用户程序提供高性能的系统服务。优点:各管理模块之间共享信息,能有效利用相互之间的有效特性,性能高;缺点:内核庞大,维护困难。如 Linux、Windows(大部分) |
| 微内核 | 将内核中最基本的功能(如进程管理、低级存储管理、中断和陷入处理、进程通信)保留在内核,而将那些不需要在内核态执行的功能(如文件系统、设备驱动、网络协议)移到用户态执行,以客户/服务器方式通过消息传递通信。优点:扩展性和灵活性、可靠性和安全性(一个服务出错不会导致整个系统崩溃)、可移植性、分布式计算;缺点:性能问题,需要频繁地在内核态和用户态之间进行切换 |
| 外核 | 内核负责安全地分配和回收硬件资源,让用户程序自己决定如何使用资源 |
操作系统引导
操作系统是一种程序,程序以数据的形式存放在硬盘中,而硬盘通常分为多个区,一台计算机中又可能有多个或多种外部存储设备。操作系统引导是指计算机利用 CPU 运行特定程序,通过程序识别硬盘,识别硬盘分区,识别硬盘分区上的操作系统,最后通过程序启动操作系统,一环扣一环地完成上述过程。
- 激活 CPU:CPU 读取 ROM 中的 boot 程序,将指令寄存器置为 BIOS(基本输入/输出系统)的第一条指令,即开始执行 BIOS 的指令;
- 硬件自检(POST):启动 BIOS 程序后,先进行硬件自检,检查硬件是否出现故障;
- 加载带有操作系统的硬盘:BIOS 读取启动顺序,把控制权转交给排在第一位的存储设备,然后 CPU 将该存储设备引导扇区的内容加载到内存中;
- 加载主引导记录 MBR:MBR 的作用是告诉 CPU 去硬盘的哪个主分区(活动分区)去找操作系统;
- 扫描硬盘分区表,并加载硬盘活动分区(含操作系统)的分区引导记录 PBR;
- 加载启动管理器:PBR 寻找并激活分区根目录下用于引导操作系统的程序(启动管理器);
- 加载操作系统:将操作系统的初始化程序加载到内存中执行。
虚拟机
虚拟机是指利用虚拟化技术,将一台物理机器虚拟化为多台虚拟机器,通过隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境。有两种虚拟化方法:
- 第一类虚拟机管理程序(裸金属架构):直接运行在硬件上,是唯一一个运行在最高特权级(内核态)的程序。虚拟机中的”内核态”实际上运行在物理机的用户态,当虚拟机中的操作系统执行特权指令时,会陷入虚拟机管理程序中处理(如 VMware ESXi、Xen);
- 第二类虚拟机管理程序(寄居架构):是一个依赖于宿主操作系统分配和调度资源的程序,很像一个普通的进程(如 VMware Workstation、VirtualBox)。
即时练习
- 1(408 真题 2011)下列选项中,在用户态执行的是( )。
- 2(408 真题 2012)下列选项中,不可能在用户态发生的事件是( )。
- 3(408 真题 2013)下列选项中,会导致用户进程从用户态切换到内核态的操作是( )。
Ⅰ. 整数除以零 Ⅱ. sin() 函数调用 Ⅲ. read 系统调用 - 4(408 真题 2014)下列指令中,不能在用户态执行的是( )。
- 5(408 真题 2015)处理外部中断时,应该由操作系统保存的是( )。
- 6(408 真题 2017)执行系统调用的过程包括:① 返回用户态;② 执行陷入(trap)指令;③ 传递系统调用参数;④ 执行相应的服务程序。正确的执行顺序是( )。
标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。