成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

知識講解Unix操作系統(tǒng)共享內(nèi)存

系統(tǒng) 其他OS
在文章中,我們知道Unix操作系統(tǒng)中,共享內(nèi)存可以說是最有用的進(jìn)程間通信方式,也是最快的IPC形式。采用共享內(nèi)存通信的一個(gè)顯而易見的好處是效率高,因?yàn)檫M(jìn)程可以直接讀寫內(nèi)存,而不需要任何數(shù)據(jù)的拷貝。

Unix操作系統(tǒng)中,共享內(nèi)存可以說是最有用的進(jìn)程間通信方式,也是最快的IPC形式。兩個(gè)不同進(jìn)程A、B共享內(nèi)存的意思是,同一塊物理內(nèi)存被映射到進(jìn)程A、B各自的進(jìn)程地址空間。進(jìn)程A可以即時(shí)看到進(jìn)程B對共享內(nèi)存中數(shù)據(jù)的更新,反之亦然。由于多個(gè)進(jìn)程共享同一塊內(nèi)存區(qū)域,必然需要某種同步機(jī)制,互斥鎖和信號量都可以。

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

因此,Unix操作系統(tǒng)采用共享內(nèi)存的通信方式效率是非常高的。

共享內(nèi)存 (shared memory)是Unix操作系統(tǒng)下的多進(jìn)程之間的通信方法,這種方法通常用于一個(gè)程序的多進(jìn)程間通信,實(shí)際上多個(gè)程序間也可以通過共享內(nèi)存來傳遞信息。本文介紹如何在 Client/Server方式下實(shí)現(xiàn)多個(gè)程序間共享內(nèi)存?! ?br />  
Unix操作系統(tǒng)問題分析 

多個(gè)程序之間共享內(nèi)存 ,首先要解決的問題是怎樣讓各個(gè)程序能夠訪問同一塊內(nèi)存和相同的信號量。共享內(nèi)存的 id可以通過調(diào)用 shmget(key_t key, size_t size, int shmflg)函數(shù)取得;信號量的 id可以通過調(diào)用 semget(key_t key, int nsems, int semflg)函數(shù)取得。實(shí)際上,只要在調(diào)用這兩個(gè)函數(shù)時(shí)使用相同的 key值,各程序之間就能達(dá)到共享內(nèi)存的目的。 

Unix操作系統(tǒng)通過調(diào)用 key_t ftok(const char* path, int id)函數(shù)來產(chǎn)生 key值,如果各程序都用同樣的參數(shù)來調(diào)用此函數(shù),自然也就得到相同的key值了。例子中各個(gè)程序都使用 key=ftok(" /", 0)得到相同的 key值 ,再進(jìn)而由 key值得到相同的共享內(nèi)存 id和信號量 id?!?br />  
第二個(gè)要解決的問題是如何控制多個(gè)程序并發(fā)訪問共享內(nèi)存。本文的例子模擬在 Client/Server方式下,由一個(gè) Server產(chǎn)生數(shù)據(jù),多個(gè) Client去讀取數(shù)據(jù)的操作。常規(guī)的方法是設(shè)一個(gè)信號量,Unix操作系統(tǒng)將訪問共享內(nèi)存的程序作為臨界區(qū)來處理。程序進(jìn)入時(shí)用 p()操作取得鎖,退出時(shí)用 v()操作釋放鎖。但這樣做有兩個(gè)問題:一是這樣各個(gè)程序就處于平等的地位,而實(shí)際中往往 Server的優(yōu)先級應(yīng)該比 Client更高。

比如,在股票行情應(yīng)用程序中 ,共享內(nèi)存里存放行情信息,Server負(fù)責(zé)定時(shí)更新; Client是 CGI程序,負(fù)責(zé)按客戶要求讀取共享內(nèi)存中的數(shù)據(jù),然后再反饋給客戶。在這種情況下, Server就不能等所有 Client進(jìn)程都讀完了才開始寫,因?yàn)檫@樣 Client取得的數(shù)據(jù)反而是過時(shí)的。二是各個(gè) Client之間由于都是讀操作,所以沒有必要互斥。
  
本文對這兩個(gè)問題的解決方案是:只有 Server進(jìn)行 p()、 v()操作,信號量初始值設(shè)為 0, p()操作將它加一, v()操作將它減一; Client讀共享內(nèi)存之前要先等待信號量的值為 0,這樣 Server的 p()操作總是成功,而 Server的 p()操作后,尚未進(jìn)入臨界區(qū)的 Client只能等到 Server執(zhí)行 v()操作后才能讀。這樣Server比 Client優(yōu)先,Client之間不互斥。但這樣又產(chǎn)生另一個(gè)問題:一個(gè) Server開始寫時(shí),部分 Client可能已經(jīng)進(jìn)入臨界區(qū),有可能出現(xiàn)讀不完整的問題。

因此,Unix操作系統(tǒng)例子基于這樣一個(gè)前提: Client程序比較簡單,不會(huì)被阻塞,并且能夠在一個(gè)時(shí)間片內(nèi)執(zhí)行完讀取操作。本例中處于臨界區(qū)中的 Client數(shù)目是有限的,如果 Server等待一個(gè)時(shí)間片 (例子中是等待一分鐘 )后, Client就能全部退出臨界區(qū),這個(gè)問題就能排除。很多 CGI程序能夠滿足這個(gè)假設(shè)條件,如果 Client確實(shí)不滿足條件,可以生成訪問共享內(nèi)存的子進(jìn)程,它的執(zhí)行時(shí)間應(yīng)該滿足上述要求。

【編輯推薦】

  1. 探析Unix操作系統(tǒng)啟動(dòng)
  2. 學(xué)習(xí)Unix操作系統(tǒng)知識
  3. 列舉Unix操作系統(tǒng)實(shí)例
  4. Unix操作系統(tǒng)LD_PRELOAD簡介
  5. Unix操作系統(tǒng)下的LD_PRELOAD環(huán)境變量
責(zé)任編輯:小霞
相關(guān)推薦

2010-04-20 11:34:26

Unix操作系統(tǒng)

2010-04-29 13:30:20

Unix操作系統(tǒng)

2010-05-04 17:17:46

Unix類

2010-04-19 17:34:02

Unix操作系統(tǒng)

2010-04-19 17:47:59

Unix操作系統(tǒng)

2010-04-20 10:12:40

Unix操作系統(tǒng)

2010-04-15 18:06:08

Unix操作系統(tǒng)

2010-05-07 13:04:11

Unix Shell

2010-05-07 17:31:42

Unix類操作系統(tǒng)

2010-05-07 17:41:36

BSD Unix

2010-04-19 12:40:00

Unix操作系統(tǒng)

2010-04-29 14:08:38

Unix操作系統(tǒng)

2010-04-20 11:16:08

Unix操作系統(tǒng)

2010-04-09 16:36:54

Unix操作系統(tǒng)

2010-04-19 17:25:31

Unix操作系統(tǒng)

2010-04-19 10:54:33

Unix操作系統(tǒng)

2010-04-19 16:57:09

Unix操作系統(tǒng)

2010-04-19 17:39:50

Unix操作系統(tǒng)

2010-04-15 14:40:26

Unix操作系統(tǒng)

2010-04-16 11:18:23

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 九九热这里 | 欧美成人精品一区 | 欧美 日韩 国产 在线 | 正在播放国产精品 | 99久久婷婷国产精品综合 | 国产精品永久免费视频 | 一本大道久久a久久精二百 国产成人免费在线 | 久久国产精品免费视频 | 欧州一区| 九九热精品在线 | 成人免费共享视频 | 欧美一区二区三区四区视频 | 欧美激情一区二区 | 91精品国产91 | 夜夜草 | 草草视频在线免费观看 | 欧美aa在线| 在线视频一区二区三区 | 91视频网址| 丝袜天堂 | www.久| 国产午夜精品一区二区三区嫩草 | www.av在线 | 久久久91精品国产一区二区三区 | 精品一区二区三区中文字幕 | www久久av | 蜜桃日韩| 国产乱码精品一区二区三区五月婷 | 性色av香蕉一区二区 | 黄色片网站国产 | 综合激情av | 欧美精品日韩精品国产精品 | 亚洲一区二区在线视频 | 国产精品完整版 | 久久免费视频1 | 成人免费视频网站在线看 | 成人小视频在线观看 | 久久久久久91香蕉国产 | 中文字幕在线观 | 久久综合狠狠综合久久综合88 | 中文字幕乱码一区二区三区 |