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