- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第章 Linux进程调度
* * SCHED_FIFO 与 SCHED_RR 的区别是: 当进程的调度策略为前者时,当前实时进程将一直占用 CPU 直至自动退出,除非有更紧迫的、 优先级更高的实时进程需要运行时,它才会被抢占 CPU;当进程的调度策略 为后者时,它与其它实时进程以实时轮流算法去共同使用 CPU,用完时间片放到运行队列尾部。 FIFI:运行时间较短 RR:运行时间较长 Sched——YIELD:不是调度策略,表示进程让出CPU * Linux是一个抢占式的多任务操作系统,由Linux调度程序决定何时抢占,然后选择哪个进程。 * FIFI:运行时间较短 RR:运行时间较长 * * 在某个时刻,运行队列中的每一个进程都有一个counter数值,当运行队列中的进程的counter都变成0后,表明一轮已经结束,每一个进程的counter 根据各自的nice 重新赋值,然后开始新的一轮的执行过程。占有cpu的进程每一次时钟中断时,counter的数值减1。(Linux2.4) * 调度策略为非SCHED_FIFO的每个进程都有一个运行的时间配额counter 有cpu的进程每一次时钟中断时,counter的数值减1。(Linux2.4) 在某个时刻,运行队列中的每一个进程都有一个counter数值,当运行队列中的进程的counter都变成0后,表明一轮已经结束,每一个进程的counter 根据各自的nice 重新赋值,然后开始新的一轮的执行过程。占有cpu的进程每一次时钟中断时,counter的数值减1。(Linux2.4) * 调度策略为非SCHED_FIFO的每个进程都有一个运行的时间配额counter 有cpu的进程每一次时钟中断时,counter的数值减1。(Linux2.4) 在某个时刻,运行队列中的每一个进程都有一个counter数值,当运行队列中的进程的counter都变成0后,表明一轮已经结束,每一个进程的counter 根据各自的nice 重新赋值,然后开始新的一轮的执行过程。占有cpu的进程每一次时钟中断时,counter的数值减1。(Linux2.4) * 进程首次运行时为进程优先级的数值,它随时间变化递减.它的值的含义表示进程处于运行状态时所剩余的时钟滴答数,每次时钟中断到来时,这个值就减1。当它为0时,就把need_resched域置1。 priority:进程的“静态优先级”,它的值就是counter的初值。在Linux2.4版本中取消了这个变量,但是它所代表的默认值20还作为常数继续使用。即进程的静态优先数是20。只有sys_nice( )、sys_setpriority( )系统调用能改变进程静态优先级; * * * * 其中进程的切换是利用switch_to()宏来实现的,它是一个硬件平台相关的代码段,过程很复杂 对于实时进程,其权重为1000+rt_priority;否则,权重为counter。 对于当前进程,可以得到比其它进程稍高的权重,为counter+1。 这样处理是为了在某个进程与当前进程权重相同时可选择当前进程继续执行,以减少进程切换的开销。 * 如果进入调度后,当前普通进程的时间片没有用完,而且仍然位于可运行队列中时,当前进程的权值采用公式(4.3)计算,除了当前进程之外的所有普通进程仍采用公式(4.2)计算权值。 goodness=counter+priority+1 (4.3) 这样,适当增大当前进程的权值,以增加继续使用处理机的可能,可以避免过分频繁的进程切换。 新的普通进程进入可运行队列后,插入到队列尾部,将引起调度,在都使用相同静态优先级的情况下,新进程的权值很大,因此,如果没有实时进程和其他一直未执行过的就绪进程,新建进程投入执行的可能性相当大。可见,Linux系统所采用的这种调度算法优先保证交互性,系统的响应时间比较短。 * 整个调度过程大概可以分为五个部分。首先检测中断,如果有中断运行时,调度过程到此为止,直接退出,如果没有中断运行,关中断,在调度的过程中将不再允许中断。其次处理系统的内核例程。然后对当前进程做相关处理:如果当前进程是时间片用完的进程按照轮转法调度,系统重新赋予时间片并把它移到队列的尾部;如果进程因为等待某个事件而转入等待状态引起调度,调度过程中发现事件已经发生,进程仍然转入就绪状态;如果进程处于其他非可运行态的话,就要从可运行队列中删除。这些都是为开始调度而进行的准备工作。 * * * * Linux并不为这三种调度策略的进程分别设置一个运行队列,而是通过权重的不同计算以及其它的一些队列操作,在一个运行队列中实现这三种不同的调度。 发生进程调度时,调度程序要在运行队列中选择一个
文档评论(0)