man
に全部のってるのでそこを確認して行こうinctl()
mmap()
brk()
メモリ管理サブシステムは、オペレーティングシステムの最も重要な部分 のひとつである。コンピュータの黎明期以来、システム上にある物理メモリだけでは 足りない状況がずっと続いてきた。この限界を克服するために様々な戦略が立てられ たが、それらのうちで最も成功したのが、仮想メモリ(virtual memory)である。 仮想メモリとは、システムに実際以上のメモリがあるかのように見せる仕組みであり、 メモリ争奪関係にあるプロセス間で、必要に応じてそれらを協調して使用することに より実現されている。 The Linux Kernel: メモリ管理 より
メモリには、物理アドレスがふられている。 ユーザ・プロセスが実行されると、CPU は、仮想アドレス(virtual address) を 出力する。 仮想アドレスのうち、上位は、MMU (MMU) により変換する。 仮想アドレスのうち、下位(ページサイズ分)は、そのままメモリに送られる。 メモリ管理、アドレス空間、ページテーブル より引用
物理メモリを節約するひとつの方法は、実行中のプログラムが現在使用している仮想ページだけをロードすることである。 (中略) アクセスされた仮想ページだけ をメモリにロードするというこのテクニックは、デマンドページング(demand paging) と呼ばれる。 プロセスが物理メモリ上にない仮想アドレスにアクセスしようとした場合、プロ セッサは、参照された仮想ページのページテーブルエントリを見つけることができな い。たとえば、 図表(3.1) では、プロセス X の ページテーブルには、仮想フレーム番号 2 のエントリがないので、プロセス X が 仮想ページフレーム番号 2 の中にあるアドレスを読もうとしても、プロセッサは、 そのアドレスを物理メモリ上のアドレスに変換できない。この時点で、プロセッサは、 ページフォルトが発生したことをオペレーティングシステムに通知する。 The Linux Kernel: メモリ管理 より引用
Unix にはスワッピングしかなかったらしい。スワッピングはパフォーマンス上大きな問題だったが、プロセスのデータすべてではなく、細かく刻んだページ単位で同様の動きをするページングという仕組みにより、これを改善した。基本的に LRU のうごき。
Linux ではプロセス全体のスワップをサポートしていないため、しばしばスワッピングとページングは同じ意味で使われているらしい。なるほどー。Linux ではスワッピングの単位がページングの単位と一致しているので、同じ意味であると「Linux のしくみ」にも書かれていた。
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです