20135118 罗鹏越
本周学习的是linux内核中的进程调度,之前我们在操作系统中有讲解进程调度的分类,以及一些调度算法。而linux中的进程调度有所不同,首先老师讲解了进程调度和进程调度的时机,所有的用户态进程都只能被调度,而内核线程可以主动调度,而进程调度的实现都是通过schedule函数,然后讲解了进程上下文所包含的信息,然后讲解了切换寄存器状态所使用的switch to函数,每一个部分都单独分析了。然后讲解了LINUX架构和执行过程。虽然在操作系统中讲解过了进程调度,但是这个讲解得更加深入,是从内核的角度讲解了调度的原理,和执行过程。
开始实验:
按c继续,可以发现core.c里面调用了schedule()。
单步执行发现__schedule()
继续单步执行,直到发现context_switch:
之后继续执行,可以进入context_switch()函数并发现了switch_to()和__switch_to()
linux系统的一般执行过程
- 正在运行
- 发生中断,可能陷入内核,CPU自动保存加载
- SAVE_ALL保存现场
- 调用schedule,switch_to进程上下文切换
- 标号1之后运行Y(之前有进行准备动作)
- restore_all恢复现场
- 继续运行用户态进程Y
时间: 2024-10-31 00:01:05