Closed2
mmap-go のシステムコールの対応関係メモ
『Goならわかるシステムプログラミング』10章3節に取り組み中だが、mmap まわりで mmap-go というラッパーのライブラリを使用しており、これを Rust に写す際にどうするか…と思っている。システムコールが同じならきっと大丈夫だと思うので、システムコールで何を使っているかを見ていく。
今回見るメソッドは下記
- mmap.Map()
- mmap.Unmap()
- mmap.Flush()
- mmap.Lock()
- mmap.Unlock()
Map
→mmap(2)
でよさそう。
Unmap
→ munmap(2)
というシステムコールがある: https://man7.org/linux/man-pages/man2/mmap.2.html
Flush
謎だったけど、ちょっと実装を読んだらわかった。
まずこの関数は、unix なら内部で下記の関数を呼び出している。
unix.Msync は、調べると下記の msync(2)
というシステムコールに対応することがわかった。man ページを読んだ限りでも、やってくれていることが想定と同じそう。
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にクローズされました