4.3 进程调度_抢占和上下文切换 .
2011-12-05 09:40
162 查看
上下文切换,也就是从一个可执行进程切换到另一个可执行进程。
内核提供了一个need_resched标志来表明是否需要重新执行一次调度。再返回用户空间以及从中断返回的时候,内核也会检查need_resched标志。每个进程都包含一个need_resched标志,这是因为访问进程描述符内的数值要比访问一个全局变量快。
简而言之,用户抢占在以下情况时产生:
从系统调用返回用户空间。
从中断处理程序返回用户空间。
如果内核中的进程被阻塞了,或它显式地调用了schedule(),内核抢占也会显式地发生。这种形式的内核抢占从来都是受支持的,因为根本无需额外的逻辑来保证内核可以安全地被抢占。如果代码显式的调用了schedule(),那么它应该清楚自己是可以安全地被抢占的。
内核抢占会发生在:
当从中断处理程序正在执行,且返回内核空间之前。
当内核代码再一次具有可抢占性的时候。
如果内核中的任务显式的调用schedule()。
如果内核中的任务阻塞(这同样也会导致调用schedule())。
内核提供了一个need_resched标志来表明是否需要重新执行一次调度。再返回用户空间以及从中断返回的时候,内核也会检查need_resched标志。每个进程都包含一个need_resched标志,这是因为访问进程描述符内的数值要比访问一个全局变量快。
4.3.1 用户抢占
内核即将返回用户空间的时候,如果need_resched标志被设置,会导致schedule()被调用,此时就会发生用户抢占。在内核返回用户空间的时候,它知道自己是安全的,因为既然它可以继续去执行当前进程,那么它当然可以再去选择一个新的进程去执行。所以,内核无论是在从中断处理程序还是在系统调用后返回,都会检查need_resched标志。如果它被设置了,那么,内核会选择一个其他进程投入运行。简而言之,用户抢占在以下情况时产生:
从系统调用返回用户空间。
从中断处理程序返回用户空间。
4.3.2 内核抢占
只要没有持有锁,内核就可以进行抢占。锁是非抢占区域的标志。如果内核中的进程被阻塞了,或它显式地调用了schedule(),内核抢占也会显式地发生。这种形式的内核抢占从来都是受支持的,因为根本无需额外的逻辑来保证内核可以安全地被抢占。如果代码显式的调用了schedule(),那么它应该清楚自己是可以安全地被抢占的。
内核抢占会发生在:
当从中断处理程序正在执行,且返回内核空间之前。
当内核代码再一次具有可抢占性的时候。
如果内核中的任务显式的调用schedule()。
如果内核中的任务阻塞(这同样也会导致调用schedule())。
相关文章推荐
- 4.3 进程调度_抢占和上下文切换
- Linux 网络协议栈之内核锁(三)—— Linux内核抢占和进程调度总结
- 基于优先级抢占和周期调度的进程调度算法的模拟程序设计
- 进程调度、上下文切换
- Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度
- 抢占进程调度的原则
- Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十)
- 进程调度之linux 用户态抢占和内核态抢占
- linux进程调度 [分章]抢占
- Linux2.6--进程抢占和上下文切换
- Linux CFS调度器之唤醒抢占--Linux进程的管理与调度(三十)
- Linux2.6--进程抢占和上下文切换
- Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十)
- Linux2.6--进程抢占和上下文切换
- Linux2.6--进程抢占和上下文切换
- Linux唤醒抢占----Linux进程的管理与调度(二十三)
- 第四章 进程的调度
- 进程调度模拟程序 实验点评
- 操作系统 实验三 进程调度模拟程序
- 实验三 进程调度模拟程序