作业八:进程调度时机跟踪分析进程调度与进程切换的过程

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


一、进程调度的时机

  

      

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 ”,博客内容的具体要求如下:

原文地址:https://www.cnblogs.com/zhengwei0712/p/5384101.html