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?) 分って事なのか。とほほほほ。