作业信息
这个作业属于哪个课程 | <2020-2021-1Linux内核原理与分析)> |
---|---|
这个作业要求在哪里 | <2020-2021-1Linux内核原理与分析第九周作业> |
这个作业的目标 | <理解进程调度的时机和进程切换的过程> |
作业正文 | 本博客链接 |
实验过程
更新menu文件夹
修改对应的makefile文件
进行相关调试
设置相关断点
b schedule
b context_switch
b switch_to
b pick_next_task
具体的调试过程
总结
硬中断和软中断
中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程
引起中断的事件称为中断源。中断源向CPU提出处理的请求称为中断请求。发生中断时被打断程序的暂停点称为断点。CPU暂停现行程序而转为响应中断请求的过程称为中断响应。处理中断源的程序称为中断处理程序。CPU执行有关的中断处理程序称为中断处理。而返回断点的过程称为中断返回。中断的实现由软件和硬件综合完成,硬件部分叫做硬件装置,软件部分称为软件处理程序
- 硬中断:由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。
- 软中断:为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成
异常
- 故障(Fault):出现问题,可以恢复到当前指令。
- 退出(Abort):不可恢复的严重故障,导致程序无法继续运行,只能退出。
- 陷阱(Trap):程序主动产生的异常。
调度策略与算法
进程分类:
- 交互式进程:大量人机交互,进程不断睡眠,对系统响应时间要求高
- 批处理进程:无需人机交互,后台运行,占用大量系统资源
- 实时进程:要求立即响应并执行
调度策略:
- SCHED_FIFO:先进先出,对所有相同优先级的进程,最先进入就绪队列的进程能优先获得调度
- SCHED_RR:比FIFO多个时间片,使得相同优先级的实时进程能够轮流获得调度,每次运行一个时间片
- SCHED_NORMAL:根据nice值计算占用cpu时间
Linux进程切换的一般执行过程
正在运行的用户态进程X切换到运行用户态进程Y
- 正在运行的用户态进程X
- 发生中断
- SAVE_ALL,保存现场
- 中断处理过程中或中断返回前调用了schedule()
- 标号1之后开始运行用户态进程Y。
- restore_all 恢复现场。
- iret - pop cs:eip/ss:esp/eflags 从Y进程的内核堆栈中弹出2.中硬件完成的压栈内容
- 继续运行用户态进程Y