求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

共享內存檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋
  共享內存

共享內存指 (shared memory)在多處理器的計算機系統中,可以被不同中央處理器(CPU)訪問的大容量內存。由於多個CPU需要快速訪問存儲器,這樣就要對存儲器進行緩存(Cache)。任何一個緩存的數據被更新後,由於其他處理器也可能要存取,共享內存就需要立即更新,否則不同的處理器可能用到不同的數據。共享內存是 Unix下的多進程之間的通信方法 ,這種方法通常用於一個程序的多進程間通信,實際上多個程序間也可以通過共享內存來傳遞信息。

簡介

顯所謂共享內存就是使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式。是針對其他通信機制運行效率較低而設計的。往往與其它通信機制,如信號量結合使用,來達到進程間的同步及互斥。其他進程能把同一段共享內存段「連接到」他們自己的地址空間裡去。所有進程都能訪問共享內存中的地址。如果一個進程向這段共享內存寫了數據,所做的改動會即時被有訪問同一段共享內存的其他進程看到。共享內存的使用大大降低了在大規模數據處理過程中內存的消耗,但是共享內存的使用中有很多的陷阱,一不注意就很容易導致程序崩潰。

評價

上述程序中從命令行中讀取所要引入的共享內存ID,並使用shmat函數引入該內存到當前的進程空間中。注意在使用shmat函數時,將參數addr的值設為0,所表達的意義是由內核來決定該共享內存在當前進程中的位置。由於在編程的過程中,很少會針對某一個特定的硬件或系統編程,所以由內核決定引入位置也就是shmat推薦的使用方式。在導入後使用shell命令ipcs –m來顯示當前的系統IPC的狀態,可以看出輸出信息中nattch字段為該共享內存時的引用值,最後使用shmdt函數分離該共享內存並打印系統IPC的狀態%說明:兩個進程同時遵循一定的規則來讀寫該內存。同時,在多進程同步或互斥上也需要附加的代碼來輔助共享內存機制在共享內存段中都是以字符串的默認結束符為一條信息的結尾。每個進程在讀寫時都遵守這個規則,就不會破壞數據的完整性。[1]

參考文獻