カーネルはプロセス生成時にメモリーを割り当てるわけですが、カーネルや他のプロセスが使用するメモリーを意識しなくても良いように連続した領域を確保します。
メモリーには”番地(アドレス)”が割り振られて、その番地で管理しています
つまり、100番地から300番地まで、プロセスAが使えるところ、といった形です
使える番地の幅は、CPUやOSが32ビットか64ビットかで異なります
CPUが32ビット対応の場合、プロセスに割り当てるメモリーは4GBになります
最近のPCには、4GBや16GBといった大きな容量のメモリーが搭載されていますが、複数のプロセスを同時実行するので1つのプロセスに4GBのメモリーを割り当てません。
そこでカーネルは4GB分の仮番地をプロセスに割り当て、メモリーが必要になったときに実際のメモリーの番地と仮番地を対応つけます(「デマンドページング」と呼びます)
Linuxカーネルでは「ページ」という固定で小さなサイズにメモリーを分割し、このページ単位で番地を対応付ける方式をとってます
この番地の対応付けをCPUのメモリー管理機構(MMU)を使って処理しています
実行しているプロセス数が増えて、使用するメモリーが増えてくると実際のメモリーが足りなくなることもあります
メモリーが少なくなった場合、最近アクセスされていないページをいったんディスクに掃き出してメモリーを解放します(「ページアウト」と呼びます)
ページアウトでも対処できなくなると、Linuxカーネルは強制的にプロセスを停止させます(「OOM Killer」と呼びます)
ただやみくもに停止させるのではなく、システム上あまり重要でなく、比較的稼動していないプロセスが選ばれます
0 件のコメント:
コメントを投稿