- 1、本文档共37页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * 从设计层面来总结Linux进程调度一些设计思想: 把进程抽象成进程描述符task_struct:包含进程所必需的数据,如状态信息、调度信息、优先级信息、内存页信息等。 把需要调度的东西抽象成调度实体sched_entity:调度实体可以是进程、进程组、用户等。这里包含负载权重值、对应红黑树结点、虚拟运行时vruntime等。 把调度策略(算法)抽象成调度类sched_class:包含一组通用的调度操作接口,将接口和实现分离。你可以根据这组接口实现不同的调度算法,使得一个Linux调度程序可以有多个不同的调度策略。 把调度的组织抽象成可运行队列rq:包含自旋锁、进程数量、用于公平调度的CFS信息结构、当前正在运行的进程描述符等。实际的进程队列用红黑树来维护(通过CFS信息结构来访问)。 把CFS调度的运行队列信息抽象成cfs_rq运行队列:包含红黑树的根结点、正在运行的进程指针、用于负载平衡的叶子队列等。 * 4.6 抢占和上下文切换 上下文切换:从一个可执行进程切换到另一个可执行进程 kernel/shced.c中的context_switch()函数,每当有新进程准备投入使用时,此函数被shedule()调用完成以下基本工作: 把虚拟内存从上一个进程映射切换到新进程中 从上一个进程的处理器状态切换到新进程的处理器状态,包括:保存、恢复栈信息和寄存器信息及其它信息 * 内核提供need_resched标志来表明是否需要 重新执行一次调度。当某个进程应该被抢占或一个优先级高的进程进入可执行状态时,都会设置此标志。 * 抢占分为: 用户抢占:内核即将返回用户空间时,如果need_resched标志(此标志位表明是否要重新执行一次调度)被设置,会导致schedule()被调用,发生用户抢占 从系统调用返回到用户空间时 从中断处理程序返回到用户空间时 * 内核抢占:在重新调度是安全的情况下(没有持有锁),内核可以在任何时间抢占正在执行的任务 中断处理程序正在执行,且返回内核空间之前 内核代码再一次具有可抢占性的时候 如果内核中的任务显式地调用schedule() 如果内核中的任务阻塞 * 4.7 实时调度策略 SCHED_FIFO:实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃 SCHED_RR:实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平Linux线程优先级设置 O(1)对多处理器表现良好,但对时间敏感的程序表现不足 * * 4 进程调度 * 4.1 多任务 多任务操作系统:同时并发地交互执行多个进程的操作系 统。无论是单处理器或多处理器上,多任务操作系统都能使 多个进程处于堵塞或者睡眠状态。即实际不被投入执行,直 到工作确实就绪,这些任务尽管位于内存,但并不处于可运 行状态。 * 多任务系统分为:非抢占式多任务和抢占式多任务 Linux提供了抢占式的多任务模式,在此模式下,由调度程序 来决定什么时候停止一个进程的运行以便其他进程能够得到 执行机会。这个强制的挂起动作就叫做抢占(preemption)。 进程在被抢占之前能够运行的时间是预先设置好的,而且有 一个专门的名字,叫进程的时间片(timeslice)。时间片实际 上就是分配给每个进程的处理器时间段。有效管理时间片能 使调度程序从系统全局的角度做出调度决定,这样做还可以 避免个别进程独占系统资源。 非抢占式多模式下,除非进程自己主动停止运行,否则它会 一直执行。 * 4.2 Linux的进程调度 调度程序的基本工作:在一组处于可运行状态的进程中选择一个来执行。 UNIX: O(1),适用于服务器 Linux 2.6: 完全公平调度算法(CFS),提高对交互程序的调度性能 * 4.3 策略 定义:决定调度程序在何时让什么进程运行。 进程分类:I/O消耗型和处理器消耗型的进程 I/O消耗型:进程大部分时间用来提交I/O请求或等待 I/O请求 例:用户图形界面程序属于I/O密集型 处理器消耗型:多数时间用在执行代码上。例:执行数 学计算的程序,如MATLAB 调度策略的目的:进程响应迅速和最大系统利用率 Linux为了保证交互式应用,更倾向于优先调度I/O消耗型进程。 * 调度策略定义 在include/linux/sched.h中有如下定义: #define SCHED_NORMAL 0 // 默认类型,普通的用户进程,动态优先调度策略 #define SCHED_FIFO 1 // 实时进程,先进先出调度规则 #defin
文档评论(0)