Linux Day9:メモリ応用編1
こんにちは。
昨日はSRE Next に、初めてイベントスタッフとして参加しました。
長きに渡って準備をされてきた方々の努力、本当に尊敬します。参加者としてしかイベントに関わったことがなく、知らなかった裏側を垣間見ることができたのは、間違いなく「やって良かった」と思える体験でした。
スタッフ陣、参加者の皆さんに囲まれ貴重な経験をさせていただいたことについては、改めて振り返ろうと思います。
セッション動画も、全てではありませんが配信予定とのこと。「追っかけSRE Next」が今から楽しみです。
さて、今回も「Linuxのしくみ」を読み進めました。
- 仮想記憶 応用編
- ファイルマップ
- デマンドページング
- メモリの枯渇
ファイルマップ
プロセスがファイルにアクセスする際、ファイル領域を仮想アドレス空間上にメモリマップする機能のこと。
アクセス領域は、あるタイミングでストレージデバイス上のファイルに書き戻される。
マップしたファイルには、メモリのアクセスと同様の方法でアクセスができる。
デマンドページング
プロセス生成時のメモリ獲得手順には「メモリを無駄に消費する」という問題がある。
①カーネルが、必要な領域を物理メモリ上に確保
② ページテーブルを設定、仮想アドレス空間を物理アドレス空間に紐付け
なぜかというと、
- 大きめのプログラム内には実行中に使われなかった機能のコード・データ領域
glibc
が確保したメモリプールのうち、ユーザが malloc() で確保しなかった部分
があるから。
これを解決するのがデマンドページング
というしくみ。
まとめ
- ファイルマップを用いることで、システムコールを使わずともファイルの内容を読み込み・更新できる
- メモリマップの問題点をデマンドページングで解消する
徹底的に無駄をなくし、効率化を図る。メモリ一つにとっても、これだけの(まだ触れていないものもたくさんある中で)機能があるなんて。すごい、すごいよLinux。
今回はここまで!またお会いしましょう〜