有效/無效位元(valid-invalid bit)
想像旅館櫃台的房況看板:每個房號旁邊有一盞小燈。綠燈代表房間已備妥、如預期被佔用;紅燈代表先別把客人帶過去,要先找經理確認。有效/無效位元就是分頁表中每一頁旁邊的那盞小燈。它用單一個位元告訴硬體:這一頁此刻是不是真的在記憶體裡,或者碰它需要呼叫作業系統。
具體來說,每個分頁表項目除了頁框號之外,還含有一個有效/無效位元。有效同時代表兩件事:這一頁屬於程式的位址空間,而且它目前常駐於某個實體頁框,於是記錄的頁框號可以直接使用。無效則代表這一頁此刻不在記憶體裡(它在後備儲存上),或者這個位址根本不屬於這個程式的合法空間。當硬體在轉譯某位址時發現位元為無效,它不會完成這次存取;它會陷入作業系統。作業系統接著查看自己的記錄來判斷是哪一種情況:若該頁只是不在常駐,就服務一次分頁錯誤並把頁帶進來;若位址真的是非法的,就引發一個通常會殺掉犯規程式的錯誤(區段錯誤,segmentation fault)。
為什麼重要:這一個位元是需求分頁的樞紐。它讓硬體在每一次記憶體參考時,都能在不勞動作業系統的情況下問出那個便宜的問題「這一頁在這裡嗎?」,並且只在答案為否的罕見情況下才升級給作業系統。沒有它,就沒有快速的方法去標記哪些頁是常駐的,需求分頁那種延遲載入的魔法也就無法運作。一個常見的混淆:無效並不總是代表錯誤——大多數時候它只是代表「尚未載入」,這是完全正常、可復原的事件。
某分頁表顯示第 7 項為有效 -> 頁框 12,於是位址 7 的資料直接從頁框 12 讀取。第 8 項為無效,於是讀取第 8 頁會陷入作業系統,作業系統把第 8 頁從磁碟載入,將第 8 項設為有效 -> 頁框 3,再讓存取繼續進行。
有效代表「直接用頁框號」;無效代表「先陷入作業系統」。
有效/無效位元承載了兩種不同的意義——「不在常駐」與「根本不是你的記憶體」。硬體把兩者都當成一次陷入;只有作業系統能憑藉自己的記錄,把可復原的分頁錯誤與非法存取區分開來。