![](https://csdnimg.cn/release/download_crawler_static/6688743/bg5.jpg)
312
第十章
为 5 秒,那么,每个可运行进程运行大约5 秒,但是暂停的时间更长(典型的是5 秒
乘以可运行进程的个数)。
通常认为长的时间片降低交互式应用程序的响应时间,但这往往是错误的。正如本
章前面“进程的抢占”一节中所描述的那样,交互式进程有相对较高的优先级,因
此,不管时间片是多长,它们很快地抢占批处理进程。
在一些情况下,一个太长的时间片会降低系统的响应能力。例如,假定两个用户在
各自的shell提示符下输入两条命令,一条是CPU范围的,而另一条是交互式应用。
两个shell都创建一个新进程,并把用户命令的执行委托给新进程。此外,又假定这
样的新进程最初有相同的优先级(Linux 预先并不知道执行进程是批处理的还是交
互式的)。现在,如果调度程序选择 CPU 范围的进程执行,那么,另一个进程开始
执行前就可能要等待一个时间片。因此,如果这样的时间片较长,那么,看起来系
统可能对用户的请求反应迟钝。
时间片大小的选择总是一种折衷。Linux 采取单凭经验的方法,即选择尽可能长的
一个时间片,同时能保持良好的响应时间。
调度算法
Linux调度算法把 CPU 的时间划分为时期(epoch)。在一个单独的时期内,每个进
程有一个指定的时间片,时间片持续时间从这个时期的开始计算。一般情况下,不
同的进程有不同大小的时间片。时间片的值是在一个时期内,分配给进程的最大
CPU时间部分。当一个进程用完它的时间片时,这个进程被抢占,并用另一个可运
行进程代替它。当然,在同一时期内,一个进程可以几次被调度程序选中(只要它
的时间片还没用完),例如,如果进程挂起自己,等待I/O,那么,它还剩余一些时
间片,并可以在同一时期内再度被选中。当所有的可运行进程都用完它们的时间片
时,一个时期才结束;在这种情况下,调度程序的算法重新计算所有进程的时间片,
然后,一个新的时期开始。
每个进程有一个基本的时间片(base time quantum):如果进程在前一个时期内已
用完它的时间片,那么这个时间片值就是调度程序赋给进程的基本时间片。用户可
以通过nice()和setpriority()系统调用来改变进程的基本时间片(参见本章后
面“与调度相关的系统调用”一节)。新进程总是继承父进程的基本时间片。