进程的调度

进程的调度策略

调度策略:一组规则,决定什么时候以怎样的方式选择一个新进程运行。

Linux的调度基于分时和优先级,进程根据优先级来排队

优先级是动态的

进程调度的时机:

  • 中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule();

  • 内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度;

  • 用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度。

内核线程是只有内核态没有用户态的特殊进程。

进程的切换

进程的切换:挂起正在cpu上正在执行的进程,并恢复以前挂起的某个进程的执行,也叫任务切换。

中断上下文的切换是在同一个进程中的。

进程上下文包含了进程执行的所有信息:

     用户地址空间;程序代码,数据,用户堆栈等等

      控制信息:进程描述符,内核堆栈等

      硬件上下文:使用switch_to函数,而中断仅仅只是保存现场和恢复现场

schedule()函数选择一个新的进程来运行,并调用context_switch进行上下文的切换,这个宏调用switch_to来进行关键上下文切换

 

posted @ 2016-04-12 16:14  ceibaf  阅读(223)  评论(0编辑  收藏  举报