タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

mmapに関するsleepy_yoshiのブックマーク (2)

  • mmapのAPI : kei@sodan

    まずはmmap()のAPIを説明します。 fd = open(file, access); a' = mmap(a, n, prot, share, fd, offset); まずは普通にファイルをopen()で開きます。その後、mmap()でマップします。 aは「この仮想メモリアドレスにマップしてほしい」という値を指定できるのですが、普通はNULLでOKです。nはファイルの何バイト目をマップするのか、offsetは何バイト目からをマップするのかという指定です。 shareという引数がありますが、これは複数のプロセスが同じファイルをmmapしたときの動作です。 shareにMAP_PRIVATEを指定すると、そのプロセスは別のコピーを見て、プロセス間でデータは共有されません。メモリ上に複数データがある…ということで、ディスクにはどのデータを書いていいのか分からないので、書き込み結果はファイ

  • mmapの実装 : kei@sodan

    mmapの基的な動作はファイルをメモリにマップすることですが、mmap()を実行したときにいきなりファイルがメモリにコピーされるわけではありません。 mmap()を実行するとアドレスが返されますが、このときこのメモリ番地は物理メモリ上に乗っていません。 だから、この番地をアクセスするとページフォルトが発生します。このページフォルトを受けて、はじめてデータがファイル(ディスク)から物理メモリにコピーされます。(なお、もし元々このファイルがファイルキャッシュに乗っている場合は、このファイルキッシュのアドレスがそのまま返されます) mmapされた領域に書き込まれたデータは、適宜ディスクに書き戻されます。 なお、ファイルの一部だけがアクセスされたら、その一部だけをメモリに乗せればよいです。また、物理メモリが足りなくなったら、あまりアクセスされていないページはページアウトさせます。 この「ページフ

  • 1