按照网上教程装的,在mooc看的视频,跟着做了变成这样。
不太理解,直接运行是可以的,但是按F5调试的时候就报错说找不到文件(图里是这意思吧),然后右下角又说我编汇成功,所以这样到底行不行啊?
问题1:单进程编程和多进程编程的区别?
1.执行方式:单进程编程是一个进程从上到下顺序进行;多进程编程可以通过并发执行,即多个进程之间交替执行,如某一个进程正在I/O输入输出而不占用CPU时,可以让CPU去执行另外一个进程,这需要采取某种调度算法。
2.数据是否同步:单进程的数据是同步的,因为单进程只有一个进程,在进程中改变数据的话,是会影响这个进程的;多进程的数据是异步的,因为子进程数据是父进程数据在内存另一个位置的拷贝,因此改变其中一个进程的数据,是不会影响到另一个进程的。
3.CPU利用率:单进程编程的CPU利用率低,因为单进程在等待I/O时,CPU是空闲的;多进程编程的CPU利用率高,因为当某一进程等待I/O时,CPU会去执行另一个进程,因此CPU的利用率高。
4.多进程用途更广泛。
问题2:仅针对样本程序建立的进程,在修改时间片前后,log 文件的统计结果(不包括 Graphic)都是什么样?结合你的修改分析一下为什么会这样变化,或者为什么没变化?(个人理解,有问题请指出)
我设计了时间片为1,15,10000这三个例子,可以看到随着时间片增大,这8个进程的平均周转时间(Turnaround)和平均等待时间是增大的(图中的Throughout不知道是指什么时间?所以暂时先不考虑了。。。)。可能是由于当时间片越大,就越趋近于先进先出的调度模式了,那么可能是先占用CPU的进程,占用了太久的CPU,导致后面仅需要占用一小会CPU的进程等待了太久的时间;时间片小的时候,先占用CPU的进程在时间片用完后就会把CPU让给后面的进程,后面的进程马上执行完,所以后面的进程都不用等待了,所以平均周转时间和等待时间会变小。
如果要总结规律的话,只设计三个梯度明显是不合适的,需要设计一系列梯度才能更精准地说明问题;还有不同时间片对程序的影响,跟程序本身也是有关系的,比如程序中各个进程占用CPU和I/O时间的差异,都会得到不同的结果。
那么从理论上讲:
(1)当时间片非常小的时候,平均周转时间和等待时间应该是非常大的,因为进程切换地太频繁,浪费大量的时间再进程切换上。
(2)当时间片适宜的时候,平均周转时间和等待时间是最低的,因为既不会浪费大量时间在进程切换上,又不会让只需占用一小会CPU的进程等待太多的时间(也就是说对于只占用很短时间CPU的进程而言,它不会等待太多的时间)。
(3)当时间片足够大的时候,就变成了先进先出的调度算法,虽然不会浪费时间在进程切换上,但是用户交互性差,平均周转时间和等待时间可能又会变大(当然这取决于各个进程占用CPU时间长短的差异性以及各个进程的执行次序),比如第一个进程占用CPU一小时,而后7个进程只需占用CPU一分钟,那么后面7个进程每个进程都要等第一个进程一小时,等待时间和周转时间自然变大;如果时间片适宜,让第一个进程占用1分钟CPU后就切换到第二个进程,那么后面7个进程几乎不需要等待多久就可以执行完毕,会大大减小周转时间和等待时间。