




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux操作系统分析 中国科学技术术大学计计算机系 陈陈香兰兰(051287161312) Autumn 2009 主要内容 进程描述符 进程切换 进程的创建和删除 进进程调调度 进进程的分类类 不同类型的进程有不同的调度需求 第一种分类: I/O-bound 频繁的进行I/O 通常会花费很多时间 等待I/O操作的完成 CPU-bound 计算密集型 需要大量的CPU时间进 行运算 第二种分类 交互式进程(interactive process) 需要经常与用户交互,因此要花很多时间 等待用户输 入操 作 响应时间 要快,平均延迟要低于50150ms 典型的交互式程序: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,调调度类类型 include/linux/sched.h 在task_struct中,使用数据项policy来表达该进程采用的调度策略 查查看linux-2.6.26中各个policy的使用情况 kernel/sched.c 调调度类类型 阅读const struct sched_class,调度类 rt_sched_class fair_sched_class idle_sched_class rt_sched_class fair_sched_classidle_sched_class kernel/sched_idletask.c kernel/sched_fair.c kernel/sched_rt.c 阅读阅读 2.6.26的schedule函数 调度函数的关键: 调度算法的关键 入列 CFS根据vruntime的值入列,其关键在于vruntime值的计算 RT根据优先级入列 kernel/sched.c,参见函数schedule() kernel/sched_fair.c,update_curr Linux-2.6.26中每个CPU的就绪队列 Linux-2.6.26中进程的调度实体 include/linux/sched.h:task_struct include/linux/sched.h 关于CFS的vruntime 理想的调度,所有的任务都是公平的。等速度 的运行每个任务。 cfs就是通过追踪这个vruntime来进行任务调度的 。它总是选 vruntime最小的进程来运行。 几个关键的vruntime更新之处 set_task_cpu:进程从原CPU上转移到新CPU上,需根 据两个cpu上就绪队列min_vruntime的值的差距进行调 整,使得进程的vruntime值能与新的调度队列中的进 程具有一定的可比性 kernel/sched.c 在_update_curr中, 在yield_task_fair中, 等等 kernel/sched_fair.c 了解linux-2.6.26中进程的滴答更新 调度类中的方法task_tick用来在任务运行时进行 滴答更新。 每个调度类都有自己的滴答更新方法: task_tick_rt、task_tick_fair和task_tick_idle(为空 )。 考虑task_tick_fair 关键内部函数update_curr,参见源代码 include/linux/sched.h 考虑task_tick_rt Linux2.6.26中的优优先级级 优先数范围为0139,其中099为实时优先数 普通任务和批处理任务的优先数在100139之间 优先数越大,优先级越低。 Linux2.6.26中的nice值值 Nice值用来调整进程的优先级 Nice值的范围在-2019之间。 Linux-2.4.18中的调度算法 Linux-2.4.18的调调度策略 Linux进程可以指定该进程所采用的调度策略 调度算法根据进程的调度策略,采用不同的调 度算法 先入先出的实时进程 循环轮转的实时进程 普通的分时进程 当一个进程自动放弃运行时设置 Linux-2.4.18的调度主要基于分时技术 允许多个进程“并发”运行 CPU的时间被划分成“片”,给每个可运行进程 分配一片 在单处理器上,任何时刻只能运行一个进程, 当一个并发执行的进程时间片用完时(到期) 还没有终止,就可以进行进程调度 分时依赖于时钟中断,对进程透明 采用常规规分时时时时 ,时间时间 片的选择选择 时间片的长短对系统性能非常关键,它既不能 太长也不能太短 太短: 频繁的切换会造成系统开销过大 假如切换时间为 1ms,时间片设置为1ms,那就没空 执行进程了 太长 几乎每个进程都一次运行完 并发的概念基本消失 普通进程需要等待很长时间 才能运行 时间片大小的选择总 是一种折衷。Linux采取单 凭经验的方法,即选择尽可能长的时间片,同 时能保持良好的响应时间 Linux-2.4.18进进程的调调度优优先级级 Linux在其调度程序中,根据特定的算法计算出 进程的调度优先级,用一个值goodness表示, 进程根据这个值竞争CPU Linux-2.4.18的调度算法(1) epoch linux调度算法把CPU时间划分为时期(epoch) 在一个单独的时期内,每个进程有一个指定的时间 片 一个进程用完它的时间 片时,就会被强占 只要进程的时间 片没有用完,就可以被多次调度运行 当所有的进程用完它的时间片的时候,一个时期才 结束,此时要重新计算所有进程的时间片,并重新 开始一个新的时期 Linux-2.4.18的调调度算法(2) 基本时间片(base time quantum) 每个进程有一个基本时间片,通过nice计算 时间片/epoch到期时,新时间片的计算公式: 可以通过nice、setpriority系统调用调整进程的基本 时间片 nice缺省为0(在-20到19之间选择) 通常,基本时间片的值 为6,由于时钟中断大约10ms左右, 因此基本时间片的长度大约60ms Linux-2.4.18的调调度算法(3) 当前剩余时间片 每个进程使用counter表示当前时期内的剩余时 间片 每当一个tick过去,就会从当前进程的counter上-1 在某个时期内创建的一个新进程,在该时期内 的剩余时间片将从父进程那里继承一半 举举例:进进程0(INIT_TASK)的时间时间 片: HZ代表了1秒内的tick数 因此一个tick就是1/100秒 即10ms 可以计算出 DEF_COUNTER=10个tick 即100ms (实际上约105ms) MAX_COUNTER=20个tick 即200ms Linux-2.4.18中调度程序使用的数据结构 进程描述符中: need_resched:是否需要调度 policy:调度策略 rt_priority:实时进 程的静态优先级(199),普通 进程不用(设为0) counter:当前剩余时间片 新时期开始时根据上述计算公式计算 每次时钟 中断,时间 片都会-1,直到为0(则请 求调度) 创建一个新进程时,子进程会继承父进程的一半剩余时间 片 nice:基本时间片参数,可以调节 schedule函数 schedule函数实现调 度 目的:在运行队列中找到一个进程,把CPU分 配给它 调用方法: 直接调用,如sleep_on 松散调用,根据need_resched标记 阅读schedule 调调度的时时机 调度时机来临时,内核或驱动将调用schedule() 在Linux中调度的时机主要有: current的状态态从running转换为转换为 其他状态时态时 ,如: 1)进程终止。exit()在最后调用schedule()。 2)进程因某种原因进入等待状态。 比较常见的就是进程调用nanosleep()或者wait系列的 系统调用。 此外,在设备驱动 程序中,最常见的原因就是驱动 引发一次I/O操作后,为等待I/O操作的结束而进入等 待状态。多数情况下,驱动会直接调用schedule()。 当前进进程的时间时间 片用完时时。 时间 片是否用完,由时钟 中断处理程序进行判断。 若到期,就将current的need_resched位置1。 返回用户态时 ,根据need_resched调用schedule() 进进程从中断、异常、系统调统调 用状态态(即内核态态)返 回时时。 若在中断、异常、系统调 用中,current的need_resched被置1 ,都会导致进程调度。 包括上述时钟 中断。 调调度算法的性能 不适合进程数量很大的情况
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-江苏-江苏经济岗位工一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏堤灌维护工一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-江苏-江苏不动产测绘员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西行政岗位工二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西水工闸门运行工五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东造林管护工五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东水生产处理工三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东放射技术员五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东仓库管理员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-安徽-安徽下水道养护工二级(技师)历年参考题库典型考点含答案解析
- XXX加油站风险分级管控台账
- 甘12J8 屋面标准图集
- 购买设备合同
- GB/T 28288-2012足部防护足趾保护包头和防刺穿垫
- GB/T 19666-2019阻燃和耐火电线电缆或光缆通则
- GA/T 1241-2015法庭科学四甲基联苯胺显现血手印技术规范
- 小学和初中科学教学衔接
- 《循证医学》治疗性研究证据的评价和应用
- “李可中医药学术流派论治厥阴病”-课件
- 通用技术作品设计报告
- JJF 1847-2020 电子天平校准规范-(高清现行)
评论
0/150
提交评论