差分

移動先: 案内検索

記憶管理

1,770 バイト追加, 2007年11月8日 (木) 11:11
/* mmap */
;補足: 内容をアップデートして同期するにはメモリに書き込み後、msync(2)やmunmap(2)を呼ぶことが必要です。
 
==== 単一レベル記憶 ====
 
ファイルもメモリも、さらにデバイスすらも単純な1つの記憶空間として扱おうというコンセプトが単一レベル記憶です。現在、オペレーティングシステムレベルでサポートしているのはIBM社のSystem iシリーズぐらいしかないので、インターネット上で説明を探すとIBM System iの機能=単一レベル記憶の定義みたいな説明しかありませんが、実は、その歴史は古く1960年代に作られたMultics上に既に実装されています。UNIXは単一レベル記憶を前提としているデザインはありませんが、現在のUNIX系のオペレーティングシステムはmmapを実装することによってMulticsが持っていたファイルもメモリも、そしてデバイスも同様に扱うことができる利益を得ています。例としては今時のLinuxやその他UNIX系のオペレーティングシステムでは実行バイナリやライブラリを動かすとき、一々ファイルの中身を読み込む動作をせず、実行するバイナリデータを内部でマップしてしまいます。ですから古典的なUNIXで言われるような、「実行バイナリファイルをメモリに読み込み実行する」という表現は少なくとも現在のLinuxの実行時の表現としては適切ではないという状況になっています。あとデバイスの利用例としては、malloc()のいくつかの実装では内部で記憶領域を確保するとき/dev/zeroをmmapでオープンして使っています。mmapの機能の背景にある単一レベル記憶というキーワードは知っていて損はないでしょう。
=== 脚注 ===
<references/>
匿名利用者