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

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


處理器相關(guān)頁面錯(cuò)誤處理代碼將定位描敘包含出錯(cuò)虛擬地址對(duì)應(yīng)的虛擬內(nèi)存區(qū)域的vm_area_struct數(shù)據(jù)結(jié)構(gòu) 。它通過在此進(jìn)程的vm_area_struct中查找包含出錯(cuò)虛擬地址的位置直到找到為止 。這些代碼與時(shí)間關(guān)系重大,進(jìn)程的vm_area_struct數(shù)據(jù)結(jié)構(gòu)特意安排成使查找操作時(shí)間更少 。

執(zhí)行完這些處理器相關(guān)操作并且找到出錯(cuò)虛擬地址的有效內(nèi)存區(qū)域后,頁面錯(cuò)處理過程其余部分和前面類似 。

通用頁面錯(cuò)處理代碼為出錯(cuò)虛擬地址尋找頁表入口 。如果找到的頁表入口是一個(gè)已換出頁面,Linux必須將其 交換進(jìn)入物理內(nèi)存 。已換出頁面的頁表入口的格式與處理器類型有關(guān),但是所有的處理器將這些頁面標(biāo)記成無效并把定位此頁面的必要信息放入頁表入口中 。Linux利用這些信息以便將頁面交換進(jìn)物理入內(nèi)存 。

此時(shí)Linux知道出錯(cuò)虛擬內(nèi)存地址并且擁有一個(gè)包含頁面位置信息的頁表入口 。vm_area_struct數(shù)據(jù)結(jié)構(gòu)可能包含將此虛擬內(nèi)存區(qū)域交換到物理內(nèi)存中的子程序:swapin 。如果對(duì)此虛擬內(nèi)存區(qū)域存在swapin則Linux會(huì)使用它 。這是已換出系統(tǒng)V共享內(nèi)存頁面的處理過程-因?yàn)橐褤Q出系統(tǒng)V共享頁面和普通的已換出頁面有少許不同 。如果沒有swapin操作,這可能是Linux假定普通頁面無須特殊處理 。

系統(tǒng)將分配物理頁面并將已換出頁面讀入 。關(guān)于頁面在交換文件中位置信息從頁表入口中取出 。

如果引起頁面錯(cuò)誤的訪問不是寫操作則頁面被保留在swap cache中并且它的頁表入口不再標(biāo)記為可寫 。如果 頁面隨后被寫入,則將產(chǎn)生另一個(gè)頁面錯(cuò)誤,這時(shí)頁面被標(biāo)記為dirty,同時(shí)其入口從swap cache中刪除 。如果頁面沒有被寫并且被要求重新?lián)Q出,Linux可以免除這次寫,因?yàn)轫撁嬉呀?jīng)存在于交換文件中 。

如果引起頁面從交換文件中讀出的操作是寫操作,這個(gè)頁面將被從swap cache中刪除并且其頁表入口被標(biāo)記 成dirty且可寫 。

推薦閱讀