Closed2

mmap-go のシステムコールの対応関係メモ

yukiyuki

『Goならわかるシステムプログラミング』10章3節に取り組み中だが、mmap まわりで mmap-go というラッパーのライブラリを使用しており、これを Rust に写す際にどうするか…と思っている。システムコールが同じならきっと大丈夫だと思うので、システムコールで何を使っているかを見ていく。

今回見るメソッドは下記

  • mmap.Map()
  • mmap.Unmap()
  • mmap.Flush()
  • mmap.Lock()
  • mmap.Unlock()
yukiyuki

Map

mmap(2) でよさそう。

Unmap

munmap(2) というシステムコールがある: https://man7.org/linux/man-pages/man2/mmap.2.html

Flush

謎だったけど、ちょっと実装を読んだらわかった。

まずこの関数は、unix なら内部で下記の関数を呼び出している。
https://github.com/edsrzf/mmap-go/blob/904c4ced31cdffe19e971afa0b3d319ff06d9c72/mmap_unix.go#L37

unix.Msync は、調べると下記の msync(2) というシステムコールに対応することがわかった。man ページを読んだ限りでも、やってくれていることが想定と同じそう。
https://man7.org/linux/man-pages/man2/msync.2.html

Lock

mlock(2) というシステムコールがある: https://man7.org/linux/man-pages/man2/mlock.2.html

Unlock

→ ↑と同じページに、 `munlock(2) というシステムコールがある: https://man7.org/linux/man-pages/man2/mlock.2.html

このスクラップは2021/05/16にクローズされました