當發出對虛擬地址的引用時,處理器試圖找到相匹配的TLB入口。如果找到則直接將虛擬地址轉換成物理地址並對數據進行處理。如果沒有找到則向操作係統尋求幫助。處理器將向操作係統發出TLB失配信號,它使用一個特定的係統機製來將此異常通知操作係統。操作係統則為此地址匹配對產生新的TLB入口。當操作係統清除此異常時,處理器將再次進行虛擬地址轉換。由於此時在TLB中已經有相應的入口,這次操作將成功。
使用高速緩存的缺點在於Linux必須消耗更多的時間和空間來維護這些緩存,並且當緩存係統崩潰時係統也將崩潰。
Linux頁表
圖3.3Linux的三級頁表結構
Linux總是假定處理器有三級頁表。每個頁表通過所包含的下級頁表的頁麵框號來訪問。圖3.3給出了虛擬地址是如何分割成多個域的,每個域提供了某個指定頁表的偏移。為了將虛擬地址轉換成物理地址,處理器必須得到每個域的值。這個過程將持續三次直到對應於虛擬地址的物理頁麵框號被找到。最後再使用虛擬地址中的最後一個域,得到了頁麵中數據的地址。
為了實現跨平台運行,Linux提供了一係列轉換宏使得核心可以訪問特定進程的頁表。這樣核心無需知道頁表入口的結構以及它們的排列方式。
這種策略相當成功,無論在具有三級頁表結構的AlphaAXP還是兩級頁表的IntelX86處理器中,Linux總是使用相同的頁表操縱代碼。
頁麵分配與回收
對係統中物理頁麵的請求十分頻繁。例如當一個可執行映象被調入內存時,操作係統必須為其分配頁麵。當映象執行完畢和卸載時這些頁麵必須被釋放。物理頁麵的另一個用途是存儲頁表這些核心數據結構。虛擬內存子係統中負責頁麵分配與回收的數據結構和機製可能用處最大。
係統中所有的物理頁麵用包含mem_map_t結構的鏈表mem_map來描敘,這些結構在係統啟動時初始化。每個mem_map_t描敘了一個物理頁麵。其中與內存管理相關的重要域如下:
count
記錄使用此頁麵的用戶個數。當這個頁麵在多個進程之間共享時,它的值大於1。
age
此域描敘頁麵的年齡,用於選擇將適當的頁麵拋棄或者置換出內存時。
map_nr
獲取最新章節更新,請訪問𝑜𝑜𝑝.𝑡𝑤
記錄本mem_map_t描敘的物理頁麵框號。
頁麵分配代碼使用free_area數組來尋找和釋放頁麵,此機製負責整個緩衝管理。另外此代碼與處理器使用的頁麵大小和物理分頁機製無關。
free_area中的每個元素都包含頁麵塊的信息。數組中第一個元素描敘1個頁麵,第二個表示2個頁麵大小的塊而接下來表示4個頁麵大小的塊,總之都是2的次冪倍大小。list域表示一個隊列頭,它包含指向mem_map數組中page數據結構的指針。所有的空閒頁麵都在此隊列中。map域是指向某個特定頁麵尺寸的頁麵組分配情況位圖的指針。當頁麵的第N塊空閒時,位圖的第N位被置位。
圖free-area-figure畫出了free_area結構。第一個元素有個自由頁麵(頁麵框號0),第二個元素有4個頁麵大小的2個自由塊,前一個從頁麵框號4開始而後一個從頁麵框號56開始。
頁麵分配
。象映存內的況情配分塊存內的麵頁個四為小大映反個一向指素元個二第中組數aera_eerf,如例。圖位的麵頁閒空與配分已的小大樣這映反個一著存保素元個每的中aera_eerf。塊閒空的同相小大求請與個一找尋中aera_eerf在將碼代配分存內,)egap_eerf_nim>segap_eerf_rn(求要個這足滿來麵頁閒空的夠足有中統係要隻。塊的麵頁個4和個2、個1配分以可它著味意這。配分來塊存內的冪次的2以麵頁。塊存內的麵頁理物個多者或個一含包配分次每碼代配分麵頁。塊麵頁收回與配分的效有來法算ydduB用使xuniL
。者用調給配分被塊麵頁個這而列隊的應相進連被塊閒空。單簡分十程過割分以所冪次的2是都小大塊於由。配匹塊求請與小大其使以割分行進其對則塊的求請於大塊麵頁的到找果如。止為塊存內的求要足滿到找或完索搜被aera_eerf到續持將直一程過個這。塊存內的小大求請於倍兩索搜它則,麵頁閒空的小大求請樣這有沒果如。麵頁閒空索搜來鏈沿手著域tsil的構結據數aera_eerf從它。麵頁的小大求請足滿尋搜先首法算配分
構結據數aera_eerf4.3圖
。中1素元的塊閒空的小大麵頁個兩示表中組數aera_eerf到加添被將,始開6號框麵頁從,個一後而,者求請給回返去出配分將,的始開4號框麵頁從,個一前。塊的小大麵頁2個兩成分將)始開4號框麵頁從(塊存內的小大麵頁4個一第,時出發求請的塊麵頁個兩為小大有中統係當,中4.3圖在
收回麵頁
。度程易難的合組新重麵頁了定決小大塊麵頁上實事。塊麵頁大一單成形來起合結麵頁些這將要下機時當適在碼代收回麵頁。目數的塊麵頁閒空碎零中統係加增將配分行進碎打塊麵頁的大將
。大樣一存內大最的配分許允和將塊麵頁閒空的統係是況情佳最。麵頁的大更成並合續繼以可否是查檢要還碼代,後之完合結次每。塊閒空新的倍兩來原為小大個一成形來起合結們它將則,有果如。在存塊存內yddub者或鄰相的小大同相有否是查檢將碼代,時放釋被塊麵頁當
。中素元個一第的aera_eerf入排塊閒空的麵頁個2為小大為作合結0號框麵頁閒空和將它,1號框麵頁放釋果如,中4.3圖在
射映存內
連象映將。存內入調上盤磁從們它把才時分部這到用引時行運分部他其的序程當。存內擬虛的程進到接連僅僅是而,存內理物入調有沒並上際實件文行執可而然。此如樣同庫享共的用使象映行執可。中間空址地擬虛程進入調被將容內的象映行執可,時行執象映