這個代碼很多地方看起來可能已經不那麼合適了,早晚會重構。新倉庫recover-os。等我回來填坑。 重構版本:https://github.com/yiezias/recover-os
本項目是基於《操作系統真像還原》實現的AMD64架構(或者叫x86_64架構)版本的操作系統,主要思路與代碼與原書一致。
《操作系統真像還原》實現的操作系統運行在32位x86架構的處理器上,但是現在我們早已邁入64位時代。於是我複製參考《操作系統真像還原》中的代碼實現了其64位版本。
$ make run就可以編譯並啟動bochs模擬器了。
本操作系統內置2048,貪吃蛇等小遊戲。
用recover寫代碼:
(終端沒有實現輸入輸出重定向,下面cat與Linux下的cat行為不大一樣)
(僅僅是展示一下寫文本文件功能)

2048小遊戲:

貪吃蛇(掉幀嚴重,就不放動圖了):

我讀到過的相關書籍中最為通俗易懂的一本,詳細又不失趣味性。即使顯得有些囉嗦,作者也要變著法子讓讀者看懂(這麼友好的書哪裡找)。在眾多操作系統相關的書中,我最終選擇了這本唯一看得懂的書實現操作系統。
主要是AMD64與x86架構的不同
AMD64架構下函數普遍採用寄存器傳遞參數,x86下的函數調用約定已無參考價值。不過其本身也好理解,具體細節寫個C函數用gcc編譯成彙編看看就明白了。開發過程中多處需要用到這一知識點。
長模式可以理解為64位特色保護模式,處理器需要從實模式切換到保護模式再到長模式。
最方便的獲取資料方式當然是搜索引擎,但搜索引擎往往找不到想要的內容,真正權威的資料還是AMD或intel文檔。
本系統完全放棄了中斷實現系統調用的方式,採用syscall sysret快速系統調用指令實現。具體可參考AMD或intel文檔,內容並不復雜。
作者的文件系統感覺寫得併不大好。一方面文件因為系統本來就比較繁瑣,但作者動輒近幾百行的函數,而且有些代碼明明可以復用,卻要重複實現,整體上非常混亂。本系統文件系統相當於作者的發生了較大改動,不過結合作者的書和代碼應該不難理解。本系統文件系統並沒有實現目錄層級的功能,不過並不影響系統其他功能實現,於是就省略了。
作者的shell是在內核中實現的。本系統將shell作為應用程序,init進程用execv系統調用加載根目錄shell。作者係統的許多內建命令在本系統中也是直接作為應用程序實現的。不過代碼層面是相似的。還有特色小遊戲,能夠調用操作系統接口獨立實現應用程序,這個系統就算大致完成了。