キーワード †
ActiveCache †
Cachedと同じ用途だが2.4系では、CachedとActiveCacheの2種類存在する。
/proc/meminfo で ActiveCacheの容量が確認可能。2.6系にはない。
2.4系におけるメモリ使用率はActiveCacheも引く必要がある。
( MemTotal - MemFree - Buffers - Cache - ActiveCache ) / MemTotal
ファイルアクセスが発生すると、Cached 領域にメモリ確保されて I/O が行なわれる。
一定期間で、メモリのアクセス頻度に応じた順位付けが計算される。
この時 Cached 領域のメモリが、プロセスによって利用されている状態であれば、
その Cached メモリは ActiveCache に移動する。
Cached 領域がプロセスによって利用されていない(参照されていない)ならば、
メモリが不足していない限り、そのまま解放されず Cached に残る。
空きメモリが不足した時は、ActiveCache から比較的利用頻度の低いデータをInactive に移す。
あるいは Cached からも再利用する。
これらの割合は全メモリ量に対するパーセンテージで制御される。
Slabキャッシュ †
ディレクトリのメタデータ情報を格納するdentry。
ファイルのメタデータ情報を格納するinode構造体などをキャッシュしているカーネル内のメモリ領域。
これらはページキャッシュとは別にカーネルの中に確保されており、ストレージと同期していれば解放することが可能。
/proc/slabinfo ファイル や slabtopコマンドで情報の確認できる。
仮想メモリ †
各種メモリ獲得関数(malloc、mmapなど)を発行すると増加する。
物理メモリが確保されるのは、メモリ領域を読み書きする時。
仮想メモリをいくら確保しても、読み書きしない限りオーバーヘッドにはならない。
OS | ユーザー空間割り当て | カーネル空間割り当て |
32bitOS | 3GB | 1GB |
64bitOS | 128TB | 64TB |
ユーザーアドレス空間はプロセス毎に個別に確保するが、カーネルの仮想アドレス空間は全てのプロセスで共有する。
仮想アドレス空間が確保できない場合、確保時に「ENOMEMエラー」が発生する。
仮想スワップスペース †
仮想メモリと逆の概念。十分な物理メモリがある為、スワップスペースが不要であるが、
プロセスが大量に起動されていることにより各プロセスにスワップスペースを割り当てる必要が生じるといったことを軽減する。
このスペースはSWAPFSファイルシステムによって管理され、スワップスペースの確保に対する要求に応え、
物理スワップスペースではなく仮想スワップスペースアドレスを提供することによって大量の物理スワップスペースを構成する必要性を軽減する
つまり物理メモリーが十分に搭載されているシステムでは物理メモリーをスワップ空間として機能させること
スワップスペース(スワップ空間) †
仮想メモリの保存に使われるディスクスライスのこと。物理RAM、swapスライス、swapファイルで構成される
対象プロセスが変更したデータメモリ全てをスワップスペースに移動する
独自のデータスタックを含む情報は匿名のメモリページはスワップ領域に入る
ページキャッシュ †
Linuxはストレージに保存してあるデータを読み書きする時に確保したメモリをページキャッシュという形で保持する。
CPUは直接ストレージに対し読み書きしている訳ではなく、メモリに確保されたページキャッシュに対し読み書きしている。
ストレージとページキャッシュの内容は定期的に同期を取っており、同期が取れてる状態であればメモリの再利用が可能である。
/proc/meminfoのActive(同期が完了しておらず解放できない)とInactive(同期が完了しいつでも切り捨て可能)で確認可能。
ページング †
メモリペースはページと呼ばれる単位で割り当てられる。SPARCでは1ページが8kbのメモリに相当する。
プログラムがスワップスペースに保存されたデータが必要とした時、メモリ内にデータがないことをページフォルト
ページフォルトが発生すると仮想メモリは要求されたデータが含まれたページを物理メモリへ移動する(ページング)
セマフォ †
リソース制御のために使用されるOSが持ってるカウンタ。
最初にセマフォをリソースの数と同じだけ用意し、プロセス(スレッド)がリソースを1つ使用するとカウンタが1つ減る。
カウンタが0になるとリソースが使用できなくなり、プロセス(スレッド)を待たせる仕組み。
スリープを繰り返しながら定期的にリソースの空きを確認するようなプログラミングより効率が良い。
SWAPFSファイルシステム †
プロセスからのスワップ空間確保要求に対し、スワップ空間アドレスではなく仮想スワップ空間アドレスを提供する
TMPFSファイルシステム †
HDD上の/tmpディレクトリをメモリへマッピングするメモリベースのファイルシステム(Windowsで言うRAMディスク)
物理メモリ上にファイルシステムを作成するため、高速なアクセスになるが、再起動すると内容が全て消える
スワップスペースリソースから/tmpディレクトリのスペースを割り当てるため、
/tmpディレクトリのスペースを使用するということはスワップスペースを利用することになる
execとforkの違い †
execはPIDはそのままで別のプログラムに変化すること。
forkは親プロセスから子プロセスを生み出すこと。