3/11
Homework 8 hw08: finish · itkq/jos@8224e02 · GitHub
- 結構悩んだが結局はヒントをよく読む
- pushal, popal: register の save と restore
current_stack->sp = esp
の手順
- stack を thread のものに切り替えることをする
- 1回目の
thread_switch()
が呼ばれる直前 - 1回目の
thread_switch()
でret
する直前- スタックポインタの切り替え
- コンテキスト (registers) の入れ替え
- 2回目の
thread_switch()
が呼ばれる直前 - 2回目の
thread_switch()
でret
する直前- 同様
- 1回目の
- 結構悩んだが結局はヒントをよく読む
homework 9
- condition variable がなにを指すのかよくわからなくてハマった
- 要するに
pthread_cond_wait()
が入っている if もしくは while のブロックの条件のことで、それが真になるまでそのスレッドは待つ
3/12
- Lab 4
- exercise 1 ~ exercise 5
- それほどはむずかしくない
- exercise 1 ~ exercise 5
3/13-15
- Lab4
- exercise 6 で2日溶かした
- iteration が上手くいかない、各 CPU が同じ environment を掴んでしまっている?
- lib/libmain.c で
thisenv = envs;
という先頭しか掴まないようになっていてビビる、直す - これは Lab 3 の領域なので Lab 3 にて
make grade
すると user/hello.c で失敗 sys_getenvid()
システムコールがよくわからない値を返していた- カーネル空間では動いてるっぽいのでなんだとおもったら
kern/syscall.c
でsyscall()
の dispatcher にSYS_getenvid
の対応を書いてなかった!!!!!!!!!!!!!!! - これも直したら通った
- exercise 7
- child environment の syscall の引数がおかしい
- 謎だけど tf をコピーするときに eax, esi にゴミが残っていて死んでたのでクリアした (あってるかは不明)
- parent が free になったあと halt してる
- exercise 6 の漏れだった
- child environment の syscall の引数がおかしい
- exercise 6 で2日溶かした
3/16
- Lab 4 exercise 8
- やるだけ
3/17
- Lab 4 exercise 9
- esp に eip を置いておくと、handler 内での trap という再帰的な動きにも対応できる。結構悩んだ
3/18
- exercise 10, 11
- ページをコピーした dumbfork() とは違って fork() では ページのマッピング をコピーする
- sys_exofork がよくわかってなかった。eax を 0 にすることで戻り値を 0 にしていた
3/19
- exercise 12
- どこかでバグらせていて lib/fork 中で user page fault が起きる、原因がぜんぜんわからん…
3/21-3/24
- 突然発熱して体調を崩して死んでた