Linux内核--第四篇博客--实时调度类即SMP

一、实时调度类源分析

Linux进程分为两大类:实时进程和普通进程。

实时进程与普通进程根本不同之处,如果系统中有一个实时进程且可运行,那么调度器总会选择它。除非另有一个优先级更高的实时进程。

SCHED_FIFO:没有时间片,在被调度器选择之后,可以运行任意长的时间:

SCHED_RR:有时间片,其值在进程运行时会减少。

1、实时调度实体sched_rt_entity数据结构

linux内核源码目录:include/linux/sched.h

linux 内核源码目录: /kernel/sched/rt.c
 
2 、实时调度类 rt_sched_class 数据结构
3 、实时调度操作核心详解
进程插入enqueue_task_rt
linux 内核源码目录: /kernel/sched/rt.c

进程选择pick_next_task_rt

实时调度会选择最高优先级的实时进程来运行。

linux 内核源码目录: /kernel/sched/rt.c
 

进程删除dequeue_task_rt

从优先级队列中删除实时进程,并更新调度信息,然后把这个进程添加到队尾。

linux内核源码目录:/kernel/sched/rt.c

 

二、SMP

    多处理器系统的工作方式分为非对称多处理(asym-metrical mulit-processing)和对称多 处理(symmetrical mulit-processingSMP)两种。在对称多处理器系统中,所有处理器的地位都是相同的,所有的资源,特别是存储器、中断及I/O空间,都具有相同的可访问性,消除结构上的障碍。

多处理器系统上,内核必须考虑几个额外的问题,以确保良好的调度。

CPU负荷必须尽可能公平地在所有的处理器上共享。

进程与系统中某些处理器的亲合性(affinity)必须是可设置的。

内核必须能够将进程从一个CPU迁移到另一个

linux SMP调度就是将进程安排/迁移到合适的CPU中去,保持各CPU负载均衡的过程。

1CPU域初始化

Linux 内核中有一个数据结构 struct sched_domain_topology_level 用来描述 CPU的层次关系。
linux 内核源码目录: /include/linux/sched.h

 

内核对 CPU 的管理是通过 bitmap 来管理,并且定义 possible present online active 这4种状态。
linux 内核源码目录: /kernel/cpu.c
2 SMP 负载均衡
    SMP 负载均衡机制从注册软中断开始,每次系统处理调度 tick时会检查当前是否需要处理 SMP 负载均衡。
     负载均衡时机
    周期性调用进程调度程序 scheduler_tick()->trigger_load_balance()中,通过软中断触发负载均衡。
    某个 CPU 上无可运行进程, __schedule() 准备调度 idle 进程前,会尝试从其它 CPU上拉一批进程过来。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值