对应异步社区资源HW-CPU-Intro
运行
./process-run.py -l 5:100,5:100
结果如下图所示
5代表运行5条cpu指令,而100表示100%为cpu运行的指令。由于不涉及任何的IO,最终cpu利用率为100%
运行
./process-run.py -l 4:100,1:0
结果如下图所示
可见有4条cpu指令和1条占用io的指令,运行时间如下:
可见默认运行一条IO指令所用的时间默认为5倍的普通指令,共需要10个ticks
交换顺序后运行结果如下:
由于IO进程转为WAITING状态,调度后CPU程序会运行,故只需要6个ticks即可执行完成:
这个标志代表的调度策略是只有当当前这个进程结束后调度器才会开始调度,故就算当前进程进入WAITING状态调度器也不会调度故一直在等待。
这种策略就是IO也会进行调度,比较合理,并且我测试了一下这样的策略当当前进程结束依然能够调度:
运行结果如下:
这种情况下,当IO进程也就是图中的pid0从WAITING状态下转换到READY时也就是io结束后,在调度队列中显然排在后面,这也就导致先运行了其他的进程,导致最后要等待IO,系统资源未能有效利用。(其实需要一种判定机制来确定是否需要IO)
这种模式下,IO进程IO结束后判定为立即调度,也就是认为当前进程很有可能再次IO,把它以抢占式的方式立即运行,cpu和io的利用率会更好。
由于无法判定随机判定哪个进程可能涉及IO,所以这几种调度策略各有好坏。