顯示廣告
隱藏 ✕
※ 本文為 swallow.bbs. 轉寄自 cd.twbbs.org 更新時間: 2013-02-06 16:25:06
看板 P_acon
作者 swallow (A piece of summer)
標題 [認真]OS2期末整理(3)
時間 Thu Jun 21 09:45:50 2012


GFP_NOIO & GFP_NOFS


      GFP_NOFS              IO和mm要記憶體,mm表示記憶體不足
┌─┐───→ ┌─┐       所以要把IO的一些記憶體寫出去(swap out)
│mm│         │IO│       這樣會變成兩邊都在等對方做事
└─┘ ←───└─┘
      GFP_NOIO

GFP_NOFS:代表不允許執行任何file system調用

GFP_NOIO:代表不允許任何IO初始化





--
buddy system

    why:

        因為希望krl很有效率,所以希望不要太常更改mmu的maping方式
        更改cache和TLB就會變得沒效率

        和周邊IO溝通的時候,一定是拿連續的實體記憶體

        改善best fit、first fit等演算法

    algorithm:

        配置時會把可配置的記憶體一直對半分,直到剛好可以裝入要求的記憶體大小
        (ex: 要求30k就會切到32k的大小在放進去)

        其他切出來但是沒分配到的區間就納入記憶體串列管理

        歸還時會先檢查可用的記憶體串列中是否有相鄰的節點

        如果有就把兩邊合併起來變成較大的記憶體節點
--
kmalloc

        處理的速度很快,因為不會清理所配置到的記憶體,記憶體會保留先前的內容

        呼叫kmalloc得到的記憶體空間在實體記憶體上是連續的

        void *kmalloc(size_t size, int flags);
                          需求大小     控制kmalloc的行為


vmalloc

        在virtual address space配置連續記憶體空間,但在實體記憶體上不一定連續








--
vmalloc和kmalloc的差別

      1.kmalloc和vmalloc所return的地址區段不同

      2.vmalloc分配的記憶體是在虛擬記憶體上連續,實體記憶體上不一定連續

        而kmalloc是在實體記憶體上連續

      3.kmalloc一次可以分配的記憶體大小是128k,vmalloc則沒有上限

      4.kmalloc和vmalloc都是使用slab allocator

      5.vmalloc會使用到MMU,效能比較差








--
slab

    data structure                  ┌──┐
        ┌───┐    ┌──┐ ┌→ │obj │
        │cache │ → │slab│ ┤   └──┘
        └───┘    └──┘ │   ┌──┐
                               └→ │obj │
                                    └──┘
    algorithm

        概念:將要來的記憶體根據物件大小等分後,再配置給物件去使用

              可以把它看成是page組成的容器,儲存單位是物件

        增加cache的概念來增加效能

        特性:當有物件被free的時候,空的欄位不會被初始化

              當slab中都沒有物件,記憶體不會馬上回收,減少額外配置和釋放的負擔

        效果:解決fregmentation的問題
--
        從buddy system要page,page配置給slab和物件使用

        當page不足的時候會釋放slab所占用的page

        slab釋放條件:當krl需要新的page且buddy system無法滿足

                      slab裡的物件沒人在用的時候,slab才會被釋放

        krl會尋找cache中的空slab,把slab從cache中移除,連slab裡的物件一起銷毀

        在slab中配置新物件:

            先找沒用完的slab,把新物件放到slab中,否則再要求新的page產生slab

        移除slab中的物件:

            把物件加入對應的slab中未使用物件的串列




--
SLAB_POSITION

        這個flag填入後,slab初始化的時候會一直填5a5a...避免變數忘記給值造成錯誤

shrink & grow

        當記憶體不夠的時候會叫slab做壓縮(shrink),回收記憶體,壓縮方法在上面

SMP scalability

        允許OS同時使用多個處理器藉由減少處理時間來改善效能的技術

cloring

        cpu cache的使用率,因為大多數程式會把最常用的資料欄位放在最前面

        這些欄位會互相影響造成cache的不平衡現象

        slab會把一個區塊分配完記憶體所剩下的餘數對半分,一塊放在記憶體前端

        一塊放在後端,前端那塊就稱作coloring area,slab設法在每次配置的page

        上使用不同大小的coloring area,有效的分散資料map到cache中的位置

        提高cache rate
--
                        你們都是我的翅膀         -Unlight-
     nonoise           __▁__▁︿︿︿︿ ▼  ▁_▁___
                     ▌_▁    _▁_ 
      我是不會       ▼▕◣◣◣│   ◢◢ 沒想到還
          原諒你的 ◆▕ ˙  ˙ _____  _  .  .  ▏       能再見到你
                    ◣       △  \\\\\  
--
* Origin: 中正築夢園 (CcuDream.twbbs.org) ★ From: 1.175.136.34  

 [Modified by swallow] From: 1.175.136.34    (2012/06/21 Thu 09:46:13)
 [Modified by swallow] From: 1.175.136.34    (2012/06/21 Thu 09:46:38)
iliketoeatdr 推薦推薦這篇文章                             *|06/21 10:08 lyaf
yo6317 推薦推薦這篇文章                                   *|06/21 23:19 ggza
yo6317 轉錄本文已轉錄到某秘密看板                         *|06/21 23:20 ggza
lahaha 推薦推薦這篇文章                                   *|06/22 06:29 ggzd
p1234567890 推薦推薦這篇文章                              *|06/22 15:26 omkC
h3615840 推薦推薦這篇文章                                 *|06/24 17:09 ggzf

--
※ 看板: Swallow 文章推薦值: 0 目前人氣: 0 累積人氣: 273 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇