setup_paging 手続き
ええと、3/3 なエントリで諸々掘削しているものの、以下な部分の理解が微妙。
movl $pg1+4092,%edi movl $0x7ff007,%eax /* 8Mb - 4096 + 7 (r/w user,p) */ std 1: stosl /* fill pages backwards - more efficient :-) */ subl $0x1000,%eax jge 1b
上記のセットは初期設定として
- edi に pg1 (0x2000) を設定
- eax に 0x7ff007 を設定
- コメントに 8Mb - 4096 + 7 とあるんですが
- 0x800000 はビット表現だと 10000000 00000000 00000000 になるのか
- こいつから 4096 引いたら 01111111 11110000 00000000 で 0x7ff000 か
- コメント通りです
- がしかし、意味不明orz
ええと
pg0 のアドレスが 0x1000 なので 4096、pg1 が 0x2000 なので 8192 という理解で良いのかな。という事は
- 始点は 8192 + 4092
- eax には 0x7ff007 がセットされて 0x1000 を順に引いていく
これ、ページディレクトリとかページテーブルとかなソレなのか。
- pg_dir に pg0 とか pg1 なエントリが登録されている
- pg0 とか pg1 は上記で 4K 毎のアドレスが登録されている (はず
あら? $pg1+4092 なあたりが微妙に謎だ。てーか引き算できないorz
とほほ
4byte (word size?) 分って事なのか。とほほほほ。