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

本文探讨了Linux内核中进程调度的时机,包括中断处理和内核线程如何触发调度。通过分析schedule函数,理解了其在运行队列中选择进程并进行上下文切换的过程。同时,介绍了中断上下文与进程上下文的区别,并通过gdb跟踪schedule函数,验证了进程切换的实际操作。最后,提到了几种特殊情况,如内核线程间的切换和特定系统调用的影响。
摘要由CSDN通过智能技术生成

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


进程调度的时机主要有以下几个: 
- 中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(); 
- 内核线程(只有内核态没有用户态的特殊进程)可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度; 
用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度。

不难看出,无论是中断处理过程,还是内核线程进行进程调度,都需要调用schedule函数(一个内核函数,不是系统调用)实现。

schedule函数的作用:在运行队列中找到一个进程,把cpu分配给他。

进程上下文切换过程:

进程上下文切换与中断上下文切换的区别:

  • 中断前后是在同一个进程上下文中,只是由用户态转向内核态执行;

  • 进程上下文包含了进程执行需要的所有信息

    • 用户地址空间: 包括程序代码,数据,用户堆栈等

    • 控制信息 :进程描述符,内核堆栈等

    • 硬件上下文(注意中断也要保存硬件上下文只是保存的方法不同)

相关代码分析:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值