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

知識講解Unix操作系統共享內存

系統 其他OS
在文章中,我們知道Unix操作系統中,共享內存可以說是最有用的進程間通信方式,也是最快的IPC形式。采用共享內存通信的一個顯而易見的好處是效率高,因為進程可以直接讀寫內存,而不需要任何數據的拷貝。

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

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

因此,Unix操作系統采用共享內存的通信方式效率是非常高的。

共享內存 (shared memory)是Unix操作系統下的多進程之間的通信方法,這種方法通常用于一個程序的多進程間通信,實際上多個程序間也可以通過共享內存來傳遞信息。本文介紹如何在 Client/Server方式下實現多個程序間共享內存。  
 
Unix操作系統問題分析 

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

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

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

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

【編輯推薦】

  1. 探析Unix操作系統啟動
  2. 學習Unix操作系統知識
  3. 列舉Unix操作系統實例
  4. Unix操作系統LD_PRELOAD簡介
  5. Unix操作系統下的LD_PRELOAD環境變量
責任編輯:小霞
相關推薦

2010-04-20 11:34:26

Unix操作系統

2010-04-29 13:30:20

Unix操作系統

2010-05-04 17:17:46

Unix類

2010-04-19 17:34:02

Unix操作系統

2010-04-19 17:47:59

Unix操作系統

2010-04-20 10:12:40

Unix操作系統

2010-04-15 18:06:08

Unix操作系統

2010-05-07 13:04:11

Unix Shell

2010-05-07 17:31:42

Unix類操作系統

2010-04-19 12:40:00

Unix操作系統

2010-05-07 17:41:36

BSD Unix

2010-04-29 14:08:38

Unix操作系統

2010-04-20 11:16:08

Unix操作系統

2010-04-09 16:36:54

Unix操作系統

2010-04-19 17:25:31

Unix操作系統

2010-04-19 10:54:33

Unix操作系統

2010-04-19 16:57:09

Unix操作系統

2010-04-19 17:39:50

Unix操作系統

2010-04-15 14:40:26

Unix操作系統

2010-04-19 17:06:18

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 毛片免费观看 | 久久久国产一区二区三区 | 日韩精品免费播放 | 日韩中文一区二区三区 | 国产亚洲一区二区三区在线观看 | 中文字幕日韩欧美一区二区三区 | 国产丝袜一区二区三区免费视频 | 亚洲一区二区三区四区五区午夜 | 日韩久久综合 | 国产成人免费在线 | 亚洲国产成人精品女人久久久 | 成人av免费 | 国产精品成人av | 亚洲一区二区三区免费在线观看 | 精品入口麻豆88视频 | 欧洲亚洲精品久久久久 | 日日操操| 色婷婷久久综合 | 欧美一级片在线看 | 国产精品久久久久久吹潮 | 成人午夜视频在线观看 | 热99在线 | 日本高清在线一区 | 麻豆91av | 国产精品一区二区三区在线播放 | 欧美亚洲视频 | 国产精品99久久久久久人 | 美女国内精品自产拍在线播放 | 欧美亚洲一级 | 91免费版在线 | 成人日韩 | 一区网站 | 精品在线一区 | 国产主播第一页 | 欧美一区二区三区在线 | 精品国产乱码久久久久久丨区2区 | 精品久久久久久亚洲精品 | 2018天天干天天操 | 久久国产精品色av免费观看 | 欧一区| 亚洲综合在线一区二区 |