第三章 进程管理

683 字
3 分钟
第三章 进程管理

3.1 进程的基本概念#

进程的定义#

进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位。

Note

进程与程序的区别:进程是动态的,程序是静态的。一个程序可以对应多个进程。

进程的组成#

  • PCB(进程控制块):进程存在的唯一标志
  • 程序段:存放要执行的代码
  • 数据段:存放程序运行时使用的数据

进程的状态与转换#

进程的五种基本状态:

状态含义
创建态进程正在被创建
就绪态进程已获得除 CPU 之外的所有资源
运行态进程正在 CPU 上执行
阻塞态进程因等待某事件而暂停运行
终止态进程正在从系统中消失

状态转换关系:

创建态 → 就绪态 → 运行态 → 终止态
↑ ↓
└── 阻塞态 ←┘
Tip

重点考点:就绪态 → 运行态(进程调度)、运行态 → 就绪态(时间片到)、运行态 → 阻塞态(请求 I/O)、阻塞态 → 就绪态(I/O 完成)

3.2 进程调度算法#

FCFS(先来先服务)#

def fcfs(processes):
"""先来先服务调度算法"""
processes.sort(key=lambda p: p.arrival_time)
current_time = 0
for p in processes:
if current_time < p.arrival_time:
current_time = p.arrival_time
p.start_time = current_time
p.wait_time = current_time - p.arrival_time
current_time += p.burst_time
p.finish_time = current_time
return processes

SJF(短作业优先)#

短作业优先算法选择运行时间最短的作业优先执行:

Tavg=1ni=1nTiT_{avg} = \frac{1}{n} \sum_{i=1}^{n} T_i

其中 Ti=CiAiT_i = C_i - A_iCiC_i 为完成时间,AiA_i 为到达时间。

Warning

SJF 存在饥饿问题:长作业可能永远得不到执行。且需要预先知道作业的运行时间。

时间片轮转(RR)#

时间片轮转算法的关键参数是时间片 qq

  • qq 太大 → 退化为 FCFS
  • qq 太小 → 上下文切换开销过大

3.3 进程同步与互斥#

临界区问题#

// 进程 Pi 的通用结构
while (true) {
entry section; // 进入区:检查并设置标志
critical section; // 临界区:访问共享资源
exit section; // 退出区:清除标志
remainder section; // 剩余区:其他操作
}

Peterson 算法#

bool flag[2] = {false, false};
int turn;
void process_i(int i) {
int j = 1 - i;
flag[i] = true;
turn = j;
while (flag[j] && turn == j)
; // 忙等待
// 临界区
critical_section();
flag[i] = false;
}

信号量机制#

P(S):S=S1;if S<0 then blockP(S): S = S - 1; \text{if } S < 0 \text{ then block} V(S):S=S+1;if S0 then wakeupV(S): S = S + 1; \text{if } S \leq 0 \text{ then wakeup}

Note

考研高频考点:用信号量实现生产者-消费者问题、读者-写者问题、哲学家进餐问题。务必熟练掌握!


本章是操作系统的核心章节,建议结合王道考研视频 + 课本例题反复练习。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

第三章 进程管理
https://halfman.top/posts/408/os/process-management/
作者
halfman
发布于
2026-05-29
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
halfman
软件工程 · 考研备战中 · 记录复习点滴
考研倒计时
--
距离2027年考研还有
分类
标签
站点统计
文章
6
分类
5
标签
19
总字数
5,482
运行时长
0
最后活动
0 天前

文章目录