操作系统之哲学原理14----多核原理

多核体系结构

多核体系结构分4个演变阶段:

多处理器结构(主板上两个CPU):

  • 一个总线上挂多个处理器
  • 根据处理器的角色分:对称多处理器结构(SMP)、非对称多处理器结构(AMP)

多线程结构(一核两线程):

  • 由于单处理器的性能没有得到全部发挥,让一个处理器同时执行多个线程。
  • 在处理器上多加入一个逻辑处理单元指针。
  • 共享:ALU、浮点运算单元、二级缓存、某些MSR
  • 不共享:本地APIC、通用寄存器、一级缓存、
  • 需要芯片和操作系统都支持:Windows XP、Linux 2.4以后都支持多线程处理器。

多核结构(四核、八核):

  • 一个CPU多套执行单元
  • 不共享:ALU、FPU、二级缓存、本地APIC、BIOS。
  • 共享:某些MSR、最后一级缓存
  • 在处理器内部,两个核之间隔绝,通过处理器外部,北桥芯片的仲裁器负责任务分配和缓存协调。

多核超线程(四核八线程):

  • 结合多线程结构和多核结构

对于多核处理器,有一个核被设置为启动处理器(BSP),其它为应用处理器(AP)。在启动阶段,现有BSP进行启动工作,之后BSP通过中断唤醒各个AP进行初始化。

处理器间通信:

  • CPU间通信需要通过中断进行,不然无法引起另一个CPU的响应。
  • 每个CPU都有一个本地APIC(高级可编程中断控制器)来协调处理器间中断。
  • 此外主板上还有IO APIC,负责处理来自外部的IO中断。多有CPU共享IO APIC。

多核处理器,每个核都有独立的缓存,为了确保同一内存地址在多个缓存里内容相同,需要处理缓存一致性问题。微软使用MESI模型处理缓存一致性问题。

多核环境下对操作系统的修正

进程的同步

原子性变成跨越CPU的原子性,即一个CPU执行时,另一个CPU不执行某段程序。

软件同步原语仍然必须基于硬件原子操作的支持。

硬件原子操作

前面章节说过,单核情况下,硬件提供的原子操作有三种:

  • 中断启用与禁止
  • 加载存入指令
  • 测试与设置

这三种里,中断在多核环境下无法保证原子。其它两种还可以用。

此外还有一种总线锁原子操作,就是将总线锁住,只有持有该锁的CPU才能使用总线。

还有一种同步原语:xchg指令。

软件同步原语

在硬件原子操作之上,操作系统提供程序使用的软件同步原语。

例如:

  • 互斥锁
  • 执行体
  • 旋锁:CPU互斥机制,不是线程互斥机制。拥有旋锁的CPU上的所有线程都可以访问该旋锁保护的数据结构,其它CPU上的线程无法访问被保护的数据结构。

进程调度

除了单核进程调度涉及的各种问题以外,还需要多个核之间的负载平衡问题。

每个CPU都有自己的就绪队列。

主动负载平衡:队列里面进程数多的CPU将某些进程推出去。

被动负载平衡:队列为空的CPU从别的CPU队列里面将进程拉出来。

钉子进程:必须在特定CPU上执行的进程。钉住的原因:

  • 非对称多处理器体系结构,各个核功能不同
  • 某个进程的许多信息已经在某个CPU的缓存中。
  • 一个进程的多个线程尽量分配到一个CPU上,因为这些线程共享的许多资源都在这个CPU上。

———————————————————————————————————————————

欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值