檔案系統:介面

檔案共享語意(file-sharing semantics)

假設兩個人同時在編輯同一份共享文件。其中一人剛打出一個句子,另一人究竟在什麼時候會看到它——是立刻、是等第一人存檔後、還是只在第二人下次重新開啟檔案時?不同的答案給出非常不同的體驗,而且沒有哪一個自動就是「對的」。檔案共享語意就是作業系統或檔案系統對於「並行的使用者讀寫共享檔案時各自會看到什麼」所做出的那一套精確規則。

存在好幾套著名的規則。Unix 語意是常用之中最嚴格的:一個行程的寫入會立刻對所有共享那個開啟檔案的其他行程可見,彷彿大家在讀寫同一個共享物件——容易推理,卻很貴才能保證,尤其在網路上。session 語意(某些網路檔案系統採用)較鬆:一個行程所做的變更,要等它「關閉」檔案後其他人才看得到;在各自的工作期間,每個人實際上是在自己的快照上工作——這避免了不斷的協調,但意味著兩人可能彼此覆寫。不可變共享檔語意則乾脆繞過整個問題:宣告一個檔案一旦被共享就完全不能更改、只能讀,於是根本沒有什麼需要保持一致。

為什麼重要:所選的語意是一致性與效能之間的直接取捨,而它最尖銳之處正是共享最有用的地方——跨網路。遠端機器之間沒有共享記憶體、沒有即時通訊,所以「承諾每台機器在每次寫入發生的那一瞬都看到它」既慢、在網路出問題時甚至不可能。這就是為什麼網路檔案系統常常放寬到 session 語意。誠實的結論是:在共享情境裡,「檔案變了」並不是單一的全域真相——每個參與者看到什麼,完全取決於系統承諾的是哪一種語意。

在 Unix 語意下,若行程 A 把 "hello" 寫進一個共享的開啟檔案,行程 B 的下一次讀取立刻就看到 "hello"。在某網路檔案系統的 session 語意下,B 會一直看到舊內容,直到 A 關閉檔案,然後 B 只在它下一次開啟時才取得這個變更。

一次寫入何時對他人可見是一個承諾,不是自然法則。

遠端機器之間沒有共享記憶體或即時時鐘,所以在網路出狀況時,嚴格的逐次寫入一致性既慢又不可能,這正是許多網路檔案系統採用較鬆 session 語意的原因。並行控制是另一個更深入的主題。

又稱
consistency semanticssharing semantics共享一致性語意