您的位置:首页 > 运维架构 > Linux

Linux设计与实现学习笔记之进程调度

2014-10-24 17:17 567 查看
进程调度

这一章讲的内容是非常有趣的,很多的思想和观点生活中也能用到呢。这一章最重要的两个字是调度。何为调度,就是在有限的处理器和无限的进程中寻找平衡点的策略,方法。调度的目的:最大限度地利用处理器。调度的原则:高效,公平。

多任务系统的两种方式:抢占式多任务和非抢占式多任务。非抢占式多任务有点像计划经济,每个进程占用CPU资源完全靠自愿,让步。这样会出现很多分配不公的现象。而抢占式多任务则是市场经济,符合市场规律(调度算法)。这种规律保证了每个进程能相对公平的占用CPU的时间。

几个名词:

抢占:抢占式多任务系统中出现的概念。正在运行的进程被调度程序强制挂起,以便新的进程得到执行的机会。这个动作叫做抢占。

时间片:进程在被抢占之前已经预设好的时间。

Linux进程调度发展简史:

2.4版本及以前:简陋的进程调度

2.5版本:O(1)调度,对交互式进程不理想。

2.6版本:CFS

Linux进程调度策略:

进程分为两类:I/O消耗型进程和处理器消耗型进程。前者是说像GUI这种大部分时间需要等待键盘,鼠标等外设的输入,并且要及时处理并给予响应的进程。后者是说一些执行算法的程序,需要大量的耗费CPU.当然这两个只是对进程特性的描述,很多进程是兼而有之的。

了解了进程的分类,调度策略就是要在上面两个矛盾中寻找平衡,这也是整个调度程序最核心的工作。

进程的优先级:

事实上天底下没有完全的公平,人有美丑富穷,进程也分了三流九等。进程调度程序要保证的也是相对的公平,而不是绝对的公平。如何区分进程的优先级呢,Linux是采用了两个方法:第一种是nice值,它的范围是-20~19,nice值越大,优先级越低。nice值代表时间片的比例,而不是绝对值。通过ps -el命令可以看到标记为NI的一列,这就是这个进程的nice值。第二张就是实时优先级,这是实时进程才有的。事实上这地方比较复杂,优先级里面有区分为静态优先级和动态优先级,这里MARK一下,回头再研究。

时间片:

一个矛盾:时间片分配的过长,系统对交互系统的响应表现欠佳。时间片分配的太短,又会增大进程切换的消耗。如何定义时间表的长度,恒定的值是有问题的。CFS调度器没有直接分配时间片带进程,而是将处理器的使用比分给了进程。这样,进程被分配的时间片是动态的,与系统的负载以及分配的nice值有关系。

抢占时机:

调度器会比较新的进程和正在运行的进程消耗了多少CPU占用比,如果新的进程使用比比当前进程小,则新进程立刻投入运行,否则推迟运行。

文本编辑器和播放器的例子:

两个进程,一个文本编辑器(I/O消耗型进程),一个播放器(处理器消耗型)。两个进程被赋予相同的nice值,具有相同的处理器使用比(假设都是50%)。当文本编辑器被唤醒时,CFS注意带给他的处理器使用比是50%,但是他用的和少。跟据上面的原则,文本编辑器进程胡立即抢占播放器进程,并进程处理。处理完成后,文本编辑器进入休眠模式,播放器继续进行处理。这样就保证了公平。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: