惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Schneier on Security
The Last Watchdog
The Last Watchdog
Cyberwarzone
Cyberwarzone
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
The Cloudflare Blog
V
V2EX
博客园_首页
博客园 - 聂微东
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
T
Tenable Blog
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
SecWiki News
SecWiki News
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
T
Troy Hunt's Blog
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
A
About on SuperTechFans
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
D
DataBreaches.Net
P
Privacy & Cybersecurity Law Blog
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
D
Docker
P
Proofpoint News Feed

汇编

在浏览器使用 wasm 如何解决兼容性问题 C++中 i=i; 与 *p=i; 对应的汇编代码为什么不一样? - V2EX 汇编问题求解,这个问题我自己确实做不来 - V2EX 有谁能来教我一下汇编的问题吗?我真的因为这个卡了好久了 - V2EX 如何学习汇编语言? - V2EX Linux 下, global variable 在汇编里是什么时候被初始化的呢? 求大神帮忙解答两个题,关于编程的,应付微机原理与应用过关考试的,不胜感激 6.828 lab1 Exercise 2 死循环问题 - V2EX 如何解决 ShellCode 中 call 所产生的 \x00 - V2EX 用 AMD64 汇编写的 web server - V2EX 来做个调查,各位V2exer 有多少学过汇编?有用过否? - V2EX Introduction to UNIX Assembly Programming - V2EX
Lock 指令到底有什么用?
Orlion · 2021-01-14 · via 汇编

这是一个创建于 1976 天前的主题,其中的信息可能已经有所发展或是发生改变。

最近在看原子操作的原理,得知是通过 Lock 指令保证了内存读写原子性,其原理是

  • CPU 保证 Lock 后缀后跟的指令原子性
  • 老 CPU 上通过锁总线来保证可见性
  • 新 CPU 上如果数据存在于 cpu cache 上时通过 MESI 协议来实现可见性,否则还是锁总线

对此我产生了几个问题:

  1. 难道不声明 Lock CPU 就不通过 MESI 协议保证 cache 一致性吗?我觉得不是, https://strikefreedom.top/cpu-caches-theory-and-application 这篇文章的 demo 中并没有声明 Lock 指令,但仍然出现了缓存失效。
  2. 是不是除了 cpu cache 外还有 store buffer 和 invalid queue 会影响可见性,所以 CPU 只能保证 cache 的一致性但保证不了其他硬件缓存层面的一致性,所以还是需要 Lock 指令?
Jooooooooo

1

Jooooooooo      2021 年 1 月 14 日

MESI 我理解保证的是 L1, L2 cache 上的一致性吧, 对于 cpu 寄存器中的值不保证.

yzbythesea

3

yzbythesea      2021 年 1 月 14 日

Lock 是一个 prefix,就是指定接下来的 instruction 一定是原子操作的。Lock 只能和极少数指令一起使用,通常是 read-modify-write,比如 INCL(i),就是 i = i + 1 。在 Lock 指令执行的时候,CPU 对于这个 cache line 有绝对控制权,不会共享给其他 CPU 。你不用 Lock,CPU 不会保证该 cache line 只有他能用。

Orlion

4

Orlion      2021 年 1 月 14 日

@yzbythesea CPU 操作 L3 cache 上同一个 cacheline 同一位置数据,不加 Lock 就不是原子的,这样理解吗?如果不加 Lock 也是原子的,那 CPU 没必要锁吧

yzbythesea

5

yzbythesea      2021 年 1 月 14 日 via iPhone

是啊 cache 都是 CPU 共享的 除非你是单核

yzbythesea

6

yzbythesea      2021 年 1 月 14 日 via iPhone

这个要看你是什么操作 比如 读,肯定是原子啊,所以 Lock 不能用于这个指令