OS之进程管理---多处理器调度
引言
之前我们所学习的操作系统进程调度策略的前提条件是单处理器系统下的CPU调度程序。如果系统中存在多个CPU,那么负载分配就成为可能,但是相应的调度问题就会更加复杂。
多处理器调度方法
对于多处理器,CPU调度的一种方法是让一个处理器(主处理器)处理所有调度决定、I/O处理以及其他系统活动,其他处理器只执行用户代码。这个方称为非对称多处理(asymmetric multiprocessing),这种方法只有一个处理器访问系统数据结构,减少了数据共享的需要。
另外一种方法是使用对称多处理(sysmmetric multiprocessing, SMP),即每个处理器自我调度。所有进程可能处在一个共同的就绪队列中,也可能每个处理器都有自己私有的就绪队列。无论怎样,每个处理器的调度程序都检查共同就绪队列,以便选择执行一个进程。
处理器的亲和性
当一个进程运行在一个特定的处理器上时会缓存以该进程的一些数据和上下文,如果进程被迁移到另外一个处理器上,那么上一个处理器上缓存的数据设为无效,第二个处理器缓存应重新填充。由于缓存的无效或重新填充的代价很高,所以大多数SMP系统试图拍避免进程从一个处理器移到另一个处理器,而是试图让一个进程运行在同一个处理器上。这叫做处理器亲和性。亲和性具备多种形式:
当一个操作系统试图保持进程运行在同一处理器上,但是这个进程也可以迁移到其他进程上,这种亲和性叫做软亲和性
有的操作系统提供系统调用来支持硬亲和性,从而使某个进程运行在某个处理器子集中。(比如Linux实现软亲和性,但是也提供系统调用sched_setaffinity()来支持硬亲和性)。
系统的负载平衡
负载平衡设法将负载平均分配到SMP系统的所有处理器,这个概念很好理解。
需要注意的是,对于有些系统他们的处理器具有私有的可执行进程的队列,负载平衡是必须的,如何将一个进程分配到哪一个处理器的私有队列。对于另外一些系统具有公共队列,那么负载平衡就没有必要了,因为处理器一旦空闲,就会从公共就绪队列中取走一个就绪进程。
负载平衡具有两种方法:
- 推迁移:如果发现不平衡,将进程从超载处理器推到空闲或不太忙的处理器
 - 拉迁移:空闲处理器从忙的处理器上拉一个等待任务,发生拉迁移
 
多核处理器
传统SMP系统具有多个物理处理器,但是当前的SMP系统将多个处理器放置在同一个物理芯片上,产生多核处理器。
许多硬件设计都采用多线程的处理器核,即每个核会分配到两个或多个硬件线程,这样如果一个线程停顿而等待内存时,该核可以切换到另一个线程。从操作系统角度来看,每一个硬件线程可以作为一个逻辑处理器,以便运行软件线程。
处理器核的多线程有两种方法:
- 粗粒度:粗粒度的多线程值在处理器上运行,直到一个长延迟时间发生,线程切换,且切换成本高
 - 细粒度:线程在更细的粒度级别切换,切换成本低
 
一般情况下,一个多线程多核处理器实际上需要两个(或多个)不同级别的调度。一个级别的调度决策由操作系统做出,用于选择哪个软件线程运行在哪个硬件线程上(逻辑处理器),对于这个级别的调度,操作系统可以选择任何调度算法。
    另一个级别的调度指定每个核如何决定运行哪个硬件线程,在这种情况下,有多种策略可以采用。比如Intel Itanium为双核处理器,而且每个核有两个硬件线程,每个硬件线程有一个动态的紧迫值,它的取值范围是0-7,用0表示最低的紧迫性,而7表示最高的,Itanium具有5个不同的事件,用于触发线程切换,当这些时间发生时,线程切换逻辑会比较两个线程的紧迫性,并选择紧迫性较高的线程在处理器核上执行。
OS之进程管理---多处理器调度的更多相关文章
- Linux进程管理与调度-之-目录导航【转】
		
转自:http://blog.csdn.net/gatieme/article/details/51456569 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:// ...
 - [Wolfgang Mauerer] 深入linux 内核架构 第二章 进程管理与调度【未完】
		
作为Linux开发爱好者,从事linux 开发有三年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动, ...
 - OS之进程管理---进程调度和多线程调度
		
进程调度基本概念 多道程序的目标就是始终允许某个进程运行以最大化CPU利用率,多个进程通时存在于内存中,操作系统通过进程调度程序按特定的调度算法来调度就绪队列中的进程到CPU,从而最大限度的利用CPU ...
 - 深入Linux内核架构——进程管理和调度(下)
		
五.调度器的实现 调度器的任务是在程序之间共享CPU时间,创造并行执行的错觉.该任务可分为调度策略和上下文切换两个不同部分. 1.概观 暂时不考虑实时进程,只考虑CFS调度器.经典的调度器对系统中的进 ...
 - 深入Linux内核架构——进程管理和调度(上)
		
如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...
 - Python::OS 模块 -- 进程管理
		
os模块的简介参看 Python::OS 模块 -- 简介 os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作 os模块的进程参数 Python::OS 模块 -- 进程参数 ...
 - Linux内核——进程管理与调度
		
进程的管理与调度 进程管理 进程描写叙述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中.链表中的每一项包括一个详细进程的全部信息,类型为task_struct,称为进程描写叙 ...
 - Linux内核入门到放弃-进程管理和调度-《深入Linux内核架构》笔记
		
进程优先级 硬实时进程 软实时进程 普通进程 O(1)调度.完全公平调度器 抢占式多任务处理(preemptive multitasking):各个进程都分配到一定的时间段可以执行.时间段到期后,内核 ...
 - Linux高级调试与优化——进程管理和调度
		
进程管理 进程和文件是Linux操作系统的两个最基本的抽象. 进程是处于执行期的程序,进程不仅仅局限于一段可执行程序代码,通常还包含其他资源,如打开的文件.挂起的信号.内核内部数据.处理器状态.进程地 ...
 
随机推荐
- 20155233 2016-2017-2 《Java程序设计》第8周学习总结
			
20155233 2016-2017-2 <Java程序设计>第8周学习总结 学习目标 了解NIO 会使用Channel.Buffer与NIO2 会使用日志API.国际化 会使用正则表达式 ...
 - servlet-cookie
			
/** * Cookie学习; * 作用:解决了发送的不同请求的数据共享问题 * 使用: * 1.Cookie的创建和存储 * ...
 - 情境领导II
			
情境领导理论认为,领导者的行为要与被领导者的准备程度相适应,才能取得有效的领导效果,也就是说领导风格不是一成不变的,而要根据环境及员工的变化而改变. 三大技巧分别为诊断.弹性与约定领导型态.诊断是评估 ...
 - yii2学习网站
			
1.http://tech.anruence.com/ 2.http://www.yiichina.com/doc/guide/2.0/input-multiple-models
 - 37 The Benefits of Cutting Salt 减少盐分摄取量的益处
			
The Benefits of Cutting Salt 减少盐分摄取量的益处 ①Just when you had figured out how to manage fat in your die ...
 - BZOJ 1007  [HNOI2008]水平可见直线 (栈)
			
1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 7940 Solved: 3030[Submit][Sta ...
 - trsd_extract_EDSD_new
			
# -*- coding:utf-8 -*- import re ''' 适应新版本 ''' year='17A'#用户自定义 ss='./data/'#根目录 filename = ss+'EDSD ...
 - Java 窗体居中 通用代码
			
Toolkit kit = Toolkit.getDefaultToolkit(); // 定义工具包 Dimension screenSize = kit.getScreenSize() ...
 - Python是什么
			
Python是一种编程语言,它的名字来源于一个喜剧.也许最初设计Python这种语言的人并没有想到今天Python会在工业和科研上获得如此广泛的使用.著名的自由软件作者Eric Raymond在他的文 ...
 - PGF基本图形对象
			
\documentclass{article} \usepackage[active ,tightpage ,xetex ]{ preview} \usepackage{tikz} \begin{do ...