linuxmmap命令的簡(jiǎn)單介紹

Linux將設(shè)備地址映射到用戶空間內(nèi)存映射與VMA?

1、VM_IO標(biāo)志內(nèi)存區(qū)域中包含對(duì)設(shè)備I/O空間的映射。該標(biāo)志通常在設(shè)備驅(qū)動(dòng)程序執(zhí)行 mmap()函數(shù)進(jìn)行I/O空間映射時(shí)才被設(shè)置,同時(shí)該標(biāo)志也表示該內(nèi)存區(qū)域不能被包含在任何進(jìn)程的存放轉(zhuǎn)存(core dump)中。

專(zhuān)注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)科爾沁右翼前免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

2、VMA可以使用多種方式來(lái)實(shí)現(xiàn),其中最常見(jiàn)的是使用鏈表來(lái)組織。在Linux內(nèi)核中,每個(gè)進(jìn)程都有自己的VMA鏈表,用于存儲(chǔ)它的地址空間中所有的VMA。進(jìn)程在對(duì)這段地址空間進(jìn)行訪問(wèn)時(shí),內(nèi)核會(huì)遍歷這些鏈表,找到響應(yīng)的VMA映射物理內(nèi)存。

3、每一個(gè)進(jìn)程都有一個(gè)列表vm_area_struct,指向虛擬地址空間的不同的內(nèi)存塊,這個(gè)變量的名字叫mmap。其實(shí)內(nèi)存映射不僅僅是物理內(nèi)存和虛擬內(nèi)存之間的映射,還包括將文件中的內(nèi)容映射到虛擬內(nèi)存空間。

4、start指定文件被映射到用戶空間的起始地址,一般設(shè)為NULL,由內(nèi)核指定改地址;函數(shù)返回值為映射到用戶空間的地址。

5、通常32位Linux內(nèi)核地址空間劃分0~3G為用戶空間,3~4G為內(nèi)核空間。

MMAP和零拷貝

1、用了 MMAP 打通用戶空間和內(nèi)核空間,并將一部分內(nèi)存映射到磁盤(pán)上的一段空間。流程:data 從網(wǎng)卡過(guò)來(lái),進(jìn)入內(nèi)核,再讀入到用戶空間的服務(wù),服務(wù)處理后扔到 MMAP 中,內(nèi)核將數(shù)據(jù)再拷貝到磁盤(pán)中。

2、A: Linux提供了mmap零拷貝來(lái)實(shí)現(xiàn)我們的需求。 mmap(內(nèi)存映射)是一個(gè)比sendfile昂貴但優(yōu)于傳統(tǒng)I/O的方法。 ① 發(fā)出mmap系統(tǒng)調(diào)用,導(dǎo)致用戶空間到內(nèi)核空間的上下文切換(第一次上下文切換)。

3、一般情況下,用戶空間是不能夠直接訪問(wèn)設(shè)備的。mmap可實(shí)現(xiàn)這個(gè)功能。mmap通過(guò)將設(shè)備內(nèi)存映射到用戶空間的一段內(nèi)存上,這樣,當(dāng)用戶訪問(wèn)用戶空間的這段地址范圍時(shí),實(shí)際是訪問(wèn)設(shè)備內(nèi)存。

4、零拷貝在Netty中的三種實(shí)現(xiàn)。 使用堆外內(nèi)存,也叫直接內(nèi)存(Direct Memory)。netty的接收和發(fā)生都是使用Direct buffer,對(duì)應(yīng)系統(tǒng)底層的mmap機(jī)制,直接使用堆外內(nèi)存進(jìn)行Socket讀寫(xiě),不需要進(jìn)行字節(jié)緩沖區(qū)的二次拷貝。

5、應(yīng)用: kafka生產(chǎn)者發(fā)送消息到broker的時(shí)候,broker的網(wǎng)絡(luò)接收到數(shù)據(jù)后,copy到broker的內(nèi)核空間。然后通過(guò)mmap技術(shù),broker會(huì)修改消息頭,添加一些元數(shù)據(jù)。所以,寫(xiě)入數(shù)據(jù)很快。

6、read流程:小結(jié):通過(guò)上面兩種普通模式數(shù)據(jù)交互的方式發(fā)現(xiàn),如果我們執(zhí)行read和write操作,會(huì)經(jīng)歷四次數(shù)據(jù)拷貝和四次空間切換。

mmap和sendfile

1、相比mmap來(lái)說(shuō),sendfile同樣減少了一次CPU拷貝,而且還減少了2次上下文切換。

2、零拷貝技術(shù) 是另一個(gè)系統(tǒng)調(diào)用,Linux 中如 sendfile 命令。它減少了內(nèi)存中用戶空間與內(nèi)核空間數(shù)據(jù)的拷貝過(guò)程,使得 CPU 處理效率更高。Kafka 是一個(gè)分布式發(fā)布訂閱消息系統(tǒng)( 詳細(xì)學(xué)習(xí)參考 ),它巧妙用到了這兩種技術(shù)。

3、mmap將磁盤(pán)文件映射到內(nèi)存,支持讀和寫(xiě),對(duì)內(nèi)存的操作會(huì)反映在磁盤(pán)文件上。 RocketMQ 在消費(fèi)消息時(shí),使用了 mmap。kafka 使用了 sendFile。

4、mmap(內(nèi)存映射)是一個(gè)比sendfile昂貴但優(yōu)于傳統(tǒng)I/O的方法。 ① 發(fā)出mmap系統(tǒng)調(diào)用,導(dǎo)致用戶空間到內(nèi)核空間的上下文切換(第一次上下文切換)。

5、sendfile() 在一個(gè)文件描述符和另一個(gè)文件描述符之間復(fù)制數(shù)據(jù)。 因?yàn)檫@種復(fù)制是在 內(nèi)核中完成 的,所以 sendfile() 比 read(2) 和 write(2) 的組合更有效,后者需要將數(shù)據(jù)傳入和傳出用戶空間。

linux中使用了什么內(nèi)存管理方法,為什么

1、Linux保留內(nèi)核空間最頂部FIXADDR_TOP~4GB的區(qū)域作為保留區(qū)。當(dāng)系統(tǒng)物理內(nèi)存超過(guò)4GB時(shí),必須使用CPU的擴(kuò)展分頁(yè)(PAE)模式所提供的64位頁(yè)目錄項(xiàng)才能存取到4GB以上的物理內(nèi)存,這需要CPU的支持。

2、Linux采用了一種虛擬內(nèi)存管理機(jī)制,使得每個(gè)應(yīng)用程序可以訪問(wèn)和使用操作系統(tǒng)所提供的整個(gè)虛擬地址空間。這使得每個(gè)應(yīng)用程序似乎擁有整個(gè)系統(tǒng)的內(nèi)存,而不受物理內(nèi)存大小的限制。

3、Linux虛擬內(nèi)存的實(shí)現(xiàn)需要六種機(jī)制的支持:地址映射機(jī)制、內(nèi)存分配回收機(jī)制、緩存和刷新機(jī)制、請(qǐng)求頁(yè)機(jī)制、交換機(jī)制、內(nèi)存共享機(jī)制。

4、Linux的內(nèi)存管理采取的是分頁(yè)存取機(jī)制,為了保證物理內(nèi)存能得到充分的利用,內(nèi)核會(huì)在適當(dāng)?shù)臅r(shí)候?qū)⑽锢韮?nèi)存中不經(jīng)常使用的數(shù)據(jù)塊自動(dòng)交換到虛擬內(nèi)存中,而將經(jīng)常使用的信息保留到物理內(nèi)存。

5、這種方式中,將用戶程序的地址空間,注意,是 用戶程序的地址空間 分為若干個(gè)固定大小的區(qū)域,成為“頁(yè)”或“頁(yè)面”。我們可以知道,這也頁(yè)其實(shí)是不存在的,只是一種劃分內(nèi)存空間的方法。

本文標(biāo)題:linuxmmap命令的簡(jiǎn)單介紹
鏈接分享:http://muchs.cn/article49/dggcshh.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、App開(kāi)發(fā)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、服務(wù)器托管、全網(wǎng)營(yíng)銷(xiāo)推廣、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)