【操作系统 | 第一章】从资源管理到虚拟机
操作系统是计算机中最基础的系统软件。它一边直接管理处理器、内存、磁盘和外设,一边向用户程序提供统一、易用且受保护的服务接口。
一、操作系统是什么:资源管理者,也是扩充机器
操作系统负责控制和管理整个计算机系统的硬件、软件资源,合理组织计算机工作和资源分配,并为用户和其他软件提供方便的接口与环境。
从资源管理的角度看,操作系统主要管理四类对象:
- 处理机:决定多个程序何时获得 CPU;
- 存储器:为程序分配、回收和保护内存空间;
- 文件:把磁盘上的数据组织成文件和目录,提供统一的读写方式;
- 设备:协调键盘、显示器、磁盘、打印机等 I/O 设备的使用。
从服务接口的角度看,操作系统把复杂的硬件细节封装起来。普通用户可以通过 GUI 完成文件操作,也可以通过命令接口与系统交互。命令接口又可分为联机命令接口和脱机命令接口:前者强调人机交互,用户输入一条命令后系统立即处理;后者通常将一批命令组织好后交给系统依次执行。
应用程序还可以通过程序接口请求操作系统服务。程序真正运行前,相关指令和数据需要被装入内存,由 CPU 按顺序取指、执行。程序无需直接控制磁盘控制器或修改内存保护信息,这些工作由操作系统统一完成。
因此,安装了操作系统的计算机不再只是裸机。操作系统在硬件之上提供更高层的抽象,使物理机器成为功能更完整、使用更方便的扩充机器。
二、四个基本特征:多个程序怎样共用系统
1. 并发与并行
并发是指两个或多个事件在同一时间间隔内发生。对单核 CPU 来说,多个程序在宏观上像是同时运行,微观上则是 CPU 在它们之间快速切换。
并行强调同一时刻同时发生。多核处理器可以让多个程序分别占用不同核心,在同一时刻执行,从而形成并行。
可以用一句话区分:并发看时间段,并行看同一时刻。 多核 CPU 能够并行,但当待运行程序数量超过可用核心数时,仍然需要并发调度。
2. 共享
共享是指内存中多个并发执行的进程共同使用系统资源。共享有两种常见方式:
- 互斥共享:某一时段只允许一个进程访问资源。例如摄像头被视频会议程序占用时,其他程序通常不能同时独占它。
- 同时共享:多个进程在一个时间段内都能使用资源。例如两个程序同时读取磁盘文件,底层可能仍是交替访问设备,但从用户视角看它们都在工作。
并发和共享互为条件。没有并发,系统中只有一个程序运行,资源共享没有意义;没有共享,多个程序无法共同使用 CPU、内存和 I/O 设备,也就难以实现并发运行。
3. 虚拟
虚拟是把一个物理实体转换为多个逻辑实体。它让用户获得“资源更多”的使用体验,但物理资源并没有凭空增加。
时分复用技术将一个物理 CPU 按很小的时间片轮流分配给多个进程,于是每个用户都像拥有自己的处理器。空分复用技术则把有限的物理内存扩展为更大的逻辑地址空间,形成虚拟存储器。
虚拟依赖并发。只有多个程序需要在同一段时间内运行,按时间或空间复用资源才有实际意义。
4. 异步
多道程序环境下,多个进程会走走停停地向前推进。进程何时获得 CPU、何时等待 I/O、何时因资源不足被阻塞,受系统调度和资源状态影响,执行速度无法预先精确预测,这就是异步性。
异步不代表执行混乱。操作系统通过调度、同步和资源保护,让不可预测的推进过程仍然满足正确性要求。
三、运行机制:为什么程序不能随意操作硬件
程序运行的本质是 CPU 执行一条条机器指令。为了避免任意程序破坏系统资源,处理器将指令划分为特权指令和非特权指令。
特权指令会影响全局资源或系统状态,例如修改内存管理相关信息、设置时钟、进行设备控制等,只能由操作系统内核执行。普通应用程序执行的是非特权指令,例如算术运算、数据传送等。
与指令权限相对应,CPU 有两种运行状态:
- 内核态:运行内核程序,可以执行全部指令,包括特权指令;
- 用户态:运行应用程序,只能执行非特权指令。
处理器通常利用程序状态字 PSW 中的状态位区分当前模式。内核态切换到用户态时,由内核执行特权指令修改状态位;用户态切换到内核态则由中断触发,并由硬件自动完成。
这种区分建立了基础保护边界。应用程序即使出现错误,也不能直接执行高权限操作来任意清空内存、关闭中断或控制其他程序的资源。
四、中断和异常:操作系统重新获得 CPU 的入口
应用程序在用户态运行时,操作系统并没有持续占用 CPU。那操作系统如何在需要时介入?答案是中断和异常。
中断会使 CPU 从用户态进入内核态,转而执行对应的中断处理程序。它是操作系统重新获得 CPU 控制权的重要机制,也是多程序交替执行的基础。
1. 内中断
内中断又称异常或例外,它与当前正在执行的指令有关,中断信号来源于 CPU 内部。常见类型包括:
- 陷阱或陷入:应用程序主动执行陷入指令,请求操作系统服务;
- 故障:由可恢复的错误条件引起,例如缺页故障。内核处理完成后,原程序可以继续执行;
- 终止:由严重错误引起,例如用户态非法执行特权指令。内核通常终止相关程序,不再返回原执行位置。
2. 外中断
外中断与当前正在执行的指令无关,信号来自 CPU 外部。时钟中断使操作系统能够定期检查时间片、进行调度;I/O 中断则用于通知设备事件,例如磁盘读写完成、键盘输入到达。
3. 中断处理过程
不同中断需要不同的处理程序。CPU 检测到中断信号后,保存必要的现场信息,进入内核态,再根据中断类型查询中断向量表,找到对应处理程序的入口地址。处理完成后,系统依据现场信息决定恢复原程序,还是调度其他程序运行。
这条路径解释了单核 CPU 上的“同时运行”:时钟中断不断给操作系统提供重新调度的机会,CPU 才能在多个程序之间切换。
五、系统调用:应用程序请求内核服务的正规通道
用户程序没有直接操作共享资源的权限,但它仍需要创建文件、申请内存、读取键盘输入、发送网络数据。系统调用就是操作系统向应用程序提供的程序接口。
凡是涉及进程控制、文件管理、设备管理、内存管理和进程通信等共享资源的操作,都应通过系统调用请求内核处理。这样做可以让内核统一完成权限检查、资源分配和冲突协调。
以打印为例,两个应用程序若能直接、并发地控制打印设备,输出内容可能交错在同一页上。通过系统调用提交请求后,内核可以按规则排队和调度,保证设备使用有序。
一次典型系统调用可以概括为四步:
- 应用程序将调用号和所需参数传递给寄存器或内存;
- 应用程序执行陷入指令;
- CPU 产生内中断并切换到内核态,内核根据调用号执行对应服务程序;
- 服务完成后恢复用户态,应用程序继续执行。
需要区分系统调用与库函数。库函数是语言运行库或应用程序提供的函数封装;一部分库函数内部会发起系统调用,一部分只完成用户态计算。例如简单的数学计算可能不需要内核介入,而创建文件、读写设备等操作则需要系统调用。
六、内核结构:性能、可靠性与扩展性的取舍
内核是操作系统中最核心的部分,负责执行需要高权限的关键功能。围绕“哪些功能放进内核”这一问题,不同结构有不同取舍。
1. 大内核与微内核
大内核将主要系统服务放在内核态运行。模块间可以直接调用,性能较高;代价是内核代码规模大、耦合更紧,一个内核模块出现严重问题可能影响整个系统。
微内核只把中断处理、原语、进程间通信等最基本功能保留在内核态,将文件服务、设备服务等更多功能放到用户态服务进程中。它的结构更清晰,隔离性和可维护性更好;相应地,服务之间需要频繁通信,用户态与内核态切换增多,性能开销也更大。
因此,大内核更偏向性能,微内核更强调可靠性和扩展性。实际系统往往会根据场景进行折中设计。
2. 外核
外核尽量少做抽象,主要负责为用户进程分配和回收连续的硬件资源,并保证资源使用安全。它减少了抽象层带来的开销,允许应用更灵活地使用硬件;同时也增加了系统设计复杂度,并降低了不同应用之间的一致性。
七、从开机到系统接管:操作系统引导
操作系统本身也是存放在外存中的程序,计算机加电后不能直接从磁盘“自动运行”完整系统,需要一个逐步加载的过程。
简化后的引导流程如下:
- CPU 从预设地址开始执行固件中的引导代码,完成基础硬件初始化与自检;
- 固件定位可引导设备,并加载引导程序;
- 引导程序读取启动所需配置和操作系统核心组件;
- 内核完成初始化,建立内存管理、设备管理等运行环境,随后启动用户空间的系统服务。
不同平台的具体实现会有差异。以 Windows 为例,启动相关文件和配置由引导管理机制组织;学习本章时,更重要的是理解“固件代码逐级加载引导程序,再由引导程序加载内核”的链条。
八、虚拟机:在一台物理机上运行多个计算环境
虚拟机利用虚拟化技术,将一台物理机器抽象成多台逻辑机器。每台虚拟机都可以安装自己的客户操作系统,并获得看似独立的 CPU、内存、磁盘和设备。
虚拟机管理程序 VMM 常分为两类:
| 类型 | 部署位置 | 特点 |
|---|---|---|
| 第一类 VMM | 直接运行在硬件之上 | 能直接控制和分配硬件资源,性能通常更好,可支持更多虚拟机 |
| 第二类 VMM | 运行在宿主操作系统之上 | 依赖宿主系统分配资源,安装和迁移更方便,但多了一层开销 |
第二类 VMM 中,虚拟磁盘通常对应宿主操作系统文件系统中的一个大文件,客户操作系统对它的读写会由 VMM 和宿主系统共同处理。第一类 VMM 更接近硬件,适合服务器等需要集中管理大量虚拟机的场景;第二类 VMM 更适合桌面环境中的开发、测试和学习。
虚拟机体现了操作系统“抽象与复用”的思想:同一套物理资源经过隔离和调度后,可以向不同用户提供彼此独立的运行环境。
总结
第一章的核心不在于记住术语,而在于理解一套连续机制:操作系统统一管理有限资源,通过用户态和内核态划定权限边界,借助中断获得控制权,再通过系统调用向应用程序提供受控服务。在此基础上,并发、虚拟化和不同内核结构才有了实现空间。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)