(0)從零開始的操作系統開發日記

ゼロからの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的樣子,記錄下一些很散的點:(改進用加粗)

    1. P115,關於系統態/應用態的設置
    2. P154 本OS用486彙編
    3. 關於時間中斷號,對中斷號基值改爲宏定義,可減少全局變量
    4. 直接往顯存寫內容 0xa0000
    5. http://community.osdev.info/?(AT)BIOS這個網站貌似已經沒有信息了不能使用
    6. 關於線程調度,原OS只有簡單的運行態,就緒態,目前對於硬件IO的部分還有阻塞態,用多級優先級反饋隊列,但不存在末隊列爲輪轉,並且,系統功能目前還沒有分成幾個線程去支持。
      至今爲止很多模塊還沒有獨立開來,日後可能會獨立出來【D16】
    7. P344“處於32位模式無法向BIOS查詢?”
      老師的相關回答:BIOS的中斷例程適用於16位的實模式(就是以前的DOS,可直接訪問空間爲1MB,不支持虛擬存儲),32位以後要支持虛擬存儲就必須採用保護模式,所以就不用BIOS的中斷例程了。之所以這麼長時間以來BIOS不改進,一是爲了兼容,二是windows自己提供保護模式下的中斷服務例程,且是可擴展可升級的,所以用不着BIOS提供。
      【要自己寫IO】
    8. 小BUG:按下一次shift後,小字母無法輸入【真機正確,模擬器的問題】
    9. sprintf:將字符串格式化以後存入s,然後再調用自己實現的寫顯存顯示的函數putfont_XX兩個函數配套使用。
    10. 網上找到的鼠標排列【比原來的好看點】:
      "*...............",
      "**..............",
      "*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】比較粗略的看完吧,大概知道一些實現和算法。

ま、頑張りましょう

發佈了28 篇原創文章 · 獲贊 12 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章