3.进程调度

进程调度

调度程序复杂决定哪个进程投入运行,合适运行以及运行时长。调度程序可看做在可运行态进程之间分配有限的处理器时间资源内核子系统。只有通过调度程序的合理调度,系统资源才能最大程度地发挥作用,多进程才会有并发执行的效果。

1.多任务

多任务就是操作系统能同时并发地交互执行多个进程。实际上是使多个任务处于阻塞睡眠状态,这些任务位于内存,但是并不处于可运行状态,知道某一时间发生。Linux系统中往往有多个程序在内存,但是仅有一个处于可运行状态。

多任务系统划分为两类:抢占式非抢占式。Linux采用抢占式多任务模式,进程在被抢占之前能够运行一定时间,这个时间称为时间片(timeslice)。从全局角度来看,合理调整时间片可以优化系统资源的使用效率。

2.调度策略

调度策略决定进程何时运行以及处理器使用时间,因此调度器的策略往往决定系统的整体印象。

I/O消耗型和处理器消耗型进程

进程分为I/O消耗型处理器消耗型,以及混合型。I/O消耗型大部分时间用于等待或提交I/O请求,因此这种类型特点就是频繁需要处于运行态,但是运行时间很短,例如用户图形界面;处理器消耗型,很少需要I/O,主要是占用大量CPU时间,用于计算,例如Matlab;混合型,例如字处理器,通常等待键盘输入,同时大量占用CPU进行拼写检查和宏计算。

针对不同类型的进程需要不同的调度策略,考虑进程的主要需求是响应迅速还是高吞吐量

进程优先级

Linux采用两种不同的优先级范围:nice值和实时优先级nice值越小表明优先级越高,实时优先级正好相反(值越大优先级越高),同时实时性进程的优先级高于非实时性进程

时间片

前面说了时间片是进程被抢占前所能持续运行的时间,在Linux中,时间片不是一个定值,而是根据nice值分配处理器的使用比例,所以时间片跟系统负载相关。nice值越大的进程,时间片就越小。

对于Linux中使用的CFS调度器,其抢占时机取决于新的可运行程序消耗了多少处理器使用比。若消耗的使用比比当前进程小,则抢占处理器立刻投入运行。否则,推迟其运行。

3.Linux调度的实现

Linux的CFS调度算法实现主要有4个组成部分:

  • 时间记账
  • 进程旋转
  • 调度器入口
  • 睡眠和唤醒

时间记账

所有调度器必须对运行时间记账,每次系统时钟节拍发生时,分配给进程的时间片减少一个节拍,当节拍为0时,则会被另一个时间片尚未减到0的进程抢占。Linux中使用一个调度器实体结构——sched_entity来记录,该实体嵌入在进程描述符task_struct内。同时CFS采用虚拟实时vruntime来度量进程的运行时间,实现记账功能。

进程选择

CFS在选择下一个运行进程时,会挑选一个vruntime最小的进程。CFS使用红黑树(请翻阅数据结构,或者直接看做一种高效的数据结构,查找和删除效率很高,O(log(n))的复杂度)来存储可运行进程队列,因此每次从红黑树中选择最左边的节点。

调度器入口

进程调度的主要入口是函数schedule(),它是内核其他部分用于调用进程调度器的入口:选择哪个进程可以运行,何时将其投入运行。通常schedule()都需要和一个具体的调度类相关联,也就是说,它会找到一个最高优先级的调度类——后者需要有自己的可运行队列,然后询问后者谁是下一个该运行的进程。

睡眠和唤醒

休眠(被阻塞)的进程处于特殊的不可执行状态,往往是等待某事件或者I/O资源。内核对其操作:进程标记自己为休眠状态,从可执行红黑树中移除,放入等待队列,然后调用schedule()选择和执行其他一个进程。

唤醒过程刚好相反:进程被设置为可执行状态,然后从等待队列中移到可执行红黑树中。

4.抢占和上下文切换

上下文切换,就是从一个可执行进程切换到另一个可执行进程,由context_switch()函数负责处理。每当一个新进程准备投入运行的时候,schedule()都会调用该函数,其主要完成两个工作:

  • 调用switch_mm(),负责把虚拟内存从上一个进程映射切换到新进程中
  • 调用switch_to(),负责从上一个进程的处理器状态切换到新进程的处理器状态。包括保存、恢复栈信息和寄存器信息,还有其他与体系结构相关的状态信息,都必须以每个进程为对象进行管理和保存。

内核还必须知道何时调用schedule(),内核提供了一个need_resched标志来表明是否需要重新执行一次调度。在某个进程被抢占,优先级高的程序进入执行状态,返回用户空间以及中断返回时,内核会检查need_resched标志。每个进程都有need_resched标志,这是因为访问进程描述符内数值快于全局变量

用户抢占

用户抢占发生在:从系统调用返回用户空间时从中断处理程序返回用户空间时

内核抢占

Linux支持内核抢占,在重新调度是安全的时候(没有持有锁,锁是非抢占区域的标志),内核就可以在任何时间抢占正在执行的任务。内核抢占发生在:

  • 中断处理程序正在执行,且返回内核空间之前
  • 内核代码再一次具有可抢占性的时候
  • 内核中任务显示调用schedule()
  • 内核中任务阻塞

5.实时调度策略

Linux提供两种实时调度策略:FIFO(先入先出)RR(轮询)两种方式。FIFO是指先到来的任务占用处理器,直到其主动放弃,再让第二个到来的任务占用处理器。RRFIFO类似,但是任务耗尽其时间片后,必须由下一个任务占用处理器。

小结

本节内容,其实对于本人而言可能更为简单一些(因为研究生期间接触了一些无线通信的调度算法),因此省略了一些细节,我自己也是喜欢先了解大概流程,再回头细读的方式学习,不然容易被细节阻碍思路。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,085评论 0 23
  • 引言 当计算机系统处于就绪状态的用户进程数多于CPU数时,就会产生多个进程或线程同时竞争CPU的结果。假设现在只有...
    程序猿胖子阅读 7,706评论 1 3
  • 我们在人际交往里,经常会遇到一个尴尬就是跟朋友该如何谈钱呢?谈钱伤感情,谈感情伤钱,我们到底要怎么样呢?在这里骄...
    墨农简爱阅读 1,887评论 0 1
  • 7月12日,小家伙四个月14天,我真的感谢上苍让这么个小天使降临到我的身边(家里目前有妈妈这个大天使,还有他...
    lsf8807阅读 205评论 0 0
  • 剧组的戏已经结束了,一向不爱看剧的嘉文破天荒地追完了剧。摄影师把餐馆拍得真美呀,档次真是高大上呀。店里已经美那么...
    杨家有女阅读 370评论 0 0