在COSMOS中,庫有個特別的叫法,叫作Plugs(插件?)。程序員
前面關於COSMOS編譯的文章中說到,在COSMOS編譯的時候會加載全部的Plugs並進行編譯,而COSMOS全部的Plugs都放在了Cosmos.Kernel.Plugs項目中編程
咱們看到了上文提過的CreateGDT操做,還有Console這個咱們比較熟悉的類型。先看下CreateGDT中的代碼數據結構
能夠看到有一些x86的指令在裏面,由於這是建立x86特有的GDT這個數據結構,這裏直接調用了IL2CPU提供的功能(例如CPUx86.Move)來生成x86的指令。ide
總的來講,在 Cosmos.Kernel.Plugs 裏面,實現和封裝了對硬件操做的大部分功能,而後再由咱們的啓動項目(這裏爲 Cosmos.Shell.Guess )來在不一樣的時間調用,以此來搭建出供程序員使用的一個硬件環境。這個環境對外都是經過開放一些特定的類來給程序員使用,目前來看這些類還只是很底層的操做硬件的類,也許之後會在這一層上再封裝出一層 API 來。(感受這一次本身的截圖不太給力啊……)函數
總共34個,須要編譯器處理的函數以下:學習
由生成的目錄咱們就能很直觀的看出都編譯了那些程序集,這裏最後生成的文件爲13個,但前面咱們看到總共加載了34個程序集來進行處理,這34個程序集在編譯的過程當中會被IL2CPU有選擇地進行合併,最後輸出到上面相應的13個文件裏面。剩下的就是編譯這些彙編程序文件爲二進制文件便可,以後的內容歡迎參看該系列的第二篇文章Jui
最後,小小地揭祕一下(若是這也算是祕密的話~嘿嘿):咱們能夠看到,在Cosmos.Shell.Guess這個項目中,咱們使用的Console這個類是.net framework中定義的類,同時咱們本身定義的Console類中的方法和屬性的名稱和.net framework中定義的如出一轍,這個只要在編譯的時候制定是使用.net framework中的類仍是使用咱們本身定義的類就能夠實現跨平臺的目的,這就是跨平臺的祕密,這裏跨的是.net平臺和x86平臺,咱們也能夠本身實現arm下的Console類來實現跨arm的平臺(啊呀,誰拿磚拍的我~~)。
再小小地總結一下開發一個操做系統須要的一些前期工做
spa
到這裏我以爲操做系統開發的大體思路應該都理清楚了,剩下的就是學習硬件如何工做以及如何運行,完了以後再編寫出相應的代碼庫對相應的硬件進行操做,同時,根據教科書上所說,再實現進程的調度管理、硬件IO管理、文件系統等功能,一個基本的操做系統就算是出來了。整個開發流程就是:寫對硬件操做的代碼(這些代碼有時就被稱爲庫,在COSMOS中成爲Plug)->調用對硬件操做的代碼(庫)來實現對硬件的管理,不知道這算不算是打通了操做系統開發的任督二脈(仍是我的意見,歡迎拍磚)操作系統
常規廣告時間:歡迎光臨小弟的淘寶話費充值小店捧場,呵呵.net
參考資料: