Skip to content

Commit 558f073

Browse files
committed
add volatile
1 parent 254e73b commit 558f073

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

2023/08/learning_os.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,21 @@
99
OS 课缺失的 lecture7 可以看学堂在线公开课的版本
1010

1111
## 学习进度
12+
13+
书籍和课程视频
14+
1215
|||
1316
|---|---|
1417
|CSAPP| ch1 |
15-
|computer RISC-V edition| ch1.2 |
16-
|OS Three pieces| ch1 |
17-
|os_lecture| lecture03 |
18-
|操作系统(RISC-V)(2020秋)| 2.2 从OS角度看RISC-V |
18+
|计算机组成与设计 RISC-V edition| ch2.3.2 常数 |
19+
|OS Three easy pieces| ch4 进程抽象 |
20+
|rCore Turtorial Book| ch1.6 为内核支持函数调用 |
21+
|程序员的自我修养链接装载库| ch1.6 线程 |
22+
|os_lecture| lecture03 70min |
23+
|操作系统(RISC-V)(2020秋)| 3.4 系统调用 |
24+
25+
|||
26+
|---|---|
1927
|MIT 6.828 Operating System Engineering| |
2028
|xv6 a simple Unix-like teaching operating system| |
2129

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# [volatile 不解决分支预测](/2023/08/volatile_and_cpu_branch_prediction.md)
2+
3+
之前看书碰见过 volatile 好几次一直没记笔记,最近看 程序员的自我修养 书中也提到了 volatile 所以得重视起来
4+
5+
根据 ptr::read_volatile 的文档: `guaranteed to not be elided or reordered by the compiler`
6+
7+
由于 CPU 读写速度远快于内存,所以 CPU 会分支预测某个 if 大概率走 true 分支的时候就会提前执行完 true 分支的指令
8+
9+
## 分支预测导致单例模式要 double check
10+
11+
显然 volatile 只能解决**编译器优化掉和重排** 并不能干预 CPU 分支预测提前执行
12+
13+
程序员的自我修养 书中说 引入 barrier 函数和 double-check 解决指令重排导致的单例初始化问题
14+
15+
## branch prediction side-channel attack
16+
17+
malware(恶意软件) 欺骗 CPU 利用分支预测提前执行的特点 提前读取其他进程的内存数据而不会 SIGSEGV
18+
19+
目前只能通过操作系统来防御这样分支预测的 malware

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
- [文章列表 - 吴翱翔的博客](/)
22
- [正在读的书](/books.md)
33
- **2023-08**
4+
- [volatile 不解决分支预测](/2023/08/volatile_and_cpu_branch_prediction.md)
45
- [qemu vscode gdb](/2023/08/qemu_riscv_vscode_gdb.md)
56
- [gcc/ld --as-needed](/2023/08/gcc_ld_as_needed.md)
67
- [dumpbin](/2023/08/dumpbin_ldd_alternative_on_windows.md)

0 commit comments

Comments
 (0)