linux内核分析第八次实验

时间:2021-10-30 20:47:41

20135118 罗鹏越

本周学习的是linux内核中的进程调度,之前我们在操作系统中有讲解进程调度的分类,以及一些调度算法。而linux中的进程调度有所不同,首先老师讲解了进程调度和进程调度的时机,所有的用户态进程都只能被调度,而内核线程可以主动调度,而进程调度的实现都是通过schedule函数,然后讲解了进程上下文所包含的信息,然后讲解了切换寄存器状态所使用的switch to函数,每一个部分都单独分析了。然后讲解了LINUX架构和执行过程。虽然在操作系统中讲解过了进程调度,但是这个讲解得更加深入,是从内核的角度讲解了调度的原理,和执行过程。

开始实验:

linux内核分析第八次实验

linux内核分析第八次实验
linux内核分析第八次实验

按c继续,可以发现core.c里面调用了schedule()。

linux内核分析第八次实验

单步执行发现__schedule()
linux内核分析第八次实验

继续单步执行,直到发现context_switch:

linux内核分析第八次实验

之后继续执行,可以进入context_switch()函数并发现了switch_to()和__switch_to()
linux内核分析第八次实验

linux系统的一般执行过程

  • 正在运行
  • 发生中断,可能陷入内核,CPU自动保存加载
  • SAVE_ALL保存现场
  • 调用schedule,switch_to进程上下文切换
  • 标号1之后运行Y(之前有进行准备动作)
  • restore_all恢复现场
  • 继续运行用户态进程Y