2.进程是怎么运行的?
2.1 进程的状态
进程的状态
三种基本状态
就绪(Ready)
执行(Running)
阻塞(Blocked)
创建和终止状态
创建(New)
终止(Terminated)
2.2 进程控制
即OS对进程实现有效的管理,包括创建新进程、撤销已有进程、挂起、阻塞和唤醒、进程切换等多种操作。OS通过原语(Primitive)操作实现进程控制。
原语的概念:
由若干条指令组成,完成特定的功能,是一种原子操作(Action Operation)
原语的特点:
原子操作,要么全做,要么全不做,执行过程不会被中断
在管态/系统态/内核态下执行,常驻内存
是内核三大支撑功能(中断处理/时钟管理/原语操作)之一
创建原语:create
阻塞原语:block
唤醒原语:wakeup
撤销原语:destroy
进程控制:挂起与激活
为了系统和用户观察和分析进程
挂起原语: suspend
静止就绪:放外存,不调度
静止阻塞:等待事件
激活原语:active
活动就绪:等待调度
活动阻塞:等待唤醒
2.3 进程调度
根据一定的算法和原则将处理机资源进行重新分配的过程。
前提:作业/进程数远远大于处理机数
目的:提高资源利用率,减少处理机空闲时间
调度程序:一方面要满足特定系统用户的需求(快速响应),另一方面要考虑系统整体效率(系统平均周转时间)和调度算法本身的开销
2.3.1 处理机调度:调度的层次
高级调度/作业调度
把后备作业调入内存
只调入一次,调出一次
中级调度/内存调度
将进程调至外存,条件合适再调入内存
在内、外存对换区进行进程对换
低级调度/进程调度
从就绪队列选取进程分配给处理机
最基本的调度,频率非常高(相当于一个时间片完成)
2.3.2 处理机调度:调度方式
剥夺式/抢占式调度
立即暂停当前进程
分配处理机给另一个进程
原则:优先权/短进程优先/时间片原则
非剥夺/非抢占式调度
若有进程请求执行
等待直到当前进程完成或阻塞
缺点:适用于批处理系统,不适用分时/实时系统
2.3.3 处理机调度:调度时机
进程运行完毕
进程时间片用完
进程要求I/O操作
执行某种原语操作
高优先级进程申请运行(剥夺式调度)
2.3.4 处理机调度:调度过程
保存镜像:记录进程现场信息
调度算法:确定分配处理机的原则
进程切换:分配处理机给其它进程
处理机回收:从进程收回处理机
2.3.5 进程调度:调度算法指标
CPU利用率 = 忙碌时间/总时间
系统吞吐量 = 完成作业数/总时间
周转时间 = 作业完成时间-提交时间
带权周转时间 = 周转时间/实际运行时间
等待时间 = 作业等待处理机调度时间
关注平均值
响应时间 = 提交请求到首次响应间隔
2.4 处理机调度:调度算法
先来先服务(FCFS,First Come First Served)
短作业优先(SJF,Shortest Job First)
高响应比优先调度(HRRN,Highest Response Ratio Next)
优先级调度(PSA,Priority-Scheduling Algorithm)
时间片轮转调度(RR,Round-Robin)
多级反馈队列调度(MFQ,Multileveled Feedback Queue)
2.4.1 进程调度:先来先服务(FCFS,First Come First Served)
算法内容:调度作业/就绪队列中最先入队者,等待操作完成或阻塞
算法原则:按作业/进程到达顺序服务(执行)
调度方式:非抢占式调度
适用场景:作业/进程调度
优缺点:
有利于CPU繁忙型作业,充分利用CPU资源
不利于I/O繁忙型作业,操作耗时,其它饥饿
2.4.2 进程调度:短作业优先(SJF,Shortest Job First )
算法内容:所需服务时间最短的作业/进程优先服务(执行)
算法原则:追求最少的平均(带权)周转时间
调度方式:SJF/SPF非抢占式
适用场景:作业/进程调度
优缺点:
平均等待/周转时间最少
长作业周转时间会增加或饥饿
估计时间不准确,不能保证紧迫任务及时处理
2.4.3 进程调度:高响应比优先调度(HRRN,Highest Response Ratio Next)
算法内容:结合FCFS和SJF,综合考虑等待时间和服务时间计算响应比,高的优先调度
算法原则:综合考虑作业/进程的等待时间和服务时间
调度方式:非抢占式
适用场景:作业/进程调度
响应比计算:
响应比=(等待时间+服务时间)/服务时间, ≥1
只有当前进程放弃执行权(完成/阻塞)时,重新计算所有进程响应比
长作业等待越久响应比越高,更容易获得处理机
2.4.4 进程调度:优先级调度(PSA,Priority-Scheduling Algorithm)
算法内容:又叫优先权调度,按作业/进程的优先级(紧迫程度)进行调度
算法原则:优先级最高(最紧迫)的作业/进程先调度
调度方式:抢占/非抢占式(并不能获得及时执行)
适用场景:作业/进程调度
优先级设置原则:
静态/动态优先级
系统>用户;交互型>非交互型;I/O型>计算型
低优先级进程可能会产生“饥饿”
2.4.5 进程调度:时间片轮转调度(RR,Round-Robin)
算法内容:按进程到达就绪队列的顺序,轮流分配一个时间片去执行,时间用完则剥夺
算法原则:公平、轮流为每个进程服务,进程在一定时间内都能得到响应
调度方式:抢占式,由时钟中断确定时间到
适用场景:进程调度
优缺点:
公平,响应快,适用于分时系统
时间片决定因素:系统响应时间、就绪队列进程数量、系统处理能力
时间片太大,相当于FCFS;太小,处理机切换频繁,开销增大
2.4.6 进程调度:多级反馈队列调度(MFQ,Multileveled Feedback Queue)
算法内容:
设置多个按优先级排序的就绪队列
优先级从高到底,时间片从小到大
新进程采用队列降级法
进入第一级队列,按FCFS分时间片
没有执行完,移到第二级,第三级。。。
前面队列不为空,不执行后续队列进程
算法原则:集前几种算法优点,相当于PSA+RR
调度方式:抢占式
适用场景:进程调度
优缺点:
对各类型相对公平;快速响应;
终端型作业用户:短作业优先
批处理作业用户:周转时间短
长批处理作业用户:在前几个队列部分执行