1.用以下标志运行程序:./process-run.py -l 5:100,5:100。CPU 利用率(CPU使用时间的百分比)应该是多少?为什么你知道这一点?利用 -c标记查看你的答案是否正确。
./process-run -l 5:100,5:100 创建了两个进程,第一个进程执行5条指令,每条指令都需要使用CPU,第二个进程一样
运行效果:

可以看到两个进程的运行的指令都需要CPU,所以CPU的利用率是100%,因为没有IO请求阻塞进程让CPU空闲
./process-run -l 5:100,5:100 -c 查看答案

可以看到在每一个时刻,都有一个进程在运行,换句话说就是每时每刻都需要CPU,所以利用率是 100%
2.现在用这些标志运行:./process-run.py -l 4:100,1:0。这些标志指定了一个包含4条指令的进程(都要使用CPU),并且只是简单地发出I/O并等待它完成。完成这两个进程需要多长时间?利用-c检查你的答案是否正确。
./process-run -l 4:100,1:0 创建两个进程,第一个进程执行4条指令,每条指令都需要CPU,第二个进程执行1条指令,需要IO操作
运行效果如下:

从运行图中,可以看出指令的执行需要6个周期,在加上IO等待(默认是5个周期),总共是11个周期的时间
./process-run -l 4:100,1:0 -c

3.现在交换进程的顺序:./process-run.py -l 1:0,4:100。现在发生了什么?交换顺序是否重要?为什么?同样,用-c看看你的答案是否正确。
./process-run.py -l 1:0,4:100 进程的执行顺序交换
运行效果如下:

此时,第一个进程执行指令,需要1个周期,然后进入IO操作,需要5个周期的等待时长,但此时第二个进程处于可运行的状态,所以CPU执行第二个进程,需要4个周期,换句话说,在第一个进程等待IO的时间内,第二个进程已经执行完毕,最后第一个进程在执行指令(IO操作结束),需要1个周期,总共需要7个周期
./process-run.py -l 1:0,4:100 -c 查看答案

4.现在探索另一些标志。一个重要的标志是-S,它决定了当进程发出I/O 时系统如何反应。将标志设置为SWITCH_ON_END,在进程进行I/O操作时,系统将不会切换到另一个进程,而是等待进程完成。当你运行以下两个进程时,会发生什么情况?一个执行I/O,另一个执行CPU工作。(-l 1:0,4:100 -c -S SWITCH_ON_END)

由于关闭了 SWITCH_ON_END,所以当 process 0 在进行IO操作时,CPU不会切换到处于就绪态的 process 1 运行,所以总共需要运行11个周期
查看答案

5.现在,运行相同的进程,但切换行为设置,在等待I/O时切换到另一个进程(-l 1:0,4:100 -c -S SWITCH_ON_IO)。现在会发生什么?利用-c来确认你的答案是否正确。
这就和第3问一样了(默认开启SWITCH_ON_IO)

6.另一个重要的行为是I/O完成时要做什么。利用-I IO_RUN_LATER,当 I/O完成时,发出它的进程不一定马上运行。相反,当时运行的进程一直运行。当你运行这个进程组合时会发生什么?(./process-run.py -l 3:0,5:100,5:100,5:100 -S SWITCH_ON_IO -I IO_RUN_LATER -c -p)系统资源是否被有效利用?
-I IO_RUN_LATER 这个标志的意思是说,当进程请求的IO操作结束后,CPU并不会立即运行它,而是切换到下一个进程运行
在这个问题中,process 0 全部指令都需要进行IO操作,第一个IO等待中,process 1 可以充分利用等待的时间执行,当 process 1 执行完后,切换到 process 2 执行,最后,只剩下 process 0 还剩下几条指令,全部都需要IO操作,而此时在它的IO等待期间,CPU处于空闲,造成了CPU的浪费
所以要充分利用资源,应该将 process 0 IO等待的时间充分利用起来,即让CPU切换到其他进程执行

可以看到在后续只有 process 0 在执行,且大部分时间都在进行 IO等待
7.现在运行相同的进程,但使用-I IO_RUN_IMMEDIATE设置,该设置立即运行发出I/O 的进程。这种行为有何不同?为什么运行一个刚刚完成I/O的进程会是一个好主意?

当设置了 -I IO_RUN_IMMEDIATE 标志后,CPU得到了充分利用,原因已经在第6问说明了
8.现在运行一些随机生成的进程,例如-s 1 -l 3:50,3:50, -s 2 -l 3:50,3:50, -s 3 -l 3:50,3:50。看看你是否能预测追踪记录会如何变化?当你使用-I IO_RUN_IMMEDIATE 与-I IO_RUN_ LATER时会发生什么?当你使用-S SWITCH_ON_IO与-S SWITCH_ON_END时会发生什么?
这个问题其实就是进程的执行更加随机化了一点,分析的原理和上面的问题一致
posted on
浙公网安备 33010602011771号