引言

之前我们所学习的操作系统进程调度策略的前提条件是单处理器系统下的CPU调度程序。如果系统中存在多个CPU,那么负载分配就成为可能,但是相应的调度问题就会更加复杂。

多处理器调度方法

  1. 对于多处理器,CPU调度的一种方法是让一个处理器(主处理器)处理所有调度决定、I/O处理以及其他系统活动,其他处理器只执行用户代码。这个方称为非对称多处理(asymmetric multiprocessing),这种方法只有一个处理器访问系统数据结构,减少了数据共享的需要。

  2. 另外一种方法是使用对称多处理(sysmmetric multiprocessing, SMP),即每个处理器自我调度。所有进程可能处在一个共同的就绪队列中,也可能每个处理器都有自己私有的就绪队列。无论怎样,每个处理器的调度程序都检查共同就绪队列,以便选择执行一个进程。

处理器的亲和性

当一个进程运行在一个特定的处理器上时会缓存以该进程的一些数据和上下文,如果进程被迁移到另外一个处理器上,那么上一个处理器上缓存的数据设为无效,第二个处理器缓存应重新填充。由于缓存的无效或重新填充的代价很高,所以大多数SMP系统试图拍避免进程从一个处理器移到另一个处理器,而是试图让一个进程运行在同一个处理器上。这叫做处理器亲和性。亲和性具备多种形式:

当一个操作系统试图保持进程运行在同一处理器上,但是这个进程也可以迁移到其他进程上,这种亲和性叫做软亲和性

有的操作系统提供系统调用来支持硬亲和性,从而使某个进程运行在某个处理器子集中。(比如Linux实现软亲和性,但是也提供系统调用sched_setaffinity()来支持硬亲和性)。

系统的负载平衡

负载平衡设法将负载平均分配到SMP系统的所有处理器,这个概念很好理解。

需要注意的是,对于有些系统他们的处理器具有私有的可执行进程的队列,负载平衡是必须的,如何将一个进程分配到哪一个处理器的私有队列。对于另外一些系统具有公共队列,那么负载平衡就没有必要了,因为处理器一旦空闲,就会从公共就绪队列中取走一个就绪进程。

负载平衡具有两种方法:

  • 推迁移:如果发现不平衡,将进程从超载处理器推到空闲或不太忙的处理器
  • 拉迁移:空闲处理器从忙的处理器上拉一个等待任务,发生拉迁移

多核处理器

传统SMP系统具有多个物理处理器,但是当前的SMP系统将多个处理器放置在同一个物理芯片上,产生多核处理器。

许多硬件设计都采用多线程的处理器核,即每个核会分配到两个或多个硬件线程,这样如果一个线程停顿而等待内存时,该核可以切换到另一个线程。从操作系统角度来看,每一个硬件线程可以作为一个逻辑处理器,以便运行软件线程。

处理器核的多线程有两种方法:

  • 粗粒度:粗粒度的多线程值在处理器上运行,直到一个长延迟时间发生,线程切换,且切换成本高
  • 细粒度:线程在更细的粒度级别切换,切换成本低

一般情况下,一个多线程多核处理器实际上需要两个(或多个)不同级别的调度。一个级别的调度决策由操作系统做出,用于选择哪个软件线程运行在哪个硬件线程上(逻辑处理器),对于这个级别的调度,操作系统可以选择任何调度算法。

    另一个级别的调度指定每个核如何决定运行哪个硬件线程,在这种情况下,有多种策略可以采用。比如Intel Itanium为双核处理器,而且每个核有两个硬件线程,每个硬件线程有一个动态的紧迫值,它的取值范围是0-7,用0表示最低的紧迫性,而7表示最高的,Itanium具有5个不同的事件,用于触发线程切换,当这些时间发生时,线程切换逻辑会比较两个线程的紧迫性,并选择紧迫性较高的线程在处理器核上执行。

OS之进程管理---多处理器调度的更多相关文章

  1. Linux进程管理与调度-之-目录导航【转】

    转自:http://blog.csdn.net/gatieme/article/details/51456569 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:// ...

  2. [Wolfgang Mauerer] 深入linux 内核架构 第二章 进程管理与调度【未完】

     作为Linux开发爱好者,从事linux 开发有三年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动, ...

  3. OS之进程管理---进程调度和多线程调度

    进程调度基本概念 多道程序的目标就是始终允许某个进程运行以最大化CPU利用率,多个进程通时存在于内存中,操作系统通过进程调度程序按特定的调度算法来调度就绪队列中的进程到CPU,从而最大限度的利用CPU ...

  4. 深入Linux内核架构——进程管理和调度(下)

    五.调度器的实现 调度器的任务是在程序之间共享CPU时间,创造并行执行的错觉.该任务可分为调度策略和上下文切换两个不同部分. 1.概观 暂时不考虑实时进程,只考虑CFS调度器.经典的调度器对系统中的进 ...

  5. 深入Linux内核架构——进程管理和调度(上)

    如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...

  6. Python::OS 模块 -- 进程管理

    os模块的简介参看 Python::OS 模块 -- 简介 os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作 os模块的进程参数 Python::OS 模块 -- 进程参数 ...

  7. Linux内核——进程管理与调度

    进程的管理与调度 进程管理 进程描写叙述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中.链表中的每一项包括一个详细进程的全部信息,类型为task_struct,称为进程描写叙 ...

  8. Linux内核入门到放弃-进程管理和调度-《深入Linux内核架构》笔记

    进程优先级 硬实时进程 软实时进程 普通进程 O(1)调度.完全公平调度器 抢占式多任务处理(preemptive multitasking):各个进程都分配到一定的时间段可以执行.时间段到期后,内核 ...

  9. Linux高级调试与优化——进程管理和调度

    进程管理 进程和文件是Linux操作系统的两个最基本的抽象. 进程是处于执行期的程序,进程不仅仅局限于一段可执行程序代码,通常还包含其他资源,如打开的文件.挂起的信号.内核内部数据.处理器状态.进程地 ...

随机推荐

  1. 基于beego orm 针对oracle定制

    目前golang的ORM对oracle支持都没有mysql那样完整,一个orm要同时兼容mysql和oracle由于在sql语法上区别,会使整orm变的非常臃肿. 本项目是在beego orm上修改, ...

  2. htoi的实现

    htoi的实现 /************************************************************************* > File Name: h ...

  3. 硬盘坏道检测工具对比(DiskGenius/HdTunePro/MHDD等)

    说到硬盘检测软件,大家肯定会想到MHDD,但是MHDD真的好用?反正我觉得太难用了,只能在DOS下运行,不能在Win系统下运行:最重要的是只支持IDE硬盘模式,现在的主板几乎全部默认都是AHCI模式, ...

  4. Swift1.2与Xcode6.3 beta

    Xcode6.3和Swift1.2都已经发布.这次发布增强了Swift编译器也给Swift增加了一些新的特性.详细内容可以看这里.这里主要关注比较重要的内容. 编译器的改进 Swift1.2的编译器更 ...

  5. AugularJS, Responsive, phonegap, BAE, SAE,GAE, Paas

    http://freewind.me/blog/20121226/1167.html http://88250.b3log.org/bae-sae-gae http://www.ruanyifeng. ...

  6. Hdu1342 Lotto 2017-01-18 17:12 44人阅读 评论(0) 收藏

    Lotto Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submiss ...

  7. 四则运算(Java)--温铭淇,付夏阳

    GitHub项目地址: https://github.com/fxyJAVA/Calculation 四则运算项目要求: 程序处理用户需求的模式为: Myapp.exe -n num -r size ...

  8. 论文笔记(4)-Deep Boltzmann Machines

    Deep Boltzmann Machines是hinton的学生写的,是在RBM基础上新提出的模型,首先看一下RBM与BM的区别 很明显可以看出BM是在隐含层各个节点以及输入层各个节点都是相互关联的 ...

  9. [ACM_数据结构] Color the ball [线段树水题][数组开大]

    Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次 ...

  10. [ASP.NET]uploadify简单使用讲解

    背景:在用户控件中使用html 的file控件或者ASP.NET的FileUpLoad控件都无法获取到文件,于是想到听说过的uploadify uploadify官网:www.uploadify.co ...