这个作业属于哪个课程 | <2020-2021-1Linux内核原理与分析)> |
---|---|
这个作业要求在哪里 | <2020-2021-1Linux内核原理与分析第九周作业> |
这个作业的目标 | <了解进程的切换和linux系统的一般执行过程> |
作业正文 | https://www.cnblogs.com/dyyblog/p/14074473.html |
知识总结
一.硬中断和软中断
- 中断:在本质上都是软件或者硬件发生了某种情形而通知处理器的行为,处理器进而停止正在运行的指令流(当前进程),对这些通知做出相应的反应,即转去执行预定义的中断处理程序(内核代码)。
- 硬中断:就是CPU的两根引脚(可屏蔽中断和不可屏蔽中断)。
- 软中断/异常:包括除零错误、系统调用、调试断点等在CPU执行命令过程中发生的各种特殊情况统称为异常。异常会导致程序无法继续执行,而跳转到CPU预设的处理函数。异常分为以下三种:
- 故障:出现问题,可以恢复到当前指令。
- 退出:不可恢复的严重故障,导致程序无法继续运行,只能退出。
- 陷阱:程序主动产生的异常。
二.进程调度时机
- schedule()函数:Linux内核通过schedule函数实现进程调度。调用schedule函数一次就是调度一次,调用schedule函数的时候就是进程调度的时机。调度schedule()函数的两种方法:
进程主动调用schedule():如果进程调用阻塞的系统调用等待外设或主动睡眠等,最终都会在内核中调用到schedule函数。
松散调用:内核代码中可以随时调用schedule()函数使当前内核路径让出CPU;也会根据need_resched标记做进程调度,内核检测到need_resched决定是否调用schedule函数。 - 上下文:一般来说,CPU在任何时刻都处于以下三种情况之一
运行于用户空间,执行用户进程上下文;
运行于内核空间,处于进程(一般是内核线程)上下文;
运行于内核空间,处于中断(中断处理程序ISR,包括系统调用处理过程)上下文。 - 进程调度时机就是内核调用schedule()函数的时机。 进程调度时机情况总结如下:
用户进程通过特定的系统调用主动让出CPU;
中断处理程序在内核返回用户态时进行调度;
内核线程主动调用schedule函数让出CPU;
中断处理程序主动调用schedule函数让出CPU(包括以上两点)。
2.调度策略和算法
三.Linux系统的运行过程
1)正在运行的用户态X。
2)发生中断(包括异常、系统调用)。
3)保护现场,此时完成上下文切换。
4)中断处理过程中或中断返回前调用schedule函数,其中switch_to做了关键进程上下文切换。
5)运行用户态进程Y。
6)恢复现场。
7)完成中断上下文切换,从进程Y内核态返回到进程Y的用户态。
8)继续运行用户态进程Y。
实验过程
![](https://img2020.cnblogs.com/blog/2168504/202012/2168504-20201202161639786-1965090985.png)