首页 > 试题广场 >

假定我们有3个程序,每个程序花费80%的时间进行IO,20

[单选题]
假定我们有3个程序,每个程序花费80%的时间进行I/O,20%的时间使用CPU。每个程序启动时间和其需要使用进行计算的分钟数如下,不考虑进程切换时间:
程序编号 启动时间 需要CPU时间(分钟)
1                00:00      3.5
2                00:10      2
3                00:15     1.5
请问,在多线程/进程环境下,系统的总响应时间为( )
  • 22.5
  • 23.5
  • 24.5
  • 25.5
推荐
B

0~10分钟内,只有一个进程在跑,进程1总共使用了10*0.2=2分钟的CPU,10*0.8=8分钟的IO,还剩下1.5分钟的CPU要使用;

10~15这5分钟内,有进程1和进程2两个进程,CPU利用率为1-0.8*0.8=0.36,所以CPU一共跑了5*0.36=1.8分钟,假定两个进程完全平等,CPU使用时间平分,则每个进程使用了1.8/2=0.9分钟的CPU时间,这样进程1剩下1.5-0.9=0.6分钟的CPU,进程2剩下2-0.9=1.1分钟的CPU;

15开始,有3个进程, CPU利用率为1-0.8*0.8*0.8=0.488,此时X分钟之内,CPU总共执行了0.488*X分钟,由于三个进程平分,所以每个进程的CPU使用时间为0.488*X/3, 所以进程1在 0.6*3/0.488=3.69分钟之后,也就是15+3.69=18.69分完成;
之后CPU利用率又为0.36(两个进程),此时进程2剩下1.1-0.6=0.5分钟的CPU,进程3剩下1.5-0.6=0.9分钟的CPU, 之后进程2在在0.5*2/0.36=2.78分钟之后也就是2.78+18.69=21.46时候进程2结束;
之后进程3开始单跑,此时进程3还剩下 0.9-0.5=0.4的CPU时间,此时的CPU利用率为0.2,0.4/0.2=2, 即2分钟之后进程3结束,也就是21.46+2=23.46≈23.5 所以答案应该选B

参考:http://blog.csdn.net/sunmenggmail/article/details/8022532
编辑于 2015-02-05 17:57:44 回复(2)
我的算法不太一样,我考虑的是I/O本身不占用CPU,1,2,3程序的时间如下,假设每个进程都是先进行I/O的,那么每个进程的CPU计算时间并不冲突:
1、14s + 3.5s        17.5s
2、10s + 8s(进程1已经计算完毕) + 2s        20s
3、15s + 7.5s(进程2已经计算完) + 1.5s     22.5s
所以一共的响应时间是22.5s
发表于 2015-09-05 19:56:43 回复(7)
        题目问系统的总响应时间,而系统的调度目标是使总响应时间尽可能地小。那么,怎么使总响应时间最小呢?
        注意到,CPU是共享(竞争)的,而IO是各自的,所以,系统的调度只要满足“在使用CPU上不引起冲突(发生竞争 ”这一条件,就不会有时间上的耽搁,就能使总响应时间最小。
       由题意易知程序1、2、3的IO时间分别为14、8、6,在这一条件下,不引起CPU使用冲突是可以做到的,而且调度方法有无数多种(因为题目并没有规定是先IO还是先使用CPU,或者两者交替,这些都没有说,那我们就可以认为是任何形式)。
       下面两幅图分别给出了“先使用CPU后进行IO”和“先进行IO后使用CPU”两种情况的图解,一目了然。



        图中阴影部分表示使用CPU时间,空白部分表示进行IO时间。
        可见,只要不引起CPU冲突,每个程序都能从一开始一口气执行完,总响应时间由最后执行完的程序决定。
        对于本题,只要不引起CPU冲突,总响应时间都是
       15(程序3开始时间)+1.5(程序3使用CPU时间)+6(程序3进行IO时间)=22.5
发表于 2016-09-06 10:10:43 回复(1)
http://blog.csdn.net/xu3737284/article/details/22203553
发表于 2015-09-06 11:06:13 回复(0)
雄头像
有两个前提假设: 1. 程序运行过程中,cpu使用时间平均分布在程序整个生命周期 2. 线程优先级相同,资源分配使用最公平的分配方式(即时间片很短的分时调度)
发表于 2015-08-16 09:39:36 回复(0)
第二题究竟是A还是B,感觉有争议啊
发表于 2015-09-05 15:33:40 回复(2)
只有一个进程的时候,CPU利用率肯定是20%。
两个进程的时候:CPu利用率是:20% + (1-20%)*20% = 36%
三个进程是:36% + (1-36%)*20% = 48.8%
发表于 2024-08-22 16:59:50 回复(0)
1、14s + 3.5s        第17.5s结束
2、10s + 8s(进程1已经计算完毕) + 2s        第20s结束
3、15s + 7.5s(进程2已经计算完) + 1.5s     第22.5s结束
所以系统响应时间是0-22.5s,总共是23.5s
发表于 2021-05-19 16:35:15 回复(0)
  自己找了下  http://lib.csdn.net/article/operatingsystem/30754
发表于 2016-08-01 22:51:51 回复(0)
最主要的就是要知道CPU的利用率随着进程的增加而增加,不是一成不变的20%。CPU利用率=1—p的n次方。p是I/O的操作时间,n是进程的数量。
发表于 2016-04-22 00:01:09 回复(0)
我算出来是22.5,是根据CPU的时间算的。17.5+2.5+2.5=22.5
发表于 2015-09-09 11:28:31 回复(0)