2020-2021-1 20209305 《Linux内核原理与分析》第九周作业

作业信息

这个作业属于哪个课程 <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
  函数中进程关键上下文切换的函数。
原文地址:https://www.cnblogs.com/baoxiyuan/p/14063256.html