华南俳烁实业有限公司

考試首頁 | 考試用書 | 培訓(xùn)課程 | 模擬考場 | 考試論壇  
  當(dāng)前位置:操作系統(tǒng) > Unix > 文章內(nèi)容
  

Linux內(nèi)存管理之mmap詳解:系統(tǒng)調(diào)用mmap()用于共享內(nèi)存的兩種方式

 [ 2017年1月20日 ] 【

系統(tǒng)調(diào)用mmap()用于共享內(nèi)存的兩種方式: 

(1)使用普通文件提供的內(nèi)存映射:適用于任何進(jìn)程之間;此時(shí),需要打開或創(chuàng)建一個(gè)文件,然后再調(diào)用mmap();典型調(diào)用代碼如下: 
 

  1. fd=open(name, flag, mode);
  2. if(fd<0)
  3.    ...
  4. ptr=mmap(NULL, len , PROT_READ|PROT_WRITE, MAP_SHARED , fd , 0);

通過mmap()實(shí)現(xiàn)共享內(nèi)存的通信方式有許多特點(diǎn)和要注意的地方

(2)使用特殊文件提供匿名內(nèi)存映射:適用于具有親緣關(guān)系的進(jìn)程之間;由于父子進(jìn)程特殊的親緣關(guān)系,在父進(jìn)程中先調(diào)用mmap(),然后調(diào)用fork()。那么在調(diào)用fork()之后,子進(jìn)程繼承父進(jìn)程匿名映射后的地址空間,同樣也繼承mmap()返回的地址,這樣,父子進(jìn)程就可以通過映射區(qū)域進(jìn)行通信了。注意,這里不是一般的繼承關(guān)系。一般來說,子進(jìn)程單獨(dú)維護(hù)從父進(jìn)程繼承下來的一些變量。而mmap()返回的地址,卻由父子進(jìn)程共同維護(hù)。 
對于具有親緣關(guān)系的進(jìn)程實(shí)現(xiàn)共享內(nèi)存最好的方式應(yīng)該是采用匿名內(nèi)存映射的方式。此時(shí),不必指定具體的文件,只要設(shè)置相應(yīng)的標(biāo)志即可.

本文糾錯(cuò)】【告訴好友】【打印此文】【返回頂部
將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動訪問考試網(wǎng) | 復(fù)制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved
崇明县| 焉耆| 永仁县| 鄂州市| 德惠市| 大余县| 南宁市| 墨竹工卡县| 澄城县| 恩施市| 龙口市| 绥滨县| 军事| 铜陵市| 乐业县| 南通市| 洱源县| 通渭县| 玉山县| 刚察县| 延津县| 怀仁县| 宜春市| 萍乡市| 安溪县| 逊克县| 富阳市| 柳州市| 阿城市| 丹阳市| 晋宁县| 平塘县| 富民县| 无棣县| 绩溪县| 东乡族自治县| 广昌县| 东源县| 姜堰市| 金溪县| 高陵县|