[工学]ch2-210-211Linux-windows调度算法.pptVIP

  • 1
  • 0
  • 约8.07千字
  • 约 39页
  • 2018-02-28 发布于浙江
  • 举报
[工学]ch2-210-211Linux-windows调度算法

线程优先级示意 最高(31) 实时优先 级层次 最低(16) 最高(15) 最低(0) 可变优先 级层次 Windows 2003线程调度 数据结构 进程 进程 线程 线程 线程 线程 31 0 缺省基本优先级、缺省处理器偏好、缺省时间配额 基本优先级、当前优先级、处理器偏好、时间配额 31 (就绪位图) 0 31 (空闲位图) 0 线程调度器就绪队列 Windows 2003线程调度策略 1)主动切换 2)高优先级抢先 3)时间配额用完 4)结束 Windows 2003线程线程 优先级提升(1) 提升线程当前优先级的情况: 1)I/O操作完成。 磁盘、光驱、并口和视频为1; 网络、串口和命名管道为2; 键盘和鼠标为6; 音频为8。 2)信号量或事件等待结束。 3)前台进程中的线程完成一个等待操作。 4)由于窗口活动而唤醒图形用户接口线程。 Windows 2003线程线程 优先级提升(1) 提升线程当前优先级的情况: 5)线程处于就绪状态超过一定时间,但没能进入运行状态(处理器饥饿)--优先级逆转问题 。 平衡集管理器每秒钟检查一次就绪队列,查找在就绪队列中超过300个时钟中断间隔的线程。 每次扫描16个就绪线程,每次扫描最多提升10个线程的优先级 。 对称多处理器系统上的线程调度 1)亲合关系 2)线程的首选处理器和最近使用的处理器 3)就绪线程的运行处理器选择 4)空闲线程调度 就绪线程的运行处理器选择 当线程进入运行状态时,Windows首先调度该线程到一个空闲处理器上运行,如果有多个空闲处理器,线程调度器的调度顺序为: (1) 线程的首选处理器。 (2) 如果线程指定亲合处理器集合,并且该集合中有处理器空闲,则把可选处理器集合缩小到这个亲合处理器集合与空闲处理器集合的交集。 (3) 如果该线程的最近使用的处理器在该空闲集合中,则选择该处理器。 (4) 最后选择当前执行处理器(即正在执行调度器代码的处理器)。 (5) 如果这些处理器都不空闲,系统将依据处理器标识从高到低扫描系统中的空闲处理器状态,选择找到的第一个空闲处理器。 空闲线程调度 在多处理器系统中,系统为每个处理器设有一个空闲线程,其优先级为0,当一个处理器上没有线程可运行时,系统会调度空闲线程。 空闲线程的功能是在一个循环中检测是否有要进行的工作:处理所有待处理的中断请求、检查是否有待处理的DPC请求?如果有,则清除相应软件中断并执行DPC;检查是否有就绪线程可进入运行状态?如果有,则调度线程运行;否则调用硬件抽象层的处理器空闲例程,执行相应的电源管理功能。 2.9 Linux调度算法 2.9.1 Linux传统调度算法 2.9.2 Linux2.6调度算法 2.9.1 Linux传统调度算法(1) 1 进程调度策略 1) policy: SCHED_OTHER普通类任务 SCHED_FIFO先进先出实时类任务 SCHED_RR轮转法实时类任务 2) priority进程静态优先级 3) nice进程可控优先级因子 4) rt_priority实时进程静态优先级 5) counter进程目前时间片配额,也称进程动态优先级 Linux传统调度算法(2) 2 动态优先级的产生和变化 当counter递减到0时,运行进程被迫出让CPU;当可运行队列中所有进程的counter值变为0后,表明一轮调度已经结束。 等待态进程的动态优先级通常会逐渐增加,当所有可运行进程的counter都为0时,系统重新计算所有进程的counter,计算公式为: p-counter=(p-counter1)+NICE_TO_TICKS(P-nice) 对于就绪态进程来说,因其counter都为0,计算结果就是nice转换过来的时钟滴答数;对于等待态进程就不一样,它们的counter都不为0,计算结束后,等待态进程的动态优先级会大于nice值。 3 Linux进程调度机制 进程调度依据和时机 进程调度任务 进程切换 进程切换时机 (1) 进程被动地放弃CPU,当前进程时间片用完或当一个进程被唤醒,且其优先级高于当前进程的优先级时,通过TIF_NEED_RESCHED位置1,来告诉内核在适当的时刻需要重新调度。 (2) 进程主动放弃CPU,是由于进程执行系统调用,状态发生变化,直接调用schedule( )进入调度,这类系统调用有:yield( )、pause( )、sleep( )、wait( )和exit

文档评论(0)

1亿VIP精品文档

相关文档