第2章 記憶體管理 2 10 頁換入

2021-04-12 23:01:26 字數 1337 閱讀 9749

2.10 頁換入:

訪問乙個不在物理記憶體中的虛擬記憶體頁將導致頁故障的發生。

頁故障是處理器在通知作業系統,它不能將乙個虛擬位址轉換到實體地址。在這裡是因為當

頁被換出時描述該頁虛擬記憶體的頁表項被標識成無效。處理器不能處理虛擬位址到實體地址

的轉換,所以它把控制傳回作業系統,並同時描述發生頁故障的虛擬位址和故障原因。

處理器相關的頁故障處理

**必須找到v m _ a r e a _ s t r u c t資料結構,該資料結構描述發生頁故障處的虛擬記憶體區。它通過

查詢程序的v m _ a r e a _ s t r u c t資料結構來進行,直到找到包含故障位址的那個。這是一段對時間

要求很嚴格的**,並且程序的v m _ a r e a _ s t r u c t資料結構被組織成使這種查詢耗費盡量少的時

間。執行完處理器相關動作並發現故障虛擬位址是位於合法的虛擬記憶體區中,頁故障處理過

程對於可執行l i n u x的所有處理器,就成為通用並且適用的。通用的頁故障處理**查詢故障

虛擬位址的頁表項。如果找到的頁表項從屬於乙個換出的頁, l i n u x必須把該頁換回物理記憶體。

被換出的頁表項格式是處理器相關的,但所有處理器都把這些頁標識為無效,並把在交換文

件中定位該頁所需的資訊放進頁表項中,為了把該頁換入物理記憶體, l i n u x需要使用這些信

息。這時, l i n u x知道了故障的虛擬位址,並有乙個頁表項包含該頁被交換出到何處的資訊。

v m _ a r e a _ s t r u c t資料結構可能含有乙個指標指向乙個例程,用於把它描述的虛擬記憶體區中任何

頁換回物理記憶體,這是它的s w a p i n操作。如果有此虛擬記憶體區的s w a p i n操作,l i n u x將使用它。

事實上,它正是system v 共享記憶體頁的處理方式:因為它需要特殊處理,來適應換出的

system v共享頁的格式與普通換出頁格式的差異。也可能沒有s w a p i n操作,這時l i n u x將認為

它是乙個普通頁,不需要特殊處理。它將分配乙個空閒物理頁並從交換檔案中讀回被換出的

頁。該頁在交換檔案中的位置資訊(及哪個交換檔案)將從相應無效頁表項中獲得。

如果引起頁故障的訪問不是寫訪問,則該頁被留在交換快取中,並且其頁表項不被標識

成可寫。如果該頁以後被寫,將發生另乙個頁故障,並且那時該頁將被標識為「髒」,其頁表

項從交換快取中被移去。若該頁沒被寫並且它需要再次被換出時, l i n u x可以免去把該頁寫到

交換檔案,因為它已經在交換檔案中了。

如果引起把頁從交換檔案讀回的訪問是寫操作,則此頁被從交換快取中移出,並且其頁

表項被標識為「髒」和「可寫」。 

Objective C第2版第9章 記憶體管理

記憶體管理主要基於指標物件進行,作用於使用alloc new copy關鍵字建立的指標物件。withcapacity方法,或者別的方法建立的例項物件,無需進行記憶體管理,假設已經將計數器 1且設定為自動釋放。記憶體管理主要有2種方法實現 一種是禁用arc功能,通過手動呼叫記憶體管理方法進行實現 第二...

第2章 管理執行緒

1.不等待執行緒完成的啟動方式 include include includeusing namespace std void print int main 執行結果 ps e desktop g std c 11 1.cpp ps e desktop a ps e desktop 該方法中的啟動執...

第12章 段式記憶體管理

分頁式記憶體管理基本解決了交換記憶體管理的缺點,但自己本事也有缺點 基本無法進行共享記憶體,因為對乙個記憶體頁來說只要裡面有乙個位址不能共享,那整個頁就不能共享,日常中乙個記憶體頁中不能共享資料得位址是很常見的,所以分頁記憶體基本不能共享 那怎麼解決記憶體共享的問題呢 段氏記憶體管理 段氏記憶體管理...