keigo1216 / ketchup

raspberrypi 3A+用のOS
1 stars 0 forks source link

implement create process on user #69

Open keigo1216 opened 2 months ago

keigo1216 commented 2 months ago

実装すること

現状は、ユーザー空間でcreate_processを読んでもページが割り当てられていないのでプログラムが動かない。 ユーザー空間でマルチプロセスしたい

バグ

kernel側のprocess_createの実装のentry_pointがミスっているかもしれない USER_BASEを別の関数のアドレスに設定しても、飛ぶ先がshell.cmain関数だった ~USER_BASEがどこかでハードコーディングされているかも~ => されてたので修正 スイッチ時に次のようなエラーが出た

PANIC: kernel/trap.c:21: unexpected trap ec=0000000000000020, far=00000000010004a8, elr=00000000010004a8
スクリーンショット 2024-10-01 20 34 13

yeildでプロセスを切り替え、proc_bのエントリポイントに飛んだときに例外が出ている

EL1のセットされているECが0b100000

スクリーンショット 2024-10-01 20 49 28

例外で定義されている内容は以下の通り

スクリーンショット 2024-10-01 20 50 19

ここから先は、ページ割り当てになるから、再調査&頑張って実装

ページフォルト時の処理を実装

別Issuesに切り出して実装する https://github.com/keigo1216/ketchup/issues/70

調査

多重割り込みの実装

ページフォルトの実装

テスト

参考

例外時のエラー番号が載っている https://developer.arm.com/documentation/ddi0595/2020-12/AArch64-Registers/ESR-EL1--Exception-Syndrome-Register--EL1-