Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24785919
  • 博文数量: 271
  • 博客积分: 10025
  • 博客等级: 上将
  • 技术积分: 3358
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-12 15:28
文章分类

全部博文(271)

文章存档

2010年(71)

2009年(164)

2008年(36)

我的朋友

分类:

2009-08-13 12:24:56

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 的对应比率

阅读(780) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~