ゼロからのOS開発ノート,從零開始的操作系統開發日記其實是個課程設計的坑,打算用於記錄學習和開發過程中遇到的一些散點,在着手開乾的時候會在github那邊開個項目【其實打算博客也直接在那邊寫,但是我懶得搭博客了,,】
目前主要參考書籍是川合秀實先生的《30天自制操作系統》,關於這本書,一些整理如下:
- 軟盤讀盤D3
- 簡單的寫顯存-圖形顯示D4
- 鼠標,鍵盤驅動D6-D8
- 內存管理(動態分區+相鄰回收)D9,10
- timer+FIFO長緩衝區(鏈表)+中斷號管理時間片D12-13
- 分辨率提高-圖形驅動D14
- 多任務處理(優先級+等長時間片?)D15-D16
- 控制檯:鍵盤IO,窗口滾動,控制檯命令 D17-19
- FAT: D19
- 系統級API D20
- 系統安全防護:容錯輸入,防非法內存訪問,支持異常【考慮用系統態/用戶態解決】 D21
- C程序實例 D22
- 圖形處理 D23
- 窗口切換,移動(包括優化),關閉,輸入定向,多窗口,D24-26文件操作API D28*
按內容分大概就是這樣:
- 內存: D9,D10
- 鼠標,鍵盤驅動:D6-D8
- 圖形處理相關: D4,D14,D23,D24-D26
- 多任務相關: D12-D13,D15-D16
- 文件管理: D19,D28
- 系統庫: D20,D27
具體功能:
- 控制檯:D17-19
- 系統安全:D21
- C程序實例:D23
- 其他未收錄的大部分都是一些具體的細節優化
目前讀到D19的樣子,記錄下一些很散的點:(改進用加粗)
- P115,關於系統態/應用態的設置
- P154 本OS用486彙編
- 關於時間中斷號,對中斷號基值改爲宏定義,可減少全局變量
- 直接往顯存寫內容 0xa0000
- http://community.osdev.info/?(AT)BIOS這個網站貌似已經沒有信息了不能使用
- 關於線程調度,原OS只有簡單的運行態,就緒態,目前對於硬件IO的部分還有阻塞態,用多級優先級反饋隊列,但不存在末隊列爲輪轉,並且,系統功能目前還沒有分成幾個線程去支持。
至今爲止很多模塊還沒有獨立開來,日後可能會獨立出來【D16】 - P344“處於32位模式無法向BIOS查詢?”
老師的相關回答:BIOS的中斷例程適用於16位的實模式(就是以前的DOS,可直接訪問空間爲1MB,不支持虛擬存儲),32位以後要支持虛擬存儲就必須採用保護模式,所以就不用BIOS的中斷例程了。之所以這麼長時間以來BIOS不改進,一是爲了兼容,二是windows自己提供保護模式下的中斷服務例程,且是可擴展可升級的,所以用不着BIOS提供。
【要自己寫IO】 - 小BUG:按下一次shift後,小字母無法輸入【真機正確,模擬器的問題】
- sprintf:將字符串格式化以後存入s,然後再調用自己實現的寫顯存顯示的函數putfont_XX兩個函數配套使用。
- 網上找到的鼠標排列【比原來的好看點】:
"*...............",
"**..............",
"*O*.............",
"*OO*............",
"*OOO*...........",
"*OOOO*..........",
"*OOOOO*.........",
"*OOOOOO*........",
"*OOOOOOO*.......",
"*OOOO*****......",
"*OO*O*..........",
"*O*.*O*.........",
"**..*O*.........",
"*....*O*........",
".....*O*........",
"......*.........";
其實最終這個課程設計會變成什麼樣子,我個人猜測可能已經不是原來設想的在haribote這個系統的基礎上進行算法添加和修改了,由於課程設計最核心的需要實現文件管理,這就要實現IO驅動了,但是保護模式又不能用BIOS的實模式提供中斷例程,目前解決方案有2:
1. 自己寫IO驅動
2. 不使用磁盤,把軟盤空閒區用來存儲系統內的文件,雖然容量受限,但還是可以有模有樣的寫個FAT12文件管理的,而且難度更低。
至於最後要怎麼實現,要和隊友討論一下才決定。
目前的系統都是在VMware上進行調試,還是蠻方便的,自帶的qemu好像會有些上面提到和書上提到的謎之BUG。
這些日記可能會很散,因爲寫下來只是作爲一個提醒一樣的東西,可能在之後需要寫一些面向讀者的日記。
附文檔,開發參考鏈接
https://www.zhihu.com/question/25628124
看了一些前輩的做法以後,我也反思了一下我想做的到底是什麼,我覺得我想做的可能是一個玩具內核,順便交一下課程設計的作業,各種硬件的手冊目前還是有點不知道如何下手。嘛,先把這本書推完再說吧,以現在一天2D的進度20號以前【now=2016年7月16日 19:46:24】比較粗略的看完吧,大概知道一些實現和算法。
ま、頑張りましょう