V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
garyox64
V2EX  ›  操作系统

看操作系统看懵了,多 cpu 写 mem 是怎么保证一致性的?

  •  
  •   garyox64 · 2022-07-26 22:48:52 +08:00 · 1392 次点击
    这是一个创建于 849 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了一点分布式算法,个人理解分布式解决的本质的多进程修改数据时保持一致性的问题 联想到在操作系统内的类比场景,就是多 cpu 访问多内存,然后看了操作系统的书,都有讲多核调度,但是似乎都只是讲了 task 在多核的算力分配的场景 好奇难道不需要考虑多 cpu 写 mem 失败的场景吗(对操作系统不太熟悉) 比如:a=1 ; task A 是给 a+1 ; task B 是给 a+2 两个 task 同时在两个 cpu 上同时修改 a ,怎么保证一致性呢,操作系统的书里没有讲到这个东西,比较好奇

    6 条回复    2022-07-27 10:32:31 +08:00
    misdake
        1
    misdake  
       2022-07-26 22:55:51 +08:00
    都学到操作系统了,前面 CSAPP 里学的信号量、PV 还有印象么
    misdake
        2
    misdake  
       2022-07-26 23:23:55 +08:00
    看你写的内容,感觉像是把两个问题揉在一起提问:
    1. 你举的例子里,两个进程同时尝试读写同一个地址的时候,因为读写分别是原子操作但整体不是原子操作,可能会出现读读写写的错误情况,单核在上下文切换时也可能发生。这个要用信号量或等效的方法解决。资料 https://www.coursera.org/lecture/os-pku/xin-hao-liang-ji-pvcao-zuo-sbhMU
    2. 两个核心同时访问同一个地址,一个写一个读,在硬件层面,CPU 是否提供多核间的数据一致性,一致性保证到一个什么程度,是用怎样的方法保证的。这个可以从 CPU 缓存开始学,一直学到缓存一致性协议。资料 https://mp.weixin.qq.com/s/PDUqwAIaUxNkbjvRfovaCg
    garyox64
        3
    garyox64  
    OP
       2022-07-26 23:48:23 +08:00
    @misdake 不好意思 原来正文这个格式没有排版
    其实我说进程只是举例分布式的场景啦,其实想问的最终还是 多 cpu 写 mem 的一致性问题
    多 cpu 读写缓存这个书上也有讲的,所以我主要想了解的还是 多 cpu 读写 mem 的时候的一致性问题,我看了微信的资料,似乎并没有相关的介绍
    misdake
        4
    misdake  
       2022-07-27 00:07:52 +08:00
    @garyox64 #3
    如果是单机多进程分布的话,多 CPU 仍然是通过某种缓存一致的总线相连的,仍然能保证缓存一致性。读写 mem 其实就是在读写 cache ,所以这个天然就没问题。
    如果指的是多机的分布的话。内存不在同一个空间里,没办法直接写,要写一些基础设施来通过某种网络共享内存,很可能没有硬件的直接支持。这种情况下多机同时读写同一块数据要通过软件的方法来规避,尽量保证同一时间数据只有一个地方能读写,然后使用某种基于网络的同步机制,大家一起读。(即同时间最多 1 个读写,或者多个只读)
    yumenawei
        5
    yumenawei  
       2022-07-27 08:53:19 +08:00
    MESI 协议了解一下
    garyox64
        6
    garyox64  
    OP
       2022-07-27 10:32:31 +08:00
    @misdake https://www.cnblogs.com/yanlong300/p/8986041.html 找了一个资料,原来 MESI 的写回是通过 store buffer 写回的但是仍然不能 100%保证一致性,所以最后引入了 内存屏障的概念
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   988 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:13 · PVG 05:13 · LAX 13:13 · JFK 16:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.