Skip to content
所有標籤

#systems

32 篇文章

Cache coherence:MSI、MESI 與 false sharing|Stanford CS149 第 14 堂

每個核心都有自己的 cache,同一個位址就可能同時有好幾份副本,各核看到的值會不一樣。這不是加鎖能解決的問題,是硬體複製資料造成的。CS149 L14 先定義什麼叫 coherent,再拆解 snooping 的 MSI 協定:要寫就先廣播 BusRdX 讓別人作廢,MESI 多一個 E 狀態省掉「讀完再寫」的第二筆交易,directory 則把廣播改成點對點。對程式設計師最實際的後果是 false sharing:兩個 thread 寫不同變數,只因為落在同一條 cache line,就讓 cache line 在核心間來回彈,投影片的 demo 慢了三倍。

平行計算:課程定位與兩條閱讀路線|Stanford CS149 課程總覽

CS149 是 Kayvon Fatahalian 與 Kunle Olukotun 在 Stanford 教的平行計算課,從多核 CPU、SIMD 一路講到 GPU、AI 加速器、資料中心,最後回到 cache coherence 與 lock-free。Fall 2025 的 18 份投影片、5 個程式作業的 starter code 與 README、4 份書面作業 PDF 都能匿名取得,本系列評為 A3(足以自學)。缺口有四個:當期錄影只在 Canvas;PA1 評分用 Stanford myth 機器;PA4 要自費租 AWS Trainium2,而且課程 AMI 是私有的;PA5 的 H100 排隊系統與排行榜要 SUNet ID。公開錄影是 2023 版,本系列只拿它當聽講補充。

多核、SIMD、硬體多執行緒,三種平行各解決什麼問題|Stanford CS149 第 2 堂

CS149 Fall 2025 第二講用一個計算 sin(x) 的迴圈,依序加上三個想法:把電晶體拿去做更多核心(multi-core)、讓一道指令同時驅動多個 ALU(SIMD)、在同一個核心上交錯執行多個執行緒來隱藏記憶體延遲(hardware multithreading)。前兩個增加運算能力,第三個讓運算單元在等記憶體時不閒著。結論是三個條件:平行工作要夠多、同一組工作要跑同樣的指令、平行工作要比 ALU 更多才能隱藏延遲。

記憶體一致性:write buffer 讓 r1 = r2 = 0 變成可能|Stanford CS149 第 15 堂

Coherence 只管單一位址;memory consistency 管的是不同位址之間的讀寫,在別的 thread 眼中以什麼順序生效。CS149 L15 用兩個 thread、兩個變數的例子說明:sequential consistency 下 r1 = r2 = 0 不可能,但每顆現代處理器都有的 write buffer 會讓讀跑到寫前面,於是它變成可能。TSO、PSO、weak ordering 依序放寬更多順序換取效能,fence 與同步原語再把需要的順序補回來。對應用程式設計師的結論很短:寫沒有 data race 的程式,用同步函式庫,C11、C++11、Java 5 就保證你看到 sequential consistency。

單核為什麼不再變快,以及「快」為什麼不等於「有效率」|Stanford CS149 第 1 堂

CS149 Fall 2025 第一講先定義 speedup,再用三個課堂示範說明通訊與負載不均會吃掉加速比。接著解釋單核效能為什麼停滯:superscalar 能挖的指令層級平行大約在每時脈發四道指令就用完,時脈又被功耗牆擋住,所以效能只能靠多核與專用硬體。最後一段把焦點轉到效率:取一次 DRAM 的延遲約是 L1 cache 的 60 倍,搬 64 bits 的能耗是一次整數運算的上千倍,高效率幾乎都歸結到高效率地存取資料。

作業系統的歷史、抽象化與三條課程主線|Stanford CS111 第 1 堂

第 1 講沿 1940 年代共用 I/O 卡片、batch processing、multiprogramming 與個人電腦的演變,解釋 OS 的功能如何隨硬體成本與使用者需求逐層增加。

行程與執行緒的執行抽象、狀態與切換|Stanford CS111 第 2 堂

第 2 講先定義行程與執行緒的共享/私有狀態,再用 fork、execvp、waitpid 與 thread creation 說明核心如何建立執行單位。

核心執行緒、使用者執行緒、context switch 與 dispatcher|Stanford CS111 第 3 堂

第 3 講沿 running、blocked、ready 狀態轉移,拆解 PCB、context save/restore 與 dispatcher 如何完成一次 CPU 控制權交接。

交錯執行、race condition、atomicity 與 critical section|Stanford CS111 第 4 堂

第 4 講逐步拆解 Too Much Milk 的失敗排程,從具體 interleaving 推導 race condition、atomicity、critical section 與正確同步條件。

mutex、condition variable 與 Mesa semantics|Stanford CS111 第 5 堂

第 5 講用容量為 8 的環形 Pipe 證明:mutex 只提供互斥;condition variable 才能在 predicate 不成立時原子地釋放鎖並阻塞;Mesa semantics 下,wait 返回後必須用 while 重查條件。

關中斷、原子指令、spinlock 與阻塞式 lock 的實作|Stanford CS111 第 6 堂

第 6 講從單核心關中斷一路修到多核心 v5,追蹤 guard、lock 與 wait queue,說明 atomic exchange、spin、block 與 wakeup 如何避免 race 和 lost wakeup。

Deadlock 的四個必要條件與全域鎖順序|Stanford CS111 第 7 堂

第 7 講用 request/ownership graph 拆出 deadlock 的四個必要條件,再比較 detection、prevention 與 lock ranking;實務上最常破壞 circular wait,但代價是所有模組必須遵守同一個全域順序。

FIFO、round robin、priority 與多核心排程|Stanford CS111 第 8 堂

第 8 講從 FIFO、round robin 與不可實作的 SRPT,推到自適應 priority queues、BSD scheduler,再處理多核心 queue contention、core affinity 與 work-conserving 的衝突。

object file、symbol、relocation、static 與 dynamic linking|Stanford CS111 第 9 堂

第 9 講沿著 source→assembly→object→executable→process,拆解 linker 的三次掃描、symbol relocation,以及 dynamic loader 如何用 jump table 把 shared library 位址延後到啟動時解決。

allocator 介面、free list、fragmentation 與 placement policy|Stanford CS111 第 10 堂

第 10 講從 stack 的可預測 LIFO,推到 heap 的 free lists、first/best fit 與 slabs,再比較 reference counting 和 mark-and-sweep 如何在 dangling pointers、leaks、cycles、fragmentation 間取捨。

Storage Reclamation、Reference Counting 與 GC|Stanford CS111 第 11 堂

第 11 講的官方 PDF 與 Lecture 10 逐位元組相同;本文誠實保留此 artifact 缺口,聚焦後半的 reachability、dangling pointers、leaks、reference-count cycles 與 mark/compact GC。

可信任的定義、隔離、驗證與從不信任建立信任|Stanford CS111 第 12 堂

第 12 講把 trust 定義為自願承受 vulnerability,區分 over-trust 與 untrustworthiness,再用 assumption、inference、substitution 分析 Linux TCB、xz attack 與 AI code policy。

位址空間、relocation、base-and-bound 與保護|Stanford CS111 第 13 堂

第 13 講從 single-tasking 與 load-time relocation 的失敗出發,以 MMU 的 base/bound 建立 virtual/physical address spaces、透明隔離與 traps,再用 segmentation 解開單一連續區域的限制。

segmentation、共享、稀疏位址空間與配置限制|Stanford CS111 第 14 堂

Lecture 14 的官方 PDF 與 Lecture 13 逐位元組相同;本文明示此缺口,聚焦 segmentation 如何以多組 base/bound/protection 支援 growth、sharing、compaction,以及 fixed-count、fragmentation、rigid layout 限制。

page、frame、page table、TLB 與多層頁表|Stanford CS111 第 15 堂

第 15 講以固定大小 pages 消除跨 process external fragmentation,再拆解 x86-64 四層 page-table walk、sharing/aliasing 與 TLB,說明 translation speed、table sparsity、context switch 和 page size 的連動取捨。

Page Fault、Demand Fetching 與 Prefetch|Stanford CS111 第 16 堂

Demand paging 只在需要時載入頁面;present bit、精確例外與可重啟指令讓核心能從 executable、zero-fill 或 backing store 安全補頁。

從 page fault 到 Clock,記憶體滿了該換掉誰?|Stanford CS111 第 17 堂

第 17 講把 demand paging 分成 fetching 與 replacement:MIN 無法預知未來,精確 LRU 成本過高,Clock 只靠 reference/dirty bits 找夠舊的 page;active working sets 放不進 RAM 時,1% fault rate 就可能帶來約 1,000 倍 slowdown。

磁碟幾何、Interrupt 與 DMA|Stanford CS111 第 18 堂

磁碟把機械式 seek 與 rotation 隱藏成線性 block API;現代 I/O 再用 memory-mapped registers、DMA queues 與 interrupts,讓 CPU 只負責下命令和收完成通知。

檔案抽象、配置策略與 FAT|Stanford CS111 第 19 堂

檔案系統把耐久 byte collection 映射到磁碟 blocks;contiguous、linked 與 FAT 分別交換 locality、成長彈性、random access 與 metadata 成本。

多層 Inode、Index Walk 與磁碟排程|Stanford CS111 第 20 堂

4.3BSD inode 用 direct、single-indirect 與 double-indirect pointers 讓 lookup depth 隨檔案大小分級;FIFO、SPTF、SCAN 與 CSCAN 則交換 seek cost、公平性與等待時間。

Block Cache、Free Bitmap 與 Delayed Allocation|Stanford CS111 第 21 堂

Block cache 把熱索引留在 DRAM,bitmap 與保留空間維持配置選擇,fragments 和 delayed allocation 則用較晚、較完整的資訊換取 locality。

Directory Lookup、Hard Link 與 Symbolic Link|Stanford CS111 第 22 堂

Directory 把文字名稱映射到 file-system-local i-number;hard link 共享 inode 與 reference count,symbolic link 則保存 pathname,換得跨檔案系統能力但可能形成 loop 或 dangling link。

從 fsck、Ordered Writes 到 Write-Ahead Logging|Stanford CS111 第 23 堂

檔案系統一次操作會改動多個 block,崩潰卻可能發生在任兩次寫入之間;本講比較 fsck、ordered writes 與 write-ahead logging 如何交換復原時間、效能、耐久性與一致性。

Journaling、Transaction 與 Checkpoint|Stanford CS111 第 24 堂

第 24 講從 WAL 入口往下拆 transaction、idempotent replay 與 checkpoint,說明一致性不等於 durability,journal 也不能取代 fsync 與備份。

Truth, Trust, and Technology——演算法、生成式 AI 與 deepfake 如何改寫信任|Stanford CS111 第 25 堂

第 25 講把 trust 拆成假設、推論與替代三種建立方式,再檢視社群推薦、生成式 AI 與合成媒體如何放大過度信任;實務答案是保留來源、交叉驗證並協調責任。

Flash Translation Layer、Garbage Collection 與 Wear Leveling|Stanford CS111 第 26 堂

Flash 只能逐頁 program、整個 erase unit 清除;FTL 以 out-of-place mapping 隱藏不對稱,再用 garbage collection、temperature segregation、wear leveling 與 TRIM 管理放大成本。

用四個觀念串起並行、記憶體與儲存|Stanford CS111 第 28 堂

第 28 講把整學期收斂成並行、記憶體、儲存三條主線,再用 virtualization、atomicity、locality、layering 四個觀念解釋作業系統如何管理共享資源。