日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入了解Linux的內(nèi)存地址空間分配(linux內(nèi)存地址空間)

Linux是一款使用廣泛的操作系統(tǒng),在很多場(chǎng)景下都能夠展現(xiàn)出其強(qiáng)大的性能。其中內(nèi)存管理作為其重要組成部分之一,也是Linux能夠高效運(yùn)行的關(guān)鍵因素之一。在實(shí)際應(yīng)用中,Linux的內(nèi)存地址空間分配策略無疑是其中的一個(gè)方面,它能夠決定操作系統(tǒng)的可靠性和內(nèi)存使用率。接下來,我們將,幫助讀者更好地理解Linux內(nèi)存管理的實(shí)現(xiàn)原理。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國際域名空間、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、萊山網(wǎng)站維護(hù)、網(wǎng)站推廣。

1. 內(nèi)核空間與用戶空間

操作系統(tǒng)的內(nèi)存地址空間一般被劃分為內(nèi)核空間和用戶空間兩個(gè)區(qū)域。用戶空間是指給用戶進(jìn)程分配的內(nèi)存空間,是進(jìn)程運(yùn)行時(shí)使用的主要區(qū)域,其地址空間通常從0開始。而內(nèi)核空間則是一個(gè)專用的區(qū)域,為操作系統(tǒng)內(nèi)核所使用。Linux內(nèi)核空間的地址從0xC0000000開始,該空間被保護(hù),并只能由內(nèi)核訪問。內(nèi)核空間包含了整個(gè)內(nèi)核代碼和相關(guān)數(shù)據(jù),包括系統(tǒng)調(diào)用表,設(shè)備驅(qū)動(dòng)程序等系統(tǒng)程序。

在一個(gè)Linux系統(tǒng)中,內(nèi)核空間與用戶空間是完全隔離的,內(nèi)核對(duì)用戶進(jìn)程的限制幾乎沒有任何限制。用戶進(jìn)程只能訪問自己所擁有的內(nèi)存空間,而內(nèi)核空間的內(nèi)容則完全無法訪問。在需要訪問內(nèi)核空間中的數(shù)據(jù)或程序時(shí),用戶進(jìn)程必須通過系統(tǒng)調(diào)用,由內(nèi)核代表其完成特定的操作。

2. 內(nèi)存地址空間分配方法

Linux的內(nèi)存空間分配方法一般分為連續(xù)和離散兩種。在連續(xù)分配中,操作系統(tǒng)通過分配一個(gè)連續(xù)的內(nèi)存區(qū)域來滿足進(jìn)程的內(nèi)存需求。而離散分配則是將進(jìn)程的內(nèi)存需求分散到物理內(nèi)存中的不同位置。其中,連續(xù)分配是最常用的內(nèi)存分配方式。當(dāng)需要建立新的進(jìn)程時(shí),操作系統(tǒng)將先在進(jìn)程地址空間中分配一個(gè)空間作為代碼段、數(shù)據(jù)段和堆棧。

在Linux中,內(nèi)存分配的主要實(shí)現(xiàn)函數(shù)是alloc_pages和get_free_pages。這兩個(gè)函數(shù)分別用于分配具有特定參數(shù)的連續(xù)內(nèi)存塊和指定大小的內(nèi)存塊。此外,還有kmalloc函數(shù),可以用來為內(nèi)核分配連續(xù)的小內(nèi)存塊。這些函數(shù)都是通過使用伙伴算法和SLAB/SLUB算法來優(yōu)化內(nèi)存分配的效率和速度的。

3. 伙伴和SLAB/SLUB算法

伙伴算法是一種內(nèi)存管理算法,它可以為需要內(nèi)存的應(yīng)用程序自動(dòng)分配一些連續(xù)的內(nèi)存空間?;锇樗惴ň褪菍⑦B續(xù)的可用內(nèi)存塊劃分為不同的大小等級(jí),每個(gè)等級(jí)中的內(nèi)存塊大小是2的次冪,如2^0, 2^1, 2^2等等。當(dāng)有一個(gè)請(qǐng)求分配內(nèi)存時(shí),伙伴算法會(huì)從對(duì)應(yīng)大小的內(nèi)存塊鏈表中檢查是否有足夠大小的內(nèi)存塊可以分配。

SLAB/SLUB算法是另一種內(nèi)存管理算法。SLAB是Linux專門為內(nèi)核設(shè)計(jì)的內(nèi)存分配器,而SLUB則是一種新的內(nèi)存分配器,引入了SLAB上不能處理的一些機(jī)制。這兩種算法都是基于內(nèi)存池的概念,為用戶和內(nèi)核空間中的對(duì)象分配和釋放內(nèi)存。通過使用內(nèi)存池和內(nèi)存垃圾回收機(jī)制,可以幫助系統(tǒng)更好地管理內(nèi)存資源。

4. 內(nèi)核地址空間的映射

在Linux中,內(nèi)核使用虛擬地址來訪問其地址空間。當(dāng)使用虛擬地址時(shí),需要將其轉(zhuǎn)換成物理地址。在物理存儲(chǔ)器與虛擬地址之間建立映射的過程被稱為內(nèi)存管理單元(MMU)。MMU在物理內(nèi)存和虛擬內(nèi)存之間建立了一張映射表,用于將虛擬地址映射到物理地址。

在Linux中,由于內(nèi)核空間是由內(nèi)核使用的,因此映射表在內(nèi)核初始化時(shí)已經(jīng)被構(gòu)建。在內(nèi)核的邏輯地址空間中,內(nèi)核空間突出了位于更高部分,并且具有系統(tǒng)映射的特殊屬性。這些屬性可用于訪問系統(tǒng)調(diào)用、顯存和一些硬件IO端口等系統(tǒng)資源。

以上就是Linux內(nèi)存地址空間分配的相關(guān)知識(shí)點(diǎn)介紹。雖然內(nèi)存管理對(duì)于普通用戶來說可能不是一個(gè)常見的話題,但是對(duì)于開發(fā)者和系統(tǒng)管理員來說,深入了解Linux內(nèi)存地址空間分配是非常必要的。這對(duì)于幫助他們更好地理解Linux系統(tǒng)的內(nèi)部工作原理,優(yōu)化系統(tǒng)性能有著重要的作用。因此,在實(shí)際應(yīng)用中,我們應(yīng)該注重優(yōu)化內(nèi)存管理以充分利用系統(tǒng)資源,提高應(yīng)用程序的性能和可靠性。

相關(guān)問題拓展閱讀:

  • Linux內(nèi)存系統(tǒng)
  • linux下查看內(nèi)存地址空間的分配

Linux內(nèi)存系統(tǒng)

——虛擬內(nèi)存定義

All about Linux swap space

Linux將物理RAM (Random Access Memory) 劃分為稱為頁面的內(nèi)存塊。交換是將一頁內(nèi)存復(fù)制到硬盤上的預(yù)配置空間(稱為交換空間)以釋放改內(nèi)存頁面上的過程。物理內(nèi)存和交換空間的組合就是可用的虛擬內(nèi)存量。

虛擬內(nèi)存的那點(diǎn)事兒

進(jìn)程是與其他進(jìn)程共享CPU和內(nèi)存資源的。為了有效的管理內(nèi)歷純存并減少出錯(cuò),現(xiàn)代操作系統(tǒng)提供了一種對(duì)主存的抽象概念,即:虛擬內(nèi)存( Virtual Memory )。

虛擬內(nèi)存為每個(gè)進(jìn)程提供一個(gè)一致的,私有的地址空間,每個(gè)進(jìn)程擁有一片連續(xù)完整的內(nèi)存空間。

正如 所說,虛擬內(nèi)存不只是“使用硬盤空間來擴(kuò)展內(nèi)存”的技術(shù)。

虛擬內(nèi)存的重要意義是它定義了一個(gè)連續(xù)的虛擬地址空間,

使得程序編寫難度降低。并且,

把內(nèi)存擴(kuò)展到硬盤空間只是使用虛擬內(nèi)存的必然結(jié)果,虛擬內(nèi)存空間會(huì)存在硬盤中,并且會(huì)被全部放入內(nèi)存中緩沖(按需),有的操作系統(tǒng)還會(huì)在內(nèi)存不夠的情況下,將一進(jìn)程的內(nèi)存全部放入硬盤空間中,并在切換到進(jìn)程時(shí)再從硬盤讀取

(這也是Windows會(huì)經(jīng)常假死的原因…)。

虛擬內(nèi)存主要提供了如下三個(gè)重要的能力:

內(nèi)存通常被組織為一個(gè)由M個(gè)連續(xù)的字節(jié)大小的單元組成的數(shù)組。每個(gè)字節(jié)都有一個(gè)唯迅爛氏一的物理地址 (Physical Address PA) ,作為到數(shù)組的索引。

CPU訪問內(nèi)存最簡(jiǎn)單直接的方法就是使用物理地址,這種尋址方式稱為

物理尋址

。

現(xiàn)代計(jì)算機(jī)使用的是一種被稱為虛擬尋址 (Virtual Addressing) 的尋址方式。

使用虛擬尋址,CPU需要將虛擬地址翻譯成物理地址,這樣才能訪問到真實(shí)的物理內(nèi)存。

虛擬尋址需要硬件與操作系統(tǒng)之間相互合作。

CPU中含有一個(gè)被稱為內(nèi)存管理單元 (Memory Management Unit,MMU) 的硬件,它的功能是將虛擬地址轉(zhuǎn)換稱為物理地址,MMU需要借助存放在內(nèi)存中的 頁表 來動(dòng)態(tài)翻譯虛擬地址,該頁表由操作系統(tǒng)管理。

分頁表是一種數(shù)據(jù)結(jié)構(gòu),它用于計(jì)算機(jī)操作系統(tǒng)中虛擬內(nèi)存系統(tǒng),其存儲(chǔ)了虛擬地址到物理地址之間的映射。虛擬地址在訪問進(jìn)程中是唯一的,而物理地址在硬件(比如內(nèi)存)中是唯一的。

在操作系統(tǒng)中使用

虛擬內(nèi)存

,每個(gè)進(jìn)程會(huì)認(rèn)為使用一塊大的連續(xù)的內(nèi)存,事實(shí)上,每個(gè)進(jìn)程的內(nèi)存散布在

物理內(nèi)存

的不同區(qū)域。或者可能被調(diào)出到備份存儲(chǔ)中(一般是硬盤)。當(dāng)一個(gè)進(jìn)程請(qǐng)求自己的內(nèi)存,操作系統(tǒng)負(fù)責(zé)把程序生成的虛擬地址,映射到實(shí)際存儲(chǔ)的物理內(nèi)存上。操作系統(tǒng)在

分頁表

中存儲(chǔ)虛擬地址到物理地址的映射。每個(gè)映射被稱為

分頁表項(xiàng)(page table entry ,PTE)

。

在一個(gè)簡(jiǎn)單的地址空間方案中,由虛擬地址尋址的頁與物理內(nèi)存中的幀之間的關(guān)系。物理內(nèi)存可以包含屬于許多進(jìn)程的頁。如果不經(jīng)常使用,或者物理內(nèi)存已滿,可以將頁面分頁到磁盤。在上圖中,并非所有頁面都在物理內(nèi)存中。

虛擬地址到物理地址的轉(zhuǎn)換(即虛擬內(nèi)存的管理)、內(nèi)存保護(hù)、CPU高速緩存的控制。

現(xiàn)代的內(nèi)存管理單元是以

的方式,分割虛擬地址空間(處理器使用的地址范圍)的;頁的大小是2的n次方,通常為幾KB(字節(jié))。地址尾部的n位(頁大小的2的次方數(shù))作為頁內(nèi)的偏移量保持不變。其余的地址位(address)為(虛擬)頁號(hào)。

內(nèi)存管理單元通常借助一種叫做轉(zhuǎn)譯旁觀緩沖器(Translation Lookaside Buffer,TLB)和相聯(lián)高速緩存來將虛擬頁號(hào)轉(zhuǎn)換為物理頁號(hào)。當(dāng)后備緩沖器中沒有轉(zhuǎn)換記錄時(shí),則使用一種較慢的機(jī)制,其中包括專用硬件的數(shù)據(jù)結(jié)構(gòu)或軟件輔助手段。這個(gè)數(shù)據(jù)結(jié)構(gòu)稱為

分頁表

,頁表中的數(shù)據(jù)叫做

分頁表項(xiàng)

(page table entry PTE)。物理頁號(hào)結(jié)合頁偏移量便提供了完整的物理地址。

頁表 或 轉(zhuǎn)換后備緩沖器數(shù)據(jù)項(xiàng)應(yīng)該包括的信息有:

有時(shí)候,TLB和PTE會(huì)

禁止對(duì)虛擬頁訪問

,這畝散可能是因?yàn)闆]有RAM與虛擬頁相關(guān)聯(lián)。如果是這種情況,MMU將向CPU發(fā)出頁錯(cuò)誤的信號(hào),操作系統(tǒng)將進(jìn)行處理,也許會(huì)尋找RAM的空白幀,同時(shí)建立一個(gè)新的PTE將之映射到所請(qǐng)求的虛擬地址。如果沒有空閑的RAM,可能必須關(guān)閉一個(gè)已經(jīng)存在的頁面,使用一些替換算法,將之保存到磁盤中(這被稱為頁面調(diào)度)。

當(dāng)需要將虛擬地址轉(zhuǎn)換為物理地址時(shí),首先搜索TLB,如果找到匹配(TLB)命中,則返回物理地址并繼續(xù)存儲(chǔ)器訪問。然而,如果沒有匹配(稱為TLB未命中),則MMU或操作系統(tǒng)TLB未命中處理器通常會(huì)查找

頁表

中的地址映射以查看是否存在映射(頁面遍歷),如果存在,則將其寫回TLB(這必須完成,因?yàn)橛布ㄟ^虛擬存儲(chǔ)器系統(tǒng)中的TLB訪問存儲(chǔ)器),并且重啟錯(cuò)誤指令(這也可以并行發(fā)生)。此后續(xù)轉(zhuǎn)換找到TLB命中,并且內(nèi)存訪問將繼續(xù)。

虛擬地址到物理地址的轉(zhuǎn)換過程,如果虛擬內(nèi)存不存在與TLB,轉(zhuǎn)換會(huì)被重置并通過分頁表和硬件尋找。

通常情況下,用于處理此中斷的程序是操作系統(tǒng)的一部分。如果操作系統(tǒng)判斷此次訪問有效,那么

操作系統(tǒng)會(huì)嘗試將相關(guān)的分頁從硬盤上的虛擬內(nèi)存文件調(diào)入內(nèi)存。

而如果訪問是不被允許的,那么操作系統(tǒng)通常會(huì)結(jié)束相關(guān)的進(jìn)程。

雖然叫做“頁缺失”錯(cuò)誤,但實(shí)際上這并不一定是一種錯(cuò)誤。而且這一機(jī)制是利用虛擬內(nèi)存來增加程序可用內(nèi)存空間。

發(fā)生這種情況的可能性:

當(dāng)原程序再次需要該頁內(nèi)的數(shù)據(jù)時(shí),如果這一頁確實(shí)沒有被分配出去,那么系統(tǒng)只需要重新為該頁在MMU內(nèi)注冊(cè)映射即可。

操作系統(tǒng)需要:

硬性頁缺失導(dǎo)致的性能損失是很大的。

另外,有些操作系統(tǒng)會(huì)將程序的一部分延遲到需要使用的時(shí)候再加載入內(nèi)存執(zhí)行,以此提升性能。這一特性也是通過捕獲硬性頁缺失達(dá)到的。

當(dāng)硬性頁缺失過于頻繁發(fā)生時(shí),稱發(fā)生

系統(tǒng)顛簸。

具體動(dòng)作與所使用的操作系統(tǒng)有關(guān),比如Windows會(huì)使用異常機(jī)制向程序報(bào)告,而類Unix系統(tǒng)則使用信號(hào)機(jī)制。

盡管在整個(gè)運(yùn)行過程中,程序引用不同的頁面總數(shù)(也就是虛擬內(nèi)存大?。┛赡艹隽宋锢泶鎯?chǔ)器(DRAM)總大小,但是程序常常在較小的活動(dòng)頁面上活動(dòng),這個(gè)叫做工作集或者常駐集。在工作集被緩存后,對(duì)它的反復(fù)調(diào)用會(huì)使程序命中提高,從而提高性能。

大部分的程序都可以在存儲(chǔ)器獲取數(shù)據(jù)和讀取中達(dá)到穩(wěn)定的狀態(tài),當(dāng)程序達(dá)到穩(wěn)定狀態(tài)時(shí),存儲(chǔ)器的使用量通常都不會(huì)太大。虛擬內(nèi)存雖然可以有效率控制存儲(chǔ)器的使用,

但是大量的頁缺失還是造成了系統(tǒng)遲緩的主要因素。

當(dāng)工作集的大小超過物理存儲(chǔ)器大小,程序?qū)?huì)發(fā)生一種不幸的情況,這種情況稱為

“顛簸”

,頁面將不停的寫入、釋放、讀取,由于大量的丟失(而非命中)而損失極大性能。用戶可以增加隨機(jī)存取存儲(chǔ)器的大小或是減少同時(shí)在系統(tǒng)里運(yùn)行程序的數(shù)量來降低系統(tǒng)顛簸的記錄。

推薦閱讀:

操作系統(tǒng)–分頁(一)

操作系統(tǒng)實(shí)現(xiàn)(二):分頁和物理內(nèi)存管理

linux下查看內(nèi)存地址空間的分配

cat /proc/iomem

這個(gè)可以查看,但不太野帆詳細(xì)!

cat /高脊敏proc/interrupts 是中斷戚枝向量。

cat /proc/interrupts

如果僅僅是看分配的地址 這個(gè)就夠了

ldd 是查看某個(gè)可執(zhí)行二進(jìn)制程序所使用到的動(dòng)態(tài)庫文件的吧?

ldd可以查看

關(guān)于linux 內(nèi)存地址空間的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

創(chuàng)新互聯(lián)網(wǎng)絡(luò)推廣網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì),網(wǎng)站建設(shè)公司,網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),1500元定制網(wǎng)站優(yōu)化全包,先排名后付費(fèi),已為上千家服務(wù),聯(lián)系電話:13518219792


當(dāng)前標(biāo)題:深入了解Linux的內(nèi)存地址空間分配(linux內(nèi)存地址空間)
標(biāo)題來源:http://www.dlmjj.cn/article/cdidceg.html