系統(tǒng)內(nèi)存管理:虛擬內(nèi)存、內(nèi)存分段與分頁(yè)、頁(yè)表緩存TLB以及Linux內(nèi)存管理
虛擬內(nèi)存是一種操作系統(tǒng)提供的機(jī)制,用于將每個(gè)進(jìn)程分配的獨(dú)立的虛擬地址空間映射到實(shí)際的物理內(nèi)存地址空間上。通過使用虛擬內(nèi)存,操作系統(tǒng)可以有效地解決多個(gè)應(yīng)用程序直接操作物理內(nèi)存可能引發(fā)的沖突問題。
在使用虛擬內(nèi)存的情況下,每個(gè)進(jìn)程都有自己的獨(dú)立的虛擬地址空間,它們不能直接訪問物理內(nèi)存地址。當(dāng)程序訪問虛擬內(nèi)存地址時(shí),操作系統(tǒng)會(huì)進(jìn)行地址轉(zhuǎn)換,將虛擬地址映射到物理地址上,這樣不同的進(jìn)程運(yùn)行時(shí),寫入的是不同的物理地址,避免了互相覆蓋指針的問題。
虛擬內(nèi)存的使用使得每個(gè)進(jìn)程都可以擁有相同的虛擬地址空間,而不用擔(dān)心與其他進(jìn)程的地址沖突。操作系統(tǒng)負(fù)責(zé)管理虛擬地址和物理地址之間的映射關(guān)系,并在需要時(shí)進(jìn)行地址轉(zhuǎn)換。這樣,進(jìn)程可以以一種透明的方式訪問內(nèi)存,無(wú)需關(guān)心內(nèi)存的實(shí)際物理位置。
(資料圖片僅供參考)
通過虛擬內(nèi)存機(jī)制,操作系統(tǒng)能夠更好地管理系統(tǒng)內(nèi)存資源,提供更高的安全性和穩(wěn)定性。它可以為每個(gè)進(jìn)程提供獨(dú)立的地址空間,保護(hù)進(jìn)程間的數(shù)據(jù)隔離,同時(shí)也可以有效地利用物理內(nèi)存,將不常用的數(shù)據(jù)交換到磁盤上(交換區(qū)),以提供更大的可用內(nèi)存空間。
內(nèi)存分段在分段機(jī)制下,虛擬地址由兩部分組成:段選擇子和段內(nèi)偏移量。段選擇子是一個(gè)索引,用于指定要訪問的段的起始地址和長(zhǎng)度。段內(nèi)偏移量則表示在該段內(nèi)的具體位置。
操作系統(tǒng)會(huì)維護(hù)一個(gè)段表,其中包含了每個(gè)段的起始地址和長(zhǎng)度信息。當(dāng)程序訪問一個(gè)虛擬地址時(shí),操作系統(tǒng)會(huì)通過段選擇子從段表中找到對(duì)應(yīng)的段描述符,然后根據(jù)段描述符中的信息計(jì)算出物理地址。
具體的映射過程如下:
程序訪問虛擬地址,通過段選擇子找到對(duì)應(yīng)的段描述符。根據(jù)段描述符中的基址和長(zhǎng)度信息,計(jì)算出段的起始物理地址。將段的起始物理地址與段內(nèi)偏移量相加,得到最終的物理地址。不過,需要注意的是,分段機(jī)制可能會(huì)導(dǎo)致內(nèi)存碎片的問題,因?yàn)椴煌蔚拇笮】赡懿煌瑢?dǎo)致一些碎片化的空間無(wú)法被利用。當(dāng)不夠內(nèi)存分配的時(shí)候,會(huì)選擇使用內(nèi)存交換,先把一塊正在使用的內(nèi)存移到磁盤中,然后再移回來(lái)把中間留的內(nèi)存縫隙全用上,雖然解決了內(nèi)存碎片的問題,但是這個(gè)交換操作很慢,效率低,看下圖示:
虛擬內(nèi)存、分段和內(nèi)存交換似乎解決了同時(shí)運(yùn)行多個(gè)程序的問題,但仍存在性能瓶頸。由于硬盤訪問速度較慢,每次內(nèi)存交換都需要將大段連續(xù)的內(nèi)存數(shù)據(jù)寫入硬盤。因此,如果交換的是占用大量?jī)?nèi)存空間的程序,整個(gè)系統(tǒng)會(huì)變得卡頓。
為了解決內(nèi)存分段的碎片和提高內(nèi)存交換效率,引入了內(nèi)存分頁(yè)機(jī)制。
內(nèi)存分頁(yè)內(nèi)存分頁(yè)是將整個(gè)虛擬和物理內(nèi)存空間劃分為固定大小的連續(xù)內(nèi)存塊,稱為頁(yè)(Page)。在Linux下,每一頁(yè)的大小通常為4KB。虛擬地址與物理地址之間通過頁(yè)表進(jìn)行映射,頁(yè)表存儲(chǔ)在CPU的內(nèi)存管理單元(MMU)中,從而CPU可以直接通過MMU找到實(shí)際訪問的物理內(nèi)存地址。
虛擬地址與物理地址之間通過頁(yè)表來(lái)映射,如下圖:
由于內(nèi)存空間事先劃分為固定大小的頁(yè),不會(huì)像分段機(jī)制那樣產(chǎn)生碎片。當(dāng)釋放內(nèi)存時(shí),以頁(yè)為單位進(jìn)行釋放,避免了無(wú)法利用的小內(nèi)存塊。
如果內(nèi)存空間不足,操作系統(tǒng)會(huì)將其他正在運(yùn)行的進(jìn)程中的"最近未使用"的內(nèi)存頁(yè)面暫時(shí)存儲(chǔ)到硬盤上,稱為換出(Swap Out)。當(dāng)需要時(shí),再將頁(yè)面加載回內(nèi)存,稱為換入(Swap In)。因此,每次寫入硬盤的是少量的一頁(yè)或幾頁(yè),不會(huì)花費(fèi)太多時(shí)間,從而提高了內(nèi)存交換的效率。
簡(jiǎn)單分頁(yè)簡(jiǎn)單分頁(yè)存在空間上的缺陷。在操作系統(tǒng)可以同時(shí)運(yùn)行大量進(jìn)程的情況下,頁(yè)表會(huì)變得非常龐大。在32位環(huán)境下,虛擬地址空間為4GB,假設(shè)頁(yè)的大小為4KB,就需要大約100萬(wàn)個(gè)頁(yè)。每個(gè)頁(yè)表項(xiàng)需要4字節(jié)來(lái)存儲(chǔ),所以整個(gè)4GB空間的映射需要4MB的內(nèi)存來(lái)存儲(chǔ)頁(yè)表。
盡管4MB的頁(yè)表看起來(lái)并不算太大,但要注意每個(gè)進(jìn)程都有自己的虛擬地址空間,也就是說(shuō)每個(gè)進(jìn)程都有自己的頁(yè)表。如果有100個(gè)進(jìn)程,就需要400MB的內(nèi)存來(lái)存儲(chǔ)頁(yè)表,這對(duì)于內(nèi)存來(lái)說(shuō)是相當(dāng)大的開銷,更不用說(shuō)64位環(huán)境下了。
多級(jí)頁(yè)表要解決上述問題,我們可以采用一種叫做多級(jí)頁(yè)表(Multi-Level Page Table)的解決方案。在之前我們已經(jīng)了解到,在32位環(huán)境下,頁(yè)大小為4KB的情況下,一個(gè)進(jìn)程的頁(yè)表需要存儲(chǔ)100多萬(wàn)個(gè)頁(yè)表項(xiàng),每個(gè)項(xiàng)占用4字節(jié)的空間,因此一個(gè)頁(yè)表需要4MB的內(nèi)存空間。
為了節(jié)省內(nèi)存空間,我們可以將單級(jí)頁(yè)表進(jìn)行分頁(yè),將一個(gè)頁(yè)表(一級(jí)頁(yè)表)分為1024個(gè)頁(yè)表(二級(jí)頁(yè)表),每個(gè)二級(jí)頁(yè)表包含1024個(gè)頁(yè)表項(xiàng),形成二級(jí)分頁(yè)結(jié)構(gòu)。這樣一級(jí)頁(yè)表覆蓋整個(gè)4GB的虛擬地址空間,而對(duì)于未使用的頁(yè)表項(xiàng),不會(huì)創(chuàng)建對(duì)應(yīng)的二級(jí)頁(yè)表,只在需要時(shí)才創(chuàng)建。如下圖所示:
換個(gè)角度來(lái)看,大多數(shù)程序未使用到整個(gè)4GB的虛擬地址空間,因此部分頁(yè)表項(xiàng)是空的,沒有分配實(shí)際的內(nèi)存空間。在物理內(nèi)存緊張的情況下,操作系統(tǒng)會(huì)將最近一段時(shí)間未訪問的頁(yè)表?yè)Q出到硬盤,從而釋放物理內(nèi)存。使用二級(jí)分頁(yè),一級(jí)頁(yè)表只需要覆蓋整個(gè)4GB的虛擬地址空間,而未使用的頁(yè)表項(xiàng)不需要?jiǎng)?chuàng)建對(duì)應(yīng)的二級(jí)頁(yè)表。假設(shè)只有20%的一級(jí)頁(yè)表項(xiàng)被使用,那么頁(yè)表占用的內(nèi)存空間只有0.804MB,相比于單級(jí)頁(yè)表的4MB,內(nèi)存節(jié)約非常巨大。
為什么不分級(jí)的頁(yè)表無(wú)法實(shí)現(xiàn)這樣的內(nèi)存節(jié)約呢?從頁(yè)表的性質(zhì)來(lái)看,頁(yè)表保存在內(nèi)存中,其主要作用是將虛擬地址翻譯為物理地址。如果在頁(yè)表中找不到對(duì)應(yīng)的頁(yè)表項(xiàng),計(jì)算機(jī)系統(tǒng)將無(wú)法正常工作。因此,頁(yè)表必須覆蓋整個(gè)虛擬地址空間。而不分級(jí)的頁(yè)表需要100多萬(wàn)個(gè)頁(yè)表項(xiàng)進(jìn)行映射,而二級(jí)分頁(yè)只需要1024個(gè)頁(yè)表項(xiàng)(一級(jí)頁(yè)表覆蓋整個(gè)虛擬地址空間,二級(jí)頁(yè)表在需要時(shí)創(chuàng)建)。
頁(yè)表緩存TLB(Translation Lookaside Buffer)TLB(Translation Lookaside Buffer)是一個(gè)位于CPU芯片中的緩存,用于存儲(chǔ)程序中最常訪問的頁(yè)表項(xiàng),以加快虛擬地址到物理地址的轉(zhuǎn)換速度。多級(jí)頁(yè)表雖然解決了空間上的問題,但是增加了轉(zhuǎn)換的工序,導(dǎo)致時(shí)間上的開銷。然而,由于程序的局部性原理,程序執(zhí)行期間通常僅限于某一部分,訪問的存儲(chǔ)空間也局限于某個(gè)內(nèi)存區(qū)域。因此,通過將最常訪問的頁(yè)表項(xiàng)存儲(chǔ)到TLB這個(gè)硬件緩存中,可以更快地進(jìn)行地址轉(zhuǎn)換。
在CPU芯片中,內(nèi)存管理單元(Memory Management Unit)芯片負(fù)責(zé)處理地址轉(zhuǎn)換和TLB的訪問與交互。當(dāng)CPU進(jìn)行尋址時(shí),首先會(huì)查找TLB,如果找到了對(duì)應(yīng)的頁(yè)表項(xiàng),就可以直接進(jìn)行物理地址的訪問,避免了繼續(xù)查找常規(guī)頁(yè)表的開銷。
由于TLB中存儲(chǔ)的是程序最常訪問的幾個(gè)頁(yè)表項(xiàng),所以TLB的命中率通常是很高的。這是因?yàn)槌绦驁?zhí)行過程中,訪問的頁(yè)表項(xiàng)相對(duì)固定。通過利用TLB,可以大大提高地址轉(zhuǎn)換的速度,加快程序的執(zhí)行效率。
Linux內(nèi)存管理Linux內(nèi)存管理涉及邏輯地址和線性地址的轉(zhuǎn)換。邏輯地址是程序使用的地址,而線性地址是通過段式內(nèi)存管理映射的地址,也稱為虛擬地址。
Linux的虛擬地址空間分為內(nèi)核空間和用戶空間兩部分。32位系統(tǒng)中,內(nèi)核空間占用1G,剩下的3G是用戶空間;64位系統(tǒng)中,內(nèi)核空間和用戶空間都是128T,分別占據(jù)內(nèi)存空間的最高和最低處。如下所示:
進(jìn)程在用戶態(tài)時(shí)只能訪問用戶空間內(nèi)存,進(jìn)入內(nèi)核態(tài)后才能訪問內(nèi)核空間內(nèi)存。雖然每個(gè)進(jìn)程都有獨(dú)立的虛擬內(nèi)存,但虛擬內(nèi)存中的內(nèi)核地址關(guān)聯(lián)的是相同的物理內(nèi)存,這樣進(jìn)程切換到內(nèi)核態(tài)后就可以方便地訪問內(nèi)核空間內(nèi)存。
總結(jié)虛擬內(nèi)存是操作系統(tǒng)提供的一種機(jī)制,通過將每個(gè)進(jìn)程分配的獨(dú)立的虛擬地址空間映射到實(shí)際的物理內(nèi)存地址空間上,解決了多個(gè)應(yīng)用程序直接操作物理內(nèi)存可能引發(fā)的沖突問題。虛擬內(nèi)存的使用使得每個(gè)進(jìn)程都可以擁有相同的虛擬地址空間,而不用擔(dān)心與其他進(jìn)程的地址沖突。通過虛擬內(nèi)存機(jī)制,操作系統(tǒng)能夠更好地管理系統(tǒng)內(nèi)存資源,提供更高的安全性和穩(wěn)定性。虛擬內(nèi)存的實(shí)現(xiàn)方式有分段和分頁(yè),其中分頁(yè)機(jī)制更為常用,采用多級(jí)頁(yè)表的方式節(jié)約了內(nèi)存空間。頁(yè)表緩存TLB能夠加快虛擬地址到物理地址的轉(zhuǎn)換速度。Linux的內(nèi)存管理涉及邏輯地址和線性地址的轉(zhuǎn)換,將虛擬地址空間分為內(nèi)核空間和用戶空間,方便進(jìn)程訪問內(nèi)核空間內(nèi)存。
關(guān)鍵詞:
您可能也感興趣:
今日熱點(diǎn)
為您推薦
日本排放核污水 我們需要囤鹽嗎?
菲薩約·德萊-巴什魯(關(guān)于菲薩約·德萊-巴什魯簡(jiǎn)述)
更多
- 照片怎么弄pdf格式 照片怎么弄pdf格式的文件
- 湖北各高校陸續(xù)公布!開學(xué)前要注意這些
- 2024 款?yuàn)W迪 Q8 SUV 更多諜照曝光:9月5日正式發(fā)布,前臉升級(jí)
- “改種+改地+改機(jī)” “白花花”鹽堿地變身穩(wěn)產(chǎn)增產(chǎn)“大糧倉(cāng)”
- Epic 宣布獨(dú)占首發(fā)游戲計(jì)劃,開發(fā)者前 6 個(gè)月可獲得 100% 分成
- 國(guó)家原子能機(jī)構(gòu)發(fā)聲 日方應(yīng)立即停止這一錯(cuò)誤行為
- “一石三鳥”實(shí)現(xiàn)廢舊鈷酸鋰電池正極材料“再生”
- 新華微博下載安裝(新華微博)
更多
- 2023年8月24日《萬(wàn)寧新聞》完整版
- 美網(wǎng)女單簽表出爐:中國(guó)4金花皆獲好簽,鄭欽文首輪pk波多羅斯卡
- 機(jī)構(gòu):二季度中東智能手機(jī)市場(chǎng)出貨量達(dá)950萬(wàn)部,同比增長(zhǎng)2%
- 交流諧振耐壓試驗(yàn)原理(感應(yīng)耐壓試驗(yàn)原理是什么)
- 東星醫(yī)療董秘回復(fù):公司重視對(duì)投資者的回報(bào)
- 7月交通運(yùn)輸經(jīng)濟(jì)保持恢復(fù)態(tài)勢(shì) 主要指標(biāo)實(shí)現(xiàn)正增長(zhǎng)
- 動(dòng)力電池裝機(jī)量持續(xù)提升,相關(guān)上市公司業(yè)績(jī)有望受益
- 處暑時(shí)節(jié),暑熱漸消退,晨起鍛煉避開兩大誤區(qū),這樣做越練越傷身
排行
- 喚起綠色生活方式 天鵝蓄電池環(huán)保進(jìn)行時(shí)
- 碧桂園400億元房地產(chǎn)ABS亮眼
- 北京“3·17”調(diào)控一周年 樓市成交全面萎縮
- 荷蘭農(nóng)場(chǎng)再度暴發(fā)禽流感疫情撲殺逾3萬(wàn)只家禽
- 北京二手房掛牌價(jià)再下降交易量有望“穩(wěn)中有升”
- 云南一村民誤把黑熊當(dāng)狗養(yǎng)
- 中國(guó)海外地產(chǎn)投資逾2500億元 近半買歐洲物業(yè)資產(chǎn)
- 央視主播胡悅鑫:"最帥實(shí)習(xí)生"十年磨一劍褪去青澀
- 華裔女孩為阿爾茨海默癥患者開發(fā)APP
- 廣州向全國(guó)名師發(fā)出“英雄帖”
最近更新
- 系統(tǒng)內(nèi)存管理:虛擬內(nèi)存、內(nèi)存分段與分頁(yè)、頁(yè)表緩存TLB以及Li...
- AI加持,讓高清時(shí)代年輕人愛上老電影
- 山東一市最新人事任免
- 好消息!長(zhǎng)寧這些地方的“免費(fèi)帶娃”服務(wù),可以線上預(yù)約啦→
- 核污染概念股繼續(xù)走強(qiáng),大湖股份3連板
- 第9號(hào)臺(tái)風(fēng)“蘇拉”生成 路徑怪異對(duì)廣州有無(wú)影響?
- 藍(lán)月亮2023年中期業(yè)績(jī)發(fā)布 營(yíng)收約22.2億港元 毛利率提升至55.2%
- 現(xiàn)代大廈(總部商務(wù)寫字樓)買房首付是多少成?現(xiàn)代大廈(總部商...
- 大公司動(dòng)態(tài):8家鋼廠漲價(jià),安徽長(zhǎng)江擬9月電爐停產(chǎn)
- 部分銀行下調(diào)存款利率 持續(xù)降低實(shí)體經(jīng)濟(jì)融資成本
- 中非領(lǐng)導(dǎo)人對(duì)話會(huì)聯(lián)合聲明
- 文化周刊·讀書丨新書過眼
- 8月24日基金凈值:諾安先鋒混合A最新凈值2.5548,漲0.44%
- 8月24日基金凈值:建信新能源行業(yè)股票A最新凈值1.5905,漲1.28%
- 8月24日基金凈值:廣發(fā)制造業(yè)精選混合A最新凈值4.233,漲0.98%
- 到2025年新增污水處理能力1200萬(wàn)立方米/日 污水處理在A股市...
- 山西汾酒(600809)Q2符合市場(chǎng)預(yù)期,看好汾酒中長(zhǎng)期優(yōu)質(zhì)資產(chǎn)
- 洽洽食品(002557)公司事件點(diǎn)評(píng)報(bào)告:業(yè)績(jī)符合預(yù)期,成本有望改善
- 社保基金現(xiàn)身291只股前十大流通股東榜
- 282人!浙江省中小學(xué)教壇新秀候選人名單公示,有你認(rèn)識(shí)的嗎
- 新能源車:油電反轉(zhuǎn)
- 研究發(fā)現(xiàn)人們對(duì)數(shù)千種人類蛋白質(zhì)幾乎一無(wú)所知
- 通策醫(yī)療:種植牙集采對(duì)半年報(bào)毛利潤(rùn)基本沒有影響
- 漯評(píng)|答好今年“后半程”發(fā)展考卷 ——深入貫徹落實(shí)市委八...
- 南陽(yáng)市宛城區(qū):產(chǎn)業(yè)振興促進(jìn)移民村鄉(xiāng)村振興
- 奔赴淘寶,俞敏洪直播四處“趕集”
- 凈利潤(rùn)大降!換帥后的興銀基金如何崛起?
- 貢茶哪個(gè)是正宗的 加盟奶茶店10大品牌加盟費(fèi)多少錢
- 徐州村BA比賽時(shí)間是什么時(shí)候2023年? 徐州村鎮(zhèn)
- 商城縣醫(yī)保中心地址及電話 商城縣醫(yī)保中心地址及電話號(hào)碼
今日要聞
- 漯評(píng)|答好今年“后半程”發(fā)展考卷 ——深入貫徹落實(shí)市委八屆四次全體(擴(kuò)大)會(huì)議精神之三
- 山東一市最新人事任免
- 商城縣醫(yī)保中心地址及電話 商城縣醫(yī)保中心地址及電話號(hào)碼
- 照片怎么弄pdf格式 照片怎么弄pdf格式的文件
- 北向資金高比例持有股票名單
- 金融謠言、股市“小作文”緣何屢禁不絕?
- 你所有的貧窮,都是因?yàn)榕Ψ较蝈e(cuò)了,真正的高手都具備這種思維
- 街道幫忙找工作,“00后”社工家門口就業(yè)
- 臨工重機(jī)IPO:可能虛增營(yíng)收并粉飾報(bào)表,上市前疑實(shí)控人大額套現(xiàn)
- 看蘭州軌道交通如何多舉措應(yīng)對(duì)