1. gzyueqian
      13352868059

      Linux培訓機構揭秘Linux內存管理的世界

      更新時間: 2019-04-16 16:33:34來源: 粵嵌教育瀏覽量:6234

             Linux是一個自由傳播和免費試用的Unix操作系統。Linux可以運行UNIX工具軟件、網絡協議和應用程序,Linux是以靈活性和高效性著稱的。因為它獨特的設計結構,所以它是可以在昂貴和平價的網站上運行。那么Linux的內存管理是怎么樣的呢?現在Linux培訓機構就給大家講講。

        Linux高端內存的劃分:

        內核直接映射空間 PAGE_OFFSET~VMALLOC_START,kmalloc和__get_free_page()分配的是這里的頁面。二者是借助slab分配器,直接分配物理頁再轉換為邏輯地址(物理地址連續)。適合分配小段內存。此區域 包含了內核鏡像、物理頁框表mem_map等資源。

        內核動態映射空間 VMALLOC_START~VMALLOC_END,被vmalloc用到,可表示的空間大。

        內核映射空間 PKMAP_BASE ~ FIXADDR_START,kmap

        內核臨時映射空間 FIXADDR_START~FIXADDR_TOP,kmap_atomic

        當我們需要order(1)的空閑頁面塊時,則執行以下步驟:

        1、初始空閑鏈表為:

          order(0): 5, 10

        order(1): 8 [8,9]

        order(2): 12 [12,13,14,15]

        order(3):


        2、從上面空閑鏈表中,我們可以看出,order(1)鏈表上,有一個空閑的頁面塊,把它分配給用戶,并從該鏈表中刪除。

        3、當我們再需要一個order(1)的塊時,同樣我們從order(1)空閑鏈表上開始掃描。

        4、若在order(1)上沒有空閑頁面塊,那么我們就到更高的級別(order)上找,order(2)。

        5、此時(order(1)上沒有空閑頁面塊)有一個空閑頁面塊,該塊是從頁面12開始。該頁面塊被分割成兩個稍微小一些order(1)的頁面塊,[12,13]和[14,15]。[14,15]頁面塊加到order(1)空閑鏈表中,同時[12,13]頁面塊返回給用戶。

        6、終空閑鏈表為:

        order(0): 5, 10

        order(1): 14 [14,15]

        order(2):

        order(3):

        因為內存映射先要獲得被映射的物理地址,然后才能將其映射到要求的用戶虛擬地址上。我們已經看到內核物理內存映射區域中的地址可以被內核函數virt_to_phys轉換成實際的物理內存地址,但對于vmalloc分配的內核虛擬地址無法直接轉化成物理地址,所以我們必須對這部分虛擬內存格外“照顧”——先將其轉化成內核物理內存映射區域中的地址,然后在用virt_to_phys變為物理地址。

        轉化工作需要進行如下步驟:

        找到vmalloc虛擬內存對應的頁表,并尋找到對應的頁表項。

        獲取頁表項對應的頁面指針

        通過頁面得到對應的內核物理內存映射區域地址。

        Linux內存管理的知識今天Linux培訓機構就和大家講解這么多了,想要學習Linux的更多知識,可以來我們粵嵌科技來咨詢。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲欧美中文另类列奇 | 一区二区三区国产精品视频 | 日本婬片在线视频 | 午夜免费视频国产在线 | 午夜国产在线观看 | 亚洲欧美综合久久久久久 |