當爲進程創建頁面(將被映射到進程地址空間)時,該頁面將被映射到內核地址空間中嗎?在內核虛擬地址空間中分配給用戶進程的頁面的映射
如果沒有,那麼它將沒有內核虛擬地址。那麼如果需要出現,交換者將如何找到頁面並將其交換出來?
當爲進程創建頁面(將被映射到進程地址空間)時,該頁面將被映射到內核地址空間中嗎?在內核虛擬地址空間中分配給用戶進程的頁面的映射
如果沒有,那麼它將沒有內核虛擬地址。那麼如果需要出現,交換者將如何找到頁面並將其交換出來?
如果我們談論x86或類似的(在頁面轉換方面)體系結構,在任何給定的時間都有一個虛擬地址空間,通常一部分是爲內核保留的,另一部分是爲用戶模式流程。
在兩個進程之間的上下文切換中,只有虛擬地址空間的用戶模式部分發生更改。
對於這樣的組織,內核始終可以完全訪問當前的用戶模式進程,因爲同樣,內核和用戶模式進程在任何時刻都只有一個當前的虛擬地址空間,而不是兩個,這是一個。所以,內核並不一定要爲用戶模式頁面提供另外的額外映射。但這不是主要觀點。
重點是內核爲每個頁面保留一些統計信息,如果需要的話可以保存到磁盤並在別處重新使用。 CPU在第一次讀取或寫入頁面時將每個頁面的page table entry (PTE)
標記爲accessed
,並在第一次寫入頁面時將其標記爲dirty
。
內核將掃描的PTE定期讀取accessed
和dirty
標記更新所述統計,並清除accessed
和dirty
因此它可以(如果有的話,當然)後檢測它們的變化。根據這些統計數據,它可以確定哪些頁面很少被使用或長時間未被使用,並且可以重新使用。
如果「swapper」在當前進程的上下文中運行,並且它在內核中運行,那麼理論上它有足夠的來自內核的信息(很少使用或長未使用頁的列表來保存和取消映射if dirty
或只是取消映射,如果不是dirty
)以及對感興趣頁面的訪問權限。
如果「swapper」本身作爲用戶模式進程運行,事情會變得更加複雜,因爲默認情況下,它無法訪問另一個進程的頁面,必須創建映射或要求內核做一些額外的在感興趣的過程中爲它工作。
因此,在內核中發現很少使用和長未使用的頁面及其地址。 CPU幫助將PTE自動標記爲accessed
和dirty
。如果它們被保存到磁盤而不是在擁有它們的進程的上下文中,則可能需要額外映射到dirty
頁面。
你是說內核(letz說linux)會始終運行在進程上下文中(在x86架構中)?如果那樣,你是否有任何關於Linux內核如何訪問需要被換出的頁面(對於不在上下文中的過程)的想法?還有,如果沒有進程正在運行(理論上)呢?\ – viji 2012-04-06 14:13:00
它可以切換到該進程的上下文,也可以在不切換的情況下創建映射。我不知道它的兩個中的哪一個。 – 2012-04-06 14:18:44
那麼爲什麼有3種類型的上下文? (內核上下文,中斷上下文,進程上下文)[http://www.learninglinuxkernel.com/Introduction_03.html](http://www.learninglinuxkernel.com/Introduction_03.html) – viji 2012-04-06 14:25:50