關燈 巨大 直達底部
親,雙擊螢幕即可自動滾動
第104部分

個有關這類資訊的網站。只有一個彙編網站稍微提到了一下這方面的資料。這也就意味著,並不是許毅現在提出這樣一個專案,大家立刻就能參與到這個計劃中來,更為重要的是,還兼任著一個教學地目的,培養大家的興趣,讓大家透過研究相關程式碼,增長這方面的知識。

和蘇蘭一起將波士頓玩了個遍之後,許毅再次安靜了下來,他覺得這件事應該著手進行了。不能再拖。

許毅並不指望剛開始就能編出一個超越Linux或者Windows的作業系統來,他現在沒有這個能力,他只是決定先做出一個實現了簡單功能地作業系統,一個能夠獨立在裸機上執行的作業系統。

Linux系統下有一整套可以用來進行作業系統開發的工具,非常方便。許毅首先用匯編寫一個Bootloaden程式。這個小程式很重要,正如其名,Boot即啟動的意思。Loaden意為裝載器,Linux下的bootloaden是gnub或lilo,windows則是一個名為ntldn的程式。這個程式的作用是用來把作業系統核心的二進位制程式碼從磁碟複製到記憶體中(只有在記憶體中才能得到執行)。還用來設定一些系統初始化的資訊。因為許毅打算編寫的作業系統是32位地,所以它還有一個功能——將系統從16位的真實模式跳轉進入32位的保護模式。(電腦剛啟動的時候是16痊的,被稱為真實模式RM)

電腦剛啟動的時候,程式的指標IP是指向BIOS程式地,所以首先執行的是BIOS系統(這是一個固化在FLASH晶片中的小程式),它負責監測系統地所有資源,並把狀態,如記憶體大小、硬碟有多少等等,存入記憶體中指定的位置,在BIOS的最後,它會檢查所有可以啟動的磁碟裝置,如果找到要啟動的磁碟(BIOS中的啟動順序)的第0磁軌,第一個扇區地511和512位元組寫著0x55和0xaa資料(可啟動標誌)。BIOS就會將該扇區的512位元組內容複製進記憶體的ox7c00處,並跳轉到該處執行。這也就是為什麼所有磁碟(包括軟盤和硬碟)的第0磁軌的第一扇區為啟動扇區的原因,如果該扇區出現了物理損壞,那麼這個磁碟將永遠無法作為啟動盤使用。

簡單來說,bootloaden程式地作用就是充當中間聯絡人,將作業系統“請”到記憶體當中去執行。

由於許毅用的編譯器是GCC,而GCC並不能直接生成16位的程式碼,所以許毅只能用匯編語言來編寫這個bootloaden了,等機器進入32位的保護模式之後,許毅再用C語言來開發其他核心程式碼。

實際上,有了這個程式,就能夠將系統啟動了。可以在裡面直接透過中斷來操作顯示卡,例如直接往視訊記憶體地址中移進去一個字母中,顯示器中就會列印出這個字母,這相當於是一個最為簡單的作業系統了,只不地這個作業系統能夠完成的功能非常簡單,只是在顯示器中顯示一個字母B而已。但是,這個就已經可以在裸機上成功執行了。要想複雜一點,就是另外編寫核心程式碼,用一個跳轉語句,跳到核心程式碼的入口地址,這樣就可以進入其他操作了。(通常是一個大迴圈,這樣除百是人工退出,不然它就會一直這樣執行著)

許毅已經有這樣的簡單系統的編寫經驗,所以現在編寫起來也是輕車熟路的,一路編寫下來,基本上沒有遇到什麼大的阻礙,只是偶爾有些地方忘記了一些細節,到網路上查到了相關資料就搞定了。

只有見到實在的東西才能夠調動大家的積極性。

許毅最後不但在裡面實現了檔案系統,還完成了最基本的圖形介面,支援PS/2滑鼠,技能VEGA20另外還支援符合windows標準的16位BMP格式,支援標準101鍵盤,中英點陣字型檔和800*600的16位色顯模式,最後,許毅甚至在裡面實現了一個簡單的推箱子游戲(就是一個十字型的視窗,一個上人在中間四周都是箱子)

許毅在虛擬機器中執行著這個小型作業系統,四步完成那個拄箱子游戲,心中頗有成就感。

總得來說,這個作業系統已經初具雛形,檔案系統、記憶體管理、中斷呼叫、GDT、IDT等等全部都已經實現。

許毅在駭客學院專門新開闢了一個作業系統專區,悄悄地將這個命名為StuOSS的作業系統原始碼傳了上去,另外貼上一些螢幕截圖。最後還詳細寫了一個怎麼利用虛擬機器來執行這個作業系統的教程。

駭客學院的作業系統板塊悄悄開張了,事前沒有任何通知。大家也已