とりあえず実装方針を@xharakenに相談して次のことを決定した。
psm_mmapの管理領域について
- まずmmapされたアドレスの一覧が必要。
- プロセスのメモリ空間に取る。これを共有すると死ねる。
- ちなみに後で子供がmmapできるようにするときにこの情報の更新もさせればいい。
- データ構造はmallocの線形リスト。あーstd::vector使いてーよ。std::deqのほうがいい?
- mmap領域っていうのは中間だけ突然unmapしたり、継ぎ足して使ったりするから線形リストがいい。
- メンバはptr, size, offsetくらいか?
- 分割する時にoffsetの処理も必要ってことか。しかも継ぎ足せるかどうかはoffsetの連続性にも依存するんじゃ?
- shmファイルのどこを使っているか、という一覧も必要。
じゃあ子供の動作
cloneされた直後のフックの中でmmapをサラッとしてしまう。子供はメモリ全然使ってない状態のはずだから、mmapできるだろう(という決め打ち)
子供がいざmmapしたくなった場合
このときは全プロセス間で通信するための領域をshmの先頭に置いて、そこでセマフォ&スレッドを使うことになるだろうっていうことで情報を受けるためのrecvスレッドが立っている以上危険なんじゃね…あ、やっぱユーザーからの情報を受け取らないスレッドだから危険度は段違いに下がるか。