《掌控记忆体》PPT课件.ppt_第1页
《掌控记忆体》PPT课件.ppt_第2页
《掌控记忆体》PPT课件.ppt_第3页
《掌控记忆体》PPT课件.ppt_第4页
《掌控记忆体》PPT课件.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Chapter7 掌控記憶體 7 1kmalloc的來龍去脈 1 3 kmalloc 定義在 其函式的速度很快 因為它不會清理所配置到的記憶體 記憶體仍保留先前留下的內容 且利用它所得到的記憶體空間在實際記憶體是連續的 void kmalloc size tsize intflags kmalloc 的第一個引數為配置區塊之容量 第二個引數 allocationflags 為控制kmalloc 的行為 size引數介紹 核心只能以頁為單位來整塊配置 並且採用一種特殊的分頁配置技術 page orientedallocation 以充分利用系統的RAM Linux處理記憶體配置的方法 是製作一組記憶體物件集散區 poolsofmemoryobjects 同一集散區的記憶物件都有固定容量 核心只能配置幾種預定容量的位元組陣列 如果沒有剛好你要的容量 你就必須選擇大一級的容量 在Linux2 0實際可用的用量稍微少於2的整數次方 因為管裡系統將控制旗標留在配置給你的記憶體上 如你要配置一個2000bytes的緩衝區 最好選擇2000而不要選擇2048 kmalloc 一次可配置的容量上限是128KBytes 7 1kmalloc的來龍去脈 2 3 flags引數介紹 GFP KERNEL平常的核心記憶體配置 配置到的記憶體空間屬於current行程 有可能休眠 GFP BUFFER用於管理快取暫存區 容許配置者可以休眠 不同於GFP KERNEL之處 在於它是藉由出清髒頁 dirtypage 到磁碟 以換取可用的記憶空間 此旗標的用意是避免I O子系統本身有需要記憶體時引發了死結 GFP ATOMIC供interrupthandler以及任何在行程外部的程式來配置記憶體 絕不會休眠 7 1kmalloc的來龍去脈 3 3 GFP USER代替user process配置記憶體 有可能休眠 而且是屬於低優先度的要求 GFP HIGHUSER類似GFP USER 但是從高址劃分區取得可用空間 GFP DMA配置可供DMA傳輸使用的記憶體 可搭配 使用or運算 GFP KERNEL或GFP ATOMIC的其中之一 GFP HIGHMEM要求配置高址劃分區 在沒有高址劃分區的平台上 此旗標沒有作用 它是GFP HIGHUSER遮罩的一部分 除此之外幾乎沒有作用 7 1 記憶體劃分區 memoryzone Linux2 4認識三種記憶體劃分區 正常 DMA capable 高址 highmemory 一般的配置動作都是從正常劃分區找空間 DMA劃分區是唯一可搭配週邊裝置進行DMA傳輸的位址段 並非所有實體記憶體都可以配合DMA操作 因為CPU Device之間的位址匯流排 與Device RAM之間的位址匯流排 只有部分是重疊的 高址劃分區是需要特別處理才能存取的位址段 在2 3版研發期間 為了支援PentiumIIVirtualMemoryExtension VME 以存取高達64GB 實體記憶體時 才將它納入核心記憶體管理 如沒指定特殊旗標 則正常劃分和DMA劃分區都會被搜尋 如果設立了 GFP HIGHMEM 則三種劃分區都會被搜尋 對於沒有highmemory的平台 或是核心組態刻意關掉highmemory的支援 則 GFP HIGHMEM會被定義為0 而且沒有效用 7 2前瞻快取 LookasideCaches 驅動程式經常需要一次又一次配置許多同樣大小的物件 為此核心提供一些特殊的集散區 稱之為前瞻快取 Linux記憶快取的型別為kmem cache t 可藉由呼叫kmem cache create 來產生 kmem cache t kmem cache create constchar name size tsize size toffset unsignedlongflags void constructor void kmem cache t unsignedlongflags void destructor void kmem cache t unsignedlongflags name 同時代表函式與快取的符號 名稱最長不得超過19個字元 包含 0 在內 offset 第一個物件在記憶頁裡的起始位置 用來確保配置到的物件一定放在特定的對齊位置上 使用0來要求核心幫你完成 7 2前瞻快取 LookasideCaches flags SLAB NO REAP 保護快取不因系統記憶不足而縮減容量 通常不需要設立此旗標 SLAB HWCACHE ALIGN 要求每個資料物件都要對齊一條快取線 SLAB CACHE DMA 要求每個資料物件都配置在DMA可存取的記憶體 物件快取產生之後 呼叫kmem cache alloc kmem cache intflags 來配置物件 cache 先前建立的快取 flags 與傳給和kmalloc 的旗標相同使用voidkmem cache free kmem cache t cache constvoid obj 釋放物件使用intkmem cache destory kmem cache t cache 釋放空間 7 2 1scullc 以SlabCaches為基礎的scull 使用快取配置一個配額 if dptr data s pos dptr data s pos kmem cache alloc scullc cache GFP KERNEL if dptr data s pos gotonomem memset dptr data s pos 0 scullc quantum 釋放記憶體 for i 0 idata i kmem cache free scullc cache dptr data i kfree dptr data 7 2 1scullc 以SlabCaches為基礎的scull 為了支援scullc cache的使用 需把下面程式段放在適當位置 宣告一個快取指標 供所有裝置共用 kmem cache t scullc cache init module 產生一個快取 當成我們的配額 scullc cache kmem cache create scullc scullc quantum 0 SLAB HWCACHE ALIGN NULL NULL 沒有建構解構 if scullc cache result ENOMEM gotofail malloc2 cleanup module 釋放被我們當成配額的快取 kmem cache destroy scullc cache 將scull改成scullc之後 最主要的差異是速度稍微提升了 也更有效率了 因為配額是從集散區配置來的 分布位置已經盡可能緊密 7 3get free page 與其相關函式 1 3 如果模組需要比較大塊的記憶體 通常最好使用分頁配置技術 下列函式用來配置記憶頁 get free page 回傳一指向新記憶頁的指標 內容全清除為0 get free page 類似get free page 但不清除內容 get free pages 配置一個跨頁的連續記憶區 傳回指向記憶區第一位元組的指標 記憶區內容不被清除 get dma pages 類似 get free pages 但保證配置到的記憶體可作為DMA用途 在Linux2 2之後 使用 get free pages 搭配 GFP DMA也可達到相同效果 7 3get free page 與其相關函式 2 3 上述原型如下這裡的flags 意義與kmalloc 一樣 而且同樣以GFP KERNEL或GFP ATOMIC最常用 頂多是在搭配 GFP DMA或 GFP HIGHMEM order是你要配置或釋放頁數的2的對數 如值為0則為一頁 8頁則其值為3 在Linux2 0版 order值的上限是5 Linux2 2版之後的版本最高值為9 無論如何 階數越大 配置失敗的機會就越高 unsignedlongget free page intflags unsignedlong get free page intflags unsignedlong get free pages intflags unsignedlongorder unsignedlong get dma pages intflags unsignedlongorder 7 3get free page 與其相關函式 3 3 當程式不再需要先前配置的記憶頁時 就應該以下列函式將它們釋回 voidfree pages unsignedlongaddr unsignedlongorder 如果你釋放的頁數 不等於先前要求配置的頁數 則記憶表將會損毀 而系統很快就會遇到大麻煩 由於核心會盡力滿足配置的要求 所以 要把系統搞垮 使其反應遲鈍 時在是輕而易舉 只要配置夠多的記憶體就成了 7 3 1scullp 使用完整記憶頁的scull 配置單一配額 if dptr data s pos dptr data s pos void get free pages GFP KERNEL dptr order if dptr data s pos gotonomem memset dptr data s pos 0 PAGE SIZEorder 釋放整組配額 for i 0 idata i free pages unsignedlong dptr data i dptr order kfree dptr data 7 3 1scullp 使用完整記憶頁的scull 效率提升的程度並不算顯著 因為速度本來就是kmalloc 本身的設計重點之一 記憶頁層級的配置技術 主要優點不在於速度 而是較佳的記憶體利用率 不會浪費無謂的空間 但是kmalloc 則不然 它所浪費的記憶空間是無法預料的 因為它必須盡力滿足程式師的要求 get free page 的最大優點 是你可以全權處置所得到的記憶頁 理論上 你甚至可以修改分頁表 讓得到的所有記憶頁集合成一個線性記憶區 Ch13MMAP DMA 7 4vmalloc 與其相關函式 1 3 另一種的記憶體配置函式 這是讓你可以在虛擬位址空間 virtualaddressspace 配置一個連續記憶區的vmalloc 函式 請注意 構成連續虛擬位址的實體記憶體 不見得是連續的 而只是被核心視為一段連續的位址範圍而已 vmalloc 與其親戚ioremap 不算是配置函式 的原型如下 includevoid vmalloc unsignedlongsize voidvfree void addr void ioremap unsignedlongoffset unsignedlongsize voidiounmap void addr 7 4vmalloc 與其相關函式 2 3 kmalloc 和get free pages 所傳的位址 也是虛擬位址 而非真正用於定位實際記憶晶片的實體位址 CPU內部的MMU MemoryManagementUnit 會自動將虛擬位址轉換成實體位址 vmalloc 和ioremap所用的位址範圍 則是完全靠人工虛構出來的 每一次的配置動作 都必須適當修改分頁表 才能建構出 虛擬的 記憶區 它們之間的差異在某些平台上 如x86 vmalloc 傳回的位址 只是高於kmalloc所傳回的位址 vmalloc 的位址範圍從VMALLOC START到VMALLOC END 定義在利用vmalloc 配置的位址 不能用於CPU之外 如DMA 因為只有MMU才能處理這類位址 所以可使用vmalloc 的正確時機 是當你需要配置一大塊僅供軟體使用的連續緩衝區時 7 4vmalloc 與其相關函式 3 3 ioremap 也會建構新的分頁表 和vmalloc 相同 不同的是它實際上並不配置任何記憶體 它所傳回的值 是一個特殊的虛擬位址 可用來存取指定的實體位址範圍 ioremap 最有用之處 是可用來將PCI緩衝區的 實體 位址映射到kernel space 虛擬 位址 例如 讓驅動程式用來存取PCI顯示卡的視訊記憶體 基於相容性考量 不要將ioremap 傳回的位址當成記憶體的指標 就是不要直接存取該位址 這個工作應交給readb 和Ch 8的I O函式來達成 註AlphaCPU的資料傳輸方式 和PCI規格不相容 vmalloc 能配置的容量 以及ioremap 可映射到CPU位址空間的記憶體範圍 可說是幾乎沒有限制 兩者都是分頁導向技術 透過修改分頁表來達成要求 vmalloc 有個小缺點 它不能用於中斷期 因為它內部使用了kmalloc GFP KERNEL 來取得分頁表的儲存空間 因此有休眠的可能 7 4 1scullv 使用虛擬位址的scull 使用虛擬位址配置一個配額 if dptr data s pos dptr data s pos void vmalloc PAGE SIZEorder if dptr data s pos gotonomem memset dptr data s pos 0 PAGE SIZEorder 釋放配額集 for i 0 idata i vfree dptr data i kfree dptr data 7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论