日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux 核心--4.內(nèi)存管理( 四 )




V
有效,如果此位置位,表明此PTE有效

FOE
“執(zhí)行時(shí)失效”,無論合時(shí)只要執(zhí)行包含在此頁面中的指令,處理器都將報(bào)告頁面錯(cuò)誤并將控制傳遞
FOW
“寫時(shí)失效”, 除了頁面錯(cuò)誤發(fā)生在對(duì)此頁面的寫時(shí),其他與上相同 。
FOR
“讀時(shí)失效”,除了頁面錯(cuò)誤發(fā)生在對(duì)此頁面的讀時(shí),其他與上相同 。
ASM
地址空間匹配 。被操作系統(tǒng)用于清洗轉(zhuǎn)換緩沖中的某些入口 。
KRE
運(yùn)行在核心模式下的代碼可以讀此頁面 。
URE
運(yùn)行在用戶模式下的代碼可以讀此頁面 。
GH
將整個(gè)塊映射到單個(gè)而不是多個(gè)轉(zhuǎn)換緩沖時(shí)的隱含粒度 。
KWE
運(yùn)行在核心模式下的代碼可以寫此頁面 。
UWE
運(yùn)行在用戶模式下的代碼可以寫此頁面 。
page frame number
對(duì)于V位置位的PTE,此域包含了對(duì)應(yīng)此PTE的物理頁面框號(hào);對(duì)于無效PTE,此域不為0,它包含了頁面在交換文件中位置的信息 。
以下兩位由Linux定義并使用 。


_PAGE_DIRTY
如果置位,此頁面要被寫入交換文件 。
_PAGE_ACCESSED
Linux用它表示頁面已經(jīng)被訪問過 。

3.2高速緩沖
如果用上述理論模型來實(shí)現(xiàn)一個(gè)系統(tǒng),它可能可以工作,但效率不會(huì)高 。操作系統(tǒng)設(shè)計(jì)者和處理器設(shè)計(jì)者都在努力以提高系統(tǒng)的性能 。除了制造更快的CPU和內(nèi)存外,最好的辦法是在高速緩沖中維護(hù)有用信息和數(shù)據(jù)以加快某些操作 。Linux使用了許多與高速緩沖相關(guān)的內(nèi)存管理策略 。
Buffer Cache
這個(gè)buffer cache中包含了被塊設(shè)備驅(qū)動(dòng)使用的數(shù)據(jù)緩沖 。

這些緩沖的單元的大小一般固定(例如說512字節(jié))并且包含從塊設(shè)備讀出或者寫入的信息塊 。塊設(shè)備是僅能夠以固定大小塊進(jìn)行讀寫操作的設(shè)備 。所有的硬盤都是塊設(shè)備 。


利用設(shè)備標(biāo)志符和所需塊號(hào)作索引可以在buffer cache中迅速地找到數(shù)據(jù) 。塊設(shè)備只能夠通過buffer cache來存取 。如果數(shù)據(jù)在buffer cache中可以找到則無需從物理塊設(shè)備(如硬盤)中讀取,這樣可以加速訪問 。

Page Cache

用來加速硬盤上可執(zhí)行映象文件與數(shù)據(jù)文件的存取 。

它每次緩沖一個(gè)頁面的文件內(nèi)容 。頁面從磁盤上讀入內(nèi)存后緩存在page cache中 。




Swap Cache
只有修改過的頁面存儲(chǔ)在交換文件中 。

只要這些頁面在寫入到交換文件后沒有被修改,則下次此頁面被交換出內(nèi)存時(shí),就不必再進(jìn)行更新寫操作,這些頁面都可以簡單的丟棄 。在交換頻繁發(fā)生的系統(tǒng)中,Swap Cache可以省下很多不必要且耗時(shí)的磁盤操作 。




Hardware Caches
一個(gè)常見的hardware cache是處理器中的頁表入口cache 。處理器不總是直接讀取頁表而是在需要時(shí)緩存頁面的轉(zhuǎn)換 。這種cache又叫做轉(zhuǎn)換旁視緩沖(Translation Look-aside Buffers),它包含系統(tǒng)中一個(gè)或多個(gè)處理器的頁表入口的緩沖拷貝 。


當(dāng)發(fā)出對(duì)虛擬地址的引用時(shí),處理器試圖找到相匹配的TLB入口 。如果找到則直接將虛擬地址轉(zhuǎn)換成物理地址并對(duì)數(shù)據(jù)進(jìn)行處理 。如果沒有找到則向操作系統(tǒng)尋求幫助 。處理器將向操作系統(tǒng)發(fā)出TLB失配信號(hào),它使用一個(gè)特定的系統(tǒng)機(jī)制來將此異常通知操作系統(tǒng) 。操作系統(tǒng)則為此地址匹配對(duì)產(chǎn)生新的TLB入口 。當(dāng)操作系統(tǒng)清除此異常時(shí),處理器將再次進(jìn)行虛擬地址轉(zhuǎn)換 。由于此時(shí)在TLB中已經(jīng)有相應(yīng)的入口,這次操作將成功 。


使用高速緩存的缺點(diǎn)在于Linux必須消耗更多的時(shí)間和空間來維護(hù)這些緩存,并且當(dāng)緩存系統(tǒng)崩潰時(shí)系統(tǒng)也將崩潰 。


3.3Linux 頁表



圖3.3 Linux的三級(jí)頁表結(jié)構(gòu)


Linux總是假定處理器有三級(jí)頁表 。每個(gè)頁表通過所包含的下級(jí)頁表的頁面框號(hào)來訪問 。圖3.3給出了虛擬地址是如何分割成多個(gè)域的,每個(gè)域提供了某個(gè)指定頁表的偏移 。為了將虛擬地址轉(zhuǎn)換成物理地址,處理器必須得到每個(gè)域的值 。這個(gè)過程將持續(xù)三次直到對(duì)應(yīng)于虛擬地址的物理頁面框號(hào)被找到 。最后再使用虛擬地址中的最后一個(gè)域,得到了頁面中數(shù)據(jù)的地址 。

推薦閱讀