操作系统基础原理

本文系统介绍操作系统的基础原理,内容包括操作系统的角色、内核架构、进程与线程管理、CPU调度、内存管理、文件系统与I/O、并发与同步以及安全与保护机制,为理解和设计现代计算系统提供理论基础。

1CPU时间在用户态、内核态和空闲状态之间的示意分布。

2:存储层次结构及访问时延示意(对数刻度)。

3:进程在就绪、运行和阻塞状态之间随时间变化的示意。

4:磁盘IOPS随时间变化的示意曲线(与负载相关)。

组件

主要角色

示例

关键概念

进程与线程管理

创建、调度和同步执行单元。

调度器、进程表、线程库等。

上下文切换、抢占、进程间通信等。

内存管理

分配、保护和管理内存资源。

虚拟内存、分页和分段机制。

地址空间、页表、MMU等。

文件系统与I/O

存储并访问持久数据。

文件系统、设备驱动和I/O调度器。

数据块、元数据、缓冲和缓存等。

设备与资源管理

为硬件设备提供抽象接口并管理资源。

驱动程序、硬件抽象层、资源控制器。

中断处理、资源抽象和管控。

表1:操作系统主要组件及其角色。

状态

描述

典型触发条件

备注

新建 (New)

进程正在创建中。

fork/exec或系统调用创建进程。

已分配资源但尚未调度执行。

就绪 (Ready)

进程可运行,等待CPU时间片。

被调度器加入就绪队列。

与其他就绪进程竞争CPU。

运行 (Running)

进程正在CPU上执行。

调度器选择并分派时间片。

可能主动释放或被抢占。

阻塞/等待 (Blocked/Waiting)

进程等待I/O完成或某事件发生。

发起I/O请求、等待锁、休眠等。

事件完成后回到就绪状态。

结束 (Terminated)

进程已完成执行或被终止。

正常退出或收到终止信号。

操作系统回收其资源。

表2:典型进程状态及状态转换触发条件。

调度算法

基本原理

优点

缺点

FCFS 先来先服务

按照到达顺序调度进程运行。

实现简单,开销低。

平均响应时间可能较差,易出现“车队效应”。

时间片轮转 (Round Robin)

为每个进程分配固定时间片,按轮次调度。

适合分时系统,CPU分配较公平。

时间片大小影响调度开销和交互响应。

优先级调度

总是运行就绪队列中优先级最高的进程。

可支持QoS和灵活优先级策略。

低优先级进程可能长期饥饿。

多级反馈队列 (MLFQ)

设置多级队列,时间片和优先级因队列而异。

可根据进程行为自适应调整,兼顾交互和批处理。

设计和调优较复杂,实现难度较大。

表3:常见CPU调度算法及其优缺点。

1. 操作系统的角色与结构

操作系统是管理硬件资源并为应用程序提供服务和抽象的软件系统。它处于用户应用与硬件之间,为CPU、内存、存储和外设提供受控访问。

典型结构包括内核(具有最高特权的核心)、系统库以及用户态工具。内核实现进程调度、内存管理、设备驱动和系统调用等底层机制;系统库提供更高层的API;用户工具为配置和运维提供界面和命令。

2. 内核架构

不同操作系统采用不同的内核架构。单体内核(如传统Unix和Linux)将大部分服务置于同一地址空间,通信效率较高,但对复杂度管理提出挑战;微内核则将许多服务移入用户态,仅在内核中保留最基本的IPC和调度功能。

混合内核结合两者特点,以模块化方式组织组件,并允许部分服务在内核态运行。模块化和清晰接口有助于提高可维护性和可靠性。内核架构的选择会影响系统性能、故障隔离能力和可扩展性。

3. 进程与线程

进程是运行中程序的实例,包含代码、数据、栈以及打开的文件和网络套接字等资源。线程是进程内部的执行单元,共享同一地址空间和资源,但拥有独立的栈和寄存器。多线程进程可在多核CPU上利用并行性。

进程管理涉及创建(如fork/exec或相应系统调用)、调度、同步和终止等操作;线程管理包括线程创建、锁和信号量等同步原语的使用以及资源清理。正确理解进程与线程语义是设计并发程序、避免竞争条件和死锁的前提。

4. CPU调度

CPU调度决定在任意时刻哪个进程或线程获得CPU。在多道程序环境中,调度器从就绪队列中根据策略选择执行单元,以在吞吐量、公平性和交互响应之间进行平衡。基础调度算法包括先来先服务(FCFS)、时间片轮转、优先级调度和多级反馈队列等。

现代操作系统通常采用更复杂的调度策略,考虑交互性、实时约束和CPU亲和性等因素。例如,Linux 默认使用完全公平调度器(CFS),近似实现CPU时间的公平共享;实时调度器则采用基于优先级和截止时间的算法来保证任务时序。

5. 内存管理与虚拟内存

内存管理负责为各进程提供足够内存并保证地址空间隔离。虚拟内存抽象了物理内存,为每个进程提供一个逻辑上连续的地址空间。操作系统和硬件中的内存管理单元(MMU)通过页表将虚拟地址映射到物理页框。

分页将内存划分为固定大小的页和页框,简化分配和换页。操作系统可采用需求分页,仅在访问时将页加载到内存;当物理内存不足时,采用LRU等页面置换算法选择被换出的页。分段机制在部分体系结构中用于将地址空间划分为代码、数据和栈等逻辑段。合理的内存管理可防止内存破坏并支持共享库等高效共享机制。

6. 文件系统与I/O管理

文件系统为持久数据提供层次化抽象,将文件和目录组织在统一命名空间中,并维护权限、时间戳和大小等元数据。操作系统为不同存储设备提供统一访问接口,底层通过驱动和I/O调度器与磁盘、SSD等设备进行通信。

I/O操作通常使用缓冲和缓存机制以降低访问时延并提高吞吐量。异步I/O允许应用在I/O过程中继续计算,由操作系统负责数据传输。在多用户环境中,权限控制、配额和日志机制有助于保证数据完整性和控制资源使用。

7. 并发、同步与死锁

操作系统提供并发执行和同步的原语。互斥锁和自旋锁用于保护临界区不被多个线程同时访问;信号量和条件变量用于通过事件通知协调线程。在复杂系统中,可能使用监视器或事务内存等更高层抽象。

死锁发生在多个进程或线程相互等待彼此持有的资源,导致系统无法继续前进。操作系统设计可以采用死锁预防、避免(如银行家算法)或检测与恢复策略。正确使用同步原语对于保证程序正确性、避免活锁并在高并发场景下保持性能至关重要。

8. 保护机制、安全与操作系统服务

保护机制用于在进程和用户之间建立边界。用户态/内核态分离、内存保护、文件权限和访问控制列表等有助于防止越权访问。现代操作系统还实现身份验证、加密支持、沙箱、可信启动和审计等安全功能。

操作系统还提供日志、时间管理、网络协议栈、设备发现和系统配置等服务。系统调用形成用户应用与内核服务之间的接口,其设计会影响系统性能和安全性。

9. 总结

操作系统负责管理硬件资源并提供抽象,使复杂应用能够安全、高效地运行。核心原理包括进程与线程管理、CPU调度、内存管理、文件系统与I/O处理、并发控制和安全保护等。深入理解这些原理对于设计、优化和排查现代计算系统问题至关重要。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐