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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入探究Linuxmmap64的實現(xiàn)及應(yīng)用(linuxmmap64)

Linux作為一款自由開源的操作系統(tǒng),其性能和穩(wěn)定性備受贊譽,被廣泛應(yīng)用于服務(wù)器、嵌入式系統(tǒng)等領(lǐng)域。其中,mmap()系統(tǒng)調(diào)用是Linux有名的一大特色,它允許用戶進程通過建立虛擬內(nèi)存映射來訪問文件或設(shè)備,實現(xiàn)了一個銜接內(nèi)存的方法,將磁盤上的文件映射到進程地址空間,提高了文件的訪問效率。而mmap64的出現(xiàn),更是解決了32位平臺無法支持大內(nèi)存訪問的問題。本文將。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供東興網(wǎng)站建設(shè)、東興做網(wǎng)站、東興網(wǎng)站設(shè)計、東興網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、東興企業(yè)網(wǎng)站模板建站服務(wù),十年東興做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

一、linux mmap64的概念和原理

1.1 概念

mmap64是由32位機器到64位機器轉(zhuǎn)換時,操作系統(tǒng)為保持兼容,新增的一個系統(tǒng)調(diào)用。與mmap()函數(shù)相比,主要區(qū)別在于支持對大內(nèi)存的訪問。mmap()函數(shù)在32位機器上只能映射2GB左右大小的內(nèi)存,而mmap64則能夠在64位機器上支持對更大內(nèi)存的訪問。因此,它在處理大型文件時非常有用。

1.2 原理

mmap64調(diào)用原理跟mmap調(diào)用基本一樣,但其在創(chuàng)建映射時會將offset參數(shù)左移32位,以支持64位地址指針。

mmap64的調(diào)用格式為:

“`

void *mmap64(void *addr, size_t length, int prot, int flags, int fd, off64_t offset);

“`

其中,

– addr:映射區(qū)的開始地址

– length:映射區(qū)的長度

– prot:映射區(qū)域的保護方式

– flags:映射區(qū)域的類型和其他屬性

– fd:打開文件的文件描述符 fd。

– offset:被映射內(nèi)存的起始偏移量,單位為字節(jié)。

二、Linux mmap64的應(yīng)用

2.1 mmap64用于內(nèi)存映射文件

mmap64支持通過共享內(nèi)存與IPC通信,但更常見的應(yīng)用是內(nèi)存映射文件。mmap64可以將一個文件(或設(shè)備)映射到用戶空間的一段內(nèi)存中,所有對這片內(nèi)存的讀寫操作都將直接對文件進行,而不需要使用read()/write()等系統(tǒng)調(diào)用。

2.2 mmap64用于大文件讀寫操作

mmap64還可以用于大文件的讀寫操作。相比一次讀取大文件到內(nèi)存中,使用mmap64將文件映射到內(nèi)存中,可以避免內(nèi)存不足的情況發(fā)生。同時,尤其適用于通過多進程方式訪問同一個文件的情景。由于多進程共享一個文件映射,不需要復(fù)制整個文件,而是共享同一個內(nèi)存區(qū)域,避免了復(fù)制的時間和性能開銷。這種方法在多進程之間較為常見。

2.3 mmap64用于動態(tài)內(nèi)存管理

mmap64還可以用在動態(tài)內(nèi)存管理中。mmap64系統(tǒng)調(diào)用也可以用于確定內(nèi)存的起始地址。mmap64返回的地址使用后可以通過munmap移除,從而使做大過程變得更加靈活。此外,雖然mmap()無法動態(tài)地調(diào)整映射的長度,但通過使用mremap(),我們可以以原址為中心,調(diào)整區(qū)域大小。

三、Linux mmap64實際使用中需要注意的事項

3.1 地址保護權(quán)限

mmap64將文件映射到內(nèi)存中,需設(shè)置訪問該內(nèi)存的權(quán)限,如果內(nèi)存可寫,那么文件也可寫;如果是只讀的,文件只能讀取。

3.2 對文件的訪問方式

mmap64常常被用于大型磁盤文件的高效讀寫。然而,需要注意的是,使用mmap時,對于頻繁更改的文件,如日志文件、數(shù)據(jù)庫文件等,如果不適當?shù)厥褂胢map,將會對磁盤空間產(chǎn)生很大的壓力。所以,對于頻繁修改文件的應(yīng)用,應(yīng)盡量避免使用mmap。

3.3 應(yīng)防止野指針

使用mmap64函數(shù)映射一個文件時,注意內(nèi)存塊是否要求清空,否則可能會引發(fā)安全性問題。這時需要注意讓系統(tǒng)保證這段內(nèi)存避免產(chǎn)生野指針。

四、Linux mmap64

可以出,Linux mmap64作為一項重要的內(nèi)存映射技術(shù),是在Linux系統(tǒng)下開發(fā)軟件的不可或缺的一項技能。mmap64可以用于內(nèi)存和磁盤之間進行高效率的交換數(shù)據(jù);通過mmap64可以更好的集成磁盤訪問和內(nèi)存訪問;在操作大文件時提供了更好的支持等等。Linux mmap64不僅可以用于文件的內(nèi)存映射,還能夠通過設(shè)置內(nèi)存的保護以實現(xiàn)內(nèi)存管理,對多進程共享內(nèi)存等使用都非常方便。合理地使用mmap64將顯著改善軟件的計算性能。在Linux平臺下,若能熟練地掌握mmap64的使用方法,并且結(jié)合各類應(yīng)用場景,將會使代碼的效率更加卓越。

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

探討一下 Linux 共享內(nèi)存的 N 種方式

關(guān)于 Linux 共享內(nèi)存,寫得更好的應(yīng)該是宋寶華的 《世上更好的共享內(nèi)存》 一文。

本文可以說是對這篇文章的學(xué)習筆記,順手練習了一下 rust libc —— shichaoyuan/learn_rust/linux-shmipc-demo

按照宋寶華的總結(jié),當前有四種主流的共享內(nèi)存方式:

前兩種方式比較符合傳統(tǒng)的用法,共享內(nèi)侍碧存做為進程間通信的媒介。

第三種方式更像是通過傳遞內(nèi)存“句柄”進行數(shù)據(jù)傳輸。

第四種方式是為設(shè)備間傳遞數(shù)據(jù)設(shè)計,避免內(nèi)存拷貝,直接傳遞內(nèi)存“句柄”。

這里嘗試了一下第二種和第三種方式。

這套 API 應(yīng)該是最檔缺普遍的 —— shm_open + mmap,本質(zhì)上來說 Aeron 也是用的這種方式(關(guān)于 Aeron 可以參考 我之前的文章 )。

看一下 glibc 中 shm_open 函數(shù)的實現(xiàn)就一清二楚了:

shm_open 函數(shù)就是在 /dev/shm 目錄下建文件,該目錄掛載為 tmpfs,至于 tmpfs 可以簡單理解為存儲介質(zhì)是內(nèi)存的一種文件系統(tǒng),更準確的理解可以參考官方文檔 tmpfs.txt 。

然后通過 mmap 函數(shù)將 tmpfs 文件映射到用戶空間就可以隨意操作了。

優(yōu)點:

這種方式更大的優(yōu)勢在于共享的內(nèi)存是有“實體”(也就是 tmpfs 中的文件)的,所以多個進程可以很容易通過文件名這個信息構(gòu)建共享內(nèi)存結(jié)構(gòu),特別適合把共享內(nèi)存做為通信媒介的場景(例如 Aeron )。

缺點:

如果非要找一個缺點的話,可能是,文件本身獨立于進程的生命周期,在使用完畢后需要注意刪除文件(僅僅行談辯 close 是不行的),否則會一直占用內(nèi)存資源。

memfd_create 函數(shù)的作用是創(chuàng)建一個匿名的文件,返回對應(yīng)的 fd,這個文件當然不普通,它存活在內(nèi)存中。更準確的理解可以參考官方文檔 memfd_create(2) 。

直觀理解,memfd_create 與 shm_open 的作用是一樣的,都是創(chuàng)建共享內(nèi)存實體,只是 memfd_create 創(chuàng)建的實體是匿名的,這就帶了一個問題:如何讓其它進程獲取到匿名的實體?shm_open 方式有具體的文件名,所以可以通過打開文件的方式獲取,那么對于匿名的文件怎么處理呢?

答案是:通過 Unix Domain Socket 傳遞 fd。

rust 的 UDS 實現(xiàn):

rust 在 std 中已經(jīng)提供了 UDS 的實現(xiàn),但是關(guān)于傳遞 fd 的 send_vectored_with_ancillary 函數(shù)還屬于 nightly-only experimental API 階段。所以這里使用了一個三方 crate —— sendfd ,坦白說可以自己實現(xiàn)一下,使用 libc 構(gòu)建好 SCM_RIGHTS 數(shù)據(jù),sendmsg 出去即可,不過細節(jié)還是挺多,我這里就放棄了。

這套 API 設(shè)計更靈活,直接拓展了我的思路,本來還是受限于 Aeron 的用法,如果在這套 API 的加持下,是否可以通過傳遞數(shù)據(jù)包內(nèi)存塊(fd)真正實現(xiàn)零拷貝呢?

優(yōu)點:

靈活。

缺點:

linux mmap64的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux mmap64,深入探究Linux mmap64的實現(xiàn)及應(yīng)用,探討一下 Linux 共享內(nèi)存的 N 種方式的信息別忘了在本站進行查找喔。

香港云服務(wù)器機房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!


網(wǎng)站欄目:深入探究Linuxmmap64的實現(xiàn)及應(yīng)用(linuxmmap64)
網(wǎng)頁鏈接:http://www.5511xx.com/article/djcjgos.html