學習指南 /

作業系統:選鎖之前先解釋交錯執行

併發推理先列允許發生的事件。本路線分開作業系統抽象、核心實現與真實語言規則。一個軌跡能反駁全稱保證,同步論證則須說明它排除了哪些軌跡。

課程主題: 作業系統

學習計畫與例題由 University Reading List 編輯整理。 編輯與選書方法 · 來源確認日期:

本頁目錄

這份指南適合誰

適合掌握C、指標、棧和計算機組成的系統學習者。下題是完整規定的順序一致抽象機;不能把這些規則偷偷套給未同步的C資料競爭。

選擇你的起點

需要講清作業系統概念的免費教材

用OSTEP按虛擬化、併發、持久化推進,先問機制解決什麼,再聯絡不變式。

想看核心機制

掌握C和體系結構後讀固定xv6 RISC-V修訂5,先匹配書與程式碼再追行號。

課程需要綜合參考

用Operating System Concepts建立術語地圖,按課表選程序和同步,不一次讀完所有平臺案例。

三本書如何取捨

作業系統:三個簡單部分

Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau · 版次: 1.00 · 2018

免費作業系統教材,結合概念與實驗

什麼情況下適合讀
能追C指標,想從系統問題理解機制。
什麼情況下選別本
仍需第一門程式設計,或期待線上正文與所選紙書逐頁一致。
建議閱讀範圍
讀OSTEP併發引言、鎖和條件變數,必要時先補程序及地址空間。
限制與取捨
所選2018記錄為1.00,作者線上已1.10;免費分章PDF與付費合併便利版不同。

選書前試做

把共享更新拆成讀取、私有計算與寫回,列允許次序。

檢查標準: 先說什麼原子,不能把高階語句自動當原子操作。

官方免費閱讀 ↗

書目資訊與取得方式 →

xv6: a simple, Unix-like teaching operating system

Russ Cox; Frans Kaashoek; Robert Morris · 版次: RISC-V revision 5 · 2025

免費教學核心配套

什麼情況下適合讀
想把程序、陷入、記憶體與鎖連結到小型實現。
什麼情況下選別本
尚缺C/彙編,或想讓教學核心代表全部生產權衡。
建議閱讀範圍
2025年9月2日RISC-V修訂5,先介面與組織,再按標題讀鎖和排程並配同版程式碼。
限制與取捨
小型設計便於追路徑但省略生產複雜性,不能混用x86說明、新倉庫和舊行號。

選書前試做

選一個鎖保護的不變式,找所有能改狀態的路徑。

檢查標準: 不只報鎖名,須說明為什麼所有相關路徑需要同一把鎖。

官方免費閱讀 ↗

書目資訊與取得方式 →

Operating System Concepts(作業系統概念)

Abraham Silberschatz; Peter Baer Galvin; Greg Gagne · 版次: 10 · 2018

商業綜合參考

什麼情況下適合讀
需要課綱中的程序、同步、記憶體與儲存術語。
什麼情況下選別本
把公開課件或部分練習解答當作免費全書與全部教師答案。
建議閱讀範圍
2018第10版按標題選程序/執行緒、同步和所需記憶體管理。
限制與取捨
ISBN 9781119320913為Wiley電子產品,其他套裝及紙本配套編號不同。

選書前試做

比較互斥、順序與進展三類要求。

檢查標準: 互斥可阻止重疊,卻不自動決定誰先,也不規定排程策略。

書目資訊與取得方式 →

開始前需要會什麼

交錯是什麼?

保留各執行緒自身先後約束的單個事件順序,結果按該順序實際讀到的值計算。

保護多大範圍?

若不變式依賴讀改寫組合,應保護整個組合;分別鎖讀取和寫回不讓兩者成為一個更新。

模型省略什麼?

本題原子讀寫且全域性有序,計算私有;真實語言記憶體、編譯變換、故障與公平性另需說明。

六步學習計畫

勾選用於自我記錄,並非成績評定;標記不會傳送給本站。

  1. 規定機器

    建議閱讀範圍: OSTEP併發引言。

    要做的練習: 寫共享狀態、私有暫存器、原子事件及各自順序。

    檢查標準: 不偷加未說明的語言行為。

  2. 追一條執行

    建議閱讀範圍: 同一閱讀與原題。

    要做的練習: 逐次列讀取值與寫回值。

    檢查標準: 寫回用先前儲存值,不必是最新共享值。

  3. 覆蓋全部順序

    建議閱讀範圍: 同步閱讀。

    要做的練習: 列兩讀前寫約束下的六條順序。

    檢查標準: 證明列舉完整而非只舉有趣例子。

  4. 寫不變式

    建議閱讀範圍: xv6鎖及參考討論。

    要做的練習: 寫整個更新須共同觀察和釋出的狀態。

    檢查標準: 保護範圍由不變式決定,不由程式碼一行長短決定。

  5. 改變同步

    建議閱讀範圍: 變式。

    要做的練習: 用同一互斥鎖重算,再額外指定順序。

    檢查標準: 互斥與結果確定是兩件事。

  6. 接真實實現

    建議閱讀範圍: 同版xv6路徑或課程題。

    要做的練習: 說明語言和核心機制怎樣建立假設順序。

    檢查標準: 抽象軌跡正確不認證未審查的生產程式。

原創例題與解析

原創事件機:原子讀取不等於原子更新

共享x初值10。執行緒1讀入r1再寫r1+3,執行緒2讀入r2再寫2r2,事件記R1,W1,R2,W2。列R1先W1、R2先W2的所有順序及末值。

前提假設

各次讀寫不可分,四事件順序一致,讀取最近已寫值或初值10。私有計算無共享事件,兩執行緒均完成,無其他訪問。這不是未同步C程式。

  1. R1,W1,R2,W2依次讀10、寫13、讀13、寫26。R2,W2,R1,W1依次讀10、寫20、讀20、寫23。
  2. R1,R2,W1,W2與R2,R1,W1,W2均讀兩次10,最終W2寫20;R1,R2,W2,W1與R2,R1,W2,W1也讀兩次10,最終W1寫13。
  3. 線上程1兩有序事件的四槽中選二,有choose(4,2)=6種,其餘給執行緒2,上述已全部覆蓋。
  4. 末值集合{13,20,23,26}。序列得26或23,其餘因儲存的舊讀數覆蓋另一次結果而丟失更新。

答案與解釋

六條合法交錯只產生13、20、23、26,單個事件原子不使複合更新原子。

檢驗結果

每條用四行狀態帳復算;不能推廣給記憶體/競爭語義不同的語言執行。

改變假設,再做一題

改變同步:互斥仍留下順序選擇

僅改同步:同一互斥鎖覆蓋各執行緒整段讀取與寫回,且都完成。剩什麼結果?再額外規定執行緒1整段先於執行緒2的交接。

  1. 臨界區不能重疊;1先時10→13→26,2先時10→20→23。
  2. 排除了13與20,仍有23及26,因為加法與翻倍不交換,互斥規則未選順序。
  3. 額外交接後僅10→13→26。順序要求是新增條件,不能從同鎖推得。

答案與解釋

僅互斥得{23,26},加指定交接得{26};原子性與確定順序不同。

檢驗結果

分別複合兩更新函式;公平、死鎖及真實語言正確性還需實現論證。

常見誤區

假定語句原子

原始碼更新可能包含多個可見事件。

鎖名當證明

所有相關訪問須由同一合適鎖保護完整轉換。

互斥當順序

不交換的序列操作仍可有不同結果。

進入下一階段之前

  • 能列舉全部順序並復現讀寫值。
  • 能說明同步精確排除哪些結果。
  • 能分清抽象機與真實語言/核心。

參考來源與版本

來源確認日期:

這些是本站建議的學習活動,並非大學官方作業,也不代表對每本書逐頁通讀。

編輯與選書方法 →