兩種共享內存的實現區別,shm和mmap

linux會有兩種方式可以使用共享內存.
分別是shm_XX函數和mmap,這兩種共享內存的是內核實現方式大同小異,但是還是有區別的.

二者的區別如下:

  • POSIX標準的是mmap,具有簡單易用的特點.
  • system V標準的是shm_xx函數組(shm_get,shm_at,shm_dt,shm_ctl).
  • shm_xx函數的共享內存需要自己釋放,即進程的結束不會導致共享內存的釋放,他會一直保存直到手動釋放或者關機.而mmap則相反,如果是非映射到文件,那麼會在進程結束就結束了.
  • 當調用shm_get時,會創建一個文件並返回這個文件描述符,這個文件是內核創建的特殊的文件,它屬於shm文件系統中,也就是說它的實現方式和mmap的大同小異,只是映射的文件是內核中特殊的文件系統中的文件,任何進程都可以共享.這個特殊的文件,會對應開闢的共享內存.當調用shm_at時會將該空間映射進進程的地址空間中.
  • shm_xx的特殊文件系統掛在點在/dev/shm中,也就是內存/交換分區中,所以會在系統重啓後消失,裏面的東西也就沒了,而mmap可以映射到文件中.
    盜圖
    參考資料:
    -兩種linux共享內存參考資料鏈接
    -linux進程間通訊共享內存
    -要查看task_struct 和 mm_struct以及圖片中的struct vm_area_struct 結構體間的關係,點這裏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章