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

作业信息

这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)>
这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业>
这个作业的目标 <跟踪分析进程调度的时机和进程切换的过程>
作业正文 ... 本博客链接

实验过程

1、配置运行MenuOS系统;


2、启动gdb,在schedule、context_switch、pick_next_task函数处设置断点;

3、按c继续运行,并使用list命令查看断点处代码。


学习收获

1、一般将进程分为三种,一种为I/O消耗型进程,另一种是处理器消耗型进程,还有一种是混合型,也就是I/O消耗型进程和处理器消耗型进程混合在一起的。
从他们的名字可以看出,这是以进程消耗资源的种类来进行分类的。
在Linux系统中,是按照什么规则来进行调度的呢?我们所知的有优先级调度,还有时间片调度。其中优先级指的是进程的优先级,而时间片则指的是进程所需要消耗的时间。
那么Linux系统中进程调度的流程主要是以下几个方面
1.从schedule()函数开始,进行调度选择
2.从CPU的值变化上,解读switch_to宏执行分析
3.到堆栈发生切换位置,在切换堆栈前后,current_thread_info变化
4.再到地址空间发生切换,解释地址空间的切换不会影响后续切换代码的执行
5.Current宏代表的进程发生变化的源码位置
6.任务状态段中关于内核堆栈的信息发生变化的源码位置

2、在Linux内核中,schedule()函数选择一个新的进程来运行,并调用context_switch进行上下文的切换,这个宏调用switch_to来进行关键上下文切换。
部分函数具体代码如下,一个调度新进程,一个是进行上下文切换,还有相关堆栈信息的保存。
(1)next= pick_next_task(rq, prev);//进程调度算法都封装这个函数内部
(2)context_switch(rq,prev, next);//进程上下文切换
(3)switch_to利用了prev和next两个参数:prev指向当前进程,next指向被调度的进程

Schedule:主要负责帮助系统选定下一个执行的进程
调度时机:
1.进程状态转换的时刻,进程终止、进程睡眠。
2.当前进程的时间片用完时。
3.设备驱动程序调用。
4.进程从中断、异常及系统调用返回到用户态时。

posted @ 2020-12-06 10:46  侯蕴哲  阅读(63)  评论(0编辑  收藏  举报