ページング理解のためのプログラム OS2005 | 海谷ホームページ | 学科

はじめに

以下の本 にのっているサンプルをそのまま打ち込みました. いまいち動作がわからないところもまりますが.

プログラムの仕様

プロセス毎に4GBの仮想メモリ空間が割り当てられるのですが, それは実際には(せいぜい512MB程度の)実メモリに アドレス変換テーブルを使って,対応付けされていることは 既に述べました.

このプログラムは,実際に仮想メモリ上のページが, 実メモリ上のどこに実際には配置されているかを表示するものです. 動作方法は,

です. 例えば,
% ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Oct02 ?        00:00:03 init
root         2     1  0 Oct02 ?        00:00:00 [keventd]
root         3     1  0 Oct02 ?        00:00:00 [kapm-idled]
root         4     0  0 Oct02 ?        00:00:00 [ksoftirqd_CPU0]
root         5     0  0 Oct02 ?        00:00:04 [kswapd]
root         6     0  0 Oct02 ?        00:00:00 [kreclaimd]
root         7     0  0 Oct02 ?        00:00:02 [bdflush]
root         8     0  0 Oct02 ?        00:00:02 [kupdated]
root         9     1  0 Oct02 ?        00:00:00 [mdrecoveryd]
root        72     1  0 Oct02 ?        00:00:00 [khubd]
root       513     1  0 Oct02 ?        00:00:00 syslogd -m 0
root       518     1  0 Oct02 ?        00:00:00 klogd -2
rpc        532     1  0 Oct02 ?        00:00:00 portmap
rpcuser    554     1  0 Oct02 ?        00:00:00 rpc.statd
root       640     1  0 Oct02 ?        00:00:00 /usr/sbin/apmd -p 10 -w 5 -W -P 
apache   20995 11650  0 04:02 ?        00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D
apache   20996 11650  0 04:02 ?        00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D
apache   20997 11650  0 04:02 ?        00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D
root     22568   708  0 20:59 ?        00:00:00 /usr/sbin/sshd
kaiya    22569 22568  0 20:59 pts/0    00:00:00 -csh
kaiya    22671 22569  0 21:18 pts/0    00:00:00 ps -ef
とかいうプロセスがあったとして,
os2004read_pgd 20995
とすると,
   Virtual Address   t    PGD   PTE    Physical Address
----------------------------------------------
08048000 -- 08048fff k -> [UW]  [UW]   05fd9000
08049000 -- 08049fff k -> [UW]  [UW]   05e93000
0804a000 -- 0804afff k -> [UW]  [UW]   05dd1000
0804b000 -- 0804bfff k -> [UW]  [UW]   061f5000
0804c000 -- 0804cfff k -> [UW]  [UW]   05f24000
0804d000 -- 0804dfff k -> [UW]  [UW]   059b0000
0804e000 -- 0804efff k -> [UW]  [UW]   05e5a000
0804f000 -- 0804ffff k -> [UW]  [UW]   0597d000
08050000 -- 08050fff k -> [UW]  [UW]   05ea8000
08051000 -- 08051fff k -> [UW]  [UW]   0d3da000
08052000 -- 08052fff k -> [UW]  [UW]   058a1000
08053000 -- 08053fff k -> [UW]  [UW]   05d26000
中略
080b1000 -- 080b1fff k -> [UW]  [UW]   05abd000
080b2000 -- 080b2fff k -> [UW]  [UW]   0da6c000
080b3000 -- 080b3fff k -> [UW]  [UW]   0544a000
080b4000 -- 080b4fff k -> [UW]  [UW]   0dbce000
080b5000 -- 080b5fff k -> [UW]  [UW]   05c23000
080b6000 -- 080b6fff k -> [UW]  [UW]   05200000
080b7000 -- 080b7fff k -> [UW]  [UW]   0c013000
080b9000 -- 080b9fff k -> [UW]  [UW]   0bc3c000
080ba000 -- 080bafff k -> [UW]         page out
080bb000 -- 080bbfff k -> [UW]         page out
080bc000 -- 080bcfff k -> [UW]         page out
080bd000 -- 080bdfff k -> [UW]  [UW]   0b07e000
080be000 -- 080befff k -> [UW]  [UW]   04f60000
080c0000 -- 080c0fff k -> [UW]  [UW]   0b05e000
080c1000 -- 080c1fff k -> [UW]         page out
080c2000 -- 080c2fff k -> [UW]         page out
080c3000 -- 080c3fff k -> [UW]         page out
080c4000 -- 080c4fff k -> [UW]  [UW]   0af2a000
080c5000 -- 080c5fff k -> [UW]  [UW]   0affc000
080c7000 -- 080c7fff k -> [UW]         page out
080c8000 -- 080c8fff k -> [UW]         page out
080c9000 -- 080c9fff k -> [UW]         page out
080ca000 -- 080cafff k -> [UW]         page out
080cb000 -- 080cbfff k -> [UW]  [UW]   0ad32000
080cc000 -- 080ccfff k -> [UW]  [UW]   066d5000
080cd000 -- 080cdfff k -> [UW]  [UW]   0272c000
080ce000 -- 080cefff k -> [UW]  [UW]   0acba000
中略
bfffd000 -- bfffdfff k -> [UW]  [UW]   02b76000
bfffe000 -- bfffefff k -> [UW]  [UW]   082b2000
bffff000 -- bfffffff k -> [UW]  [UW]   08f42000
c0000000 -- c03fffff m -> [ W]         00000000
c0400000 -- c07fffff m -> [ W]         00400000
c0800000 -- c0bfffff m -> [ W]         00800000
c0c00000 -- c0ffffff m -> [ W]         00c00000
c1000000 -- c13fffff m -> [ W]         01000000
c1400000 -- c17fffff m -> [ W]         01400000
c1800000 -- c1bfffff m -> [ W]         01800000
c1c00000 -- c1ffffff m -> [ W]         01c00000
c2000000 -- c23fffff m -> [ W]         02000000
c2400000 -- c27fffff m -> [ W]         02400000
c2800000 -- c2bfffff m -> [ W]         02800000
中略
d0911000 -- d0911fff k -> [UW]  [UW]   0c05b000
d0912000 -- d0912fff k -> [UW]  [UW]   0466f000
d0913000 -- d0913fff k -> [UW]  [UW]   0c03f000
d0914000 -- d0914fff k -> [UW]  [UW]   05599000
d0915000 -- d0915fff k -> [UW]  [UW]   0a161000
d0916000 -- d0916fff k -> [UW]  [UW]   0559b000
d0917000 -- d0917fff k -> [UW]  [UW]   039d0000
d0918000 -- d0918fff k -> [UW]  [UW]   039d2000
みたいな表示がでます. (全文はこちら [TXT]) それぞれのカラムの意味は,
  1. ページの開始位置
  2. ページの終了位置
  3. 4KBのページなら,k, 4MBのページなら m
  4. ページディレクトリの[US]および[RW]フラグ.
  5. ページテーブルの[US]および[RW]フラグ.(4Mのページは1段なので無し)
  6. 配置されている物理アドレス,もしページアウトしているなら page out と記載.
無論,数値は16進法.

受講生が動作させるためには

自分のi386互換上で動作するLinuxマシンでコンパイル・実行する方法と, linux2003上にすでにインストールされているものを実行する方法があります.

自分でコンパイルする場合,

linux2003にリモートログインして利用する場合. 尚,このプログラムは Kernel2.4.7-10と.18-1でしかテストしていません. 多分,2.4以外では動作しないと思われます.

本ページトップ | 学科 | 海谷ホームページ $Id: index.html,v 1.2 2004-11-03 21:47:36+09 kaiya Exp kaiya $