作业信息
这个作业属于哪个课程 | <2020-2021-1Linux内核原理与分析)> |
---|---|
这个作业要求在哪里 | <2020-2021-1Linux内核原理与分析第九周作业> |
这个作业的目标 | <理解进程调度时机跟踪分析进程调度与进程切换的过程> |
作业正文 | https://www.cnblogs.com/baoxiyuan/p/14063256.html |
1.硬中断和软中断
硬中断就是CPU的两根引脚(可屏蔽中断和不可屏蔽中断)。CPU在执行每条指令后检测这两根引脚的电平,如果是高电平,说明有中断请求,CPU就会中断当前程序的执行
去处理中断。一般外设都是以这种方式与CPU进行信号传递的。
软中断/异常:包括除零错误、系统调用、调试断点等在CPU执行指令过程中发生的各种特殊情况统称为异常。异常会导致程序无法继续执行,而跳到CPU预设的处理函数。
异常分为3种:
故障:除0错误、缺页中断。
退出:不可恢复的严重故障,导致程序无法继续运行。
陷阱:程序主动产生的异常,在执行当前指令后发生。
2.进程调度的时
(1)中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule();
(2)内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度;
(3)用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度。
3.Linux系统执行过程中的几种特殊情况
1、通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换,与最一般的情况非常类似,只是内核线程运行过程中发生中断没
有进程用户态和内核态的转换;
2、用户进程向内核线程切换。内核现场不需要从内核态返回到用户态,省略了恢复现场和iret恢复CPU上下文。
3、内核线程向用户进程的切换。内核线程主动调用schedule(),只有进程上下文的切换,没有发生中断上下文的切换,与最一般的情况略简略;
4、创建子进程的系统调用在子进程中的执行起点及返回用户态,如fork;
5、加载一个新的可执行程序后返回到用户态的情况,如execve;
4.理解进程调度时机跟踪分析进程调度与进程切换的过程
5.schedule()函数作用
schedule函数是进程调度的主体函数。其中pick_next_task函数是schedule函数中重要的函数,负责根据调度策略和调度算法选择下一个进程.
context_switch函数是schedule函数中实现进程切换的函数,context_switch函数是schedule函数中实现进程切换的函数,switch_to是context_switch
函数中进程关键上下文切换的函数。