您的位置:首页 > 运维架构 > Linux

读深入理解Linux内核 (第7章 进程调度)

2016-09-30 21:06 507 查看

调度策略

Linux里面,进程优先级是动态的。固然一开始有一个初始优先级,如果该进程长时间没有得到时间片,那么它的优先级会不断提高。类似,运行很长时间的进程,优先级会减低。

调度算法

schedule()函数实现调度。它在运行队列中找到一个进程,然后切换到其上运行。schedule()主要在以下情况下被调用:

1. 直接调用

进程为了等待某个资源,或休眠而直接调用schedule()函数

2. 间接调用(LazyInvocation)

每次进程从内核态切换回用户态(从例外Exception返回),会检查进程是否有被设置TIF_NEED_RESCHED标志,如果有设置,则调用schedule()函数换出。

那么,进程何时被设置TIF_NEED_RESCHED,比如

2.1 定时器中断会检查当前进程已使用的时间,如果用光了,则设置该标志,以便返回用户态时被换出。

2.2 当一个进程被换醒,而且它的优先级比当前进程的优先级高,那么当前进程会被设置该标志。

2.3 通过系统调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息