- 创建原语
撤销原语 - 挂起原语
**原语 - 阻塞原语
唤醒原语 - 进程调度原语
1.何时调用阻塞原语?
- 当正在运行的进程需要等待某一事 件而发生运行受阻时,它通过中断请求系统服务。
- 系统按照进程的需求进行适当处理后,启动“进程阻塞原语”将该进程阻塞起来。
引起进程阻塞(运行受阻)的原因
- 等待I/O
- 请求资源得不到满足
- 进程同步约束
- 服务进程无事可做
阻塞原语Block()
2.合时调用唤醒原语?
- 当系统发生某- - 个事件时,正在等待该事件的进程需要立即被唤醒,由“阻塞”状态转为“就绪”状态。
进程被唤醒的原因
- 所等的I/O操作已完成
- 请求的资源得到了满足
- 进程同步约束已撤销
- 服务进程收到新的任务
唤醒原语Wake_up()
- 将当前进程的上下文保存到系统栈中。
- 从阻塞队列上查找等待该事件的进程PCB。
- 将PCB从阻塞队列上摘下来。
- 将其状态置为“就绪”,将PCB挂入就绪队列。
- 弹出系统栈中的进程上下文,置入CPU,让被中断的井程恢复运行。
- 结束。
3.调用挂起原语的原因
- 当前内存空间紧缺,部分进程优先运行、
- 应用户的要求,将用户进程挂起
- 应父进程要求,将其子进程挂起
挂起原语Suspend()
- 找到被挂起进程的PCB,获得其内存地址,将内存空间归还给存储管理模块。
- 进程状态阻塞转为“ 挂起阻塞”,或者就绪转为为“挂起就绪”,将PCB从原队列转入相应队列。
- 申请外存交换区空间,换出进程,地址写入PCB。
- 结束。
4.何时调用**原语?
- 有进程运行完毕,当前内存空间并不紧张
- 应用户要求,将其进程**
- 应父进程的要求,将将其子进程**
- 或者进程自身设定的挂起周期已完成
**原语Active()
- 扫描“挂起就绪队列”找到被**进程的PCB。
- 将PCB从所在队列上摘下来。
- 按PCB登记的空间需求,申请内存, 加载到内存中。
- 归还外存交换区空间。
- 将进程状态置为“就绪”,插入就绪队列;
- 结束。.