Linux内核设计与实现——进程调度

调度程序负责决定哪个进程投入运行,何时运行以及运行多长时间
最大限度提供资源利用率,并且保证公平性

主要内容

  • 多任务

1. 多任务

多任务操作系统——并发执行多个进程
多核处理器——真正同时并行地运行

  • 非抢占式:需要进程让步
  • 抢占式任务

抢占式任务下,由调度程序决定什么时候停止一个进程的运行,这个强制的挂起动作就叫抢占
进程在被抢占之前能运行的时间是分配好的,叫进程的时间片

2. Linux的进程调度

  • 从O(1)调度:对响应时间敏感的交互进程,服务不佳
  • 后续替代:CFS(完全公平调度算法)

3. 策略

  1. I/O密集型和CPU密集型进程
  • I/O密集型: 进程的大部分时间用来提交I/O请求或等待I/O请求,最后通常会阻塞(等待更多的I/O请求)
  • CPU密集型:时间大多用在执行代码上,对此调度策略:降低频率,延长时间
  • 调度策略的权衡:响应时间短 VS 最大系统利用率(高吞吐量)
  1. 进程优先级
    Linux采用了两种不同的优先级范围,第一种是nice值(-2019),代表时间片的比例,低nice(高优先级)的进程可以获得更多处理器时间,第二种是实时优先级(099),越高的实时优先级数值意味着进程优先级越高。

  2. 时间片
    表明进程在被抢占前所能持续运行的时间。
    CFS调度器并没有直接分配时间片到进程,它是将处理器的使用比例分给了进程。进程所获得的处理器时间其实是和系统负载密切相关的,还受nice值的影响。

  3. 调度策略的活动
    文字编辑程序和视频编码程序,两者的处理器使用比例都是50%,但是文本编辑程序运行时间要短的多,这种情况下,为了兑现所有进程公平分享处理器的承诺,它会立刻抢占视频解码程序。

4. Linux调度算法

  1. 调度器类
    linux调度器是以模块方式提供的,允许不同类型的进程有针对地选择调度算法
  2. 为了避免将nice值直接映射到时间片的不便之处(分配绝对的时间片引发的固定的切换频率),CFS摈弃了时间片,而是分配给进程一个处理器使用比重
  3. 公平调度
    CFS的核心理念,每个进程都按照权重在全部可运行进程中所占比例的“时间片”来运行
    CFS为调度周期设立了一个近似目标:目标延迟,同时还有最小粒度
    绝对的nice值不再影响调度决策,只有相对值才会影响处理器时间的分配比例

5. Linux调度的实现

  1. 时间记账
    CFS使用调度器实体结构struct_sched_entity来追踪进程运行记账
  2. 虚拟实时
    CFS使用vruntime变量来存放进程的虚拟运行时间,该运行时间是实际运行时间进行加权运算后的结果。
    vruntime可以通过update_curr()更新
  3. 进程选择
    CFS选择具有最小vruntime的任务,使用红黑树来组织可运行进程队列(注意是可运行进程,如果进程阻塞,要从红黑树中删除)
  4. 调度器入口
    进程调度的入口点是函数schedule(),找一个最高优先级的调度类,选择最高优先级的进程
  5. 睡眠和唤醒
    休眠(被阻塞)的进程,如等待文件I/O
  • 休眠通过等待队列进行处理
  • 唤醒操作通过wake_up进行


    休眠和唤醒.jpg

6. 抢占和上下文切换

上下文切换,又就是从一个可执行进程切换到另一个可执行进程,每当一个新的进程被选出来准备投入运行的时候,schedule()就会调用该函数:

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

内核提供了一个need_resched标志来表明是否需要重新执行一次调度

  1. 用户抢占
    内核无论是在中断处理程序还是系统调用后返回,都会减产need_resched标志,如果被设置了,内核会选择一个其他(更合适的)进程投入运行
  2. 内核抢占
    只要重新调度室安全的(没有持有锁),内核就可以进行抢占
    每个进程的thread_info引入preempt_count计数器

7. 实时调度策略

实时调度策略

  1. SCHED_FIFO,简单的先入先出,不使用时间片,只会被更高优先级的抢占
  2. SCHED_RR,耗尽时间片之后就不再继续执行,带有时间片
    普通非实时
    SCHED_NORMAL

8. 与调度相关的系统调用

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

推荐阅读更多精彩内容