第182章操作係統計劃(下)
許毅並不打算編寫基於linux核心代碼的操作係統,因為他認為,雖然linux遵循gpl開源協議,但實際上是存在隱蔽的知識產權陷阱的。實際上,linux的原作者linustorvalds始終都沒有放棄對核心程序版權的要求,也就是說,隻要linus願意,他可以在任何時間收回linux的開放協議,將其重新變為獨家的專利。或者,他完全有自由隨時修正軟件的許可證條款,將一些限製寫入協議中,事實上linus將linux轉向gpl協議也經曆了這樣一個過程。這裏,很明顯地存在一個非常重要的問題――如果有朝一日,linus將操作係統的內核重新封閉起來,那基於那個核心的所有軟件產業都得摔上一個大跟頭。
這並不是危言聳聽,仔細分析,linux核心的一部分被判定存在侵權的可能性的確存在。事實上,linux的代碼侵權具有多種潛在的可能性,而且linux的開發機製和代碼審核流程並不像自從問世起就遭受版權問題磨練的freebsd等開放源代碼操作係統那樣嚴謹。
自己動手,豐衣足食,最可靠的還是自己編寫。
許毅知道自己一個人的能力有限,所以他要做的工作,主要是一個引導作用。就如同linus一樣,挑一個頭,讓大家一起參與到這個項目中來。不過目前到底有多少國人在研究這個,許毅也不清楚,不過總體估計,人數應該不會太多,而且,大多數人應該還處於一個非常低的水平,很多技術並沒有掌握。他在網絡上搜索了一下相關網站,中文方麵幾乎沒有任何一個有關這類信息的網站,隻有一個匯編網站稍微提到了一下這方麵的資料。這也就意味著,並不是許毅現在提出這樣一個項目,大家立刻就能參與到這個計劃中來,更為重要的是,還兼任著一個教學的目的,培養大家的興趣,讓大家通過研究相關代碼,增長這方麵的知識。
和蘇蘭一起將波士頓玩了個遍之後,許毅再次安靜了下來,他覺得這件事應該著手進行了,不能再拖。
許毅並不指望剛開始就能編出一個超越linux或者ux係統下有一整套可以用來進行操作係統開發的工具,非常方便。許毅首先用匯編寫了一個bootloader程序。這個小程序很重要,正如其名,boot即啟動的意思,loader意為裝載器,linux下的bootloader是grub或lilo,windows則是一個名為ntldr的程序。這個程序的作用是用來把操作係統內核的二進製代碼從磁盤複製到內存中(隻有在內存中才能得到執行),還用來設置一些係統初始化的信息。因為許毅打算編寫的操作係統是32位的,所以它還有一個功能――將係統從16為的實模式跳轉進入32為的保護模式。(電腦剛啟動的時候是16為的,被稱為實模式rm)
電腦剛啟動的時候,程序的指針ip是指向bios程序的,所以首先執行的是bios係統(這是一個固化在sh芯片中的小程序),它負責監測係統的所有資源,並把狀態,如內存大小、硬盤有多少等等,存入內存中指定的位置,在bios的最後,它會檢查所有可以啟動的磁盤設備,如果找到要啟動的磁盤(bios中的啟動順序)的第0磁道,第一個扇區的511和512字節寫著0x55和0xaa數據(可啟動標誌),bios就會將該扇區的512字節內容複製進內存的0x7c00處,並跳轉到該處執行。這也就是為什麽所有磁盤(包括軟盤和硬盤)的第0磁道的第一扇區為啟動扇區的原因,如果該扇區出現了物理損壞,那麽這個磁盤將永遠無法作為啟動盤使用。
簡單說來,bootloader程序的作用就是充當中間聯絡人,將操作係統“請”到內存當中去執行。
由於許毅用的編譯器是,而並不能直接生成16為的代碼,所以許毅隻能用匯編語言來編寫這個bootloader了,等機器進入32位的保護模式之後,許毅再用c語言來開發其他內核代碼。
實際上,有了這個程序,就能夠將係統啟動了。可以在裏麵直接通過中斷來操作顯卡,例如直接往顯存地址中移進去一個字母“b”,顯示器中就會打印出這個字母,這相當於是一個最為簡單的操作係統了,隻不過這個操作係統能夠完成的功能非常簡單,隻是在顯示器中顯示一個字母b而已。但是,這個就已經可以在裸機上成功運行了。要想再複雜一點,就是另外編寫內核代碼,用一個跳轉語句,跳到內核代碼的入口地址,這樣就可以進入其他操作了。(通常是一個大循環,這樣除非是人工退出,不然它就會一直這樣運行著)
許毅已經有這樣的簡單係統的編寫經驗,所以現在編寫起來也是輕車熟路的,一路編寫下來,基本上沒有遇到什麽大的阻礙,隻是偶爾有些地方忘記了一些細節,到網絡上查了相關資料就搞定了。
隻有見到實在的東西才能夠調動大家的積極性。
許毅最後不但在裏麵實現了文件係統,還完成了最基本的圖形界麵,支持ps/2鼠標,支持vega2.0另外還支持符合p格式,支持標準101鍵盤,中英點陣字庫和800600的16為色顯模式,最後,許毅甚至在裏麵實現了一個簡單的推箱子遊戲(就是一個十字型的窗口,一個小人在中間四周都是箱子)
許毅在虛擬機中運行著這個小型操作係統,四步完成那個推箱子遊戲,心中頗有成就感。
總得來說,這個操作係統已經初具雛形,文件係統、內存管理、中斷調用、gdt、idt等等全部都已經實現。
許毅在黑客學院專門新開辟了一個操作係統專區,悄悄地將這個命名為stuos的操作係統源代碼傳了上去,另外貼上了一些屏幕截圖。最後還詳細寫了一個怎麽利用虛擬機來運行這個操作係統的教程。
黑客學院的操作係統板塊悄悄開張了,事前並沒有任何通知。大家也已經習慣了這樣,在以前,那些後來增加的板塊都是這樣開張的。看到新板塊,大家都表現出了極大的興趣,因為每次開始一個新版塊都會有新的東西出來。前兩次的板塊還分了兩個分站出去,這次又會怎麽樣呢?
stuos操作係統?!大家有些奇怪,stuos是一個什麽操作係統,甚至還專門開了一個板塊?在黑客學院中,已經有linux操作係統和windows操作係統專區了,其他操作係統因為使用人數過少而搞了一個綜合的區域。
懷著疑惑的心情,大家點開了這個新開設的板塊,裏麵隻有幾個新發的帖子,大家首先點開了那個頂置的高亮顯示的帖子。
stuos竟然是xyz編寫的!他終於要開始編寫操作係統了嗎?!
大家在驚訝之餘,卻又理所當然。實際上,這個問題已經被很多人提出過了。現在黑客學院幾乎集中了全國的優秀的計算機人才,早就該組織一個這樣的項目了,編寫中國自己的操作係統。
大家看到了帖子中的屏幕截圖,顯然被那些華麗的效果給震住了,他們沒想到,xyz不聲不響的就弄出了個圖形操作係統!
無論是對這方麵感興趣還是不感興趣的人都紛紛下載了那個鏡像包,都按照帖子中描述的步驟,開始進行虛擬機模擬,他們要親自觀看效果。
最後有不少人看到了運行的效果,不過他們有些小失望,因為發現這個係統原來並沒有想像中的那樣好,隻是實現了一個桌麵和一個小遊戲。
當然,失望的人自然是那些外行人,那些對這方麵感興趣的人則不同,他們饒有興致地開始閱讀許毅寫出來的相關教程和源代碼。因為考慮到教學目的,這些源代碼都寫得非常規範,使用模塊化格式,在重要的地方都做了必要的注釋,大家看起來非常輕鬆。
其中講述的很多資料,現在都非常難找到,就算是找到了沒有人幫助也很難看懂。現在,許毅結合實例講解其中的相關知識,讓大家感到非常高興。這個操作係統涉及的知識並不很複雜,大家在總體上有了一個大致的概念,極大地刺激了他們想要進一步學習相關知識的神經。原來,一向都非常神秘的操作係統是這樣編寫出來的!大家按照教程中的步驟,很順利地完成了自己的第一個bootloader,看著虛擬機顯示器中大迎出來的“helloworld!”,他們心中的激動之情無以言表。
於是,黑客學院中刮起了一陣操作係統學習風潮,很多人投入到這個項目的學習和開發上來。
許毅並不打算編寫基於linux核心代碼的操作係統,因為他認為,雖然linux遵循gpl開源協議,但實際上是存在隱蔽的知識產權陷阱的。實際上,linux的原作者linustorvalds始終都沒有放棄對核心程序版權的要求,也就是說,隻要linus願意,他可以在任何時間收回linux的開放協議,將其重新變為獨家的專利。或者,他完全有自由隨時修正軟件的許可證條款,將一些限製寫入協議中,事實上linus將linux轉向gpl協議也經曆了這樣一個過程。這裏,很明顯地存在一個非常重要的問題――如果有朝一日,linus將操作係統的內核重新封閉起來,那基於那個核心的所有軟件產業都得摔上一個大跟頭。
這並不是危言聳聽,仔細分析,linux核心的一部分被判定存在侵權的可能性的確存在。事實上,linux的代碼侵權具有多種潛在的可能性,而且linux的開發機製和代碼審核流程並不像自從問世起就遭受版權問題磨練的freebsd等開放源代碼操作係統那樣嚴謹。
自己動手,豐衣足食,最可靠的還是自己編寫。
許毅知道自己一個人的能力有限,所以他要做的工作,主要是一個引導作用。就如同linus一樣,挑一個頭,讓大家一起參與到這個項目中來。不過目前到底有多少國人在研究這個,許毅也不清楚,不過總體估計,人數應該不會太多,而且,大多數人應該還處於一個非常低的水平,很多技術並沒有掌握。他在網絡上搜索了一下相關網站,中文方麵幾乎沒有任何一個有關這類信息的網站,隻有一個匯編網站稍微提到了一下這方麵的資料。這也就意味著,並不是許毅現在提出這樣一個項目,大家立刻就能參與到這個計劃中來,更為重要的是,還兼任著一個教學的目的,培養大家的興趣,讓大家通過研究相關代碼,增長這方麵的知識。
和蘇蘭一起將波士頓玩了個遍之後,許毅再次安靜了下來,他覺得這件事應該著手進行了,不能再拖。
許毅並不指望剛開始就能編出一個超越linux或者ux係統下有一整套可以用來進行操作係統開發的工具,非常方便。許毅首先用匯編寫了一個bootloader程序。這個小程序很重要,正如其名,boot即啟動的意思,loader意為裝載器,linux下的bootloader是grub或lilo,windows則是一個名為ntldr的程序。這個程序的作用是用來把操作係統內核的二進製代碼從磁盤複製到內存中(隻有在內存中才能得到執行),還用來設置一些係統初始化的信息。因為許毅打算編寫的操作係統是32位的,所以它還有一個功能――將係統從16為的實模式跳轉進入32為的保護模式。(電腦剛啟動的時候是16為的,被稱為實模式rm)
電腦剛啟動的時候,程序的指針ip是指向bios程序的,所以首先執行的是bios係統(這是一個固化在sh芯片中的小程序),它負責監測係統的所有資源,並把狀態,如內存大小、硬盤有多少等等,存入內存中指定的位置,在bios的最後,它會檢查所有可以啟動的磁盤設備,如果找到要啟動的磁盤(bios中的啟動順序)的第0磁道,第一個扇區的511和512字節寫著0x55和0xaa數據(可啟動標誌),bios就會將該扇區的512字節內容複製進內存的0x7c00處,並跳轉到該處執行。這也就是為什麽所有磁盤(包括軟盤和硬盤)的第0磁道的第一扇區為啟動扇區的原因,如果該扇區出現了物理損壞,那麽這個磁盤將永遠無法作為啟動盤使用。
簡單說來,bootloader程序的作用就是充當中間聯絡人,將操作係統“請”到內存當中去執行。
由於許毅用的編譯器是,而並不能直接生成16為的代碼,所以許毅隻能用匯編語言來編寫這個bootloader了,等機器進入32位的保護模式之後,許毅再用c語言來開發其他內核代碼。
實際上,有了這個程序,就能夠將係統啟動了。可以在裏麵直接通過中斷來操作顯卡,例如直接往顯存地址中移進去一個字母“b”,顯示器中就會打印出這個字母,這相當於是一個最為簡單的操作係統了,隻不過這個操作係統能夠完成的功能非常簡單,隻是在顯示器中顯示一個字母b而已。但是,這個就已經可以在裸機上成功運行了。要想再複雜一點,就是另外編寫內核代碼,用一個跳轉語句,跳到內核代碼的入口地址,這樣就可以進入其他操作了。(通常是一個大循環,這樣除非是人工退出,不然它就會一直這樣運行著)
許毅已經有這樣的簡單係統的編寫經驗,所以現在編寫起來也是輕車熟路的,一路編寫下來,基本上沒有遇到什麽大的阻礙,隻是偶爾有些地方忘記了一些細節,到網絡上查了相關資料就搞定了。
隻有見到實在的東西才能夠調動大家的積極性。
許毅最後不但在裏麵實現了文件係統,還完成了最基本的圖形界麵,支持ps/2鼠標,支持vega2.0另外還支持符合p格式,支持標準101鍵盤,中英點陣字庫和800600的16為色顯模式,最後,許毅甚至在裏麵實現了一個簡單的推箱子遊戲(就是一個十字型的窗口,一個小人在中間四周都是箱子)
許毅在虛擬機中運行著這個小型操作係統,四步完成那個推箱子遊戲,心中頗有成就感。
總得來說,這個操作係統已經初具雛形,文件係統、內存管理、中斷調用、gdt、idt等等全部都已經實現。
許毅在黑客學院專門新開辟了一個操作係統專區,悄悄地將這個命名為stuos的操作係統源代碼傳了上去,另外貼上了一些屏幕截圖。最後還詳細寫了一個怎麽利用虛擬機來運行這個操作係統的教程。
黑客學院的操作係統板塊悄悄開張了,事前並沒有任何通知。大家也已經習慣了這樣,在以前,那些後來增加的板塊都是這樣開張的。看到新板塊,大家都表現出了極大的興趣,因為每次開始一個新版塊都會有新的東西出來。前兩次的板塊還分了兩個分站出去,這次又會怎麽樣呢?
stuos操作係統?!大家有些奇怪,stuos是一個什麽操作係統,甚至還專門開了一個板塊?在黑客學院中,已經有linux操作係統和windows操作係統專區了,其他操作係統因為使用人數過少而搞了一個綜合的區域。
懷著疑惑的心情,大家點開了這個新開設的板塊,裏麵隻有幾個新發的帖子,大家首先點開了那個頂置的高亮顯示的帖子。
stuos竟然是xyz編寫的!他終於要開始編寫操作係統了嗎?!
大家在驚訝之餘,卻又理所當然。實際上,這個問題已經被很多人提出過了。現在黑客學院幾乎集中了全國的優秀的計算機人才,早就該組織一個這樣的項目了,編寫中國自己的操作係統。
大家看到了帖子中的屏幕截圖,顯然被那些華麗的效果給震住了,他們沒想到,xyz不聲不響的就弄出了個圖形操作係統!
無論是對這方麵感興趣還是不感興趣的人都紛紛下載了那個鏡像包,都按照帖子中描述的步驟,開始進行虛擬機模擬,他們要親自觀看效果。
最後有不少人看到了運行的效果,不過他們有些小失望,因為發現這個係統原來並沒有想像中的那樣好,隻是實現了一個桌麵和一個小遊戲。
當然,失望的人自然是那些外行人,那些對這方麵感興趣的人則不同,他們饒有興致地開始閱讀許毅寫出來的相關教程和源代碼。因為考慮到教學目的,這些源代碼都寫得非常規範,使用模塊化格式,在重要的地方都做了必要的注釋,大家看起來非常輕鬆。
其中講述的很多資料,現在都非常難找到,就算是找到了沒有人幫助也很難看懂。現在,許毅結合實例講解其中的相關知識,讓大家感到非常高興。這個操作係統涉及的知識並不很複雜,大家在總體上有了一個大致的概念,極大地刺激了他們想要進一步學習相關知識的神經。原來,一向都非常神秘的操作係統是這樣編寫出來的!大家按照教程中的步驟,很順利地完成了自己的第一個bootloader,看著虛擬機顯示器中大迎出來的“helloworld!”,他們心中的激動之情無以言表。
於是,黑客學院中刮起了一陣操作係統學習風潮,很多人投入到這個項目的學習和開發上來。