{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

為什么linux需要物理內(nèi)存分配器?

dkzwmdkzwm 回答0 收藏1
收藏問題

2條回答

asce1885

asce1885

回答于2022-06-27 17:09

任何操作系統(tǒng)中最基本的部分之一就是管理內(nèi)存。該子系統(tǒng)通常稱為內(nèi)存管理單元或MMU。這個(gè)子系統(tǒng)是一個(gè)非常復(fù)雜的子系統(tǒng),但是對(duì)我們來說幸運(yùn)的是,它有很多文獻(xiàn)記錄。

當(dāng)我們談?wù)搩?nèi)存時(shí),通常是我們所指的物理RAM。總物理RAM是您要在新PC或服務(wù)器中尋找的最重要屬性之一。但是,最終使用RAM的是操作系統(tǒng)。操作系統(tǒng)充當(dāng)應(yīng)用程序和物理內(nèi)存之間的抽象層。該層將物理RAM劃分為虛擬“頁面”,這是操作系統(tǒng)可以使用的最小數(shù)據(jù)單元。默認(rèn)情況下,在Linux系統(tǒng)中,頁面大小為4KB,因?yàn)槎鄮幚砻總€(gè)位將太復(fù)雜而無法高效。

當(dāng)Linux使用系統(tǒng)RAM時(shí),它將創(chuàng)建一個(gè)虛擬內(nèi)存層,然后將進(jìn)程分配給虛擬內(nèi)存。虛擬內(nèi)存實(shí)際上是RAM和交換空間的結(jié)合。交換空間是硬盤驅(qū)動(dòng)器中的一部分,如果可用的RAM用完了,則指定為可用空間。這里是額外的抽象層,因此每個(gè)正在運(yùn)行的進(jìn)程都不會(huì)重疊,并嘗試使用已被另一個(gè)進(jìn)程使用的內(nèi)存。這也意味著虛擬內(nèi)存可以擴(kuò)展到物理RAM容量之外,即使在效率不高的情況下,這也可能有用。

如前所述,操作系統(tǒng)允許進(jìn)程訪問RAM的一部分。該進(jìn)程完全無法控制內(nèi)存分配。因此,在應(yīng)用程序上工作的開發(fā)人員,尤其是用高級(jí)代碼編寫的開發(fā)人員,不必?fù)?dān)心使用內(nèi)存。

通常,任何文件或文件系統(tǒng)的一部分都使用系統(tǒng)命令mmap進(jìn)行映射 , 并稱為內(nèi)存映射文件。如果一個(gè)內(nèi)存頁面文件沒有任何關(guān)聯(lián)的文件,則稱為匿名內(nèi)存,并且使用“ malloc”函數(shù)分配ut。

通過使用分配文件映射的內(nèi)存和匿名內(nèi)存的方式,操作系統(tǒng)可以使使用相同文件的進(jìn)程與相同的虛擬內(nèi)存頁面一起工作,從而更有效地使用內(nèi)存。 有時(shí),一個(gè)進(jìn)程正在占用另一個(gè)進(jìn)程所需的內(nèi)存。在這種情況下,操作系統(tǒng)使用OOM(內(nèi)存不足)殺手。該實(shí)用程序選擇一個(gè)進(jìn)程,然后將其內(nèi)存頁重新分配給其他進(jìn)程。在Linux中,默認(rèn)情況下啟用此OOM殺手。如果禁用它,則除了擴(kuò)展到硬盤驅(qū)動(dòng)器之外,如果系統(tǒng)用盡了內(nèi)存,則基本上無權(quán)使用系統(tǒng)。

“ Cgroups”是用于將進(jìn)程隔離到特定內(nèi)存地址的實(shí)用程序,該程序?qū)⑦M(jìn)程分組為邏輯組并為其分配一定數(shù)量的內(nèi)存。Linux中包含cgroup實(shí)際上為當(dāng)今使用的容器(例如Docker和OpenVZ)奠定了基礎(chǔ)。

Linux還能夠使用NUMA(非統(tǒng)一內(nèi)存訪問)與多處理器系統(tǒng)一起使用。這樣做的目的是嘗試為最接近物理RAM的CPU上運(yùn)行的進(jìn)程分配內(nèi)存。

評(píng)論0 贊同0
  •  加載中...
red_bricks

red_bricks

回答于2022-06-27 17:09

內(nèi)核也是用的類似malloc的東西申請(qǐng)內(nèi)存的。對(duì)內(nèi)核來說,kmalloc()也是一個(gè)內(nèi)存分配器。

你說的“l(fā)inux需要物理內(nèi)存分配器”,不管是用戶態(tài)的應(yīng)用級(jí)的,還是上面說的,內(nèi)核態(tài)的“應(yīng)用級(jí)”的,其實(shí)都是一個(gè)東西。

但是,在它倆下面,還有一個(gè)系統(tǒng)級(jí)的“內(nèi)存管理層”,或“虛擬內(nèi)存管理層”,管理頁表的創(chuàng)建,維護(hù)什么的。

你提的問題,應(yīng)該是兩個(gè)不同層面的問題,不要把它們放在一起想

malloc是在進(jìn)程址空間中分配,并不能完成實(shí)際物理內(nèi)存分配。

再說為什么不直接訪問物理內(nèi)存:

其次,虛擬內(nèi)存管理以及到物理內(nèi)存的映射是現(xiàn)代處理器和操作系統(tǒng)必備功能,因?yàn)闆]有虛擬內(nèi)存管理的話,就不能實(shí)現(xiàn)諸如動(dòng)態(tài)分頁,Swap等。如果直接訪問物理內(nèi)存,就像feature phone或嵌入式系統(tǒng),內(nèi)存訪問出錯(cuò)容易導(dǎo)致系統(tǒng)崩潰或者破壞其它程序的數(shù)據(jù)。

再次,有虛擬內(nèi)存管理,才可能有多進(jìn)程。

最后,Linux確實(shí)是對(duì)內(nèi)存分頁了,但不可能按你說的方法,因?yàn)轫摰拇笮∈枪潭ǖ模鴥?nèi)核與應(yīng)用申請(qǐng)時(shí)不一定是固定大小,這會(huì)導(dǎo)致內(nèi)存使用效率低下。

最后,你可以去讀一下關(guān)于Linux內(nèi)存管理的文檔,或者《深入理解Linux內(nèi)核》中關(guān)于內(nèi)存管理






評(píng)論0 贊同0
  •  加載中...

相關(guān)問題

最新活動(dòng)

您已邀請(qǐng)0人回答 查看邀請(qǐng)

我的邀請(qǐng)列表

  • 擅長該話題
  • 回答過該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說句感謝的話吧!
付費(fèi)偷看金額在0.1-10元之間
<