mmap 和 shm 区别
英文全稱
mmap?
1、實現原理
建立虛擬空間一段區域和磁盤上的文件的映射。
當訪問虛擬空間中該區域時,通過 MMU,得到該區域對應的物理地址,OS 發現該區域沒有數據,故產生缺頁中斷。OS 從磁盤中讀取相應頁的數據直接 copy 到物理內存中。
對于傳統的 read 系統調用來說,他們需要將磁盤中的文件先 copy 到內核緩沖區中,再將該數據 copy 到用戶緩沖區中。相較于 mmap ,后者節省了一次 copy ,這也就解釋了為什么 mmap 相較于 read 和 write 系統調用性能較高的原因了。
2、普通映射和匿名映射
mmap 不僅可以映射到磁盤上的普通文件,還可以映射到匿名文件。實現方式是形參中的 fd = -1,flag = MAP_SHARED | MAP_ANON 。
對于匿名映射來說,其目的是保證該共享內存映射區只能父子進程使用,其他進程無法訪問。如果需要與其他進程訪問的話,需要映射到磁盤上的實際文件中。
shm 實現原理
通過相同的 key,實現了不同的進程的各自一段虛擬地址空間同時映射到某一段物理內存中的功能。
二者區別
mmap 保存到實際硬盤,實際存儲并沒有反映到主存上。優點:儲存量可以很大(多于主存)缺點:進程間讀取和寫入速度要比主存的要慢。
shm 保存到物理存儲器(主存),實際的儲存量直接反映到主存上。優點,進程間訪問速度(讀寫)比磁盤要快;缺點,儲存量不能非常大(多于主存)。
使用上看:如果分配的存儲量不大,那么使用 shm;如果存儲量大,那么使用 mmap。
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的mmap 和 shm 区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程同步的各种方法汇总
- 下一篇: TCP/IP / TCP 头