page fault2006年10月09日 10時16分11秒

list_users -admin page_faults や list_users -admin deltas をやると各プロセスのページフォルトの状況が分かる。

ページフォルトは、malloc 等で新しいページを割り当てを使ったときや、Shared Virtual Memory で割り当てられたメモリが既に物理メモリに読み出されて居ない場合に起きる。vos でのページフォルトは、動作的に高く付く。

ハードウェアにもよるが、ftServer でも一回のページフォルトに 5 ms から 10 ms かかったと記憶している。高速な動作を必要とされる環境では、多大なコストだ。vos では、ゼロページ参照でも unix の様なコアダンプはしない。そのようなメモリ参照はページフォルトの一部として数えられる。

恐らくほとんどの人は、これだけでは何を話しているのか分からないだろう。具体例を挙げる。


#include 

int main()
{
    printf("%d\n", *(int*)0);
}

このプログラムを、unix 上で実行すると、セグメンテーションエラーを起こし、プログラムが異常終了する。

それに引き替え、vos 上では何の問題もなく 0 が出力される。もちろん、vos でも 0 のアドレス番地への参照は有効な操作ではないが、unix の様に強制終了されないだけである。ただし、vos のページャは不正なアクセスだと、認知する。Stratus 社の開発者の話だと、統計を取るのに他に適当な物が見当たらなかったから、ページフォルトの一貫として、数えられる様になったらしい。一般的には、特にメモリを動的に割り当てていないのにページフォルトが頻発したら、不正なアドレスを参照していると思っていい。

プログラムの問題を潰すといった目的では、unix の様に強制終了してしまう方がいいだろう。