操作系统-绪论(1)

操作系统-绪论(1)
4FGR本blog考研操作系统主体内容由小白兔友情提供
1.1 操作系统的基本概念
1.1.1 操作系统的定义
操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。
1.1.2 操作系统的功能和目标
资源的管理者(四大管理功能)
- 处理机管理:管理 $CPU$,负责进程调度、分配处理器资源
- 存储器管理:管理内存,负责内存分配、地址映射、内存保护与扩充
- 文件管理:管理文件,负责文件的存取、共享、保护,管理外存
- 设备管理:管理 $(I/O)$ 外设,负责设备分配、缓冲管理等
向上层提供服务(接口分类)
操作系统向上提供三类接口,供不同对象使用:
给普通用户使用:用户接口(命令接口)
- 联机命令接口(交互式命令接口) 实例:$Windows$ 系统的 $cmd$ 命令提示符。 特点:用户输入一条命令,操作系统立刻执行、给出反馈,交互式实时操作。
- 脱机命令接口(批处理命令接口) 实例:$Windows$ 批处理
.bat脚本文件。 特点:提前把多条命令写在脚本中,一次性提交给操作系统,系统自动批量执行,不需要用户逐条交互。
补充:$GUI$ 图形用户界面,也属于面向普通用户的接口,依托鼠标、窗口可视化操作。
给软件/程序员使用:程序接口
程序接口,由一系列系统调用组成。
程序接口,可以在程序中进行系统调用来使用程序接口。
普通用户不能直接使用程序接口,只能通过程序代码间接使用。
调用流程示例: 程序员 → $C$ 语言库函数(如 $printf$) → 系统调用(操作系统程序接口) → 操作系统内核 → 硬件(显示器) 举例:$C$ 语言 $Hello World$ 的 $printf$ 底层,就调用操作系统显示相关的系统调用。
重点:系统调用是应用程序请求操作系统服务的唯一方式,类似函数调用,是用户态进入内核态的途径。

对硬件机器的扩展:扩充机器
操作系统把裸机(只有硬件的计算机)改造为功能更强、使用更方便的扩充机器(虚拟机),屏蔽硬件底层复杂细节,向上提供易用服务。

1.1.3 操作系统的特征
操作系统有四大特征:并发、共享、虚拟、异步;其中并发、共享是操作系统两个最基本的特征。
并发
并发性指计算机系统中同时存在着多个运行着的程序。
操作系统的并发性指计算机系统中“同时”运行着多个程序,这些程序宏观上看是同时运行着的,而微观上看是交替运行的。
注意:
单核 $CPU$ 同一时刻只能执行一个程序,各个程序只能并发地执行
多核 $CPU$ 同一时刻可以同时执行多个程序,多个程序可以并行地执行比如 $4$ 核 $CPU$,可以并行地执行 $4$ 个程序。
区分:
- 并发:宏观同时,微观交替
- 并行:同一时刻同时执行
共享
共享性是指系统中的资源可供内存中多个并发执行的进程共同使用。
共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
资源共享分为两种方式:
互斥共享方式
系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。
实例:使用 $QQ$ 和微信视频。同一时间段内摄像头只能分配给其中一个进程。同时共享方式
系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问。
所谓的“同时”往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)。
实例:使用 $QQ$ 发送文件 $A$,同时使用微信发送文件 $B$。宏观上看,两边都在同时读取并发送文件,说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替着访问硬盘的。
并发与共享的关系
例子:使用 $QQ$ 发送文件 $A$,同时使用微信发送文件 $B$。
- 两个进程正在并发执行(并发性)
- 需要共享地访问硬盘资源(共享性)
- 如果失去并发性,则系统中只有一个程序正在运行,则共享性失去存在的意义
- 如果失去共享性,则 $QQ$ 和微信不能同时访问硬盘资源,就无法实现同时发送文件,也就无法并发
结论:并发与共享互为存在条件。
虚拟
虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。
虚拟技术分为两类:
- 时分复用技术(如虚拟处理器技术)
- 空分复用技术(如虚拟存储技术)
实例:单核 $CPU$ 上运行多个进程,用户会感觉有多个独立的处理器在运行程序,这就是时分复用带来的虚拟;物理内存通过虚拟存储技术,让程序感知到更大的逻辑内存空间,属于空分复用。
异步
异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。

1.2操作系统发展与分类
手工操作阶段
特点:用户独占整机,人工装取纸带完成输入输出
缺点:人机速度矛盾,$CPU$ 大量空闲,资源利用率极低
批处理阶段
1. 单道批处理系统
引入脱机输入/输出技术,监督程序管理作业 $(I/O)$
- 优点:一定程度缓解人机速度矛盾,资源利用率有所提升
- 缺点:内存同一时刻只有一道程序运行;$CPU$ 等待 $(I/O)$,资源利用率依然很低
2. 多道批处理系统(操作系统正式诞生)
内存同时载入多道程序,程序并发执行
- 优点:多道程序并发、资源共享,$CPU$ 利用率、系统吞吐量大幅提高
- 缺点:无交互能力,提交作业后用户无法干预程序运行,响应时间长
分时操作系统
以时间片轮转的方式轮流为多个终端用户服务
- 优点:支持人机交互;多用户同时使用一台主机,相互独立,用户感觉独占计算机
- 缺点:公平分配时间片,不能优先处理紧急任务
实时操作系统
核心特征:及时性、可靠性,可优先响应紧急任务,紧急任务不需要排队等时间片
- 硬实时系统:必须在绝对严格时限内完成处理,超时会造成严重后果
例:导弹控制系统、自动驾驶系统 - 软实时系统:允许偶尔违反时间规定,超时不会造成灾难性后果
例:$12306$ 火车订票系统
其他操作系统
- 网络操作系统:实现网络中多机通信、资源共享
- 分布式操作系统:多台计算机协同,对外像一台机器
- 个人计算机操作系统:面向单用户,如 $Windows$、$macOS$

1.3操作系统运行环境
1.3.1运行机制
程序分类
- 内核程序:操作系统内核使用的程序
- 应用程序:普通用户/程序员编写的程序
两种指令
$CPU$ 在出厂时就划分了特权指令与非特权指令,$CPU$ 执行指令前可判断指令类型
- 特权指令:影响重大,仅允许操作系统内核使用,如内存清零指令
- 非特权指令:应用程序可使用,如加法指令、减法指令
两种处理器状态($CPU$ 状态)
别名:内核态=核心态=管态;用户态=目态
内核态:正在运行内核程序,可执行特权指令与非特权指令
用户态:正在运行应用程序,只能执行非特权指令
内核是操作系统最重要最核心最接近硬件的部分,由大量内核程序组成。 $CPU$ 中有程序状态字寄存器($PSW$),用其中一位标记状态,$1$ 表示“内核态”,$0$ 表示“用户态”
状态转换(变态)
内核态 $\boldsymbol{\rightarrow}$ 用户态 执行一条特权指令——修改 $PSW$ 的标志位为“用户态”,这个动作意味着操作系统将主动让出 $CPU$ 使用权。
操作系统内核在让出 $CPU$ 之前,会用一条特权指令把 $PSW$ 的标志位设置为“用户态”
用户态 $\boldsymbol{\rightarrow}$ 内核态 由中断引发,硬件自动完成变态过程;触发中断信号意味着操作系统将强行夺回 $CPU$ 的使用权。
共性:但凡需要操作系统介入的地方,都会触发中断信号。 $CPU$ 检测到中断信号后,会立即变为“内核态”,停止运行当前应用程序,转而运行处理中断信号的内核程序?

1.3.2中断和异常
中断的作用
“中断”是让操作系统内核夺回 $CPU$ 使用权的唯一途径。
- 让操作系统内核强行夺回 $CPU$ 的控制权
- 使 $CPU$ 从用户态变为内核态
补充: 内核态 $\rightarrow$ 用户态:执行一条特权指令,修改 $PSW$ 的标志位为“用户态”,操作系统主动让出 $CPU$ 使用权。 用户态 $\rightarrow$ 内核态:由中断引发,硬件自动完成状态切换,操作系统强行夺回 $CPU$ 使用权。 如果没有中断机制,一旦应用程序占用 $CPU$,$CPU$ 会一直运行该应用程序,无法实现并发。
中断的分类(广义中断)
大多数教材、试卷中,“中断”特指狭义的中断(外中断),内中断一般称为异常。
1. 内中断(异常)
信号来自 $CPU$ 内部,与当前执行指令有关
- 陷阱、陷入(trap):由陷入指令引发,是应用程序主动触发。 例:系统调用,应用程序请求操作系统内核服务,主动交出 $CPU$ 控制权。
- 故障(fault):由错误条件引起,内核有可能修复;修复完成后将 $CPU$ 交回应用程序继续执行。 例:缺页故障。
- 终止(abort):由致命错误引起,内核无法修复,一般不再交还 $CPU$,直接终止应用程序。 例:整数除 $0$、用户态非法执行特权指令。
2. 外中断(狭义的中断)
信号来自 $CPU$ 外部,与当前执行指令无关,每条指令周期末尾 $CPU$ 才检查外中断信号
- 时钟中断:时钟部件每隔固定时间(如 $50\mathrm{ms}$)发送中断信号,用于时间片轮转。
- $(I/O)$ 中断请求:输入输出设备完成任务后,向 $CPU$ 发送中断信号。
中断机制的基本实现原理
检查中断信号
- 内中断:$CPU$ 在执行指令时检查是否有异常发生
- 外中断:在每个指令周期末尾,$CPU$ 检查是否有外中断信号
找到相应的中断处理程序 通过中断向量表实现:不同中断信号对应不同中断处理程序;$CPU$ 检测中断信号后,查询中断向量表,找到中断处理程序在内存中的位置。
中断处理程序属于内核程序,运行在内核态。

1.3.3 系统调用
系统调用的定义
系统调用是操作系统内核提供给应用程序使用的接口。凡是涉及系统共享资源的操作,必须通过系统调用向内核发起请求,由操作系统代为完成,是用户程序请求内核服务的唯一入口。
系统资源由操作系统统一管控,不允许用户程序直接操作硬件、内存等共享资源,以此保障系统安全稳定。
系统调用与库函数
层次从底层到上层:裸机 $\rightarrow$ 操作系统 $\rightarrow$ 编程语言库函数 $\rightarrow$ 普通应用程序
系统调用:操作系统内核提供,运行于内核态,完成资源相关操作。
库函数:编程语言提供,运行于用户态。一部分库函数封装系统调用,隐藏底层细节;一部分库函数完全不涉及系统调用。
例:$abs()$ 取绝对值库函数,不需要系统调用;$fopen()$ 文件打开库函数,底层会调用文件相关系统调用。
为什么必须要有系统调用?
计算机里的硬件、文件、内存、进程都属于系统共享资源,多个进程会竞争使用。 如果允许用户程序直接操作硬件 / 内存,会产生冲突、破坏系统,不安全、不稳定。
规则:凡是和共享资源有关、会影响其他进程的操作,必须交给操作系统内核完成,必须通过系统调用。
例子:$Word$ 和 $WPS$ 同时向打印机发打印请求,由内核统一调度打印机资源。
系统调用的分类
- 设备管理:设备请求、释放、启动读写外设
- 文件管理:文件创建、删除、读、写
- 进程控制:进程创建、撤销、阻塞、唤醒
- 进程通信:进程之间消息、信号传递
- 内存管理:内存分配、内存回收
系统调用的处理过程
传递参数:应用程序处于用户态,将系统调用所需要的参数放到通用寄存器。
执行陷入指令(访管指令)
陷入指令在用户态执行,执行后触发内中断,$CPU$ 完成用户态向内核态的切换。
内核执行对应服务程序:$CPU$ 切换至内核态,操作系统内核执行对应的系统调用服务子程序,完成资源操作。
返回用户程序:内核处理完毕,将 $CPU$ 从内核态切回用户态,回到应用程序继续执行。
陷入指令是用户态主动进入内核态的唯一手段;系统调用请求发出发生在用户态,真正资源操作发生在内核态。

1.4 操作系统体系结构
操作系统内核
内核是操作系统最基本、最核心的部分。 实现操作系统内核功能的那些程序就是内核程序。
内核包含模块
- 时钟管理:实现计时功能
- 中断处理:负责实现中断机制
- 原语
- 是一种特殊的程序
- 处于操作系统最底层,是最接近硬件的部分
- 这种程序的运行具有原子性——其运行不可中断
- 运行时间较短、调用频繁
- 对系统资源进行管理的功能
- 进程管理
- 存储器管理
- 设备管理
时钟管理、中断处理、原语:与硬件关联较紧密的模块 进程管理、存储器管理、设备管理:这些管理工作更多的是对数据结构的操作,不会直接涉及硬件
操作系统的两种体系结构

大内核
将操作系统的主要功能模块都作为系统内核,运行在核心态
- 优点:高性能
- 缺点:内核代码庞大,结构混乱,难以维护
微内核
只把最基本的功能保留在内核
- 优点:内核功能少,结构清晰,方便维护
- 缺点:需要频繁地在核心态和用户态之间切换,性能低
典型的大内核/宏内核/单内核操作系统:$Linux$、$UNIX$ 典型的微内核操作系统:$Windows\ NT$
大内核与微内核的对比
场景:应用程序想要请求操作系统的服务,这个服务的处理同时涉及到进程管理、存储管理、设备管理
- 大内核:两次变态
- 微内核:六次变态
注意:变态的过程是有成本的,要消耗不少时间,频繁地变态会降低系统性能

操作系统的体系结构补充
1. 分层结构
分层结构将操作系统按功能划分为多个层次,每层只对上一层提供服务,并隐藏底层实现细节。
- 优点:结构清晰,便于调试和验证;每层可独立测试,便于移植;支持增量开发,可逐层实现。
- 缺点:层次划分会增加系统开销;每层之间存在严格接口约束,跨层访问受限;效率可能低于其他结构。
分层结构的核心思想是:每一层只做有限职责,通过接口向上提供服务。
2. 模块化结构
模块化是将操作系统功能划分为若干具有一定独立性的模块,每个模块负责某一方面的管理功能,并规定模块之间的接口,使模块能通过接口通信。
例如:操作系统可划分为 进程管理模块、存储器管理模块、文件管理模块 等;每个模块内部还可进一步划分为若干子模块,如进程控制、进程调度、内存分配、内存保护、磁盘管理、目录管理等。
- 优点:模块独立性强,便于理解和维护;可单独开发、测试和替换模块;接口清晰,有利于多人协作开发。
- 缺点:模块之间可能存在复杂依赖;若接口设计不当,会影响系统效率;模块划分的粒度会直接影响系统结构的清晰度。
这种设计方法称为 模块-接口法,由模块、子模块和模块之间的接口共同组成模块化操作系统结构。
3. 宏内核(大内核)
宏内核将操作系统的主要功能模块都集成在内核中,运行在核心态。
- 优点:性能高,模块间通信直接;功能完整,适合对效率要求较高的系统。
- 缺点:内核代码庞大,结构混乱,难以维护;一个模块出错可能影响整个内核。
典型操作系统:$Linux$、$UNIX$
4. 微内核
微内核只把最基本的功能保留在内核中,如进程通信、内存管理、中断处理等,其他服务以用户态进程方式运行。
- 优点:内核小,结构清晰;可靠性高,用户态服务出错不易影响整个系统;便于扩展和维护。
- 缺点:需要频繁在核心态和用户态之间切换,性能较低;用户态服务之间通信成本较高。
典型操作系统:$Windows\ NT$
5. 外核($exokernel$)
外核是一种更极端的内核结构,内核只负责保护和复用硬件资源,而资源管理策略更多地由用户级软件完成。
- 优点:减少了内核资源管理的负担,提高了系统的灵活性和并行度。
- 缺点:降低了系统的一致性,部分管理工作需要上层软件承担。
体系结构对比总结
| 体系结构 | 核心思想 | 优点 | 缺点 |
|---|---|---|---|
| 分层结构 | 按层次组织,每层只通过接口向上层提供服务 | 结构清晰,便于测试、调试和移植 | 层次开销较大,效率可能较低 |
| 模块化结构 | 按功能划分为独立模块,通过接口通信 | 模块独立,便于开发、测试和维护 | 模块依赖可能复杂,接口设计影响效率 |
| 宏内核 | 主要功能都集成在内核中 | 性能高,功能完整 | 内核庞大,难以维护 |
| 微内核 | 只保留最基本功能在内核,服务运行在用户态 | 结构清晰,可靠性高,便于扩展 | 状态切换频繁,性能较低 |
| 外核 | 内核只做资源保护和复用,管理策略上移 | 灵活性高,并行度高 | 一致性较低,上层负担较重 |
1.1.5操作系统引导
说明:这是传统 $BIOS$ + $MBR$ 磁盘的开机引导流程(不是 $UEFI$)
整体流程梳理
① $CPU$ 上电,执行 $ROM$($BIOS$)里的引导程序
计算机通电后,$CPU$ 直接从固定的主存地址取指令,运行固化在 $ROM$ 中的 $BIOS$ 程序。
$BIOS$ 首先执行硬件自检 $POST$,检测 $CPU$、内存、硬盘等基础硬件是否正常;自检通过后,$BIOS$ 会按照启动顺序寻找可引导磁盘。② $BIOS$ 读取磁盘的主引导记录 $MBR$,载入 $RAM$ 执行
$BIOS$ 找到启动硬盘,读取磁盘第 $0$ 扇区(第一块),也就是**$MBR$ 主引导记录**,加载到内存。
$MBR$ 包含两部分:磁盘引导程序 + 分区表。
执行 $MBR$ 引导程序,扫描分区表,标记出活动分区(主分区,装系统的分区,如图里 $C$ 盘)。③ 读取活动分区内的分区引导记录 $PBR$,载入 $RAM$ 执行
$MBR$ 的引导程序定位到活动分区,读取该分区第一个扇区——$PBR$ 分区引导记录,调入内存运行。
$PBR$ 的任务:在当前分区的文件系统里,找到操作系统的启动管理器。④ $PBR$ 找到启动管理器,加载完整 $OS$ 内核,完成开机
$PBR$ 在分区的根目录中定位到系统启动管理器,把它读入内存并执行;
启动管理器再进一步加载操作系统内核、初始化系统,最终进入操作系统。
关键名词区分(考试常考)
| 名词 | 存放位置 | 核心作用 |
|---|---|---|
| $BIOS$ | 主板 $ROM$ | 上电自检,找到硬盘,加载 $MBR$ |
| $MBR$ 主引导记录 | 硬盘 $0$ 号扇区(不属于任何分区) | 硬盘引导程序+整张磁盘的分区表,找到活动分区 |
| $PBR$ 分区引导记录 | 活动分区的第一个扇区(属于分区内部) | 在本分区文件系统里寻找系统启动文件 |
补充要点
- $MBR$ 是整个硬盘的第一扇区,不属于 $C$/$D$/$E$ 任何一个分区;$PBR$ 属于单个分区。
- 只有**标记为活动(可引导)**的分区,它里面的 $PBR$ 才会被执行,一般操作系统就安装在活动分区。
- 这套是老式 $BIOS$ 启动;现在新电脑多用 $UEFI$+$GPT$,流程不一样,不要混淆。

1.1.6虚拟机与 $VMM$(虚拟机管理程序)
虚拟机:使用虚拟化技术,将一台物理机器虚拟化为多台虚拟机(Virtual Machine, $VM$),每个虚拟机都可以独立运行一个操作系统。
同义术语:虚拟机管理程序 / 虚拟机监控程序 / Virtual Machine Monitor / $Hypervisor$
$VMM$ 全称 Virtual Machine Monitor,中文叫虚拟机管理程序(虚拟机监控程序、$Hypervisor$),分为第一类 $VMM$ 和第二类 $VMM$。
1. 第一类 $VMM$
直接运行在硬件之上,没有宿主操作系统。
- 位置:硬件之上,直接接管硬件资源,运行在最高特权级($Ring\ 0$),可以执行最高特权的指令。
- 实例:$VMware\ ESXi$、$Xen$、$KVM$(裸金属部署场景)
2. 第二类 $VMM$
运行在**宿主操作系统($Host\ OS$)**之上,属于宿主操作系统上的软件。
- 位置:依赖 $Host\ OS$ 获取硬件资源;部分运行在用户态、部分运行在内核态。客户操作系统($Guest\ OS$)发出的系统调用会被 $VMM$ 截获,并转化为 $VMM$ 对 $Host\ OS$ 的系统调用。
- 实例:$VMware\ Workstation$、VirtualBox
两类虚拟机管理程序($VMM$)的对比
| 对比维度 | 第一类 $VMM$ | 第二类 $VMM$ |
|---|---|---|
| 对物理资源的控制权 | 直接运行在硬件之上,能直接控制和分配物理资源 | 运行在 $Host\ OS$ 之上,依赖于 $Host\ OS$ 为其分配物理资源 |
| 资源分配方式 | 在安装 $Guest\ OS$ 时,$VMM$ 要在原本的硬盘上自行分配存储空间,类似于“外核”的分配方式,分配未经抽象的物理硬件 | $Guest\ OS$ 拥有自己的虚拟磁盘,该盘实际上是 $Host\ OS$ 文件系统中的一个大文件。$Guest\ OS$ 分配到的内存是虚拟内存 |
| 性能 | 性能更好 | 性能更差,需要 $Host\ OS$ 作为“中介” |
| 可支持的虚拟机数量 | 更多,不需要和 $Host\ OS$ 竞争资源,相同的硬件资源可以支持更多的虚拟机 | 更少,$Host\ OS$ 本身需要使用物理资源,$Host\ OS$ 上运行的其他进程也需要物理资源 |
| 虚拟机的可迁移性 | 更差 | 更好,只需导出虚拟机镜像文件即可迁移到另一台 $Host\ OS$ 上,商业化应用更广泛 |
| 运行模式 | 第一类 $VMM$ 运行在最高特权级($Ring\ 0$),可以执行最高特权的指令。 | 第二类 $VMM$ 部分运行在用户态、部分运行在内核态。$Guest\ OS$ 发出的系统调用会被 $VMM$ 截获,并转化为 $VMM$ 对 $Host\ OS$ 的系统调用 |

- $Host\ OS$:宿主操作系统,物理机上原本安装的操作系统(第二类虚拟化才有)
- $Guest\ OS$:客户操作系统,跑在虚拟机内部的操作系统
- $VMM$ / $Hypervisor$:虚拟机管理程序,负责隔离、调度各个虚拟机,分配硬件资源



