电商数据统计网站,大丰专业做网站的公司,江阴房产网510房产网,库尔勒北京网站建设文章目录 内核开发之进程调度大纲1 进程调度基础2 核心调度算法#xff1a;CFS#xff08;完全公平调度器#xff09;3 调度器实现机制4 高级主题5 实践与扩展 内核开发之进程调度大纲
1 进程调度基础 多任务系统类型 抢占式#xff1a;调度器强制切换进程#xff08;基于… 文章目录 内核开发之进程调度大纲1 进程调度基础2 核心调度算法CFS完全公平调度器3 调度器实现机制4 高级主题5 实践与扩展 内核开发之进程调度大纲
1 进程调度基础 多任务系统类型 抢占式调度器强制切换进程基于时间片/优先级非抢占式进程主动让步yield易导致饥饿时间片Timeslice进程被抢占前持续运行的时间段影响响应与吞吐平衡。 进程分类与调度目标 I/O消耗型频繁阻塞如GUI应用需高响应优先级CPU消耗型长期占用CPU如计算任务适合长时片核心矛盾响应速度低延迟 vs. 系统吞吐量高利用率 优先级模型 Nice值-20~19值越大优先级越低影响普通进程时间片比例实时优先级0~99值越大优先级越高用于SCHED_FIFO/SCHED_RR优先级映射实时进程 普通进程Nice值无效 2 核心调度算法CFS完全公平调度器 设计目标 公平性各进程获得CPU时间与其权重成比例低开销O(1)时间复杂度选择进程交互优化保障I/O型进程响应速度。 关键机制 虚拟运行时vruntime// struct sched_entity (kernel/sched/sched.h)
u64 vruntime; // 标准化后的运行时间纳秒公式vruntime 实际运行时间 × (NICE_0_LOAD / 进程权重)红黑树rbtree 以vruntime为键值组织可运行进程选择最小vruntime的节点最左侧叶子作为下一个进程 时间分配 进程时间片 (进程权重 / 总权重) × 调度周期最小粒度1ms避免过多进程时切换开销 3 调度器实现机制 时间记账Time Accounting update_curr()周期性更新当前进程的vruntime位于kernel/sched/fair.c计算实际运行时间并转换为加权虚拟时间。 进程选择 入队enqueue_entity() → 插入红黑树新进程/唤醒进程出队dequeue_entity() → 移出红黑树阻塞/终止挑选下一进程__pick_next_entity() → 返回最小vruntime节点 调度入口 schedule()核心入口函数 → 调用pick_next_task()按调度类优先级遍历实时类 CFS类 睡眠与唤醒 睡眠进程移入等待队列状态置为TASK_INTERRUPTIBLE唤醒wake_up() → 移回红黑树触发抢占检查 4 高级主题 抢占Preemption 用户抢占从系统调用/中断返回用户空间时检查need_resched标志内核抢占中断返回内核空间时若preempt_count0且需调度则抢占 实时调度策略 SCHED_FIFO无时间片高优先级进程独占CPU直至阻塞SCHED_RR带时间片的轮转实时调度 多核负载均衡 每个CPU维护独立运行队列struct rq周期性负载均衡load_balance()迁移任务 5 实践与扩展 调度相关系统调用 系统调用功能描述sched_setscheduler()设置进程调度策略与优先级sched_yield()主动让出CPUsched_setaffinity()绑定进程到特定CPU核心 性能调优 调整Nice值nice命令实时进程优先级chrt -p prio pid监控工具ftrace跟踪调度事件、perf sched 扩展阅读 源码重点文件 kernel/sched/fair.cCFS实现kernel/sched/rt.c实时调度 研究趋势异构调度如ARM big.LITTLE、低延迟优化BPF调度器