
記憶體管理
|
315
這個共享的資料可能僅供讀取,或是可供讀取和寫入。當一個行程寫入一個經共享之可
供寫入的頁面時,有兩種情況可能會發生其中一種。其中最簡單的一種情況:核心允許
進行寫入操作,此狀況下,共享該頁面的所有行程都可以看到寫入操作的結果。允許多
個行程讀取或寫入一個經共享的頁面,通常需要經過一定程度的協調及同步化,若在核
心層級剛完成寫入操作,則共享資料的所有行程會立即看到結果。
另外,MMU 會攔截寫入操作以及產生一個例外事件;核心的回應是自動替進行寫入操
作的行程為該頁面建立一個新的副本,這讓寫入操作得以對新的頁面副本繼續進行。我
們稱此做法為
寫入時才複製
(copy-on-write,常簡寫為 COW)。
2
事實上,允許多個行
程對共享的資料進行讀取操作,將可節省記憶體空間。當一個行程想要寫入一個共享的
頁面時,它馬上會收到該頁面之獨一無二的副本,這讓核心的行動好像是,行程具有它
自己私用的副本。因為 COW 是逐頁面進行的(page-by-page basis),採用此做法,一
個大型的檔案將可有效地讓許多行程所共享,而且個別的行程只會在它們寫入那些頁面
時,取得獨一無二的實體頁面。
記憶體範圍
核心會把頁面安排進區塊(block)以分享某些特性,例如存取權限。這些區塊稱為
映
射
(
mapping
)、
記憶體區域
(
memory area
)或
記憶體範圍
(
memory region
)。你可以
在每個行程中找到某些類型的記憶體範圍:
•
本文區段
(
text segment
)包含了一個行程的程式碼、字串字面值( ...