Linux(内核和用户态的)动态内存管理
http://www.ibm.com/developerworks/cn/linux/l-cn-slub/
內(nèi)核對(duì)象緩沖區(qū)管理
Linux 內(nèi)核在運(yùn)行過(guò)程中,常常會(huì)需要經(jīng)常使用一些內(nèi)核的數(shù)據(jù)結(jié)構(gòu)(對(duì)象)。例如,當(dāng)進(jìn)程的某個(gè)線程第一次打開一個(gè)文件的時(shí)候,內(nèi)核需要為該文件分配一個(gè)稱為 file 的數(shù)據(jù)結(jié)構(gòu);當(dāng)該文件被最終關(guān)閉的時(shí)候,內(nèi)核必須釋放此文件所關(guān)聯(lián)的 file 數(shù)據(jù)結(jié)構(gòu)。這些小塊存儲(chǔ)空間并不只在某個(gè)內(nèi)核函數(shù)的內(nèi)部使用,否則就可以使用當(dāng)前線程的內(nèi)核棧空間。同時(shí),這些小塊存儲(chǔ)空間又是動(dòng)態(tài)變化的,不可能像物理內(nèi)存頁(yè)面管理使用的 page 結(jié)構(gòu)那樣,有多大內(nèi)存就有多少個(gè) page 結(jié)構(gòu),形成一個(gè)靜態(tài)長(zhǎng)度的隊(duì)列。而且由于內(nèi)核無(wú)法預(yù)測(cè)運(yùn)行中各種不同的內(nèi)核對(duì)象對(duì)緩沖區(qū)的需求,因此不適合為每一種可能用到的對(duì)象建立一個(gè)“緩沖池”,因?yàn)槟菢拥脑捄芸赡艹霈F(xiàn)有些緩沖池已經(jīng)耗盡而有些緩沖池中卻又大量空閑緩沖區(qū)的現(xiàn)象。因此,內(nèi)核只能采取更全局性的方法。
我們可以看出,內(nèi)核對(duì)象的管理與用戶進(jìn)程中的堆管理比較相似,核心問(wèn)題均是:如何高效地管理內(nèi)存空間,使得可以快速地進(jìn)行對(duì)象的分配和回收并減少內(nèi)存碎片。但是內(nèi)核不能簡(jiǎn)單地采用用戶進(jìn)程的基于堆的內(nèi)存分配算法,這是因?yàn)閮?nèi)核對(duì)其對(duì)象的使用具有以下特殊性:
如何有效地管理緩沖區(qū)空間,長(zhǎng)期以來(lái)都是一個(gè)熱門的研究課題。90 年代初期,在 Solaris 2.4 操作系統(tǒng)中,采用了一種稱為“slab”(原意是大塊的混凝土)的緩沖區(qū)分配和管理方法,在相當(dāng)程度上滿足了內(nèi)核的特殊需求。
總結(jié)
以上是生活随笔為你收集整理的Linux(内核和用户态的)动态内存管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: make xxx Is a direct
- 下一篇: 微内核和宏内核