【LittleXi】第四章 Process Intro exercise

目录

  • 【LittleXi】第四章 Process Intro exercise
    • 第四章
      • 实验准备
      • 问题

【LittleXi】第四章 Process Intro exercise

第四章

实验准备

  • 下载实验所需代码

wget http://pages.cs.wisc.edu/~remzi/OSTEP/Homework/HW-CPU-Intro.tgz

  • 解压

tar -zxvf HW-CPU-Intro.tgz

  • 注意一定要用python2

sudo apt-get update && sudo apt-get install python2

问题

1.用以下标志运行程序:./process-run.py -l 5:100,5:100。CPU 利用率(CPU 使用时间 的百分比)应该是多少?为什么你知道这一点?利用 -c 标记查看你的答案是否正确。

答:从运行python2 ./process-run.py -l 5:100,5:100的截图来看,CPU的利用率应该是100%,因为运行的过程种进程1并没有运行

【LittleXi】第四章 Process Intro exercise_第1张图片

验证答案,确实正确python2 ./process-run.py -l 5:100,5:100 -c

【LittleXi】第四章 Process Intro exercise_第2张图片

2.现在用这些标志运行:./process-run.py -l 4:100,1:0。这些标志指定了一个包含 4 条指令的进程(都要使用 CPU),并且只是简单地发出 I/O 并等待它完成。完成这两个进程需要 多长时间?利用-c 检查你的答案是否正确。

答:运行 python2 ./process-run.py -l 4:100,1:0,完成进程0消耗的时间是4个CPU时间,第二个进程完成的时间无法确认,因为从打印的结果来看,进程1仅仅输出了io,并不能完全确定消耗的CPU时间

【LittleXi】第四章 Process Intro exercise_第3张图片

进一步运行python2 ./process-run.py -l 4:100,1:0 -c可以发现,进程0和我们的答案一致,进程2的io占用一次,然后4个CPU时间被阻塞,最后一个CPU时间完成进程

【LittleXi】第四章 Process Intro exercise_第4张图片

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

答:运行python2 ./process-run.py -l 1:0,4:100后发现进程0,1交换了运行顺序,交换顺序重要性暂时看不出来

【LittleXi】第四章 Process Intro exercise_第5张图片

运行python2 ./process-run.py -l 1:0,4:100 -c之后发现交换进程顺序非常重要了,因为在这里可以看到,进程0在阻塞的时间并不会占用CPU的时间,而是把CPU的时间给进程1了,这样大大节省了两个进程完成的总时间

【LittleXi】第四章 Process Intro exercise_第6张图片

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

答:运行python2 ./process-run.py -l 1:0,4:100 -c -S SWITCH_ON_END,将标志设置为SWITCH_ON_END后,进程0就会一直占用CPU时间,让总的运行时间延长了

【LittleXi】第四章 Process Intro exercise_第7张图片

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

答:运行python2 ./process-run.py -l 1:0,4:100 -c -S SWITCH_ON_IO,将标志设置为SWITCH_ON_IO后,进程0阻塞时会释放CPU占用,和默认情况一样

【LittleXi】第四章 Process Intro exercise_第8张图片

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)系统资源是否被有效利用?

答:运行python2 process-run.py -l 3:0,5:100,5:100,5:100 -S SWITCH_ON_IO -I IO_RUN_LATER -c -p,可以发现完成IO后,当CPU非空闲时,该进程不会立刻运行

【LittleXi】第四章 Process Intro exercise_第9张图片

7.现在运行相同的进程,但使用-I IO_RUN_IMMEDIATE 设置,该设置立即运行发出 I/O 的进程。这种行为有何不同?为什么运行一个刚刚完成 I/O 的进程会是一个好主意?

答:运行python2 process-run.py -l 3:0,5:100,5:100,5:100 -S SWITCH_ON_IO -I IO_RUN_IMMEDIATE -c -p,正如我们set的一样,CPU在完成IO流之后会直接占用CPU时间

【LittleXi】第四章 Process Intro exercise_第10张图片

8.现在运行一些随机生成的进程,例如, -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 时会发生什么?

答:运行随机生成的进程,普遍性而言和预测的差不多,SWITCH_ON_IO和 IO_RUN_IMMEDIATE 开启后,整体CPU占用率会明显增加,且IO率也会明显增加(因为花费的总时间变少了)
【LittleXi】第四章 Process Intro exercise_第11张图片

你可能感兴趣的:(服务器,linux,运维)