国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Linux > 正文

Linux共享內(nèi)存實(shí)現(xiàn)機(jī)制的詳解

2019-10-26 18:53:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Linux共享內(nèi)存實(shí)現(xiàn)機(jī)制的詳解

內(nèi)存共享: 兩個(gè)不同進(jìn)程A、B共享內(nèi)存的意思是,同一塊物理內(nèi)存被映射到進(jìn)程A、B各自的進(jìn)程地址空間。進(jìn)程A可以即時(shí)看到進(jìn)程B對(duì)共享內(nèi)存中數(shù)據(jù)的更新,反之亦然。由于多個(gè)進(jìn)程共享同一塊內(nèi)存區(qū)域,必然需要某種同步機(jī)制,互斥鎖和信號(hào)量都可以。

這里寫(xiě)圖片描述

效率: 采用共享內(nèi)存通信的一個(gè)顯而易見(jiàn)的好處是效率高,因?yàn)檫M(jìn)程可以直接讀寫(xiě)內(nèi)存,而不需要任何數(shù)據(jù)的拷貝。對(duì)于像管道和消息隊(duì)列等通信方式,則需要在內(nèi)核和用戶空間進(jìn)行四次的數(shù)據(jù)拷貝,而共享內(nèi)存則只拷貝兩次數(shù)據(jù)[1]: 一次從輸入文件到共享內(nèi)存區(qū),另一次從共享內(nèi)存區(qū)到輸出文件。實(shí)際上,進(jìn)程之間在共享內(nèi)存時(shí),并不總是讀寫(xiě)少量數(shù)據(jù)后就解除映射,有新的通信時(shí),再重新建 立共享內(nèi)存區(qū)域。而是保持共享區(qū)域,直到通信完畢為止,這樣,數(shù)據(jù)內(nèi)容一直保存在共享內(nèi)存中,并沒(méi)有寫(xiě)回文件。共享內(nèi)存中的內(nèi)容往往是在解除映射時(shí)才寫(xiě)回 文件的。因此,采用共享內(nèi)存的通信方式效率是非常高的。

共享內(nèi)存實(shí)現(xiàn)機(jī)制

共享內(nèi)存是通過(guò)把同一塊內(nèi)存分別映射到不同的進(jìn)程空間中實(shí)現(xiàn)進(jìn)程間通信。而共享內(nèi)存本身不帶任何互斥與同步機(jī)制,但當(dāng)多個(gè)進(jìn)程同時(shí)對(duì)同一內(nèi)存進(jìn)行讀寫(xiě)操作時(shí)會(huì)破壞該內(nèi)存的內(nèi)容,所以,在實(shí)際中,同步與互斥機(jī)制需要用戶來(lái)完成。
來(lái)看幾個(gè)系統(tǒng)調(diào)用函數(shù):

(1)創(chuàng)建共享內(nèi)存


這里寫(xiě)圖片描述
參數(shù):key為輸出型參數(shù)
size:size的大小應(yīng)為1024整數(shù)倍(4k對(duì)齊)
shmflg:權(quán)限標(biāo)志

(2)將共享內(nèi)存映射到自己的內(nèi)存空間:shmat

shmat是空間映射,通過(guò)創(chuàng)建的共享內(nèi)存,在它能被進(jìn)程訪問(wèn)之前,需要把該段內(nèi)存映射到用戶進(jìn)程空間。shmaddr是用來(lái)指定共享內(nèi)存映射到當(dāng)前進(jìn)程中的地址位置,要想改設(shè)置有用,shmflag必須設(shè)置為SHM_RND標(biāo)志。大多情況下,應(yīng)設(shè)置為空指針(void*)0,讓系統(tǒng)自動(dòng)選擇地址,從而減小程序?qū)τ布囊蕾囆浴hmflag除了上面的設(shè)置外,還可以設(shè)置為SHM_RDONLY,使得映射過(guò)來(lái)的地址只讀。
返回值:調(diào)用成功則返回映射地址的第一個(gè)字節(jié),失敗返回-1。
(3)解除映射:shmdt


這里寫(xiě)圖片描述
參數(shù)為要解除的地址空間。

(4)控制共享內(nèi)存
這里寫(xiě)圖片描述
先來(lái)看第三個(gè)參數(shù)的結(jié)構(gòu)體:
這里寫(xiě)圖片描述

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 金沙县| 临洮县| 苏尼特右旗| 彰武县| 龙陵县| 宣武区| 钟山县| 宝兴县| 大荔县| 墨玉县| 特克斯县| 泰州市| 莱西市| 沂水县| 孟州市| 泰来县| 故城县| 乌鲁木齐县| 兴安县| 嘉定区| 汾阳市| 马关县| 绍兴县| 庆阳市| 西安市| 栾川县| 从江县| 乐陵市| 浦北县| 巴南区| 满洲里市| 宁陵县| 罗山县| 卢氏县| 四会市| 南部县| 达州市| 驻马店市| 望奎县| 若羌县| 澎湖县|