嵌入式linux内核开发教程之深入分析linux内核源码-进程调度

嵌入式linux内核开发教程之深入分析linux内核源码-进程调度

ID:27438757

大小:2.64 MB

页数:22页

时间:2018-12-02

嵌入式linux内核开发教程之深入分析linux内核源码-进程调度_第1页
嵌入式linux内核开发教程之深入分析linux内核源码-进程调度_第2页
嵌入式linux内核开发教程之深入分析linux内核源码-进程调度_第3页
嵌入式linux内核开发教程之深入分析linux内核源码-进程调度_第4页
嵌入式linux内核开发教程之深入分析linux内核源码-进程调度_第5页
资源描述:

《嵌入式linux内核开发教程之深入分析linux内核源码-进程调度》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、嵌入式Linux开发教程之Linux内核-进程调度(2)Linux的调度程序-Schedule()3.1基本原理1.时间片轮转调度算法2.优先权调度算法3.多级反馈队列调度4.实时调度3.2Linux进程调度时机三个函数是如何协调工作的3.3进程调度的依据3.4进程可运行程度的衡量3.1基本原理调度的实质就是资源的分配。系统通过不同的调度算法(SchedulingAlgorithm)来实现这种资源的分配。通常来说,选择什么样的调度算法取决于的资源分配的策略(SchedulingPolicy),在这里只说明与Linux调度相关的几种算法及这些算法的原理。一个好的调度算法应

2、当考虑以下几个方面:(1)公平:保证每个进程得到合理的CPU时间。(2)高效:使CPU保持忙碌状态,即总是有进程在CPU上运行嵌入式Linux内核开发教程之Linux的调度程序-Schedule()(3)响应时间:使交互用户的响应时间尽可能短。(4)周转时间:使批处理用户等待输出的时间尽可能短。(5)吞吐量:使单位时间内处理的进程数量尽可能多。很显然,这5个目标不可能同时达到,所以,不同的操作系统会在这几个方面中作出相应的取舍,从而确定自己的调度算法,例如UNIX采用动态优先数调度、BSD采用多级反馈队列调度、Windows采用抢先多任务调度等等。嵌入式Linux内核开

3、发教程下面来了解一下主要的调度算法及其基本原理:1.时间片轮转调度算法时间片(TimeSlice)就是分配给进程运行的一段时间。在通常的轮转法中,系统将所有的可运行(即就绪)进程按先来先服务的原则,排成一个队列,每次调度时把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,系统发出信号,通知调度程序,调度程序便据此信号来停止该进程的执行,并将它送到运行队列的末尾,等待下一次执行;然后,把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证运行队列中的所有进程,在一个给定的时间内,均能获得一时间片的处理机执行时间。嵌入式Linux内

4、核开发教程之1.时间片轮转调度算法为了照顾到紧迫型进程在进入系统后便能获得优先处理,引入了最高优先权调度算法。当将该算法用于进程调度时,系统将把处理机分配给运行队列中优先权最高的进程,这时,又可进一步把该算法分成两种方式:(1)非抢占式优先权算法(又称不可剥夺调度:NonpreemptiveScheduling)在这种方式下,系统一旦将处理机(CPU)分配给运行队列中优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统方可将处理机分配给另一个优先权高的进程。这种调度算法主要用于批处理系统中,也可用于某些对实时性要求不严的实时系统中

5、。嵌入式Linux内核开发教程之2.优先权调度算法(2)抢占式优先权调度算法(又称可剥夺调度:PreemptiveScheduling)该算法的本质就是系统中当前运行的进程永远是可运行进程中优先权最高的那个。在采用这种调度算法时,每当出现一新的可运行进程,就将它和当前运行进程进行优先权比较,如果高于当前进程,将触发进程调度。这种方式的优先权调度算法,能更好的满足紧迫进程的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。Linux也采用这种调度算法。嵌入式Linux内核开发教程这是时下最时髦的一种调度算法。其本质是:综合了时间片轮转调度和

6、抢占式优先权调度的优点,即:优先权高的进程先运行给定的时间片,相同优先权的进程轮流运行给定的时间片。嵌入式Linux内核开发教程之3.多级反馈队列调度最后我们来看一下实时系统中的调度。什么叫实时系统,就是系统对外部事件有求必应、尽快响应。在实时系统中,广泛采用抢占调度方式,特别是对于那些要求严格的实时系统。因为这种调度方式既具有较大的灵活性,又能获得很小的调度延迟;但是这种调度方式也比较复杂。嵌入式Linux内核开发教程之4.实时调度Linux的调度程序是一个叫Schedule()的函数,这个函数被调用的频率很高,由它来决定是否要进行进程的切换,如果要切换的话,切换到哪

7、个进程等等。我们先来看在什么情况下要执行调度程序,我们把这种情况叫做调度时机。Linux调度时机主要有:1、进程状态转换的时刻:进程终止、进程睡眠;2、当前进程的时间片用完时(current->counter=0);3、设备驱动程序主动调用schedule;嵌入式Linux内核开发教程之3.2Linux进程调度时机4、进程从中断、异常及系统调用返回到用户态时;时机1,进程要调用sleep()或exit()等函数进行状态转换,这些函数会主动调用调度程序进行进程调度;时机2,由于进程的时间片是由时钟中断来更新的,因此,这种情况和时机4是一样的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。