講解Linux中的內(nèi)存管理
對于那些想了解Linux的人,這里介紹動態(tài)內(nèi)存管理的一些東西。Linux的源代碼是開放的,任何人都可以獲取并修改,用之開發(fā)自己的產(chǎn)品。人們已成功使Linux運行于數(shù)百種硬件平臺之上。良好的操作系統(tǒng)性能部分依賴于操作系統(tǒng)有效管理資源的能力。
在過去,堆內(nèi)存管理器是實際的規(guī)范,但是其性能會受到內(nèi)存碎片和內(nèi)存回收需求的影響?,F(xiàn)在,Linux® 內(nèi)核使用了源自于 Solaris 的一種方法,但是這種方法在嵌入式系統(tǒng)中已經(jīng)使用了很長時間了,它是將內(nèi)存作為對象按照大小進行分配。
動態(tài)內(nèi)存管理
內(nèi)存管理的目標是提供一種方法,為實現(xiàn)各種目的而在各個用戶之間實現(xiàn)內(nèi)存共享。內(nèi)存管理方法應(yīng)該實現(xiàn)以下兩個功能:
最小化管理內(nèi)存所需的時間
***化用于一般應(yīng)用的可用內(nèi)存(最小化管理開銷)
內(nèi)存管理實際上是一種關(guān)于權(quán)衡的零和游戲。您可以開發(fā)一種使用少量內(nèi)存進行管理的算法,但是要花費更多時間來管理可用內(nèi)存。也可以開發(fā)一個算法來有效地管理內(nèi)存,但卻要使用更多的內(nèi)存。最終,特定應(yīng)用程序的需求將促使對這種權(quán)衡作出選擇。
每個內(nèi)存管理器都使用了一種基于堆的分配策略。在這種方法中,大塊內(nèi)存(稱為 堆)用來為用戶定義的目的提供內(nèi)存。當用戶需要一塊內(nèi)存時,就請求給自己分配一定大小的內(nèi)存。堆管理器會查看可用內(nèi)存的情況(使用特定算法)并返回一塊內(nèi)存。搜索過程中使用的一些算法有 first-fit(在堆中搜索到的***個滿足請求的內(nèi)存塊)和 best-fit(使用堆中滿足請求的最合適的內(nèi)存塊)。當用戶使用完內(nèi)存后,就將內(nèi)存返回給堆。
這種基于堆的分配策略的根本問題是碎片(fragmentation)。當內(nèi)存塊被分配后,它們會以不同的順序在不同的時間返回。這樣會在堆中留下一些洞,需要花一些時間才能有效地管理空閑內(nèi)存。這種算法通常具有較高的內(nèi)存使用效率(分配需要的內(nèi)存),但是卻需要花費更多時間來對堆進行管理。
另外一種方法稱為 buddy memory allocation,是一種更快的內(nèi)存分配技術(shù),它將內(nèi)存劃分為 2 的冪次方個分區(qū),并使用 best-fit 方法來分配內(nèi)存請求。當用戶釋放內(nèi)存時,就會檢查 buddy 塊,查看其相鄰的內(nèi)存塊是否也已經(jīng)被釋放。如果是的話,將合并內(nèi)存塊以最小化內(nèi)存碎片。這個算法的時間效率更高,但是由于使用 best-fit 方法的緣故,會產(chǎn)生內(nèi)存浪費。
以上就是動態(tài)內(nèi)存管理介紹。
【編輯推薦】