MMU

         高性能處理器通常會提供一個內存管理單元(MMU),該單元輔助操做系統進行內存管理,提供虛擬地址和物理地址的映射、內存訪問權限保護和Cache緩存控制等硬件支持緩存

        TLB:Translation Lookaside Buffer,即轉換旁路緩存,TLB是MMU的核型部件,它緩存少許的虛擬地址與物理地址的轉換關係,是轉換表的Cache,所以也常常被稱爲「快表」。ide

        TTW:Translation Table walk,即轉換表漫遊,當TLB中沒有緩衝對應的地址轉換關係時,須要經過對內存中轉換表(大多數處理器的轉換表爲多級頁表)的訪問來得到虛擬地址和物理地址的對應關係。TTW成功後。結果應寫入TLB。函數

       MMU具備虛擬地址和物理地址轉換、內存訪問權限保護等功能,這將使得Linux操做系統能單獨爲系統的每一個用戶進程分配獨立的內存空間並保證用戶空間不能訪問內核空間的地址,爲操做系統的虛擬內存管理模塊提供硬件基礎。性能

       對於包含MMU的處理器而言,Linux系統提供了複雜的存儲管理系統,使得進程所能訪問的內存達到4GB。操作系統

       在Linux系統中,進程的4GB內存空間被分爲兩個部分--用戶空間與內核空間。用戶空間地址通常分佈爲0~3GB(即PAGE OFFSET,在0x86中他等於0xC0000000),這樣,剩下的3~4GB爲內核空間,以下圖所示。用戶進程一般狀況下只能訪問用戶空間的虛擬地 址,不能訪問內核空間的虛擬地址。用戶進程只有經過系統調用(表明用戶進程在內核態執行)等方式才能夠訪問到內核空間。設計

      每一個進程的用戶空間都是徹底獨立的、互不相干的,用戶進程各自有不一樣的頁表。而內核空間是由內核負責映射,它並不會跟着進程該表,是固定的。內核空間地址有本身對應的頁表,內核的虛擬空間獨立於其餘程序。Linux中1GB的內核空間又被劃分爲物理內存映射區、虛擬內存分配區、高端頁面映射區、專用頁面映射區和系統保留映射區這幾個區域進程

      在用戶空間動態申請內存的函數爲malloc(),這個函數在各類操做系統上的使用時一致的,malloc()申請的內存的釋放函數爲free()。內存

malloc()的內存必定要被free(),不然會形成內存泄漏。理想狀況下,malloc()和free()應成對出現,即誰申請,就由誰釋放。get

      在Linux內核空間申請內存設計的函數主要包括kmalloc()、__get_free_pages()和vmalloc等。kmalloc()和 __get_free_pages()(及其相似函數)申請的內存位於物理內存映射區域,並且在物理上也是連續的,它們與真實的物理地址只有一個固定的偏 移,所以存在較簡單的轉換關係。而vmalloc()在虛擬內存空間給出一塊連續的內存區,實質上,這片連續的虛擬內存在物理內存中並不必定連續,而 vmalloc()申請的虛擬內存和物理內存之間也沒有簡單的換算關係。內存管理

      void *kamlloc(size_t size, int flags);

      給kmalloc()的第一個參數是要分配的塊的大小,第二個參數爲分配標誌,用於控制kmallockmalloc()的行爲。最經常使用的分配標誌是GFP_KERNEL,其含義是在內核空間的進程中申請內存。kmalloc()的底層依賴__get_free_pages()實 現,分配標誌的前綴GFP正好是這個底層函數的縮寫。使用GFP_KERNEL標誌申請內存時,若暫時不能知足,則進程會睡眠等待頁,即會引發阻塞,所以 不能在中斷上下文或持有自旋鎖的時候使用GPF_KENNEL申請內存。

     使用vmalloc()不能用在原子上下文中

     I/O端口和I/O內存:

     設備一般會提供一組寄存器來用於控制設備、讀寫設備和獲取設備狀態,即控制寄存器、數據寄存器和狀態寄存器。這些寄存器可能位於I/O空間,也可能位於內存空間。當位於I/O空間時,一般被稱爲I/O端口,位於內存空間時,對應的內存空間被稱爲I/O內存。

      mmap():

      般狀況下,用戶空間是不可能也不該該直接訪問設備的,可是,設備驅動程序中可實現mmap()函數,這個函數可以使得用戶空間直接訪問設備的物理地 址。實際上,mmap()實現了這樣的一個映射過程:它將用戶空間的一段內存與設備內存管理,當用戶訪問用戶空間的這段地址範圍時,實際上會轉化爲對設備 的訪問。

      這種能力對於顯示適配器一類的設備很是有意義,若是用戶空間可直接經過內存映射訪問顯存的話,屏幕幀的各點的像素將再也不須要一個從用戶空間到內核空間的複製的過程。

相關文章
相關標籤/搜索