1. 程式人生 > >Linux地址對映

Linux地址對映

Linux啟動後,第一個程序是init程序,它的頁表與核心頁表是一致的,系統中的其他所有程序都是init程序的兒子或後代。Linux中程序建立通過fork()實現,子程序的PGDPTE是父程序的拷貝此時會把核心程序的頁表拷貝到每個程序中。在各個程序的執行過程中,他們的頁表可能會發生變化,比如發生缺頁異常。如果是程序頁表發生改變,則只要改變程序的頁表項(0G~3G)就夠了,如果是核心頁表發生變化,則必須通知到所有程序改變各自維護的一份核心頁表(3G~4G)。最簡單的方法是每次核心頁表改變後,遍歷所有程序去改變他們維護的核心頁表,顯然效率很低。Linux核心通過page fault機制實現核心頁表的一致。核心頁表改變時,只改變init
程序的核心頁表。當程序訪問該頁時,會發生一個缺頁異常,異常處理中通過init程序更新當前程序的核心頁表。