JOS 2週目

修の論がアレしてきたりしてあまり時間が取れなかった。

1/29

https://pdos.csail.mit.edu/6.828/2017/xv6/book-rev10.pdf Appendix A を読んで x86レジスタなどを覚える。 memory-mapped I/O が分かった気になる。ディスクの最初のセクタは boot sector と呼ばれ BIOS がそこを読む。 real mode と protected mode はあとで読む。

アセンブラのスタックを使った関数呼び出しについて。学部のコンパイラ作る講義でやったけど結構忘れていた。 逆アセンブルで遊んでみる(6)関数内の処理を追いかけてみた - ゆずさん研究所 が分かりやすかった。

Lab 2 にある pointer.c でハマったが普通にリトルエンディアンだね…。

1/30

link address と load address がまだ分かっていない。GDB の使い方が若干分かってきた。 boot xv6 の HW は、xv6 kernel が始まる 0x10000c 時点での x/24x $esp の内容を説明せよというもの。

(gdb) x/24x $esp
0x7bcc: 0x00007da5      0x00000000      0x00000000      0x00000000
0x7bdc: 0x00010054      0x00000000      0x00000000      0x00000000
0x7bec: 0x00000000      0x00000000      0x00000000      0x00000000
0x7bfc: 0x00007c4d      0x8ec031fa      0x8ec08ed8      0xa864e4d0
0x7c0c: 0xb0fa7502      0xe464e6d1      0x7502a864      0xe6dfb0fa
0x7c1c: 0x16010f60      0x200f7c78      0xc88366c0      0xc0220f01

0x10054 がまだ追いきれていない。

1/31

“PC Assembly Language” 1.2 Computer Organization を読んで、real mode, 16-bit protected mode, 32-bit protected mode をまともに理解した。 8086, 80286, 80386 への対応。 xv6のブートプロセスめも 32bit-modeになるまで - Qiita は参考になった。

まだ HW は終わってない…