Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1269161
  • 博文数量: 125
  • 博客积分: 4372
  • 博客等级: 上校
  • 技术积分: 1055
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-12 09:53
文章分类

全部博文(125)

文章存档

2019年(3)

2018年(2)

2017年(1)

2016年(2)

2015年(4)

2014年(11)

2013年(5)

2012年(4)

2011年(12)

2010年(10)

2009年(17)

2008年(17)

2007年(25)

2006年(12)

分类:

2009-02-26 09:09:06

线程调度策略分析

Document #: 2011993000004

Body:
[标题]
线程调度策略分析

内容提要:

线程调度策略模型介绍及分析

说明:

线程调度策略

    AIX 中,取决于用户线程映射到核心线程的方式,可以有三种不同的调度方式
    1:1 方式
    ▶ M:1 方式
    ▶ M:N 方式
    核心线程既轻量级线程。用户线程映射到核心线程的处理是通过虚拟处理器(VP )完成的,
    换句话说,用户线程的调度首先映射到VP, VP 调度,VP 是一个核心线程,或者是绑定到核
    心线程的结构。下面将给出这三种方式的详细介绍。
    11:1 调度方式
    在这种方式中,每一个用户线程绑定到一个VP 上,即一个核心线程,而VP 并不一定绑定到
    物理的CPU ,除非是执行绑定到CPU 的操作。从用户级看,每一个VP 就是一颗可以运行用户
    代码或者系统调用的CPU 。绑定到VP 的线程,将直接被核心调度器调度,具有系统级的范围。
    可以用图示的方式直观的标示如下:

    2M:1 调度方式
        M:1 调度方式下,所有的用户线程映射到一个VP 即一个核心线程。这种映射
        方式是有POSIX 线程库调度器完成的,所有的用户线程编程工具完全有POSIX
        线程库管理。这种调度方式可适用于任何UNIX 系统,特别是在一些传统的单线
        程系统中,使用更广泛,图示如下:

    3M:N 调度方式
        M:N 的调度方式下,几个用户线程可共享同一个VP ,或者同一个VP 共享池。一个未
        绑定VP 的用户线程,可以称为本地或进程范围的线程,这样的线程不能用核心调度器
        直接调度,POSIX 线程库调度器将处理用户线程到VP 的映射,然后核心调度器将直接
        调度与之相关的核心线程。在三种调度方式中,这是最复杂、最有效的一种调度策略。
        用户及线程编程工具被POSIX 线程和核心线程共享。图示如下:
    进程调度是UNIX 的核心组成部分,按照一定的调度策略,调度处于运行状态的进程。
    AIX4.3 版本开始,AIX 在进程级别支持线程的调度,用户线程调度器由POSIX 线程库
    提供,支持M:N 调度模式。对应于用户线程,POSIX 线程库调度器有一个或一组VP 对应,
    这种对应方式,为进程创建多个线程,充分利用核心资源提供了支持。
    POSIX 线程库通过编程控制线程的调度,有两种不同的实现方法:
    1 ) 常见线程时设置调度属性值
    2 ) 动态的改变调度属性值
      另外,AIX 操作系统也为用户改变线程的调度提供了相应的环境变量。
      AIX 系统支持三种不同POSIX 线程调度策略:
    1SCHED_FIFO ,先进先出的调度策略。每一线程都有一固定的优先级,当多个线程
        具有同一优先级时,各线程按照先进先出的策略调度运行,直至结束。
    2SCHED_RRRound_robin(RR) 调度方式,每一线程具有固定的优先级,当多个线程具
    有同一优先级时,按照先进先出的调度策略,运行固定的时间片。
    3SCHED_OTHER ,这是AIX 缺省的调度策略,每一线程都有一初始的优先级,但是随着
    线程的运行而动态的改变优先级。
      通常情况下,应用程序应使用缺省的调度策略,对一些特殊的应用程序,要求使用固定
    的优先级时,可以考虑使用SCHED_RRSCHED_FIFO 的调度策略。使用RR 策略是应确定
    所有的线程都有固定的优先级,这种调度策略对使用线程读取传感器或写控制器时特别有效。
    在使用FIFO 调度策略时应注意,因为线程除非被某些调用阻塞,否则将一直运行至结束,
    所以对高优先级的线程会造成负面的影响。
    AIX 操作系统也提供一些环境变量影响线程的调度策略,这里只介绍两个环境变量
    AIXTHREAD_SCOPEAIXTHREAD_MNRATIO
    AIXTHREAD_SCOPE :如果线程使用缺省的线程属性值创建,这个值可以设定线程的范围,
    使用方法为:
    AIXTHREAD_SCOPE=[P|S]
    P 标示进程范围,S 标示系统范围,如果没有设定此环境变量,则作用于进程范围,执行M:N
    调度方式,如制定此值为S ,则使用1:1 的调度方式。
    AIXTHREAD_MNRATIO :这个环境变量,将指定用户线程与核心线程之间的映射比例,设定
    方法为:
    AIXTHREAD_MNRATION=p:k
    k 是对应于用户线程p 的核心线程数,对于pk 值由以下几种处理:
    1 ) 如AIXTHREAD_SCOPE 值为S ,则为用户线程与核心线程的比率为1:1
    2 ) 如AIXTHREAD_SCOPE 值为P ,则缺省比率为8:1 ,否则为设定值
    3 ) 如k 值大于p 值,则认为是1:1 的对应比率

    参考资料:

Copyright and trademark information
IBM, the IBM logo and ibm.com are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at .
阅读(3284) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~