《Operating Systems:Three Easy Pieces》第四章课后习题解答

4.1

答:./process-run.py -l 5:100,5:100 命令行要执行的操作是CPU运行两个进程,而且每个进程都包含了5条指令,每条指令的CPU占用率都是100%。所以CPU的利用率一直会是100%。
《Operating Systems:Three Easy Pieces》第四章课后习题解答

4.2

答:完成这两个进程需要10单位的时间。首先我们可以知道命令行./process-run.py -l 4:100,1:0中的4:100,1:0表示CPU中一共有两个进程,先运行的进程4:100一共有4条指令,每条指令的CPU占用率都是100%,一共耗去4单位时间。随后的进程1:00表示仅有一条I/O指令,又因为README.md文档已经提示每条I/O指令的默认运行时长为5单位时间(包括了CPU发出指令即将进行I/O操作阻塞进程占去的1单位时间,实际I/O操作等待了4单位时间)。最后I/O操作完毕CPU再解除该进程的阻塞耗去1单位时间。综上一共需要10单位时间。
《Operating Systems:Three Easy Pieces》第四章课后习题解答

4.3

答:如果交换了进程顺序那么完成两个进程占去的时间以及CPU占用率和I/O设备占用率都会发生改变。因为process-run.py代码明确指出当未使用参数-S SWITCH_ON_END修饰命令行时,那么默认为SWITCH_ON_IO,当一个进程发出I/O请求时CPU不会去等待它运行结束,而是会切换到下一个进程以此达到更大效率。所以,PID:0进程发起I/O指令,CPU阻塞这个进程占去1个单位时间。随后CPU切换到PID:1进程在等待I/O运行完成的4个单位时间内完成PID:1进程的4个指令。最后I/O执行完成CPU解除阻塞占去1单位时间一共耗去6单位时间。实际上,交换顺序特别重要,而且需要特别注意的是就算处于SWITCH_ON_END模式最后的结果也有所不同,因为此时PID:0进程的CPU阻塞不会额外占去1单位时间,会在PID:1进程的第一条指令执行时完成。
《Operating Systems:Three Easy Pieces》第四章课后习题解答
《Operating Systems:Three Easy Pieces》第四章课后习题解答

4.4

答:其实在第三题的解答中已经给出了答案。因为设置了-S SWITCH_ON_END,所以先运行PID:0进程发出I/O操作并且CPU不发生切换,占去5单位时间。随后运行PID:1进程执行4条CPU占用率100%的指令,一共耗去9单位时间。
《Operating Systems:Three Easy Pieces》第四章课后习题解答

4.5

答:-l 1:0,4:100 -c -S SWITCH_ON_IO与-l 1:0,4:100 -c的结果相同,因为默认就是SWITCH_ON_IO模式。已经在第三题中详细阐述,最后耗时6单位时间。
《Operating Systems:Three Easy Pieces》第四章课后习题解答