嵌入式實時Hypervisor:XtratuM (8)

 

1.1           內存管理

內存管理主要包含兩個方面,一個是內存分配,另一個是內存映射。在XtratuM系統開發和移植過程中,內存分配問題主要體現在每個域或客戶操作系統內部,例如PaRTiKle系統採用TLSF(Two-Level Segregate Fit)算法。關於TLSF算法,讀者可以參考[36]。本節的內容主要包含域中內存使用類別和內存映射機制。

現階段,在XtratuM系統中,所有的物理內存由Linux內存管理模塊管理。當域被加載的時候,相應的物理內存也被分配。通過MMU保護機制,所有的域相互分開,從而提高了域的穩定性和可靠性,這一點對實時域,例如PaRTiKle尤其重要。在PaRTiKle中,物理內存被用在四個方面,或者有四種不同類型的物理內存:1)pgdtable 頁用來保存域的虛擬內存頁表;2)棧內存被用來存放域的鏡像;3)堆內存用來給域中的任務分配內存空間;4)事件內存保存虛擬中斷和中斷處理句柄地址。其中,pgdtable和棧在XtratuM內核空間。堆和事件處理內存被映射到域空間並被上層任務使用。例如,事件內存被域內核空間用作中斷驅動,堆被線程用作內存池,所有的內存分配請求從堆結構中獲取。

內存映射是一種虛擬內存機制。通過內存映射,雖然虛擬地址不同,但是它們可能對應相同的物理內存,從而使多個任務可以訪問相同的物理內存。在Linux系統中,用戶空間進程可以通過Linux系統調用訪問內核空間數據內容。離開了系統調用,通過內存映射機制,Linux進程也可以直接訪問內核態內存。圖2-8給出了簡單的內存映射模型。

圖2-1.          內存映射模型

Linux內核中,物理內存和內核空間是一對一映射的(這裏不考慮大內存問題)。但是爲了數據塊傳輸數據,需要將任務地址空間映射到物理內存從而可以使進程直接訪問該內存空間,並且內核任務也可以對該段內存進行直接訪問。與通過系統調用的方式傳遞數據相比,性能得到大幅度提升。

那麼,在XtratuM系統,內存是如何被映射的呢?類似LinuxXtratuM採用三級頁表機制,pgd, pte and pagePGD表是最高層。每一個PGD元素指向一個PTE頁面。當域被調度的時候,相應的PGD頁面的物理頁面被存放在CR3寄存器中。PTE元素存放這DATA頁的地址。頁內偏移與虛擬地址便宜相同。圖2-9是一個簡單的從虛擬地址到物理地址轉換模型。內存映射的使用主要存在於域鏡像和域間通信工具的加載過程中。域間通信內容將在2.5節中介紹,相應內存映射的實現也會詳細解釋。

圖2-2.              域空間虛擬地址向物理地址轉換模型

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章