- 从红黑树中找到 se 所应该在的位置
- 以 se->vruntime 值为键值进行红黑树结点的比较
- 将新进程的节点加入到红黑树中
- 为新插入的结点进行着色
进程上下文切换理解了下一个进程的选择后 , 就需要做当前进程和所选进程的上下文切换 。
Linux 内核用函数 context_switch 进行进程的上下文切换 , 进程上下文切换主要涉及到两部分:进程地址空间切换和处理器状态切换:

文章插图
- 进程的地址空间切换

文章插图
将下一个进程的 pgd 虚拟地址转化为物理地址存放在 ttbr0_el1 中(这是用户空间的页表基址寄存器) , 当访问用户空间地址的时候 mmu 会通过这个寄存器来做遍历页表获得物理地址 。完成了这一步 , 也就完成了进程的地址空间切换 , 确切的说是进程的虚拟地址空间切换 。
- 寄存器状态切换

文章插图
其中 x19-x28 是 arm64 架构规定需要调用保存的寄存器 , 可以看到处理器状态切换的时候将前一个进程(prev)的 x19-x28 , fp,sp,pc 保存到了进程描述符的 cpu_contex 中 , 然后将即将执行的进程 (next) 描述符的 cpu_contex 的 x19-x28 , fp,sp,pc 恢复到相应寄存器中 , 而且将 next 进程的进程描述符 task_struct 地址存放在 sp_el0 中 , 用于通过 current 找到当前进程 , 这样就完成了处理器的状态切换 。
【彻底理解Linux 进程调度所有知识点】
推荐阅读
- 黑客如何搭建和使用VMware和Kali Linux使用环境?
- 彻底搞懂Java线程池的工作原理
- 电脑鼠标右键菜单管理及彻底删除方法技巧
- Kali Linux,一个你欲罢不能的东西,非专业勿入
- Linux 命令总结
- 50个应知必会的Linux常识和操作
- 详细解析Linux /etc/passwd文件
- Linux系统安全攻防技术
- Linux 怎么修改最大文件打开数量?
- Linux经典面试题:网卡接收数据后,经过几次拷贝才能到用户进程
