日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入解析Linux內(nèi)存頁管理機制(linux內(nèi)存頁)

Linux操作系統(tǒng)被廣泛使用,因為其穩(wěn)定性和開放性,使其成為許多企業(yè)和個人的首選。在Linux系統(tǒng)中,內(nèi)存管理是一個非常重要且復雜的任務。在這篇文章中,我們將,了解該機制對Linux應用程序的性能和穩(wěn)定性的影響。

創(chuàng)新互聯(lián)建站長期為近千家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為建鄴企業(yè)提供專業(yè)的網(wǎng)站建設、成都網(wǎng)站制作建鄴網(wǎng)站改版等技術服務。擁有10多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

1. 什么是內(nèi)存頁管理?

內(nèi)存頁管理是一種Linux內(nèi)核提供的管理內(nèi)存頁面的方法。在Linux中,內(nèi)存被分為許多小的頁面(通常為4KB),并且每個頁面都有一個唯一的標識符,稱為頁幀號(PFN)。內(nèi)存頁管理的主要目的是為內(nèi)核和用戶空間應用程序提供透明的內(nèi)存分配和管理機制。

2. Linux內(nèi)核中的內(nèi)存頁管理

Linux內(nèi)核中的內(nèi)存頁管理機制由以下三個部分組成:

– 物理內(nèi)存:這是計算機中實際的內(nèi)存,通常是隨機訪問存儲器(RAM)。

– 邏輯內(nèi)存:這是系統(tǒng)中應用程序使用的內(nèi)存,它分為用戶空間和內(nèi)核空間。

– 內(nèi)存管理單元(MMU):這是負責將邏輯內(nèi)存映射到物理內(nèi)存的硬件組件。

Linux內(nèi)核中的內(nèi)存頁管理機制包括以下幾個重要的功能:

– 內(nèi)存頁面分配:當用戶空間應用程序需要內(nèi)存時,Linux內(nèi)核會使用頁幀號(PFN)來映射空閑的物理頁面,并為應用程序分配邏輯內(nèi)存。

– 頁面交換:當Linux內(nèi)核需要更多的內(nèi)存來運行應用程序時,它會將一些內(nèi)存頁面交換到磁盤上以釋放物理內(nèi)存。

– 頁面緩存:為了加快訪問文件和文件系統(tǒng)數(shù)據(jù)的速度,Linux內(nèi)核維護了一個頁面緩存,其中包含最近訪問過的數(shù)據(jù)頁面。

– 頁表:該頁表是負責管理物理內(nèi)存和邏輯內(nèi)存之間的映射關系的數(shù)據(jù)結(jié)構。

3. Linux中的內(nèi)存分配器

Linux中有多個內(nèi)存分配器,包括SLAB分配器、SLUB分配器和SLOB分配器。它們都有各自的優(yōu)點和缺點。

– SLAB分配器:SLAB分配器是Linux內(nèi)核中最古老的分配器,它可以提供高速的分配,但需要大量的內(nèi)存來管理分配。因此,它通常用于分配大塊內(nèi)存(例如文件系統(tǒng)緩存)。

– SLUB分配器:SLUB分配器是Linux內(nèi)核中較新的分配器,它提供了較快的分配速度和較低的內(nèi)存利用率。由于它使用的內(nèi)存比較少,因此通常用于分配小塊內(nèi)存(例如內(nèi)核數(shù)據(jù)結(jié)構)。

– SLOB分配器:SLOB分配器是最簡單的分配器,它旨在處理低內(nèi)存環(huán)境中的內(nèi)存分配。它可以實現(xiàn)簡化的內(nèi)存管理,但可能會導致更高的內(nèi)存碎片。因此,它通常用于嵌入式系統(tǒng)或其他具有非常受限內(nèi)存的系統(tǒng)。

4. 內(nèi)存管理的性能和穩(wěn)定性

在Linux系統(tǒng)中,內(nèi)存管理的性能和穩(wěn)定性是至關重要的。如果內(nèi)存管理不良,則可能會導致系統(tǒng)崩潰或出現(xiàn)其他問題。

Linux中的內(nèi)存管理器需要處理多個因素,包括內(nèi)存壓力、內(nèi)存碎片和頁面交換。它必須平衡這些因素,并通過使用適當?shù)姆峙淦骱退惴▉韮?yōu)化內(nèi)存使用。

此外,Linux系統(tǒng)中的內(nèi)存頁管理機制具有高度的靈活性和可配置性。管理員可以使用不同的內(nèi)存分配器和管理器來優(yōu)化內(nèi)存使用,而不會對系統(tǒng)的可靠性和穩(wěn)定性產(chǎn)生負面影響。

Linux內(nèi)存頁管理機制是一個非常復雜但又非常重要的部分,對于系統(tǒng)的性能和穩(wěn)定性有著巨大的影響。理解內(nèi)存頁管理機制的工作原理可以幫助管理員優(yōu)化內(nèi)存使用,并確保系統(tǒng)的可靠性和穩(wěn)定性。

成都網(wǎng)站建設公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設、網(wǎng)站制作、網(wǎng)頁設計及定制高端網(wǎng)站建設服務!

為什么linux kernel默認的頁面大小是4K,而不是4M或8M

太多了,我就做一次搬運工了。

相信很多人在看內(nèi)核內(nèi)存管理部分的時候,都有這樣一個疑問,為什么物理頁面的大小選擇4K,而不是大一些或者小一些呢?

這個問題沒有固定的答案,仁者見仁智者見智,每個人的關注點不一樣。所以這篇文章不是說給出一個固定的答案,更多的只是一篇討論性的文章。

內(nèi)核的頁面大小首先跟CPU有關,不同的架構支持的頁面大小也不相同,但有一個共同點,那就是肯定支持4K的頁面大小。為什么處理器在設計

的時候會選擇4K,而不是其他,這個只有熟悉CPU歷史的人才能給出答案,本人才疏學淺,回答不上來,有興趣的自己找一找。當然處理器的設計者在考慮頁面

大小的時候,也不是憑空就選擇了這個大小,除了歷史因素,肯定綜合了考慮了大頁面、小頁面的優(yōu)缺點,所以這里主要列出這些優(yōu)缺點,通過這些比較來發(fā)現(xiàn)內(nèi)核

為什么將默認的頁面大小選擇為4K。

現(xiàn)在更多爭論的是大頁面還是維持現(xiàn)在的頁面4K大小,所以小頁面的情況我們就不考慮了,通過比較前兩者也可以得出小頁面的情況。支持大頁面的人通常認為大頁面有以下好處:

1、減小page table占用的內(nèi)存。

假設內(nèi)存一定的話,頁面大桐襲旅小越大,管理頁面占用的內(nèi)存也越小?,F(xiàn)在內(nèi)核中每個頁面假設是4K的話,這4K不是全都可用,還有一部分用作

struct

page(大約是64bytes),如果是2.6.32的話,每個頁還有一個page_cgroup(32bytes),也就是說內(nèi)存大小的2.3%

(96/4096)會被內(nèi)核固定使用。如果頁面大小是4M的話,這個比率大約是0.0006%。假設內(nèi)存時64G的話,頁面大小是4K,管理頁占用的內(nèi)存

為1.472G,而頁面大小是4M,管理頁面占用的內(nèi)存為0.393M。所以頁面比較大時,節(jié)省的內(nèi)存比較多。

2、提高TLB的命中率

每次訪問內(nèi)存的時候,都要將

虛擬

地址轉(zhuǎn)換為

物理地址

,如果每次都訪問頁表的話,消耗比較大。因此,通常使用TLB來加速這個過程。但是

TLB的可以直接轉(zhuǎn)換的地址范圍是有限的(具體就是項數(shù)乘以頁面大?。?,一旦出現(xiàn)TLB

miss,這時就必須去頁表中查找。所以,如果是大頁面的話,同樣TLB項數(shù)的情況下,可以跟蹤更大的內(nèi)存。

3、提高磁盤I/O

我們知道在訪問磁盤時,最耗時的操作就是查找寫入盤區(qū)的起始位置,也就是在磁盤盤片上將讀寫頭置于正確的位置上。所以如果是大頁面的話,可以減少寫入磁盤的次數(shù)。比如要寫入4M的緩存,頁面大小是4M的話,局凳只需寫入1次,而頁面大小是4K的話,則需要寫入4次。

4、提供緩存利用率

如果是大頁面的話,可以減少訪問伙伴系統(tǒng)的次數(shù)。調(diào)用伙伴系統(tǒng)的操作隊系統(tǒng)的數(shù)據(jù)和指令

高速緩存

有相當?shù)挠绊憽?nèi)核越浪費這些資源,這些資源對用戶空間進程就越不可用。

除了上面提高的好處,肯定還有的好處,就不一一列舉了。那既然有這么好處,而且現(xiàn)在內(nèi)存越來越大,為什么不更多地采用大頁面呢?比如4M?

軟件開發(fā)中,從來不會有

非常完美

的方案,都是在優(yōu)缺點之間找到平衡點。同樣,大頁面有這樣那樣的好處,缺點也很明顯。

1、更大的問題就是內(nèi)存浪費,而且這個問題非常嚴重。比如這時要分配的內(nèi)存是4M+1byte,這時需要兩個頁面才能滿足分配的需要,這個

時候浪費的內(nèi)存為4M-1byte。如果頁面是4K的話,浪費的內(nèi)存數(shù)量為4k-1byte。頁面太大,可能導致每個頁面都只使用了部分空間,剩余的空間

就被浪費了。當然對于數(shù)據(jù)庫這樣的系統(tǒng)來說,頁面越大會越好,但是內(nèi)核要考慮到通用的情況,而不是專注于特殊的應用場景。再比如,現(xiàn)在系統(tǒng)都是只分配虛擬

地址空間,虛擬地址空間只有在真正被訪問的時候,才映射物理頁面,而且為了減少物理頁面的浪費,對不訪問的部分,則不作映射。如果頁面太大,在映射很小的

部分時,分配的內(nèi)存會越大,浪費也就越大。系統(tǒng)在運行時,會頻繁地請求內(nèi)存頁的操作,這樣導致潛在的浪費會非常嚴重。這樣的浪費會完全抵消減小page

table的優(yōu)勢。

2、頁面太大,會導致大量的內(nèi)存碎片。因為底層的內(nèi)存管理是以頁面為單位。如果系統(tǒng)運行了很長時間,空閑的內(nèi)存很多,但是連續(xù)的內(nèi)存塊都小

于要分配的頁面數(shù)。這時可以通過移動內(nèi)存塊或者利用swap來獲取可用內(nèi)存,但是會導致分配內(nèi)存的操作很慢,這種慢會形成惡性循環(huán),嚴重影響系統(tǒng)的禪嫌性能。

如果是小頁面的話,內(nèi)存的利用會比較緊湊,分配頁面時需要的連續(xù)內(nèi)存塊的大小不像大頁面那樣需要的那么大。

3、如果CPU崩潰,TLB可以訪問的內(nèi)存越大,對系統(tǒng)的影響也越大。這時一把

雙刃劍

,大頁面可以提供TLB訪問的內(nèi)存數(shù)量,但是CPU崩潰時,會導致很多內(nèi)存訪問要去頁表中請求物理地址。

4、兼容性問題。X86處理器支持的頁面大小只有4K,所以如果頁面過大的話,會導致兼容性問題。

5、如果頁面太大,在將內(nèi)存頁換出到swap分區(qū)時,需要換出的內(nèi)存也就越大,會影響性能。

總之,這個頁面大小4K是在計算機發(fā)展過程中選擇的,也是在實踐中經(jīng)過檢驗的,現(xiàn)在看來這個頁面是合適的。

linux內(nèi)核0.11 獲取之一個空閑物理內(nèi)存頁的函數(shù) get_free_page函數(shù) 問題

198 unsigned long get_free_page(void)

199{

200 unsigned long result;

201

202repeat:

203 __a__(“std ; repne ; sca\此判n\t”

204 “jne 1f\n\t”

205 “movb $1,1(%%edi)\n\t”

206 “sall $12,%%ecx\n\t”

207 …

215 :”0″ (0),”i” (LOW_MEM),”c” (PAGING_PAGES),

216 “D” (mem_map+PAGING_PAGES-1)

217 :”di”,”cx”,”dx”);

223 }

224 if (!result && swap_out())

225 goto repeat;

226 return result;

227}

在這段代碼中, 沒有存在中斷屏蔽cli , 而在fork系統(tǒng)調(diào)用中直接使用這個函數(shù), 如果在執(zhí)行到204的時森彎改候被中斷, 并且其他進鬧橋程也調(diào)用fork系統(tǒng)調(diào)用執(zhí)行完這個函數(shù), 這樣就會導致同一頁被引用兩次, 而mark數(shù)值 1 而造成數(shù)據(jù)重復的錯誤. 不知道會不會造成這樣子的錯誤.

問題關鍵在于理解以下棚敏槐指令:

“std ; repne ; sca\n\t”

1、std:方向位DF置位,即DI進行自減操作。

2、repne; sca

這兩條組合指令實現(xiàn)循環(huán)比較。ecx初值為15*1024,al=0,di初值為&mem_map,即從數(shù)組mem_map的最后一項開始,依次與al(=0)進行比較。假設數(shù)組第i項mem_map==0,則結(jié)束循環(huán),此時ecx=i, edi=&mem_map(因為ecx初值為15*1024,di初值為數(shù)組最后一項15*1024-1的地址)。找到空閑頁面后,將該數(shù)組項置1,即*(edi+1)=mem_map=1,即語鏈友句“movb $1,1(%%edi)”實現(xiàn)的功能。此時,ecx即為空閑頁面索引。

幾點說明:

1、rep循環(huán)結(jié)束條件拿春:

Repeat Prefix Termination Condition 1 Termination Condition 2

REPRCX or (E)CX = None

REPE/REPZRCX or (E)CX = ZF = 0

REPNE/REPNZ RCX or (E)CX = ZF = 1

2、rep循環(huán)執(zhí)行順序:

WHILE CountReg ≠ 0

DO

Service pending interrupts (if any);

Execute associated string instruction; // 1、執(zhí)行相關指令。例如scan指令,除了執(zhí)行al與*di的比較外,di也會被影響,即di自減1(當DF==1時)或自加1(當DF==0時)

CountReg ← (CountReg – 1); // 2、ECX自減

IF CountReg = 0 // 3、判斷ECX是否已減到0

THEN exit WHILE loop; FI;

IF (Repeat prefix is REPZ or REPE) and (ZF = 0) // 4、最后才判斷其他相關標志。

or (Repeat prefix is REPNZ or REPNE) and (ZF = 1)

THEN exit WHILE loop; FI;

OD;

3、sca指令對di的影響:

After the comparison, the (E)DI register is incremented or decremented automatically according to the setting of

the DF flag in the EFLAGS register. If the DF flag is 0, the (E)DI register is incremented; if the DF flag is 1, the (E)DI

register is decremented. The register is incremented or decremented by 1 for byte operations, by 2 for word operations, and by 4 for doubleword operations.

linux 內(nèi)存頁的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關于linux 內(nèi)存頁,深入解析Linux內(nèi)存頁管理機制,為什么linux kernel默認的頁面大小是4K,而不是4M或8M,linux內(nèi)核0.11 獲取之一個空閑物理內(nèi)存頁的函數(shù) get_free_page函數(shù) 問題的信息別忘了在本站進行查找喔。

創(chuàng)新互聯(lián)-老牌IDC、云計算及IT信息化服務領域的服務供應商,業(yè)務涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務、云計算服務、IT信息化、AI算力租賃平臺(智算云),軟件開發(fā),網(wǎng)站建設,咨詢熱線:028-86922220


文章名稱:深入解析Linux內(nèi)存頁管理機制(linux內(nèi)存頁)
URL地址:http://m.5511xx.com/article/cdsjpdj.html