45、Linux内核CPU调度器深度解析

Linux内核CPU调度器深度解析

1. 谁运行调度器代码

很多人对调度的工作原理存在一个微妙但关键的误解,认为存在一个名为“调度器”的内核线程会定期运行并调度任务,这是错误的。在像Linux这样的整体式操作系统中,调度是由当前正在执行内核代码的进程上下文(即 current )来完成的。

同时,有一条Linux内核的黄金规则需要牢记:调度代码绝不能在任何原子或中断上下文中运行。也就是说,中断上下文代码必须保证是非阻塞的,例如在中断上下文中不能使用 GFP_KERNEL 标志调用 kmalloc() ,因为它可能会阻塞;但使用 GFP_ATOMIC 标志则没问题,因为它会指示内核内存管理代码永不阻塞。而且,在调度代码运行时,内核抢占是被禁用的。

2. 调度器何时运行

操作系统调度器的工作是仲裁对处理器(CPU)资源的访问,在竞争的线程之间共享该资源。为了确保任务之间公平地共享CPU资源,调度器需要定期在处理器上运行。但不能在定时器中断中直接调用调度器,因为不能在原子或中断上下文中调用调度器。实际上,定时器中断上下文和进程上下文代码路径都被用于实现调度工作。

2.1 定时器中断部分

在定时器中断( kernel/sched/core.c:scheduler_tick() 代码中,此时中断被禁用)中,内核会执行一些必要的元工作,以确保调度顺利运行,比如适当更新每个CPU的运行队列、进行负载均衡等。但实际上并不会调用 schedule()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值