Linux之共享內存shm和內存映射mmap


一、共享內存shm

1 概念:多個進程的地址空間都映射到同一塊物理內存,這樣多個進程都能看到這塊物理內存,實現進程間通信,而且不需要數據的拷貝,所以速度最快。

二、內存映射mmap

1 前言:先介紹一下普通的讀寫文件的原理,進程調用read/write系統調用后會陷入內核,內核開始讀寫文件,假設內核是在讀文件,內核先把文件讀取到內核緩沖區,然后把內核緩沖區的數據拷貝到用戶緩沖區,實際上整個過程拷貝了兩次數據,即先從文件到內核緩沖區,再從內核緩沖區到用戶緩沖區;

2 概念:把某個文件映射到進程的地址空間,通過對地址空間的讀寫,實現對文件的讀寫,mmap系統調用可以使多個進程映射同一個普通文件來實現共享內存。普通文件映射到地址空間后,進程可以像訪問內存的方式一樣去訪問該文件,這樣不需要調用read/write系統調用,減少了用戶、內核切換的開銷;

 

三、二者的比較

1 共享內存shm是在內存中創建空間,然后每個進程映射到此處;內存映射mmap是創建一個文件,然后每個進程映射到此處;

2 當機器重啟時,mmap把文件保存在磁盤上,所以不會丟失,而共享內存shm存儲在內存上就會丟失;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM