多处理器调度
- 多处理器分类:
松耦合、分布式多处理器、集群:
由一些列相对自治的系统组成,每个处理器都有自身的内存和I/O通道紧耦合多处理器:
由一系列共享同一个内存并受操作系统完全控制的处理器组成
- 同步粒度:
- 无约束并行性: 进程间没有显式的同步
- 每个进程都代表独立的应用或作业,典型应用是
分时系统
- 粗粒度和极粗粒度并行性: 进程之间存在同步,但这种同步的级别极粗
- 粗粒度和极粗粒度并行性可以简单地处理为一组运行在多道程序单处理器上的并行进程
- 在多处理器上对用户软件进行很少的改动或不进行改动就可以提供支持
- 中粒度并行性: 应用程序的线程之间,需要更高程度的合作与交互
- 细粒度并行性: 细粒度并行性表示与线程中的并行相比,更为复杂的使用情况
设计问题
- 多处理器调度涉及的问题:
- 把进程分配到处理器
- 在单处理器上使用多道程序设计
- 一个进程的实际分派
- 在讨论这三个问题时,所用的方法通常取决于
应用程序的粒度级
和可用处理器的数量
- 把进程分配到处理器:
- 若假设多处理器的结构是统一的,即没有哪个处理器在访问内存和I/O设备时具有物理上的特别优势,那么最简单的调度方法就是把处理器视为一个资源池
- 分配方法:
静态分配
、动态分配
- 静态分配: 一个进程从激活到完成,一直被分配给同一个处理器,需要为每个处理器维护一个专门的短程队列
(1)优点: 调度的开销较小,对所有进程,处理器的分配只进行一次
(2)缺点: 一个处理器可能处于空闲状态,这时其队列为空,而另一个处理器却积压了许多工作- 动态分配: 所有进程都进入一个全局队列,然后调度到任何一个可用的处理器中,因此在一个进程的声明周期中,它可能在不同的时间于不同的处理器上执行
(1)在紧密耦合的共享内存存储器结构中,所有处理器都能得到所有进程的上下文信息,因此,调度进程的开销与它被调度到哪个处理器上无关- 另一种分配策略时
动态负载平衡
,在该策略中,线程能在不同处理器所对应的队列之间转移
- 处理器结构:
- 主从式: 操作系统的核心功能总是在某个特定的处理器上运行,其他处理器可能仅用于执行用户程序
- 优点: 简单,几乎不需要概念金单处理器多道程序操作系统
- 缺点:
(1)主处理器的失败会导致整个系统失败
(2)主处理器可能成为性能瓶颈
- 对等式: 操作系统能在任何一个处理器上执行,每个处理器从可用进程池中进行自调度
进程调度
- 对于双处理器,调度原则的选择不如单处理器中重要,处理器数量增加时,这一结论更加确定
- 多处理器系统中使用简单的FCFS原则或静态优先级方案中使用FCFS就已经足够
线程调度
- 一个应用程序的各个线程同时在各个独立的处理器中执行时,其性能会显著提升
- 对于需要在线程间交互的应用程序(中粒度并行度),线程管理和调度的很小变化就会对性能产生重大影响
- 多处理器线程调度和处理器分配方案:
负载分配
、组调度
、专用处理器分配
、动态调度
- 负载分配:
- 系统维护一个就绪线程的全局队列,每个处理器只要空闲就从队列中选择一个线程
- 优点:
(1)负载均匀地分布在各个处理器上,确保当有工作可做时,没有处理器时空闲的
(2)不需要集中调度程序:一个处理器可用时,操作系统调度历程会在该处理器上运行,以选择下一个线程- 缺点:
(1)中心队列占据了必须互斥访问的存储器区域。因此,若有许多处理器同时进行查找工作,就有可能成为瓶颈
(2)被抢占的线程可能不在同一个处理器上恢复执行。每个处理器都配备一个本地高速缓存时,缓存的效率会很低
(3)如果所有线程被视为一个公共的线程池,那么一个程序的所有线程不可能同时访问处理器。一个程序的线程需要高度合作时,所涉及的进程切换会严重影响性能
- 负载分配方案:
先来先服务
、最少线程数优先
、可抢占的最少线程数优先
- 组调度:
- 定义: 同时在一组处理器上调度一组进程
- 优点:
(1)组内的进程相关或大致平等,同步阻塞会减少,且可能只需要很少的进程切换,因此性能会提高
(2)调度开销可能会减少,因为一个决策可以同时影响许多处理器和进程- 处理器分配:
平均分配
、根据线程数加权调度
- 专用处理器分配:
- 在一个应用程序执行期间,把一组处理器专门分配给这个应用程序
- 当一个应用程序被调度时,它的每个线程都被分配给一个处理器,相应的处理器专门用于处理对应的线程,知道应用程序运行结束
实时调度
- 实时计算: 系统的正确性不仅取决于计算的逻辑结果,而且取决于产生结果的时间
- 实时任务:
(1)硬实时任务: 必须满足最后期限的任务,否则会给系统带来不可接受的破坏或致命的错误
(2)软实时任务: 希望能满足最后期限的任务,并不强制,即使超过了最后期限,调度和完成这个任务仍然是有意义的