进程调度相关
进程调度
- 调度时机
-
中断处理过程(时钟中断、IO中断、系统调用和异常)中直接调用schedule(),或者返回用户态时,通过检查need_scheduled的标志来调用schedule()。
-
用户态进程只能
被动调度
;内核线程可以直接调用schedule()进行进行进程切换,也可以在中断处理过程中进行调度,也就是既支持主动调度
又支持被动调度
。
-
- 进程切换过程
- 挂起CPU上执行的进程,与中断保存现场是不同的,中断前后是在同一个进程上下文中,只是由用户态转向了内核态执行。
- 进程上下文包含了进程执行所需要的所有信息:用户地址空间(程序代码,数据,用户堆栈等)、控制信息(进程描述符,内核堆栈)、硬件上下文(与中断保存硬件上下文方法不同)
schedue()
函数选择一个新的进程来运行,并调用context_switch
进行上下文切换,这个宏调用switch_to(汇编代码)
来进行关键上下文切换