2012/03/25

プロセスのメモリー管理

カーネルはプロセス生成時にメモリーを割り当てるわけですが、カーネルや他のプロセスが使用するメモリーを意識しなくても良いように連続した領域を確保します。

 

メモリーには”番地(アドレス)”が割り振られて、その番地で管理しています

つまり、100番地から300番地まで、プロセスAが使えるところ、といった形です

使える番地の幅は、CPUやOSが32ビットか64ビットかで異なります

 

CPUが32ビット対応の場合、プロセスに割り当てるメモリーは4GBになります

最近のPCには、4GBや16GBといった大きな容量のメモリーが搭載されていますが、複数のプロセスを同時実行するので1つのプロセスに4GBのメモリーを割り当てません。

そこでカーネルは4GB分の仮番地をプロセスに割り当て、メモリーが必要になったときに実際のメモリーの番地と仮番地を対応つけます(「デマンドページング」と呼びます)

IMG_3497

Linuxカーネルでは「ページ」という固定で小さなサイズにメモリーを分割し、このページ単位で番地を対応付ける方式をとってます

この番地の対応付けをCPUのメモリー管理機構(MMU)を使って処理しています

 

実行しているプロセス数が増えて、使用するメモリーが増えてくると実際のメモリーが足りなくなることもあります

メモリーが少なくなった場合、最近アクセスされていないページをいったんディスクに掃き出してメモリーを解放します(「ページアウト」と呼びます)

 

ページアウトでも対処できなくなると、Linuxカーネルは強制的にプロセスを停止させます(「OOM Killer」と呼びます)

ただやみくもに停止させるのではなく、システム上あまり重要でなく、比較的稼動していないプロセスが選ばれます

0 件のコメント:

コメントを投稿