读书笔记-操作系统之哲学原理-第七篇 多核原理

多处理器结构分类:以CPU之间的关系不同又可以分为对称和非对称多处理器结构。

SMP:在对称结构下,多个CPU的角色功能平等,没有主从之分,这种多CPU结构称为对称多处理器结构(Symmetric Multi-Processor Architecture,SMP)。

AMP:在非对称多处理器结构中,则不同CPU的角色地位不同,有主从CPU之分。这种多CPU结构称为非对称多处理器结构(Asymmetric Multi-ProcessorArchitecture,AMP)。

超线程技术:超线程技术是在一个CPU上同时执行多个程序而共享这个CPU内的资源,理论上要像两个CPU一样在同一时间执行两个线程,超线程技术可在同一时间里让应用程序使用芯片的不同部分。而为了支持这种技术,需要在处理器上多加入一个逻辑处理单元指针(Logical CPU Pointer)。

UMA:最简单的内存共享方式就是将内存作为与执行核独立的单元构建在核之外,所有的核通过同一总线对内存进行访问。由于每个核使用相同的方式访问内存,其到内存的延迟也相同,这种访问模式称为均匀内存访问(Uniform Memory Ac-cess,UMA)。

UMA的优缺点:在这种模式下,最重要的是所有核的地位在内存面前平等。其优点是设计简单,实现容易。缺点是大锅饭,难以针对个体的程序进行访问优化,以及扩展困难。随着执行核数量的增加,对共享内存的竞争将变得白热化,从而造成系统效率急剧下降

NUMA:使用多个分开的独立共享内存。每个执行核或CPU到达不同共享内存的距离不同,访问延迟也不一样。这种访问延迟不一致的内存共享模式称为非均匀内存访问(Non-Uniform MemoryAccess,NUMA)。在这种模式下,最重要的特点是执行核在不同的内存单元面前地位并不平等:到近的内存具有优势地位,到远的内存则处于劣势。

NUMA的优缺点:NUMA结构的优点是灵活性高、扩展容易。在执行核的数量增加的时候,其访问内存的效率可以保持不下降。不过,这种不下降的前提是优良的调度策略,即在调度时能够将程序就近执行。否则,有可能因内存访问距离远而造成效率下降。因此,NUMA对调度的要求很高。但因为扩展容易,所以NUMA得到了非常广泛的应用。

COMA:每个执行核里面配置缓存,其执行需要的数据均缓存在该缓存里面。所有访问由缓存得到满足。这样,不论数据原来是处于哪个内存单元,其对效率的影响均将不复存在。这种完全由缓存满足数据访问的模式称为全缓存内存访问(Cache Only Memory Access,COMA)。在这种模式下,每个执行核配备的缓存共同组成全局地址空间。

NORMA:如果内存单元为每个执行核所私有,且每个执行核只能访问自己的私有内存,对其他内存单元的访问通过消息传递进行,则就是非远程内存访问模式(Non-Re-mote MemoryAccess,NORMA)。这种模式的优点是设计比NUMA还要简单,但执行核之间的通信成本高昂。这已经有一点像网络了。因为效率问题,这种模式在多核体现结构下使用甚少。

对称多处理器计算机的启动顺序:这个顺序是固定的。所有的CPU里面有一个被定为启动处理器(Bootstrap Processor,BSP),而其他的处理器则作为应用处理器(ApplicationProcessor,AP)。到底哪个CPU是BSP则由某一特定寄存器的值来决定。

cpu之间通信机制:在多CPU之间通信,需要发送的是中断。用来协调这些CPU之间中断的机制就是高级可编程中断控制器(APIC)。CPU通过彼此发送中断(IPI,即处理器间中断)来完成它们之间的通信。通过给中断附加动作,不同的CPU可以在某种程度上彼此进行控制。

I/O APIC:系统中另外一个重要的部分为I/O APIC。系统中最多可拥有8个I/O APIC。它们会收集来自I/O装置的中断信号且在当那些装置需要中断时传送信息至本机APIC。除了处理处理器间及输入输出的中断外,APIC也负责处理本地中断源发出的中断,如本地连接的I/O设备、时序中断、性能监视计数器中断、高温中断、内部错误中断等。

SMP缓存一致性问题:于在对称多处理器结构下,每个处理器都有自己的缓存,因此在一个系统里面存在多个缓存的情况下就有可能出现两个缓存的数据不一致的情况。即两个CPU缓存同样的数据,其中一个或两个CPU对数据进行了修改从而造成两个CPU缓存数据的不同。而这有可能造成严重的后果。因此确保SMP里面的缓存一致性十分重要。(实现策略本书没有讨论)

多处理器、超线程和多核共享资源的区别:同时执行的两个线程之间共享物理资源,多处理器的共享物理资源最少,每个线程有自己单独的处理器;超线程共享最多,ALU、FPU、MSR、缓存等均为共享物理资源;而多核则介于两者之间,共享处理器,但不共享ALU、FPU等。

多核进程同步:多核之间为了保证数据的一致性,避免脏数据,主要通过硬件的原子操作达成。

总线锁:在多核环境下,还有一种硬件原子操作称为总线锁。总线锁就是将总线锁住,只有持有该锁的CPU才能使用总线。这样,由于所有CPU均需要使用共享总线来访问共享内存,而总线的锁住将使得其他CPU没有办法执行任何与共享内存有关的指令,从而使得数据的访问是排他的。

xchg:硬件提供的另外一种同步原语是交换指令,即xchg(exchange)。该指令可以以原子操作完成在寄存器和内存单元之间的内容置换。

Linux内核提供的原子操作包括如下几种

  • 总线锁:置换、比较与置换、原子递增操作。
  • 原子算术操作:原子读、设置、加、减、递增、递减、递减与测试。
  • 原子位操作:位设置、位清除、位测试与设置、位测试与清除、位测试与改变。

Windows内核提供的原子操作包括如下几种

  • 互锁操作(interlocked operation)
  • 执行体互锁操作(executive interlocked operations)

旋锁:旋锁(spin lock)是几乎所有多核操作系统均提供的一种CPU互斥机制,是操作系统内核用于多处理器互斥的机制,即用户程序不能使用旋锁进行互斥。旋锁通常用于保护某个全局的数据结构,如Windows里面的DPC(延迟过程调用)队列。这里的互斥指的是多个处理器或执行核之间的互斥,即两个处理器或核不能(物理上)同时访问同一个数据结构;而不是第8章中讲过的多线程之间的互斥。

旋锁与普通锁的区别:旋锁的拥有者是CPU,而不是线程。因此,如果一个CPU获得一个旋锁,那么运行在该CPU上的所有的线程都可以访问该旋锁所保护的寄存器和数据结构。旋锁的作用与Win-dows API里面的mutex作用非常类似。

旋锁机制:旋锁是一个特定的内存单元。这个特定的内存单位必须位于整个系统的共享内存里面。这是旋锁的物理载体。如果一个处理器要使用旋锁,就必须检查这个特定内存单元的值。如果为0,则将其设置为1,表示获得该旋锁。如果为1,则表示该旋锁被其他处理器所占有,则在该旋锁上进行繁忙等待,即不停地循环,这也是叫旋锁的缘故。

旋锁的缺点:旋锁的问题是对总线的竞争,每个CPU在检查旋锁的状态时均需要使用系统总线来访问旋锁所在的共享全局内存单元。如果它要测试并设置这个全局内存单元,就需要使用内存总线。那么它不停地发信号到总线上,会造成对内存总线的竞争。这是效率非常低下的一种机制。这就是旋锁的缺点。

队列旋锁:队列旋锁的中心思想就是,需要旋锁的CPU不要到全局内存去SPIN,而是到自己的局部内存去SPIN。这样就可以排除对总线的竞争。在旋锁上排一个队,就表示哪些CPU要这个旋锁。释放的时候就去检查这个队列,交给队列里的第一个CPU。

调度域:调度域指的是一组CPU。而负载平衡就是在一个调度域里面的CPU之间进行平衡,使得它们执行的进程数相同或类似,或者它们的繁忙程度类似。

负载平衡的目标:负载平衡的目标是将进程均匀分配到每个CPU的就绪队列里面。在负载平衡时,我们需要找出最繁忙的调度域,在每个调度域里面找出最繁忙的队列,然后将任务从一个队列移动到另一个队列,或者另一个调度域。

关联线程的调度:如果一个应用被分解为多个线程,由于多个线程需要共享许多资源,这时需要将这些线程尽量分配到同一个处理器核上执行,以提升缓存命中率。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容