采用多道程序设计可以提高CPU的利用率。严格地说,如果进程用于计算的平均时间是进程在内存中停留时间的20%,且内存中同时有5个进程,则CPU将一直满负载运行。然而,这个模型在现实中过于乐观,因为它假设这5个进程不会同时等待I/O。
更好的模型是从概率的角度来看CPU的利用率。假设一个进程等待I/O操作的时间与其停留在内存中时间的比为p。当内存中同时有n个进程时,则所有n个进程都在等待I/O(此时CPU空转)的概率是pn。CPU的利用率由下面的公式给出:
CPU利用率 = 1-pn
图2-6以n为变量的函数表示了CPU的利用率,n称为多道程序设计的道数(degree of multiprogramming)。
从图2-6中可以清楚地看到,如果进程花费80%的时间等待I/O,为使CPU的浪费低于10%,至少要有10个进程同时在内存中。当读者认识到一个等待用户从终端输入的交互式进程是处于I/O等待状态时,那么很明显,80%甚至更多的I/O等待时间是普遍的。即使是在服务器中,做大量磁盘I/O操作的进程也会花费同样或更多的等待时间。
从完全精确的角度考虑,应该指出此概率模型只是描述了一个大致的状况。它假设所有n个进程是独立的,即内存中的5个进程中,3个运行,2个等待,是完全可接受的。但在单CPU中,不能同时运行3个进程,所以当CPU忙时,已就绪的进程也必须等待CPU。因而,进程不是独立的。更精确的模型应该用排队论构造,但我们的模型(当进程就绪时,给进程分配CPU,否则让CPU空转)仍然是有效的,即使图2-6的真实曲线会与图中所画的略有不同。
虽然图2-6的模型很简单,很粗略,它依然对预测CPU的性能很有效。例如,假设计算机有512MB内存,操作系统占用128MB,每个用户程序也占用128MB。这些内存空间允许3个用户程序同时驻留在内存中。若80%的时间用于I/O等待,则CPU的利用率(忽略操作系统开销)大约是1-0.512(0.83,原文这里有笔误),即大约49%。在增加512MB字节的内存后,可从3道程序设计提高到7道程序设计,因而CPU利用率提高到79%。换言之,第二个512MB内存提高了30%的吞吐量。
增加第三个512MB内存只能将CPU利用率从79%提高到91%,吞吐量的提高仅为12%。通过这一模型,计算机用户可以确定第一次增加内存是一个合算的投资,而第二个则不是。
文章转自:http://book.51cto.com/art/200907/137662.htm