【软考中级软件设计师】进程管理
目录
一、进程的概念(进程是什么?)
二、进程的作用(为什么需要进程?)
三、进程管理状态转换原理(进程是怎么运作的?)
基础五状态模型
扩展七状态模型
四、进程管理之同步异步机制
同步机制(Synchronous)
异步机制(Asynchronous)
经典问题解决方案
五、进程管理之互斥信号量机制
互斥机制的黄金法则
临界区原则(四大条件)
信号量机制
1. 信号量(Semaphore)
2、原语(Primitive)
3. P/V 操作详解(软考核心考点)
软考真题
一、进程的概念(进程是什么?)
进程(Process)是操作系统中最核心的概念之一,是程序的一次动态执行过程
-
进程:程序在内存中的执行实例(动态实体),包含:
-
代码段(Text)
-
数据段(Data)
-
堆栈(Stack/Heap)
-
程序计数器(PC)
-
寄存器状态
-
资源(如打开的文件)
-
比喻:程序像乐谱,进程像是乐队按照乐谱进行的演奏。
二、进程的作用(为什么需要进程?)
操作系统引入进程主要解决三大问题:
-
并发性:使多个程序能"同时"运行(宏观并行,微观串行)
-
资源隔离:每个进程有独立的地址空间,防止相互干扰
-
效率提升:当某进程等待I/O时,CPU可执行其他进程
典型案例:浏览器同时打开多个标签页时,每个标签页可能对应一个独立进程。
三、进程管理状态转换原理(进程是怎么运作的?)
基础五状态模型
下图是操作系统中最经典的进程状态划分,适合理解基本调度原理。
状态组成:
-
新建(New)
-
进程刚被创建(如通过
fork()
) -
尚未完成资源分配
-
-
就绪(Ready)
-
已获得除CPU外的所有资源
-
等待被调度器选中
-
特点:可能有多个进程处于此状态形成就绪队列
-
-
运行(Running)
-
正在CPU上执行指令
-
单核CPU同一时刻只有一个进程处于此状态
-
-
阻塞/等待(Blocked/Waiting)
-
因等待I/O、信号等事件暂停执行
-
典型场景:读取磁盘、等待网络响应
-
-
终止(Terminated)
-
进程执行完毕或被强制终止
-
资源尚未完全释放(操作系统保留退出状态码)
-
扩展七状态模型
在五状态基础上增加 挂起(Suspend)概念,解决内存不足时的进程管理问题。
新增状态:
6. 就绪挂起(Ready Suspended)
-
进程数据被交换到磁盘
-
特点:只要载入内存即可立即运行
7、阻塞挂起(Blocked Suspended)
-
阻塞状态的进程被换出到磁盘
-
特点:即使等待事件发生,也需先换入内存
挂起操作的触发场景:
-
内存不足:将暂时不运行的进程换出到磁盘
-
用户干预:手动挂起进程(如Linux的
Ctrl+Z
) -
调试需求:暂停进程检查状态
状态转换新增路径:
-
就绪 ↔ 就绪挂起:由内存管理器控制
-
阻塞 ↔ 阻塞挂起:当阻塞进程长期无响应时
-
阻塞挂起 → 就绪挂起:等待的事件发生时
比喻:假设你是一家餐厅的调度经理,外卖小哥就是"进程",他们的工作流程完美对应进程状态:
1. 五状态模型版
新员工今天第一天入职,刚领到工牌和工作服(新建分配基本资源)
小哥在餐厅待命,手机充好电、餐箱清空(资源齐全),等调度员派单(就绪等待CPU)
小哥正在骑车送A订单(运行占用CPU执行任务)
到达A顾客楼下发现电梯坏了,被迫在楼下等维修(阻塞等待I/O资源)
送完订单后回餐厅打卡下班(终止释放所有资源)
状态转换示例:
接单 → 骑车送餐(就绪→运行)
送餐途中等红灯(运行→阻塞)
红灯变绿灯继续骑行(阻塞→就绪→运行)
送完这单接新单(运行→就绪)
2. 七状态模型升级版
新增两种特殊情况:
中午高峰过后,部分小哥被临时派去仓库整理货架(就绪挂起内存不足,进程被换出到磁盘)
有个小哥在等顾客下楼取餐时(阻塞),突然被叫回餐厅帮厨(阻塞挂起人带车被"换出")
新增场景:
仓库的小哥突然被叫回来送急单(就绪挂起→就绪)
帮厨的小哥听到顾客终于来了(阻塞挂起→阻塞→就绪)
四、进程管理之同步异步机制
同步机制(Synchronous)
-
核心特征:
-
调用方必须等待操作完成才能继续执行
-
执行流严格按照代码顺序进行
-
典型表现为阻塞式等待
-
异步机制(Asynchronous)
-
核心特征:
-
调用方发出请求后立即继续执行
-
通过回调/事件通知获取结果
-
非阻塞式执行流
-
经典问题解决方案
-
生产者-消费者问题:
-
同步方案:使用互斥锁+条件变量
-
异步方案:用消息队列(如Kafka)
-
-
C10K问题:
-
同步阻塞模型:每个连接一个线程(资源耗尽)
-
异步非阻塞模型:单线程事件循环(Node.js方案)
-
五、进程管理之互斥信号量机制
就像公共厕所的隔间,同一时间只允许一个人使用(临界资源),其他人必须在门口等待(阻塞)直到里面的人出来(释放)。
互斥机制的黄金法则
临界区原则(四大条件)
-
互斥进入:任何时候最多一个进程在临界区内
-
有限等待:请求进入的进程应在有限时间内获得许可
-
空闲让进:临界区空闲时必须立即允许进入
-
让权等待:当进程不能进入临界区时,应立即释放CPU(而非忙等待)
常见错误模式
-
死锁:A等B,B等A
-
活锁:进程不断重试但无法前进
-
饥饿:某些进程始终得不到资源
信号量机制
1. 信号量(Semaphore)
定义:
信号量是一种用于进程/线程同步与互斥的机制,由 Dijkstra 提出,本质是一个整型变量 + 等待队列,通过 P(wait) 和 V(signal) 两个原子操作来控制资源访问。
作用:
-
互斥访问(二进制信号量):确保同一时间只有一个进程访问临界资源(如打印机)。
-
同步控制(计数信号量):管理有限资源的分配(如数据库连接池)。
2、原语(Primitive)
定义:
原语是指操作系统提供的、不可中断的原子操作,执行过程不会被调度打断,常用于实现同步机制(如信号量的 P/V 操作)。
特点:
-
原子性:执行过程不可分割,要么全部执行,要么完全不执行。
-
不可抢占:执行期间不会被其他进程/线程打断。
3. P/V 操作详解(软考核心考点)
P/V 操作是信号量的核心,由 Dijkstra 提出,名称来源于荷兰语:
-
P(Proberen,尝试):申请资源(
wait
) -
V(Verhogen,增加):释放资源(
signal
)
软考真题
- (2016年下半年例题)假设系统中有n个进程共享3台扫描仪,并采用PV操作实现进程同步与互斥。若系统信号量S的当前值为-1,进程P1、P2又分别执行了一次P(S)操作,那么信号量S的值应为___。
解答:
根据PV操作概念中P操作公式,S=S-1,这里发生两次P操作,那么当前S的值应该为-1减2次操作后等于-3。 - (2016年上半年例题) 进程P1、P2、P3、P4和P5的前趋图如下图所示:
- 若用PV操作控制进程P1、P2、P3、P4和P5的并发执行过程,则需要设置5个信号量S1、S2、S3、S4和S5,且信号量S1~S5的初值都等于零。下图中a和b处应分别填入___;c和d处应分别填入___;e和f处应分别填入___。
解答:根据前趋图,P1进程执行完需要通知P2和P3进程,所以需要利用V(S1)和V(S2)操作通知P2和P3进程,所以空a应该填V(S1)和V(S2),P2进程执行完要通知P4进程,所以空b应该填V(S3)。P3进程运行前需要等待P1进程的结果,所以执行程序前要先利用1个P操作,所以空c应该填P(S2),而P3进程运行结束需要利用一个V操作通知P5进程,所以空d应该填V(S4)。P4进程执行结束需要利用一个V操作通知P5进程,所以空e处应该填V(S5),P5进程执行前需要等待P3和P4进程的结果,所以空f处需要两个P操作,那应该填P(S4)和P(S5)。