- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux操作系统分析 Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512 xlanchen@ustc.edu.cn Autumn 2009 主要内容 进程描述符 进程切换 进程的创建和删除 进程调度 进程的分类 不同类型的进程有不同的调度需求 第一种分类: I/O-bound 频繁的进行I/O 通常会花费很多时间等待I/O操作的完成 CPU-bound 计算密集型 需要大量的CPU时间进行运算 第二种分类 交互式进程(interactive process) 需要经常与用户交互,因此要花很多时间等待用户输入操作 响应时间要快,平均延迟要低于50~150ms 典型的交互式程序:shell、文本编辑程序、图形应用程序等 批处理进程(batch process) 不必与用户交互,通常在后台运行 不必很快响应 典型的批处理程序:编译程序、科学计算 实时进程(real-time process) 有实时需求,不应被低优先级的进程阻塞 响应时间要短、要稳定 典型的实时进程:视频/音频、机械控制等 Linux中的进程调度 Linux既支持普通的分时进程,也支持实时进程 Linux中的调度是多种调度策略和调度算法的混合。 什么是调度策略? 是一组规则,它们决定什么时候以怎样的方式选择一个新进程运行 Linux的调度基于分时和优先级 随着版本的变化,分时技术在不断变化 Linux的进程根据优先级排队 根据特定的算法计算出进程的优先级,用一个值表示 这个值表示把进程如何适当的分配给CPU Linux中进程的优先级是动态的 调度程序会根据进程的行为周期性的调整进程的优先级 较长时间未分配到CPU的进程,通常↑ 已经在CPU上运行了较长时间的进程,通常↓ 与调度相关的系统调用 nice getpriority/setpriority sched_getscheduler/sched_setscheduler sched_getparam/sched_setparam sched_yield sched_get_priority_min/sched_get_priority_max sched_rr_get_interval 例如 又如 调度算法 Linux 2.4的调度算法 需要遍历可运行队列,算法O(n) Epoch,基本时间片,动态优先级 Linux 2.6.17的调度算法(2.6.23之前) 采用双队列(Active;expire ),按照优先级组队,O(1) Linux 2.6.26的调度算法 非实时:CFS,vruntime,红黑树 实时:优先级队列 Linux进程可以指定该进程所采用的调度策略 调度算法根据进程的调度策略,采用不同的调度算法 关于CFS的vruntime 理想的调度,所有的任务都是公平的。等速度的运行每个任务。 cfs就是通过追踪这个vruntime来进行任务调度的。它总是选 vruntime最小的进程来运行。 Linux 2.6.26中的调度策略:Policy,调度类型 查看linux-2.6.26中各个policy的使用情况 调度类型 阅读const struct sched_class,调度类 rt_sched_class fair_sched_class idle_sched_class 阅读2.6.26的schedule函数 调度函数的关键: 调度算法的关键 入列 CFS根据vruntime的值入列,其关键在于vruntime值的计算 RT根据优先级入列 Linux-2.6.26中每个CPU的就绪队列 Linux-2.6.26中进程的调度实体 关于CFS的vruntime 理想的调度,所有的任务都是公平的。等速度的运行每个任务。 cfs就是通过追踪这个vruntime来进行任务调度的。它总是选 vruntime最小的进程来运行。 几个关键的vruntime更新之处 set_task_cpu:进程从原CPU上转移到新CPU上,需根据两个cpu上就绪队列min_vruntime的值的差距进行调整,使得进程的vruntime值能与新的调度队列中的进程具有一定的可比性 在__update_curr中, 在yield_task_fair中, 等等 了解linux-2.6.26中进程的滴答更新 调度类中的方法task_tick用来在任务运行时进行滴答更新。 每个调度类都有自己的滴答更新方法:task_tick_rt、task_tick_fair和task_tick_idle(为空)。 考虑task_tick_fair 考虑task_tick_rt Linux2.6.26中的优先级 Linux2.6.26中的nice值 Nice值用来调整进程的优先级 Nice值的范
文档评论(0)