搞定
fork 之後, 我以為來到這步會很容易, 沒想到又經歷一些除錯的時間。特別是 kernel loader 的部份還是有錯誤, 載入 500000 byte 的 p_kernel.elf 有問題, fat sector 超過兩個 sector 時會讀取錯誤。花了不少時間解決, 在加上其他小問題, 總算來到這步。
這是在 eeepc 901 上的實機測試, "I am app" 是 fork 之後的 child process, 再經由 ramdisk 載入 echo 這個 elf 執行檔的執行結果。
上方紅框則是 parent process 列印的訊息。
下圖則是 child process 執行 exit() 結束自己的結果, parent process 得到 child process return value 2, 雖然和
Orange's 一個作業系統的實現書中比起來, 我已經大量簡化很多東西, 不過這已經足夠讓我理解 fork/wait/exec/exit 的實作方式。終於知道我想知道的答案。來到這步, 大概花了一年之久, 總算滿足了自己的好奇心。
其實應該不用這麼久, 因為這段期間我還弄懂 c runtime,
c++ runtime, gas at&t 組合語言, vga 繪圖模式, 還復活了
jmcce, 只照書本學習有點枯燥, 還是混著玩點其他東西。
os 學習之旅可暫時告一個段落, 讓自己稍微輕鬆點。剩下的問題慢慢再來修正。
實機測試雖然沒問題, 不過在 bochs 上卻發生了 BOUND_GdMa: fails bounds test 訊息, 真是奇怪, 沒有個完美的結束, 找時間在處理這問題。
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。