zoukankan      html  css  js  c++  java
  • 作业八:进程调度时机跟踪分析进程调度与进程切换的过程

    作业八:进程的调度时机与进程的切换


    一、进程调度的时机

      

          

    1.分类一:

    I/O bound 频繁i/o,等待i/o的时候需要耗费时间;
    CPU bound 计算密集型 ,不适用于交互式进程。
    

      

    分类二:

    批处理
    实时
    交互式 ——shell
    

      

    二、使用gdb跟踪分析schedule()函数

         

       

        

        

    三、switch_to中的汇编代码

     

    中断和中断返回:有一个CPU上下文的切换
    进程调度过程中:有一个进程上下文的切换,从一个进程的内核态堆栈切换到另一个进程的内核态堆栈。
    

      

    movel %[next_sp],%%esp 即为修改堆栈指针,指向next进程的堆栈。
    在内核态中,栈顶指针减去8K偏移(两页)便可得到thread_info位置,从而,在切换后current_thread_info内容为切换后的新进程的thread_info内容。
    

    四、总结部分:Linux系统一般执行过程

    内核是各种中断处理过程和内核线程的集合
    
    (1)中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule();
    
    (2)内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度;
    
    (3)用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度。
    中断和中断返回:有一个CPU上下文的切换
    进程调度过程中:有一个进程上下文的切换,从一个进程的内核态堆栈切换到另一个进程的内核态堆栈。
    

      

      

    注明“郑伟 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”,博客内容的具体要求如下:

  • 相关阅读:
    laravel tinker的使用
    清空表中数据
    不要为过多思考浪费你的精力
    #tomcat#启动过程分析(上)
    #hashMap冲突原理#详细
    #数组集合知识#HashMap的实现原理
    #数据库#连接数据库的几个步骤
    #数据库#JDBC基础知识
    #数据库#查询语句 1=1的使用条件
    #tomcat#虚拟主机配置及访问(三)
  • 原文地址:https://www.cnblogs.com/zhengwei0712/p/5384101.html
Copyright © 2011-2022 走看看