- 进程的状态
- 进程控制
- 进程调度
进程的状态
进程控制
OS对进程实现有效的管理,包括新建进程、挂起、阻塞和唤醒、进程切换等多种操作。OS通过原语操作实现进程控制。(原语操作:若干条指令注册,完成特定功能的原子操作)
- 创建原语:create
- 阻塞原语:block
- 唤醒原语:wakeup
- 撤销原语:destroy
- 挂起原语:supend
- 激活原语:active
处理机调度
根据一定的算法和原则将处理机资源进行重新分配的过程。
调度一方面要满足特定用户的需求,另一方面需要考虑系统整体效率和调度算法本身的开销。
- 调度的层级
- 高级调度/作业调度——把后备作业调入内存,只调入一次调出一次
- 中级调度/内存调度——将进程调至外存,条件合适再调入内存;在内存对换区进行兑换
- 低级调度/进程调度——从就绪队列选取进程分配给处理机,是最基本的调度
- 调度的方式
- 抢占式调度——优先权、短进程优先、时间片原则
- 非抢占式调度——若有进程请求执行,等待直到当前进程完成或阻塞
- 调度时机
- 进程运行完毕
- 进程时间片用完
- 进程进行IO操作
- 执行某种原语操作
- 高优先级进程申请运行
- 调度过程
- 保存镜像(进程现场信息)—>调度算法—>进程切换—>处理机回收
调度算法
调度算法指标:CPU利用率、系统吞吐量、周转时间、等待时间、响应时间- 先来先服务(FCFS,First Come First Served)
调度作业、就绪队列中最先入队者,等待操作完成或阻塞。按入队先后顺序调度,适合CPU繁忙型作业,充分利用CPU。不利于IO繁忙型作业,操作耗时,等待线程饥饿。
- 短作业优先(SJF,Shortest Job First)
所需服务时间最短的作业/进程优先调度执行。平均等待时间最少,但是长作业进程增加饥饿。另外估计的时间可能不准确,不能保证紧迫性任务即时处理。
- 高响应比优先调度(HRRN,Highest Response Ratio Next)
结合FCFS和SJF,综合考虑等待时间和服务时间计算响应比,高的优先调度。 响应比=(等待时间+服务时间)/服务时间 只有当前进程放弃执行权(完成或阻塞)时重新计算所有进程响应比,长作业等待越久响应比越高,容易获得处理。
- 优先级调度(PSA,Priority-Scheduling Algorithm)
优先权调度,按作业/进程的优先级进行调度。低优先级的进程容易产生饥饿。
- 时间片轮转调度(RR,Round-Robin)
按进程到达就绪队列的顺序,轮流分配一个时间片去执行,时间用完则剥夺。公平轮流为每个进程服务,进程在一定时间内都能得到执行。时间片由系统响应时间、就绪队列进程数量、系统处理能力等多种因素决定,当时间片太大,类似FCFS,当时间片太短,频繁切换,消耗性能。
- 多级反馈队列(MFQ,Multileveled Feedback Queue)
类似PSA+RR,适合进程调度。 设置多个按优先级排序的就绪队列优先级从高到底,时间片从小到大新进程采用队列降级法 进入第一级队列,按FCFS分时间片没有执行完,移到第二级,第三级。。。 前面队列不为空,不执行后续队列进程
- 保存镜像(进程现场信息)—>调度算法—>进程切换—>处理机回收