您的位置:首页 > 运维架构 > Linux

处理机调度FAQ

2013-09-01 20:53 155 查看
处理机调度
学习指导:
  本章所述的“中断”包括trap、SVC、fault等所有非常规程序转移,中断使操作系统获得控制权,并为实施处理机切换和多道程序设计提供了必要条件。也正因为中断与处理机调度之间密不可分的关系,我们将中断与处理机调度作为一个独立的完整章来讲授。读者应当注意,中断响应后系统首先处理中断事件,然后才考虑处理机的重新分派;当有中断嵌套发生时,只有在返回至最上层中断处理程序时,系统才有可能考虑切换进程。

处理机调度算法的设计需要考虑系统的设计目标,而且通常算法设计不能复杂,否则会带来过大的系统开销,因为处理机切换发生非常频繁。也正因为此,通常将调度与上下文切换过程以汇编语言书写。
习题解答:
1.试说明下述概念之间的联系与差别:

(1) 系统调用命令(2) 访管指令(3) 广义指令
答:访管指令由指令码和访管中断号两部分组成。即:
SVC n─── ①
其中SVC(SuperVisor Call)为指令码,表明为访管指令; n为访管中断号,其值是一整数,具体表示何种访问要求。中断发生时,硬件中断装置将访管中断号n送入旧的程序状态字内的中断码字段,访管中断总控程序由系统堆栈中将其取出,并据此转入对应的服务程序。在实际使用时,用户程序与操作系统之间还需要相互传递参数和返回值。 如此,用户使用访管指令的一般形式为:
准备参数
SVC n
取返回值─── ②
根据具体访管要求约定,参数及返回值可以通过寄存器传递,也可以通过内存传递。 对于后者,操作系统必须能够访问进程空间。通常将②称为系统调用命令,它除访管指令外,还有准备参数和取返回值。为了使用方便,在高级语言中一般将其写为与过程调用相类似的形式,即:
返回值=系统调用名称(参数1,参数2,…,参数m);─── ③
当然,编译程序会将③翻译成形如②的形式。其中系统调用名称对应①,不同的系统调用名称对应不同的整数n。在有的书中,也将③称为代表②的宏指令或广义指令。
 
2.为什么说中断是进程切换的必要条件,但不是充分条件?
答:假如在时刻T1与时刻T2之间发生了进程切换,则在时刻T1与时刻T2之间一定执行了处理机调度程序,而处理机调度程序是操作系统低层中的一个模块,运行于管态,说明在T1与T2时刻之间处理机状态曾由目态转换到管态。由于中断是系统由目态转换为管态的必要条件,所以在时刻T1与时刻T2之间一定发生过中断,也就是说,中断是进程切换的必要条件,然而中断不是进程切换的充分条件。
例如: 一个进程执行一个系统调用命令将一个消息发给另外一个进程,该命令的执行将通过中断进入操作系统,操作系统处理完消息的发送工作后可能返回原调用进程,此时中断未导致进程切换;也可能选择一个新的进程,此时中断导致了进程切换。
 
3.试分析中断与进程状态转换之间的关系。
答:进程状态转换是由内核控制的,如果一个进程的状态发生了改变,则在新旧状态之间一定发生了处理机状态由目态到管态的转换,而中断是处理机状态由目态转换到管态的必要条件,所以中断也是进程状态转换的必要条件。
 
4.中断发生时,旧的PSW和PC为何需要压入系统栈?
答:因为通常中断处理程序的最后一条指令是中断返回指令,该指令从系统栈顶弹出断点信息,如果未将PSW和PC压入系统栈,则中断返回指令弹出的不是中断前的断点信息,而是不确定的信息,这将导致系统处于不确定的状态,严重的情况会使系统崩溃。
采用栈结构的原因是中断可能发生嵌套,此时能保证以与中断相反的次序返回上层中断处理程序或返回目态。在某些硬件系统中,没有采用栈结构,中断发生时现场信息被送到系统空间指定单元,对每种中断硬件规定一个现场保存单元,这样处理的缺点是中断类型不能增加,相同类型中断不能嵌套发生。
 
5.何谓中断向量? 用户能否修改中断向量的值?
答:当中断事件发生时,中断装置根据中断类别自动地将中断处理程序所对应的PSW和PC送入程序状态字和指令计数器中,如此便转移到对应的中断处理程序。这个转移类似于向量转移,因而PSW和PC被称为中断向量。用户不能修改中断向量的值,因为修改中断向量是特权指令,普通用户程序不能执行特权指令。另外,如果允许用户修改中断向量的值,那么用户就可以破坏中断向量与处理程序之间的联系,并可能攻击系统。例如将中断向量与一段病毒程序联系起来,使中断发生时便执行病毒程序,从而破坏计算机系统。
 
6.中断向量的存储位置是否可由程序改变? 为什么? 中断向量的值是如何确定的?
答:中断向量的存储位置是由硬件确定的,不能由程序改变。中断发生后,中断装置按照中断类型到内存指定位置取出中断向量。例如,在IBM PC系统中,地址000~03FF是中断向量空间。操作系统的设计者根据各中断事件处理程序的存储位置及运行环境确定对应中断向量的值,系统启动时由初始化程序将该值填入指定位置。
 
7.有人说,中断发生后硬件中断装置保证处理机进入管态,这种说法准确吗? 说明理由。
答:这种说法不准确。中断发生后,硬件中断装置负责引出中断处理程序,中断处理程序是否运行于管态取决于PSW中的处理机状态位,该位的值是操作系统初始化时设置的,只有在初试化程序正确设置该状态位的前提下,才能保证中断后系统进入管态。
 
8.为什么在中断处理过程中通常允许高优先级别的中断事件中途插入,而不响应低优先级别的中断事件?
答:根据引起中断事件的重要性和其紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。如果有多个中断同时发生,硬件将首先响应优先级别最高的中断请求。对于相同优先级别的中断,硬件将按照事先规定好的次序依次响应。
在中断事件的处理过程中可能会发生新的中断,这就是中断嵌套。中断嵌套是必要的。但是,如果不加以控制,低优先级别的中断源可能打扰高优先级别中断事件的处理过程,甚至可能会使中断嵌套层数无限增长,直至系统栈溢出。为此,硬件提供了中断屏蔽指令,利用中断屏蔽指令可以暂时禁止任意一个或多个中断源向处理机发中断请求。当然,在需要的时候还可以利用硬件指令解除对中断源的屏蔽。通常,在一个中断事件的处理过程中,程序屏蔽包括该级在内的所有低优先级别的中断,但允许更高优先级别的中断中途插入。这样,发生中断嵌套时,嵌套中断事件的优先级别是按照响应的顺序依次递增的。这样做处理主要有两个原因:(1)从逻辑上来说,高优先级别中断源所对应的事件比低优先级别中断源所对应的中断事件急迫;(2)由于硬件中断类型是有限的,这样做实际上也就限制了中断嵌套的深度。
 
9.为什么说“关中断”会影响系统的并发性?
答:考虑单处理机系统。在单处理机系统中,并发是通过将处理机轮流分配给多个进程而实现的,这个分配是由操作系统中处理机调度程序完成的。中断是进程切换的必要条件,如果关了中断,则操作系统无法获得处理机的控制权,也就无法使多个进程分时共享处理机。在关中断期间,一个进程独占处理机。所以说“关中断”会影响系统的并发性
 
10. 假如关中断后操作系统进入了死循环,会产生什么后果?
答:系统不响应任何外部干预事件,系统表现为“死机”。
 
11. 为什么不允许目态程序执行关中断指令及中断屏蔽指令?
答:开关中断指令和中断屏蔽指令属于特权指令,一般用户无权访问。如果允许用户使用,用户关中断后可能影响系统对内部或外部事件的响应,也会使操作系统无法获得系统控制权。
 
12. 如果没有中断,是否能够实现多道程序设计? 为什么?
答:不能。因为一个程序一旦被调度执行,将一直执行下去,中间不可能被打断,不可能达到多个进程交替执行的并发目的。
 
13. 下列中断源哪些通常是可以屏蔽的,哪些通常是不可屏蔽的?
(1) I/O中断;(2) 访管中断;(3) 时钟中断;(4) 掉电中断。
答:(1) I/O中断可以屏蔽;(2) 访管中断不可以屏蔽;(3) 时钟中断可以屏蔽;(4) 掉电中断不可以屏蔽。
对于访管中断来说,若在管态屏蔽没有意义(不会发生访管中断);若在目态屏蔽,则应用程序无法访问操作系统,不能正常运行。
 
14. 下列中断事件哪些可由用户自行处理? 哪些只能由操作系统中断服务程序统一处理? 为什么?
(1) 溢出;(2) 地址越界;(3) 除零;(4) 非法指令;(5) 掉电
答:一般来说,只影响应用程序自身的中断,可以由用户自行处理,包括:(1) 溢出;(3) 除零。可能影响其它用户或操作系统的中断只能由操作系统中断服务程序统一处理,包括:(2) 地址越界;(4) 非法指令;(5) 掉电。
 
15. 如果中断由用户程序自行处理,为何需要将被中断程序的断点由系统堆栈弹出并压入用户堆栈?
答:中断发生时,被中断程序的现场信息已被压入系统栈中。而中断续元运行于目态,它执行完毕后将由用户栈区中恢复现场。为此,操作系统在转到中断续元之前应当将系统栈中的现场信息弹出并压入用户栈中,否则用户中断续元执行完毕后将无法恢复现场返回断点。
 
16. 对于下面中断与进程状态转换之间的关系各举两个例子说明之:
(1) 定会引起进程状态转换的中断事件;
(2) 可能引起进程状态转换的中断事件。
答:定会引起进程状态转换的中断事件:当前运行进程终止、应用程序启动I/O传输并等待I/O数据、运行程序申请当前被占用的某一资源。可能引起进程状态转换的中断事件:时钟中断事件可能引起进程状态转换,例如对于时间片轮转进程调度算法,若时钟中断发生后,当前进程的时间片已用完,则将发生进程切换;否则不发生进程切换。
 
17. 若在T1时刻进程P1运行,T2时刻进程P2运行,且P1≠P2,则在时刻T1和时刻T2期间之内一定发生过中断。 这种说法对吗? 为什么?
答:这种说法对。
如果在时刻T1进程P1在运行,在时刻T2进程P2在运行,且P1≠P2,则说在时刻T1和时刻T2之间发生了进程切换。这说明在时刻T1和时刻T2之间执行了处理机调度程序,而处理机调度程序是操作系统低层中的一个模块,在系统运行的过程中,除非显式地调用到该模块,否则系统不会由运行一个进程转去运行另外一个进程,就是说不会发生进程切换。
只有进入操作系统,即处于系统态,才有可能调用到处理机调度, 因为处于用户态运行的用户程序不可能直接调用操作系统中的任何模块。中断是系统由用户态转换为系统态的必要条件。据此,假如在时刻T1与时刻T2之间发生了进程切换,则在时刻T1与时刻T2之间一定发生过中断。
 
18. 进程切换时,上升进程的PSW和PC为何必须由一条指令同时恢复?
答:中断向量中程序状态字PSW与指令计数器PC的内容必须由一条指令同时恢复,这样才能保证系统状态由管态转到目态的同时,控制转到上升进程的断点处继续执行。如果不同时恢复,则只能(1)先恢复PSW再恢复PC,在恢复PSW后已经转到目态,操作系统恢复PC的使命无法完成;(2)先恢复PC再恢复PSW,PC改变后转到操作系统另外区域(因为PSW仍为系统状态),PSW无法恢复。
 
19. 某系统采用可抢占处理机的静态优先数调度算法,请问何时会发生抢占处理机的现象?
答:当一个新创建的进程或一个被唤醒进程的优先数比正在运行进程的优先数高时,可能发生抢占处理机现象。
 
20. 在实时系统中,采用不可抢占处理机的优先数调度算法是否适宜? 为什么?
答:不适宜。一旦一个低优先数、需要大量CPU时间的进程占用处理机,就会一直运行,直到运行结束,或者直到因某事件而阻塞。在此之前,即使高优先数的紧急任务到达,也得不到处理,因而可能延误对重要事件的响应和处理。
 
21. 在分时系统中,进程调度是否只能采用时间片轮转算法? 为什么?
答:分时系统的特点是要求响应速度及时,除RR算法之外,还可以采用可剥夺CPU的动态优先数调度算法。如经典UNIX的处理机调度算法,由于负反馈性质,算法也可以保证响应速度。
 
22. 有人说,在采用等长时间片轮转处理机调度算法的分时操作系统中,各终端用户所占有处理机的时间总量是相同的。这种说法对吗? 为什么?
答:这种说法不对。因为处理机是分配给进程(线程)的,而不同终端用户可能有不同数量的进程,一个拥有较多数量进程的终端显然比拥有较少数量进程的终端获得CPU的时间要多。
 
23. 对于下述处理机调度算法分别画出进程状态转换图。
(1) 时间片轮转算法;
(2) 可抢占处理机的优先数调度算法;
(3) 不可抢占处理机的优先数调度算法。
答:
(1) 时间片轮转算法
(2) 可抢占处理机的优先数调度算法


;


(3) 不可抢占处理机的优先数调度算法
 



 

 
24. 举出两个例子说明操作系统访问进程空间的必要性。
答:
例(1):进程执行输出操作时,通过系统调用进入系统,由操作系统将待输出的数据由进程空间取出送给指定的外部设备,为此操作系统必须访问用户进程空间。
例(2):当发生可由用户自己处理的中断事件时,操作系统在转到中断续元之前应当将系统堆栈中的现场信息弹出并压入用户堆栈中,为此操作系统也必须访问进程空间。
 
25.根据进程和线程的组成说明进程调度和线程调度各需要完成哪些工作。
答:进程调度:(1)地址映射寄存器;(2)用户栈指针;(3)通用寄存器;(4)PSW与PC。线程调度:(1)用户栈指针;(2)通用寄存器;(3)PC。
 
26. 系统资源利用率与系统效率是否一定成正比? 如不是,举例说明之。
答:系统效率高则资源利用率高,而反之却不尽然。例如,在虚拟页式存储管理系统中,当页面置换算法不合理或分给进程的页架数过少时,可能发生抖动(thrashing),此时I/O设备很忙碌,但系统效率可能很低。
 
27. 设有周期性实时任务集如下表所示,用EDF算法和RMS算法是否可以调度?画出相应的Gantt图。
任务
发生周期Ti
处理时间Ci
A
30
10
B
40
15
C
50
5
答:由于

,因而采用EDF算法一定可以调度,其Gantt图为:
 
C1
A1
B1
A2
B2
C2
5
10
15
10
15
5
0      5          15              30          40               55    60
A1
B1
C1
A2
B2
C2
A3
 
B3
A4
C3
 
10
15
5
10
15
5
10
 
15
10
5
 
0
10
 

 
25
30
40
 

 

55
60
70
80
95
105
110
120
 
由于

,因而采用RMS算法不可调度。
28. 分析Linux进程调度算法的调度效果。
答:Linux在调度级别上考虑三种特征进程:Real-time FIFO, Real-time Round Robin, Timesharing. 调度基于Goodness度量指标,涉及如下一些参量:
Priority: 1~40(缺省值20),可通过nice系统调用调整,nice(value)中value的取值范围为(-20,20)之间,以与经典UNIX保持兼容,但在内部对value值进行反向,取priority=20-value。Quantum: 进程尚可运行的剩余时间.对于运行进程来说,每个时钟间隔(10ms,称为一个jiffy),将quantum减1,当所有就绪进程的quantum配额下降到0时,重新计算所有进程(包括等待进程)的quantum值。Goodness值的计算方法如下:
If(Real-time)Goodness=1000 + priority;
If(Timesharing && quantum=0))Goodness=0;
If(Timesharing && quantum>0)Goodness=quantum + priority.
调度发生在如下时刻:(1)运行进程的quantum减至0;(2)运行进程执行系统调用exit;(3)运行进程因等待I/O、信号灯而被封锁;(4)原来具有高goodness的进程被解除封锁。容易看出调度效果:实时优先于分时,交互和I/O进程优先于CPU进程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 处理机制