inux記憶體對映和共享記憶體理解和區別

2021-09-06 19:06:42 字數 1673 閱讀 5900

可以看到記憶體對映中需要的乙個引數是int fd(檔案的識別符號),可見函式是通過fd將檔案內容對映到乙個記憶體空間,

我需要建立另乙個對映來得到檔案內容並統計或修改,這時我建立這另乙個對映用的仍是mmap函式,

它仍需要用到fd這個檔案標識,那我不等於又重新開啟檔案讀取檔案裡的資料

1.既然這樣那同對檔案的直接操作有什麼區別呢?

2.對映到記憶體後通過對映的指標addr來修改內容的話是修改共享記憶體裡的內容還是檔案的內容呢?

3.解決上面2個問題,我還是想確切知道共享記憶體有什麼用???

一種回答|:

1、訪問共享記憶體的執行速度比直接訪問檔案的快n倍(n》10

),這對於要求快速輸入輸出的場合非常有效。

2、通過addr修改的內容是修改的是共享內容中的內容。至於是否修改了檔案中的內容,要看檔案的型別。

對於顯示裝置等檔案來說,修改的也是檔案的內容,因為他直接寫到了視訊記憶體中。對於普通檔案,

在close檔案時,kernel會將資料更新到硬碟等儲存裝置中。

3、共享記憶體主要是為了提高程式的執行速度,方便多個程序進行快速的大資料量的交換。

第二種回答:

對於是修改檔案內容的記憶體對映:

1、你的這個說法不確切。舉個例子來說:對顯示裝置檔案(顯示卡)進行記憶體的對映,並不會在記憶體中新分配一塊記憶體,

而是直接將視訊記憶體位址通過addr引數傳給應用程式。這樣應用程式通過記憶體對映修改檔案時,

其實就是直接修改視訊記憶體中的內容(也就是改變顯示內容)。

2、感覺你把記憶體對映和共享記憶體搞混了。記憶體對映是用來加快對檔案/裝置的訪問。

(如果是大檔案,而且還想提高讀寫速度的話,建議使用記憶體對映。)

共享記憶體是用來在多個程序間進行快速的大資料量的交換。

3、fd是檔案描述符。它和記憶體對映沒有直接的關係。只有做過記憶體對映後,它和對映到的記憶體才存在對應關係。

對於不修改檔案內容的記憶體對映

1、不一定,可以在程式中指定要將檔案內容對映到哪塊記憶體。對於多個程序開啟同乙個檔案,

不同的記憶體對映可以開闢多塊記憶體區域。更新檔案內容的順序依照關閉檔案的程序的順序執行,因此,存在髒讀的問題。

2、:-),一定要記住,記憶體對映是為了加快對檔案/裝置的訪問速度,不是用來進行資料通訊的。

我對記憶體對映的理解就是通過操作記憶體來實現對檔案的操作,這樣可以加快執行速度,因為操作記憶體比操作檔案的速度快多了!

共享記憶體,顧名思義,就是預留出的記憶體區域,它允許一組程序對其訪問。

共享記憶體是system vipc中三種通訊機制最快的一種,也是最簡單的一種。對於程序來說,

獲得共享記憶體後,他對記憶體的使用和其他的記憶體是一樣的。由乙個程序對共享記憶體所進行的

操作對其他程序來說都是立即可見的,因為每個程序只需要通過乙個指向共享記憶體空間的指標就可以來讀取

共享記憶體中的內容(說白了就好比申請了一塊記憶體,每個需要的程序都有乙個指標指向這個記憶體)

就可以輕鬆獲得結果。使用共享記憶體要注意的問題:共享記憶體不能確保對記憶體操作的互斥性。

乙個程序可以向共享記憶體中的給定位址寫入,而同時另乙個程序從相同的位址讀出,這將會導致不一致的資料。

因此使用共享記憶體的程序必須自己保證讀操作和寫操作的的嚴格互斥。

可使用鎖和原子操作解決這一問題。也可使用訊號量保證互斥訪問共享記憶體區域。

共享記憶體在一些情況下可以代替訊息佇列,而且共享記憶體的讀/寫比使用訊息佇列要快!

共享記憶體對映和占用記憶體關係

demo測試 對映檔案1g 1 對映1次,1寫,進行memset操作,共享記憶體佔1g 2 對映2次,1寫,1讀,單執行緒 1 1寫,進行memset操作,讀無操作,共享記憶體佔1g 2 1寫,進行memset操作,讀某個指定位置字元 len 2或len 1位置 共享記憶體佔1g 3 1寫,進行me...

資料共享,記憶體對映檔案和虛擬記憶體,共享記憶體

記憶體對映檔案允許開發人員預定一塊位址空間區域並給區域調撥物理儲存器。記憶體對映檔案的物理儲存器來自磁碟已有的檔案,而不是來自系統的頁交換檔案。一旦把檔案對映到位址空間,就可以對它進行訪問,就好像整個檔案都已經被載入記憶體一樣。不必再對檔案執行i o操作。使用記憶體對映檔案來顛倒檔案內容時,先開啟檔...

檔案讀寫,共享記憶體和mmap記憶體對映

1傳統的檔案讀寫,需要將磁碟上的資料copy到檔案緩衝區 為了避免對磁碟的反覆讀寫 都在核心空間,然後找到檔案的inode,先去檔案緩衝區中找有沒有這個檔案,如果沒有的話,到磁碟再到檔案緩衝區。2.共享記憶體是兩個程序同時開闢出一塊虛擬位址空間,對映到同一塊物理記憶體上 3.記憶體對映是虛擬位址上直...