mmapは偉い

んで、仕事中、色々暇つぶしに(暇じゃないんだが)手元に仕事関連のSH3とその資料があったので、SH3のMMUについて調べたりしてた。MMUは仕事とは全然関係無かったんだけど。
で、「ふーん…」とか、そんな感じで、だらだらしてたんだけど、なんとなく調べてたら、「このMMUをうまく使うにはどうしたらいいんかな…」っていうのが気になって、気付いたら、BSDのコードを開いてぐにょぐにょしてた次第。(仕事しろよ…)


BSDのVMMはuvmとかいうらしい。BSD magazineのバックナンバー(http://www.ascii.co.jp/BSDmag/backnumber/main.html)にその解説があるらしいんだけど、そんなもの手元にあるはずもなく。


で、http://www.usenix.org/events/usenix99/full_papers/cranor/cranor.pdfを流し読みしたり、ソースを流し読みしたりしつつ、MMUの使い方を調べてたんだけど、なんか、そういう部分はあまりなくて、「いかにしてページとプロセスをmapするのかッ!!」みたいな部分が大半であった。
で、「う〜ん…mmapってあんまり使ったことないけど、そんなに本気で挑まないといけないような問題なんかな…?」と、思ったりしたんだけど、ふと、、mmapって偉いかもしれない、とか。


brkはanonymous page(≒swap file)へのmmapとも言えるし、execは実行ファイルをメモリにマップしてるだけであり、forkはプロセスのマップ情報をコピーしてるだけ。で、ファイル操作というのは、実際のところファイルキャッシュへの操作であって、そのファイルキャッシュというのは、メモリにマップされたファイルと言えないこともない。あとは、デバイスがメモリにマップされたりとか。
よーするに、mmapっていうのは、見方によっては、カーネル内部で一番低レベルな処理である、と言えるかもしれないのである。だから、mmapさえ良くなれば、他のところもグングン良くなる…とかなのかもしれない。


それだけなんだが。