zoukankan      html  css  js  c++  java
  • 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.进程从中断、异常及系统调用返回到用户态时。

  • 相关阅读:
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    8.4 确定两个日期之间的月份数或年数
    (Java实现) 洛谷 P1553 数字反转(升级版)
  • 原文地址:https://www.cnblogs.com/houyunzhe/p/14092103.html
Copyright © 2011-2022 走看看