通过gdb跟踪进程调度分析进程切换的过程

作者:吴乐 山东师范大学

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

本实验目的:通过gdb在linux下对一个简单的命令行命令实现进程的过程进行跟踪,分析一般用户进程实现进程切换的过程,并进一步剖析进程调度的工作的原理。

一、实验过程

1、打开实验环境,并设置context_switch和pick_next_switch两个断点。

2、来到第二个断点处list(分析在第三部分)

3、到第一个断点处,在这里进行进程的切换

4、找到schedule()函数的主体,可以按步入进入,后面的过程不再一一赘述。

二、schedule()部分关键代码分析

1、schedule()代码截取

prev->sched_class->put_prev_task(rq, prev);
        next = pick_next_task(rq, prev);

        if (likely(prev != next)) {
                sched_info_switch(prev, next);

                rq->nr_switches++;
                rq->curr = next;
                ++*switch_count;

                context_switch(rq, prev, next); /* unlocks the rq */
                /*
                 * the context switch might have flipped the stack from under
                 * us, hence refresh the local variables.
                 */
                cpu = smp_processor_id();
                rq = cpu_rq(cpu);
        } else
                spin_unlock_irq(&rq->lock);

 

  其中不难发现第一句中的prev在之前被赋值为rq->curr,因此是当前运行队列正在运行的进程。从字面看是将

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值