大家好,又见面了,我是你们的朋友全栈君。
题目一:
为什么对调度程序而言,区分CPU约束性进程和I/O约束性进程很重要
解答:
绝大多数进程可分为I/O主(放入I/O队列)或CPU主(放入就绪队列),I/O主的计算时间>CPU主。因此长期调度程序应选择一个合理的包含I/O主和CPU主的组合进程。在运行I/O操作前,I/0限制的程序只运行很少数量的计算机操作。而CPU约束程序一般来使用很多的CPU。另一方面,CPU约束程序会利用整个时间片,且不做任何阻碍I/O操作的工作。
题目二:
下面哪种调度算法会导致饥饿?
1.先到先服务
2.最短作业优先
3.轮转法
4.优先级
解答:
最短作业优先和有限计算法能导致饥饿,因为对于优先级较低的作业来说,这两种算法都会使其无穷等待CPU,长期得不到调用,就会导致饥饿,也就是无穷阻塞问题。
题目三:
考虑一个运行 10 个 I/O 约束任务和 1 个 CPU 约束任务的系统,假设 I/O 约束任务每进行 1ms 的 CPU 计算执行一次 I/O 操作,每个 I/O 操作花费 10ms 完成。假设上下文切换花费 0.1ms, 且所有的进程都是长运行任务。请计算下列条件下 RR(时间片轮转)调度程序的 CPU利用率?
1.时间片为 1ms
2.时间片为 10ms
解答:
1、时间片为1ms时,无论哪个进程被调度,都会花费一次上下文切换的额外时间0.1ms,所以,对于一个时间片,实际时长为1.1ms,但只有1ms在“认真工作”,所以利用率为1/1.1×100%=92%。
2、时间片为10ms时,对I/O约束任务而言,还是进行1ms后就进行上下文切换,所以对于一个时间片,十个I/O约束任务都会走一遍,然后执行CPU约束任务,然后再转九次,每次相同。所以,从整体十次上来讲,总时间是10x(10×1.1<I/O约束任务>+10<CPU约束任务>),而实际的工作时间是10×20,所以利用率为20/21.1×100%=94%
题目四:
考虑下面一组进程,进程占用的CPU区间长度以毫秒计算:
进程 到达时间 CPU区间长度 优先级
P1 0 10 3
P2 1 3 1
P3 2 4 3
P4 3 1 4
P5 4 5 2
1.分别画出采用 FCFS,SJF,抢占式优先级调度(数值越小,优先级越大; 优先级相同时采用RR,时间片为 1ms),RR(时间片 =2ms)算法进行调度时的甘特图。
2.计算上述调度算法下的平均周转周转时间。
3.计算上述调度算法下的平均等待时间。
解答:
1、
FCFS:
SJF(非抢占):
SJF(抢占):
注意,对于长度相同的情况,我采用片长为1ms的RR
优先级:
RR:
2、
FCFS:P1=10,P2=13-1,P3=17-2,P4=18-3,P5=23-4,SUM=10+12+15+15+19=71,NUM=14.2
SJF(非抢占):P1=10,P2=14-1,P3=18-2,P4=11-3,P5=23-4,SUM=10+13+16+8+19=66,NUM=13.2
SJF(抢占):P1=23,P2=5-1,P3=9-2,P4=4-3,P5=14-4,SUM=23+4+7+1+10=45,NUM=9
优先级:P1=22,P2=4-1,P3=17-2,P4=23-3,P5=9-4,SUM=22+3+15+20+5=65,NUM=13
RR:P1=23,P2=12-1,P3=14-2,P4=9-3,P5=21-4,SUM=23+11+12+6+17=69,NUM=13.8
3、
FCFS:P1=0,P2=10-1,P3=13-2,P4=17-3,P5=18-4,SUM=9+11+14+14=48,NUM=9.6
SJF(非抢占):P1=0,P2=11-1,P3=14-2,P4=10-3,P5=18-4,SUM=10+12+7+14=43,NUM=8.6
SJF(抢占):P1=0+14-1,P2=1+4-3-1,P3=5-2,P4=3-3,P5=9-4,SUM=13+1+3+0+5=22,NUM=4.4
优先级:P1=0+9-1+11-10+13-12+15-14+17-16,P2=1-1,P3=10+12-11+14-13+16-15-2,P4=22-3,P5=4-4,SUM=12+0+11+19+0=42,NUM=8.4
RR:P1=13,P2=8,P3=8,P4=5,P5=12,SUM=46,NUM=9.2
题目五:
查找文献了解 solaris 的调度设计并对其进行详细阐述,并就其调度方案中的至少两个细节说明这样设计所带来的影响(好处)。
解答:
Solaris的内核线程调度(抢占、基于优先级、支持实时线程)
传统Solaris使用多对多模型,Solaris 9使用一对一模型。
Solaris按照优先级排序有4种调度类型:实时、系统、分时和交互,每种类型有不同的priority和调度算法。
Scheduler将特定类的priority转换为全局priority,再选择全局priority最高的线程来执行,直到该线程阻塞、用完time quantum或被更高priority的线程抢占。如果多个线程的priority相同,则采用循环队列。
Solaris 9引入2种新的调度类型:
- 固定优先级(fixed priority) – 线程的priority与time sharing类型范围相同,但不能动态调节。
- 公平共享(fair share) – 用CPU shares代替priority来做调度决策。
CPU shares:表明可用CPU资源的权利,并被分配到一个project(进程集)。
Time sharing类(默认调度类型)和Interactive类采用同样的调度策略(多级反馈队列),Priority和time quantum默认成反比。
通常Interactive进程的priority更高,CPU-bound进程的priority更低。
Interactive和time sharing类包括60个优先级,在其调度中:
时间片到期(Time quantum expired)(i.e. 用完其time-quantum而未堵塞)的线程将被认为是CPU-intensive的,并被降低优先级。
从睡眠中返回(Return from sleep)(e.g. 从等待I/O中返回)的线程优先级将被提高。
System类专门保留给内核使用,用于运行内核进程。System进程一旦创建,其priority就不再改变。(在内核模式下运行的用户进程并不属于system类。)
Real time类的进程具有最高priority,能在其他类型进程之前运行。通常只有少数进程属于real time类。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159073.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...