ページング理解のためのプログラム | 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]) それぞれのカラムの意味は,
受講生が動作させるためには
自分のi386互換上で動作するLinuxマシンでコンパイル・実行する方法と, linux2003上にすでにインストールされているものを実行する方法があります.自分でコンパイルする場合,
% grep pidhash /boot/System.map c0233e32 ? __kstrtab_pidhash c023bd40 ? __ksymtab_pidhash c02a11e0 B pidhash等,grepなどでサーチできる(上記の例では c02a11e0). カーネルを再構築した人は,makeをしたディレクトリにあるらしいです.
#define pidhash_addr 0xc02a11e0の行に埋め込みます.数値の先頭に0xをつけるのを忘れないでね.
本ページトップ | 学科 | 海谷ホームページ | $Id: index.html,v 1.2 2004-11-03 21:47:36+09 kaiya Exp kaiya $ |