《linux内核原理与分析》第九周作业
这个作业属于哪个课程 | 2020-2021-1 Linux内核原理与分析 |
这个作业要求在哪里 | 2020-2021-1Linux内核原理与分析第六周作业 |
这个作业的目标 | 了解进程的切换和linux系统的一般执行过程 |
作业正文 | 本博客链接 |
目录
一、实验:进程切换
首先,下载相关的文件,启动内核程序
然后,进入内核的调试界面,然后使用gdb进行调试,连接1234端口,然后添加断点
运行,并查看详细代码
二、总结
中断:
- 中断概念
中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。中断在计算机多任务处理,尤其是实时系统中尤为有用。这样的系统,包括运行于其上的操作系统,也被称为“中断驱动的”(interrupt-driven)。
中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作,这些引起中断的事件称为中断源,它们可能是来自外设的输入输出请求,也可能是计算机的一些异常事故或其它内部原因。
中断分为硬中断和软中断,硬中断又可分为内中断和外中断。
内中断:即程序运行错误引起的中断
外中断:即由外部设备、接口卡引起的中断
软件中断:由写在程序中的语句引起的中断程序的执行,称为软件中断
进程调度的时机
中断发生时,进入中断处理中断服务程序——比如我们前面讲的系统调用,会直接调用schedule(),或者返回用户态时根据need_resched标志调用schedule
内核线程可以直接调用schedule(),从而主动调度。
用户态进程无法调用到内存函数schedule,所以他是无法进行主动调度的,他只能由于某些原因导致陷入内核态时才会被调度——比如中断。
先是由schedule()->_schedule()->pick_next_task(),其中pick_next_task()中封装了进程调度算法,返回下一个需要调度的进程
当找到需要调度的函数后,通过调用context_switch->switch_to来进行进程的切换
上下文:
进程上下文是描述进程的信息,包括当前进程的寄存器内容以及内存页表详细信息等。在发生中断时,进程上下文被保存,在内核态下执行中断服务例程,同时会保留所有要用到的资源,以备恢复时使用。