使用的代碼包爲cosmos14395.zip,如下把COSMOS里程碑1簡稱爲COSMOS MS1或 MS1 COSMOS
申請:因爲本篇內容涉及的技術的東西太多,小弟水平有限,若有思想認識上的錯誤,歡迎你們指正。
對於IBM-PC兼容機的硬件啓動流程我目前理解是這樣的:通電->BIOS初始化與自檢->CPU初始化->加載硬盤的0磁道0柱面1扇區的內容進內存並開始執行這一部分的內容。到此,硬件的過程—注意是硬件--就走完了,剩下的就都交給0磁道0柱面1扇區的程序來執行,這裏面的東西就是咱們程序員要作的東西了。
這裏若是沒有操做系統的話,那麼從0磁道0柱面1扇區開始執行的程序就是咱們本身寫的程序,但這樣一次只能執行一個,很浪費硬件資源,若是要換別的程序的話還得從新啓動一次硬件,因此咱們但願這個首先執行的程序能夠一直運行,而後再向這個程序發出命令,讓這個程序來執行咱們想要執行的程序,這樣就能夠不用重啓硬件就能運行多個程序了,慢慢地這個咱們對其發出命令讓其運行別的程序的程序就變成了咱們所謂的操做系統了。
隨着操做系統的發展,現代操做系統的通常都須要作如下工做:
1. 進程管理
2. 內存管理
3. IO管理
4. 文件系統管理
(以上爲參考《操做系統的設計與實現》一書)
對於咱們此次要分析的COSMOS MS1,那麼他實現了以上哪些功能呢,嚴格來講都沒實現(第一個里程碑版本嘛,能運行就能夠了),要說的話能夠說實現了一些IO管理上的功能,如向顯示器上輸出字符和相應鍵盤輸入。下面經過一副圖來講一下COSMOS
MS1操做系統(即PC機軟件部分)的啓動過程:linux
再說明一下,本版本使用VS2010編譯以後彷佛沒法正常運行,這裏是我我的的理解:里程碑1的程序仍是VS2008的項目,若是使用VS2010的朋友在打開項目以後會提示升級,升級完後編譯會出現部分沒法編譯經過的狀況,是由於升級以後部分項目升級成使用.net 4.0的框架,而部分項目仍是用的.net 2.0或3.5的framework,當使用.net 2.0或.net 3.5的項目引用了.net 4.0項目的程序集時,是沒法經過編譯的,這時儘管把這些項目該爲使用.net 4.0的framework後能夠正常啓動進到編譯界面,可是編譯操做系統的過程當中會出現「未將引用設置到對象」錯誤,緣由不明………..
好了,瞭解了流程就直接上代碼,跟着代碼逐行進行說明,找到Program文件,定位到如下代碼git
主要分析一下Kernel.Boot.Default()這個函數幹了什麼事,前面一大堆理論中關於CPU,內存,IO初始化這些的操做都是在這裏面完成的程序員
再看一下Cosmos.Hardware.PC.Global.Init()裏面作了什麼編程
這樣就算是基本完成了,固然,對於不一樣的操做系統,初始化的流程可能會不同,這得根據實際的硬件狀況來決定。app
以上的初始化函數中大量調用了這個操做:void Write8(UInt16 aPort, byte aData)框架
這個是直接往端口中寫入數據,根據IBM-PC兼容機的端口說明,對不一樣的端口進行初始化其實就是往相應的端口中寫入不一樣的數據(但一般都是寫入數據0)dom
這裏完了以後咱們再跳回到上一層函數,看看Keyboard.Initialize()裏面作了什麼ide
好了,硬件的設置(初始化)總算完了,讓咱們回到最上層的函數看看接下來的是什麼。函數
在這以後操做系統的任務就算是基本完成了,剩下的就應該是程序的調度運行的工做了,從源代碼中能夠看到COSMOS是直接運行了一個猜數的程序,咱們看一下運行截圖:工具
好了,COSMOS MS1的啓動流程和運行到這裏就算是結束了。可是還有幾個問題沒有解開,好比:System.Console.WriteLine(string)這個函數。對於在.net framework環境下編程的朋友可能尚未意識到,問題在什麼地方。
首先System.Console.WriteLine是向顯示器上顯示字符,可是在咱們剛纔的代碼中沒有看到與顯示器設備初始化相關的代碼,在.net 環境下之因此可以向顯示器上輸出字符是由於.net framework在程序啓動以前已經進行了這部份相關代碼的加載,當程序中遇到System.Console.WriteLine相似的函數調用時,實際上是調用的.net framework中的代碼來實現的,這就是爲何咱們在編寫.net 程序的時候須要引入相應的dll,這些加載代碼就在這些dll裏面。
可是COSMOS是獨立於.net framework來運行的,也就是說COSMOS在運行時是沒加載過任何.net framework中的dll,這部分功能的實現COSMOS是經過編寫本身的程序庫(Plugs)來完成的,這個部分上一篇文章介紹IL2CPU編譯器時小小地涉及了一下,更多的內容將在下一遍文章中說明,呵呵(誒呀!誰扔過來的雞蛋!)
歡迎你們實踐學習交流,任何意見和錯誤都歡迎指出,一塊兒學習,共同進步 J
廣告時間:歡迎光臨小弟的淘寶話費充值小店捧場,呵呵
參考資料:
Intel Vol 3A System Programming Guide Part 1