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实现快速排序
    java实现二叉树
    hudson——持续集成
    Oracle存储过程的数组参数
    在linux系统下建立artifactory管理maven库
    关于排错:专注思考,细心观察,步步为营
    在关键字'('附近有语法错误 Incorrect syntax near '(' in sql server table values function
    快速将PSD文件生成WordPress主题模板Divine
    SQLserver 复制分发( 发布与订阅) 疑难杂症 Replication (Publications,Subscriptions)
    Windows8将撼动笔记本电脑市场?
  • 原文地址:https://www.cnblogs.com/houyunzhe/p/14092103.html
Copyright © 2011-2022 走看看