作业八:进程调度时机跟踪分析进程调度与进程切换的过程
作业八:进程的调度时机与进程的切换
一、进程调度的时机
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上下文的切换 进程调度过程中:有一个进程上下文的切换,从一个进程的内核态堆栈切换到另一个进程的内核态堆栈。