一、进程执行(切换)
进程模式切换:一个进程从用户态,在系统调用和中断时转换到核心态运行系统核心程序(还是同一个进程,只是从用户态—>核心态)
进程切换:进程进入操作系统核心后因为自身等事件或有更迫切需要运行的进程就绪而让出处理机,处理机转去运行其他程序
模式切换过程:
- 保护处理机现场,包括保护包含原程序计数器值的处理机状态字,各种其他寄存器,如有用户栈的指针
- 将处理机模式转换成核心态,以便以后执行的程序可以运行特权指令
- 根据中断级别设置中断屏蔽。一般情况下,如果发生了某一级中断,则要屏蔽该级及以下级别的中断,转中断处理程序
进程切换过程:
- 保存处理机的上下文,包括程序计数器PC、处理机状态字PS、其他寄存器
- 修改当前运行进程的PCB内容,包括将进程状态从运行态改成其他状态(等待状态/就绪状态)
- 选择另一个进程(按照调度算法)
- 修改被调度进程的PCB内容,包括把其他状态改变到运行态
- 恢复被选现场(上一次切换出处理机时)的处理机现场,按原保护的程序计数器值重置程序计数器PC,运行新选进程
二、进程调度
进程的两种调度方式
引起进程调度的的三大情况:
1、当进程主动放弃处理机时:原来的进程主动放弃了处理机,选择申请‘调度’来选择另外的合适进程
- 正在执行的进程执行完毕:操作系统在处理“进程结束”系统调用后影请求重新调度
- 正在执行的进程出I/O请求:当操作系统内核驱动启动外设I/O后,在I/O请求没有完成前要讲进程变成阻塞状态,应该请求重新调度
- 正在执行的进程要等待其他进程或系统发出的时间时:如等待另一个进程通讯数据,这时操作系统应将现运行进程挂到等待队列,并且请求重新调度
- 正在执行的进程暂时得不到所要的系统资源:如要求独占资源却被其他进程占用,这时等待的进程应阻塞到等待队列上,并且请求重新调度
2、当有新进程就绪时:为了支持可剥夺的调度方式,这时要申请‘调度’才能剥夺老进程
- 当中断处理程序处理完中断,如I/O中断引起某个阻塞进程变成就绪状态时,应申请重新调度
- 当进程释放独占资源,引起其他等待该资源进程从阻塞状态进入就绪状态时,应该申请重新调度
- 当某进程发“发送消息”系统调用,导致等待该消息的进程就绪时
- 其他任何原因引起有进程从其他状态变成就绪状态,如进程被中级调度选中时
3、为了支持可剥夺的调度方式,即使没有新就绪进程,为了让所有就绪进程轮流占用处理机,也可选择申请‘调度’
- 当时钟中断发生,时钟中断处理程序调用有关时间片的处理程序,发现正运行进程的时间片到,应请求重新调度,以便让其他进程占用处理机
- 在按进程优先级进行调度的操作系统中,任何原因引起进程的优先级发生变化时,应请求重新调度。如进程通过系统调用自愿改变优先级时或系统处理时钟中断时,根据各进程等待处理机的时间长短而调整进程的优先级
进程调度和切换的时机
三、进程调度算法
选择调度算法的原则:高资源利用率、高吞吐量(单位时间内运行完的进程越多越好)、用户满意
1、先来先服务调度算法(FCFS):谁先到就绪队列就将处理机分给谁。
特点:都很公平,等待时间可以估计;
并非公平,平均进程等待时间增加;
不可剥夺算法,不适合实时处理;
特点:都很公平,等待时间可以估计;
并非公平,平均进程等待时间增加;
不可剥夺算法,不适合实时处理;
有利于长进程,不利于短进程。
2、短进程优先算法(SPF):取一个下次所需运行时间最短的进程(该算法能使平均等待时间最短)。
特点:
特点:
非剥夺的调度,不适合实时系统;
进程运行时间难以估计;等待运行时间难以估计,出现“饿死”现象(长进程一直等待但得不到处理机)。
3、最高响应比优先法:响应比R=(W+T)/T=1+W/T(W为等待时间、T为下次所需运行时间)
特点:
T越小优先级越高(类似短进程优先算法),但还有W等待时间因素,就克服了短进程优先算法中长进程得不到调度的情况;
非剥夺调度,响应比高者优先。
4、优先级调度算法:选优先级最高的进程占用处理机(优先级可动态改变)。
有两种方法:
非剥夺的优先级调度;
可剥夺的优先级调度,如UNIX系统。
有两种方法:
非剥夺的优先级调度;
可剥夺的优先级调度,如UNIX系统。
特点:
根据优先级进行调度,适合实时处理;
可能出现饿死现象(优先级低的进程一直得不到处理机)。
5、最短剩余时间优先调度:让进程运行到完成时所需要的运行时间最短的进程优先得到处理。
特点:
特点:
用于分时系统,保证及时响应用户的要求;
系统开销大,可剥夺的调度。
6、时间片轮转算法:
原理:将处理机时间划分成若干的时间片,以时间片为单位,进程依次轮流(即按先来先服务的原则)使用处理机一个时间片。
用途:算法多用于进程调度,以提高进程的并发性,缩短每一个进程的响应时间,以提高系统的资源利用率。
特点:适合分时系统,剥夺调度。
时间片的大小选取考虑的因素:
⑴ 系统对响应时间的要求。
计算公式:T=N·q(T表示响应时间,N表示用户进程数,q表示时间片大小)
⑵ 就绪队列中进程的数目。
⑶ 系统的处理能力:用户键入的命令能在一个时间片内处理完毕或者略大于大多数进程从计算到I/O的时间间隔。
用途:算法多用于进程调度,以提高进程的并发性,缩短每一个进程的响应时间,以提高系统的资源利用率。
特点:适合分时系统,剥夺调度。
时间片的大小选取考虑的因素:
⑴ 系统对响应时间的要求。
计算公式:T=N·q(T表示响应时间,N表示用户进程数,q表示时间片大小)
⑵ 就绪队列中进程的数目。
⑶ 系统的处理能力:用户键入的命令能在一个时间片内处理完毕或者略大于大多数进程从计算到I/O的时间间隔。
时间片越大,越接近FCFS调度算法;时间片越小,带权周转时间越平均
7、多级反馈队列调度法:
=======几个时间的概念======
1)
周转时间:进程从创建到结束运行所经历的时间(如果用时间轴表示,就是一个进程完成时在时间轴上的那个点的时间)
周转时间=完成时间 — 到达时间
2) 平均周转时间:n 个进程的周转时间的平均值;
3)带权周转时间:进程的周转时间与系统为其服务时间之比。
2) 平均周转时间:n 个进程的周转时间的平均值;
3)带权周转时间:进程的周转时间与系统为其服务时间之比。
带权周转时间=(周转时间)/(服务时间)
4) 等待时间:指进程处于等待处理机状态时间之和。
4) 等待时间:指进程处于等待处理机状态时间之和。
等待时间=周转时间 — 服务时间(运行时间)
5)平均等待时间:n个进程的等待时间的平均值。
5)平均等待时间:n个进程的等待时间的平均值。
6)
运行时间/服务时间:进程要完成所需要占用处理机的时间
======从两道道例题来理解=======
例题一:
首先,根据分析题目,可以等到如下表格:
< 时间轮转算法(已知时间片为2)>
如图画的时间轴所示,时间片轮转算法按照进程在就绪队列中的顺序依次运行;对于运行时间>2的进程,按照时间片只能够运行2单位时间,还没运行完的部分则继续排队但要让出处理机;对于运行时间<=2的进程,则运行其对应的时间,并完成整个运行过程。
< SPF短进程优先算法 >
如图时间轴所示,按照短进程优先调度的原则,运行时间短的进程先运行。
< 非剥夺优先级算法 >
如图时间轴所示,根据非剥夺优先级算法,优先级高(数值大)的进程先调度运行,同等优先级的则优先调度在就绪队列中次序靠前的进程。
例题二: