1.4 进程管理
- 进程状态:运行、等待、就绪。阻塞不能直接到运行状态,需要到就绪状态排队。五态图等。
- 进程管理:前驱图
- 临界资源:共享的资源,如打印机等
- 临界区:访问临界资源的那段代码称为临界区
- 信号量:特殊的变量
生产者和消费者
- P操作,信号量 S < 0 时,阻塞
- V操作,信号量 S <= 0 时,唤醒阻塞的进程队列
示例
- S1初值为1,S2初值为0
- 生产者:
- 生产一个产品
- P(S1)
- 送到缓冲区
- V(S2)
- 消费者
- P(S2)
- 从缓冲区取产品
- V(S1)
- 消费产品
- 几种情况分析
- 第一次执行生产者(S1=0, S2=1),第二次执行生产者(S1=-1 阻塞)或者消费者(S1=1, S2=0)
- 第一次执行消费者(S2=-1<0,阻塞),第二次执行消费者(不会执行,仍在阻塞中)或者生产者(S1=0,S2=0,唤醒消费者)
死锁问题
死锁预防
- 互斥(资源互斥)
- 保持和等待(保持现有分配资源,并等待未分配资源)
- 不可剥夺
- 环路等待(A->B->C->A)
死锁避免
- 有序资源分配
- 银行家算法(放贷思想,资源能收回来就能放贷,否则不放贷)
- 注意释放一个进程后:剩余资源 = 进程已经分配的资源 + 现有资源