理解进程调度时机跟踪分析进程调度与进程切换的过程-基于实验楼

理解进程调度时机跟踪分析进程调度与进程切换的过程

进程调度

schedule函数

Linux内核通过schedule函数来实现进程的调度,schedule详细代码见代码。schedule函数在运行队列中找到一个进程并将CPU分配给它。换句话说调用schedule函数一次就是进程调度一次。
在这里插入图片描述
进程调度有两种方法
方法1是进程主动调用schedule(),如进程调用阻塞的系统调用等待外设或主动睡眠等,最终都会在内核中调用到schedule函数。
方法2是松散调用,内核代码可以随时调用schedule()使当前内核路径(中断处理程序或内核线程)让出CPU,也会根据need_resched标记做进程调度,内核会在适当的时机检测need_resched标记,决定是否调用schedule()函数。

进程调度时机

进程调度的时机其实就是内核调用schedule函数的时机,当内核 返回用户空间时,内核会检查need_resched标志是否设置,如果设置,调用schedule函数,此时是从中断(系统调用等)处理程序返回用户空间的时间点作为一个固定的调度时机点。
除了调度时机点外,内核线程和中断处理程序中任何需要暂时中止当前执行路径的位置都可以直接调用schedule(),比如等待某个资源就绪。
总结进程调度的时机:

  1. 用户进程通过特定的系统调用主动让出CPU
  2. 中断处理程序在内核返回用户态时进行调度
  3. 内核线程主动调用schedule函数让出CPU
  4. 中断处理程序主动调用schedule函数让出CPU,这里涵盖了第一种和第二种情况。

需要注意的是Linux中没有线程的概念,本质上都是进程,数据结构都是PCB task_struct。 Linux系统在用户态实现的线程库pthread是通过在内核中多个进程共享一个地址空间实现的。

gdb调试schedule()函数

这里使用了实验楼的平台,首先下载menu以便后面的调试,menu地址为menu
在这里插入图片描述
因为Makefile已经写好了,所以直接重新编译即可,可以使用命令

// An highlighted block
make rootfs

在这里插入图片描述
现在要使用gdb进行远程调试

cd ..
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S 

使其停止方便调试,然后打开另一个终端

cd ~/LinuxKernel/linux-3.18.6
gdb
file vmlinux
target remote:1234

在这里插入图片描述
现在插入四个断点

b schedule
b context_switch
b switch_to
b pick_next_task

在这里插入图片描述
注意这里的switch_to是一段内嵌汇编
在这里插入图片描述
可以看到运行到schedule()停了下来
在这里插入图片描述
在这里插入图片描述
可以看到pick_next_task和context_with函数。
schedule函数是进程调度的主体函数,pick_next_task是负责根据调度策略和调度算法选择下一个进程,context_switch函数schedule函数中实现进程切换的函数。switch_to是context_switch函数进行进程关键上下文切换的函数。

注意创建子进程的系统调用在子进程中执行起点和返回用户态情况较特殊,fork一个子进程,子进程不是从switch_to中标号1开始执行,而是从ret_from_fork开始执行

总结

这个实验学到了进程的调度,对于Linux其实没有线程的概念,本质上来说都是进程,进程调度就非常重要。Linux的内核调度是schedule()来进行进程调度,使用context_switch来进行进程上下文的切换,使用switch_to来进行进程关键上下文的切换。(这个switch_to是一段内嵌汇编)。

如有错误,请各位大佬纠正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值