一、操作系统概述
操作系统(固定6分)
1. 计算机层次结构
计算机系统由硬件和软件组成,操作系统是系统软件的核心。
2. 操作系统定义
操作系统是控制和管理计算机硬件和软件资源、合理地组织计算机工作流程以及方便用户使用的程序的集合。
3. 操作系统功能
| 功能 | 说明 |
|---|---|
| 进程管理 | 处理机管理,包括进程控制、进程同步、进程通信、进程调度 |
| 存储管理 | 内存分配、地址映射、内存保护、内存扩充 |
| 文件管理 | 文件存储空间管理、目录管理、文件读写管理、文件保护 |
| 设备管理 | 缓冲管理、设备分配、设备处理 |
| 用户接口 | 命令接口、程序接口、图形接口 |
二、程序执行方式
1. 程序顺序执行
特征:
- 顺序性:处理机的操作严格按照程序所规定的顺序执行
- 封闭性:程序运行时独占全机资源
- 可再现性:只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是"停停走走"地执行,都将获得相同的结果
2. 程序并发执行
特征:
- 间断性:程序在并发执行时,由于共享资源,相互制约,导致执行过程出现"执行-暂停-执行"的现象
- 失去封闭性:程序并发执行时,系统资源被多个程序共享,程序的运行受到其他程序的影响
- 不可再现性:程序并发执行时,由于失去了封闭性,其计算结果与并发程序的执行速度有关
3. 前趋图
前趋图是一个有向无环图(DAG),用于描述进程之间的先后执行关系。
- 结点:表示一条语句、一个程序段或一个进程
- 有向边:表示两个结点之间的前趋关系
三、进程的状态模型
1. 三态模型
进程的3种基本状态:
| 状态 | 说明 |
|---|---|
| 运行态(Running) | 进程正在CPU上执行 |
| 就绪态(Ready) | 进程已具备运行条件,等待CPU调度 |
| 阻塞态(Blocked) | 进程因等待某事件的发生而暂时不能运行 |
状态转换:
- 就绪态 → 运行态:进程被调度程序选中
- 运行态 → 就绪态:时间片用完或被更高优先级进程抢占
- 运行态 → 阻塞态:进程请求某事件(如I/O操作)
- 阻塞态 → 就绪态:进程等待的事件发生
2. 五态模型(了解)
进程的5种状态:运行、就绪、阻塞、新建态和终止态。
| 状态 | 说明 |
|---|---|
| 新建态(New) | 进程正在被创建 |
| 就绪态(Ready) | 进程已具备运行条件,等待CPU调度 |
| 运行态(Running) | 进程正在CPU上执行 |
| 阻塞态(Blocked) | 进程因等待某事件的发生而暂时不能运行 |
| 终止态(Terminated) | 进程结束运行 |
四、进程间的同步与互斥
1. 同步与互斥的概念
| 概念 | 说明 |
|---|---|
| 同步 | 合作进程间的直接制约问题,进程之间需要协调执行顺序 |
| 互斥 | 申请临界资源进程间的间接制约问题,进程之间需要竞争共享资源 |
2. 临界区管理的原则
临界区是进程中访问临界资源的代码段。
临界区管理原则:
- 空闲让进:当无进程处于临界区时,应允许一个请求进入临界区的进程立即进入
- 忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待
- 有限等待:对请求访问的进程,应保证在有限时间内进入临界区
- 让权等待:当进程不能进入临界区时,应立即释放CPU
3. 信号量机制
信号量是一种特殊的变量,用于进程间的同步与互斥。
PV操作:
- P操作(wait):申请资源,信号量值减1;若信号量值小于0,则进程阻塞
- V操作(signal):释放资源,信号量值加1;若信号量值小于等于0,则唤醒一个阻塞进程
4. PV操作实现进程的互斥
semaphore mutex = 1; // 互斥信号量,初值为1
Process Pi:
P(mutex); // 申请进入临界区
// 临界区代码
V(mutex); // 退出临界区
5. PV操作实现进程的同步
semaphore S = 0; // 同步信号量,初值为0
Process A: // 先执行
// 操作A
V(S); // 通知B可以执行
Process B: // 后执行
P(S); // 等待A完成
// 操作B
五、死锁
1. 死锁的定义
死锁:两个以上的进程互相都要求对方已经占有的资源导致无法继续运行下去的现象。
2. 死锁产生的原因
必要条件(四个条件同时满足):
| 条件 | 说明 |
|---|---|
| 互斥条件 | 资源一次只能被一个进程占用 |
| 请求和保持条件 | 进程已占有资源,又申请新的资源 |
| 不剥夺条件 | 进程已获得的资源不能被强制剥夺 |
| 循环等待条件 | 存在一个进程等待链,链中每个进程都在等待下一个进程所占有的资源 |
3. 死锁的处理
| 策略 | 说明 |
|---|---|
| 预防死锁 | 破坏死锁的四个必要条件之一 |
| 避免死锁 | 在资源分配时,使用某种算法(如银行家算法)防止系统进入不安全状态 |
| 检测死锁 | 允许死锁发生,但及时检测并解除 |
| 解除死锁 | 剥夺资源或撤销进程 |
4. 银行家算法
银行家算法是一种避免死锁的算法。
算法步骤:
- 当进程申请资源时,系统先假设分配资源给该进程
- 检查系统是否仍处于安全状态
- 如果是安全状态,则分配资源;否则,让进程等待
安全状态:系统能按某种顺序(如<P1, P2, …, Pn>)来为每个进程分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利完成。
5. 进程资源图
前置知识:
- 资源图:用于描述进程和资源之间分配和请求关系的有向图
- 资源结点(方框):表示资源类型,圆点表示资源实例
- 进程结点(圆圈):表示进程
- 分配边(资源→进程):资源已分配给进程
- 请求边(进程→资源):进程请求资源
做题方法:
- 先分配资源给进程,再让进程去申请资源
- 如果申请不到资源,那么进程就是堵塞的
- 如果没有一个进程是非堵塞的,那么进程资源图一定是不可化简的,是死锁的
- 如果有进程是非阻塞的,那么就有可能是可化简的,要自行判断是否能够运行完所有进程
六、线程
1. 线程的概念
线程作为调度和分配的基本单位,进程作为独立分配资源的单位。
2. 线程的特点
- 线程可以共享进程的所有资源
- 线程和线程之间是不可见的,即线程不能和线程共享资源
- 同一进程中的多个线程可以并发执行
- 线程的创建、撤销和切换的开销比进程小
3. 线程与进程的区别
| 特性 | 进程 | 线程 |
|---|---|---|
| 资源分配 | 独立分配资源的基本单位 | 不独立拥有资源 |
| 调度 | 不是调度的基本单位 | 是调度的基本单位 |
| 并发性 | 进程之间可以并发 | 线程之间可以并发 |
| 系统开销 | 大 | 小 |
| 通信 | 需要进程间通信机制 | 可以直接读写进程数据段 |
评论