共享存储系统

什么是共享存储系统

✅ 一、“共享存储系统”这个术语的本质含义

当我们说一个系统是“共享存储系统”,实际上是在传达这样的含义:

  • 所有执行流可以访问统一的地址空间(Shared Address Space);
  • 不同执行流对同一地址的访问是有语义意义的,即存在一致性保证
  • 并行程序中,多个执行流通过读写共享变量通信与协作

这不仅是物理上的共享(即某个地址从所有执行流都可访问),还要是语义上的共享(不同执行流看到的值具有一致性逻辑)。


✅ 二、使用“共享存储系统”这个术语的隐含条件

你说得没错,要称之为共享存储系统,至少应该满足以下几类要求

1. 必须提供缓存一致性协议(Cache Coherence Protocol)

  • 否则,不同核对同一地址的值可能永远不同步;
  • 程序中共享变量的含义就失效了;
  • 通常用 MESI/MOESI 等协议实现。

必须满足Write Serialization(对同一地址)


2. 必须定义并实现内存一致性模型(Memory Consistency Model)

  • 决定多核系统中,所有地址的读写操作对于各个处理器之间是如何排序和可见的;
  • 最弱的模型如 Relaxed Consistency 允许乱序读写;
  • 最强如 SC(Sequential Consistency)要求按程序顺序+全局顺序。

必须满足读写顺序的语义规范


3. (通常)需要硬件同步机制支持(例如 LL/SC 或 AMO)

  • 原子操作(atomic operations)是并行通信和同步的基础;
  • 缓存一致性 + 同步原语 才能实现“正确的锁、互斥、信号量”等机制;
  • 硬件需保证这些操作的原子性和可见性

应提供:至少一些基本同步原语,如 AMO, LL/SC, CAS 等。


4. 地址空间必须是统一的,且可见的

  • 所有核看到的是同一个地址空间;
  • 而不是像分布式系统那样,每个处理器有自己的本地内存,访问他人内存需要显式通信(这就不是共享存储系统了,而是消息传递系统)。

必须满足共享地址空间 + 统一可见性


❌ 三、不能轻易将“多核系统”视为“共享存储系统”

因为有很多系统虽然是多核的,但由于没有满足上述条件(特别是缺乏 coherence 或 consistency),就不能称为“共享存储系统”。

比如:

  • 某些嵌入式多核芯片,核之间的通信只能靠 mailbox 或 message FIFO,不共享缓存;
  • 分布式多处理器系统(如早期 NUMA),虽然地址空间可以映射统一,但内存行为不一致;
  • 缺乏 coherence 的系统中,读写顺序完全不保证,不能满足 shared memory 语义。

单CPU下的共享存储系统

单CPU核心数硬件通信模型软件通信模型是否合理/常见?说明
1核共享存储共享存储✅ 非常常见单线程程序,所有变量自然共享,默认编程范式。
1核共享存储消息通信✅ 常见用环形缓冲区/队列等方式模拟消息(如 queue、管道),多线程协作。
1核消息通信共享存储❌ 几乎无实际意义模拟共享内存极度复杂,在单核上完全没有需要。
1核消息通信消息通信TODO
多核共享存储共享存储✅ SMP 标准配置多核处理器默认支持共享存储+缓存一致性协议(如 MESI),软件编程可直接共享变量。
多核共享存储消息通信✅ 常见应对同步复杂性,多线程程序(OpenMP、pthread)采用基于共享内存实现的消息通信(如队列)。
多核消息通信共享存储TODO
多核消息通信消息通信✅ 常见异构多核,RTOS 使用消息队列/mailbox(如 FreeRTOS)进行任务间通信。
  • 基于 单核CPU 的共享存储系统 是被谁 共享?
    “共享存储系统”的本质不是是否有多个处理器核心,而是是否有多个执行流(threads/processes)**通过**共享地址空间协作。

“A shared memory system refers to a computational model where multiple threads or processes can access a common address space, regardless of whether the system is single-core or multi-core. Hence, even a single-processor system can be a shared memory system, as long as it supports multiple concurrent threads with shared memory access.”

共享存储系统 可以带来什么好处

  • 基于共享存储的并行程序 和 针对单处理器系统编写的多线程程序 将可以直接在 共享存储多处理器系统 上运行.

共享存储系统下,系统规模增大而导致的问题

🔍 前言

  • 1型: 小规模系统如多核系统(芯片内 SMP)或者通过总线互联的少量多核芯片(主板内 SMP),硬件的复杂度相对较低.
  • 提供共享存储的代价随着处理器数量的增加而超线性地增加
  • 2型: 为了实现大规模系统,一组共享存储的节点可以互连在一起,将共享存储的抽象实现在节点内而不是节点之间.

🔍 分类说明

  • 1型:小规模、物理共享内存系统
    • 共享内存由硬件提供,强一致性、低复杂度
    • 芯片或芯片间通过总线或高速互连访问同一物理内存,常用于 SMP 服务器或嵌入式 SoC。
    • 内存共享在整个系统内,无节点概念
  • 2型:大规模、逻辑共享内存系统
    • 内存共享仅限节点内节点间共享靠 NUMA 硬件协议或 DSM 软件协议实现
    • 系统规模大(>4芯片或多台主机),为了扩展性牺牲了一致性或延迟。

按照系统规模进行的分类

✅ 各类多处理系统架构分类表(含1型/2型)

分类系统类型架构解释节点节点所在位置互连方式是否真实共享内存
1型芯片内 SMP多个核心共享统一内存控制器与RAM无此概念芯片内NoC(Network-on-Chip)✅ 全共享,低延迟
1型主板内 SMP多个芯片共享同一物理 RAM无此概念主板内QPI / UPI / HyperTransport✅ 全共享,稍高延迟
2型NUMA一个芯片+本地RAM组成一个节点,远程访问其他内存存在延迟一个芯片+本地RAM主板内NUMA互连(如 Infinity Fabric)✅ 共享,但非均匀延迟
2型DSM一个主板+RAM+OS组成一个节点,通过网络通信模拟共享一个主板+RAM+OS主板外网络互连 + 软件一致性协议❌ 软件模拟共享

图解

  • NUMA
    在这里插入图片描述
1. 内容概要 本项目是一个支持科学函数的命令行计算器,兼容 C++98 标准。它实现了中缀表达式词法分析、后缀表达式转换与求值,支持常见数学运算(如幂、三角函数、对数等)与括号优先级解析。程序还提供了角度版三角函数、角度与弧度互转功能,并支持函数调试输出与函数演示模式。 2. 适用人群 * C++ 初中级学习者,特别是希望深入理解表达式求值机制者 * 需要一个可扩展的计算引擎的项目开发者 * 想通过项目实践词法分析、调度场算法、数学函数封装的开发者 * 高校学生课程设计、编译原理实践者 3. 使用场景及目标 * 实现中缀表达式的完整求解器,支持函数嵌套、优先级与结合性处理 * 提供角度与弧度版本的三角函数,以适应不同输入偏好 * 演示中缀转后缀过程,辅助编程教育与算法教学 * 提供科学函数辅助计算,如 `log`, `sqrt`, `abs`, `exp`, `ceil`, `floor` 等 4. 其他说明 * 支持函数:sin, cos, tan(弧度);sind, cosd, tand(角度) * 支持函数嵌套,如 `sin(deg2rad(30))` * 支持操作符:+, -, \*, /, ^, \*\*(幂运算)与括号优先级 * 所有函数均通过 map 注册,方便扩展与自定义 * 输入 `help` 查看支持函数,`demo` 观看转后缀过程,`quit` 退出程序 * 提示用户避免使用 `°` 符号,推荐使用角度函数代替 * 可通过 `g++ calculator.cpp -o calculator -lm` 编译(需链接数学库)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值