一個桌面級的操作系統(tǒng)代碼規(guī)模在千萬行數(shù)量級,如果加上配套軟件,總規(guī)模應(yīng)該超過一億行,如果再加上一個完整的軟件生態(tài)系統(tǒng),那么總規(guī)模應(yīng)該不少于10億行
創(chuàng)新互聯(lián)是專業(yè)的遼陽縣網(wǎng)站建設(shè)公司,遼陽縣接單;提供做網(wǎng)站、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行遼陽縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
Windows XP 有40,000,000行代碼
Windows Vista 大約50,000,000行代碼
Windows 7 有50,000,000行代碼
作為曾經(jīng)的碼農(nóng)來回答一下
開發(fā)一個類似win的成熟的桌面級操作系統(tǒng),難度高過眾所周知的曼哈頓計劃和登月計劃,是不是覺得有些夸張?但事實(shí)可能就是這樣。
vista代碼行數(shù)5000萬行,打印出來是170萬頁A4紙,耗資超過200億美元,這還是有了微軟那么多年積累,只開發(fā)vista的費(fèi)用,win7 4000萬行,win10數(shù)據(jù)沒有公布,但行業(yè)預(yù)估在5000到7000萬行。
win7公開的開發(fā)工作人數(shù)是23個小組,每個小組約40人,分別負(fù)責(zé)windows中的每個模塊的開發(fā),比如設(shè)備和媒體,文件系統(tǒng),桌面圖形等等,這還是在vista基礎(chǔ)上的開發(fā),并不是從頭開發(fā)。
windows的發(fā)展已經(jīng)有了30年,中間的積累,走的彎路都不是外人可以輕易得知的。
我國的自助操作系統(tǒng),實(shí)際都是開源系統(tǒng)的二次開發(fā),遠(yuǎn)不是從0開始的建設(shè),而且軟件的開發(fā)并不是1+1=2那么簡單。不是說你能蓋5層樓,我給你投兩倍人力物力你就能蓋出十層樓來。
說個有趣的小故事吧,微軟的excel現(xiàn)在已經(jīng)成為了祖?zhèn)鞔a,里邊存在很多無用代碼,但微軟自己都不敢把excel重新寫一遍。
微軟沒有公布內(nèi)核和源代碼,所以你無法基于Windows再創(chuàng)一個OS,但你可以重新合成其相關(guān)文件,下面將一步步教你!
下載一個叫做NTlite的軟件
在左上角添加Windows的ISO文件(不同的版本路徑不一樣,自己百度一下你的Windows版本的ISO文件的路徑)
雙擊加載文件
盡情定制吧!
如果你對純文字的教程感到困惑或者不知如何操作,那么你可以嘗試訪問以下幾個網(wǎng)站
網(wǎng)站1WikiHow
(網(wǎng)站1 是中文網(wǎng)站,第二個是Wikihow國際版里的相關(guān)教程,需要翻譯?。?/p>
90%的C語言+10%的匯編語言
windows系統(tǒng)都主要是用C語言編寫的
我們在用windows平臺上編程的時候,要調(diào)用系統(tǒng)API(應(yīng)用程序接口),這些接口封裝在系統(tǒng)的.dll(動態(tài)鏈接庫)里面,所有的API函數(shù)都是32位平臺上的C函數(shù),從windows3.0一直windows95,到現(xiàn)在的win2003,都是基于C函數(shù)庫的程序集,所以用C函數(shù)編出的系統(tǒng)程序系統(tǒng)執(zhí)行效率最高,當(dāng)然在底層的一些調(diào)用,不排除有些是用匯編編的,但內(nèi)核大多是用C做的。
另:MFC只是windows系統(tǒng)上API函數(shù)的封裝,基于面向?qū)ο笤?,服?wù)于GUI程序設(shè)計,MFC從AFX發(fā)展而來,已有十多年的歷史,最新的MFC6.0,那是設(shè)計基于windows系統(tǒng)程序的,而不是用來編寫操作系統(tǒng)本身,但也不能完全這樣說,系統(tǒng)上有些服務(wù)(可以說很多,比如時間)是用MFC做的。
微軟的Windows系統(tǒng)是伴隨我們已久的老朋友了,大多數(shù)人都是一代一代Windows的用上來,老用戶幾乎都形成一個共識,就是微軟的系統(tǒng)有一代會很好,也有一代會很糟糕,比如Windows XP、Windows 7就很受歡迎,而Windows 2000、Windows Vista就是一個悲傷的故事。那么,微軟的Windows系統(tǒng)用了這么久,究竟它有多少行代碼呢?
Microsoft Windows問世于1985年,起初僅僅是Microsoft-DOS模擬環(huán)境,后續(xù)的系統(tǒng)版本由于微軟不斷的更新升級,不但易用,也慢慢的成為家家戶戶人們最喜愛的操作系統(tǒng)。下面我們從代碼行數(shù)、開發(fā)難度,參與人員的數(shù)量,開發(fā)的時間長度等角度來說說,一個windows系統(tǒng)有多復(fù)雜。
Windows XP大約40,000,000行代碼。
Windows Vista 大約50,000,000行代碼,算上修正掉的代碼估計超過一億行。內(nèi)部版本超過上千個,每個版本都有所測試。為其做出貢獻(xiàn)的正式工合約工臨時工超過數(shù)萬人。大概的工程量可能和胡夫金字塔相當(dāng)。
Windows 7 大約50,000,000行代碼。Windows 7開發(fā)的時候有23個小組,每個小組約40人,也就是將近1000人。這僅僅是Windows團(tuán)隊(duì)的人數(shù),其余為其做出貢獻(xiàn)的更是數(shù)不勝數(shù)。
幾千萬行代碼的工作量是個什么概念?舉個參照系吧,很多人在用的金山的WPS代碼行數(shù)約有150萬行,而金山軟件公司重寫這個級別的辦公軟件WPS,用了3年時間。
再比如微軟在4年前的研發(fā)成本超過100億美元,在開發(fā)Windows Vista的所花費(fèi)的研發(fā)費(fèi)用更是超過了恐怖的200億美元。Linux內(nèi)核開發(fā)根據(jù)人員投入的規(guī)模測算,也耗資數(shù)有十億美元。
假如一個桌面級的操作系統(tǒng)代碼規(guī)模在千萬行數(shù)量級,如果加上配套軟件,總規(guī)模應(yīng)該超過一億行,如果再加上一個完整的軟件生態(tài)系統(tǒng),那么總規(guī)模應(yīng)該不少于十億行。這還是成熟的系統(tǒng),再加上調(diào)試精簡前更多。再加上各個功能之間需要兼容性,可維護(hù)性,可管理性等這些隨著代碼的越來越多可推敲,需考慮的問題也會越來越多,是項(xiàng)技術(shù)難度非常大的工作!你覺得呢?
如何從零開始寫一個簡單的操作系統(tǒng)?
看了這個:從零開始寫一個簡單的操作系統(tǒng) 求指教。
知乎用戶 學(xué)生生涯只剩半年。
548 人贊同
終于可以來回答這道題了……
一年多前,也就是大一下學(xué)期末的時候,我看到這個問題下 @fleuria 叔的答案,然后看了 F 叔給的這個鏈接 基于 Bochs 的操作系統(tǒng)內(nèi)核實(shí)現(xiàn) ,當(dāng)然是什么都看不懂,除了驚詫之外也了解了一件事情:一個人寫一個簡單的操作系統(tǒng)內(nèi)核是一件非常帥氣并且可行的事情。
于是我開始寫了,那時候我的水平大概是:只會做 C 語言的習(xí)題,編譯的話只知道按 F9,匯編知道常見的指令,另外會一點(diǎn)點(diǎn)的 Win 32 編程,能流暢使用 Windows。
一開始我找了《30 天自制操作系統(tǒng)》來看,每天看書,然后把從書里把代碼打出來,一次一次地編譯運(yùn)行。因?yàn)橐瑫r寫匯編和 C,所以從那時候起就開始用 vim。
在啃完了差不多半本書后,開始覺得沒意思了……因?yàn)橛X得作者為了讓內(nèi)容更簡單而省略了太多細(xì)節(jié)。也看了于淵的《Orange‘s 一個操作系統(tǒng)的誕生》,依然沒看下去:匯編用得太多了。期間也曾斗膽發(fā)郵件給 F叔,然后他推薦了 Bran's Kernel Development Tutorial 這個教程,于是我就從這教程重新開始了: 「30天自制操作系統(tǒng)」 Stop 「OS67 」 Start
那時候大概是大二上學(xué)期,于是在 github 上又開了一個 repo,一開始在 Windows 下開發(fā),后來又切換到了 Linux 下,因?yàn)?Bran's 用的 bootloader 是 Grub,不符合我的初衷,所以就自己寫了一個,之后便跟一路教程寫,跨過了保護(hù)模式這道坎,完成了基本的設(shè)備驅(qū)動。
在完成 Bran's 后,我又部分參考了 寫一個操作系統(tǒng)內(nèi)核有多難?大概的內(nèi)容、步驟是什么? - To淺墨的回答 中推薦的:hurley25/hurlex-doc · GitHub 文檔,完成了一些簡單的調(diào)試函數(shù)和庫函數(shù),printk 和內(nèi)存分配。
事實(shí)證明,盡早寫好調(diào)試函數(shù)諸如 panic, assert 和 printk 是非常重要的。 大量地使用有助于你盡快地發(fā)現(xiàn) bug (當(dāng)然前提是這些函數(shù)本身不能有 bug)。
看完了 hurlex-doc 該看的部分后,很長一段時間了都不知道該干嘛好,模仿 hurlex-doc 里的內(nèi)核線程切換也一直出錯。這一情況一直持續(xù)到我開始讀 Xv6, a simple Unix-like teaching operating system 。
如果你去看知乎關(guān)于「自制內(nèi)核」的問題,你會發(fā)現(xiàn) xv6 被反復(fù)地提及并推薦,事實(shí)上它非常值得被推薦:這是我讀完大部分代碼之后真切體會到的。
之前的 Bran‘s 和 hurlex-doc 的篇幅都比較小,我是在電腦和 kindle 上看完的,xv6 相對來說代碼量比較大,有 9000+ 行和一份文檔,之后我又找到了這個:ranxian/xv6-chinese · GitHub xv6 文檔的中文譯版,所以我就去花了十二塊錢學(xué)校打印店打印了一份中文文檔和一份代碼。這又是一個正確的決定,讓我不必對著電腦就能看代碼。
在之后的時間里,我先讀了 xv6 中文件系統(tǒng)相關(guān)的部分,然后改寫它的代碼為我的內(nèi)核添加了一個 類似 Minix 的文件系統(tǒng)。 然后幾乎又照抄了其中了進(jìn)程調(diào)度的部分(做了部分簡化),又在原來的代碼基礎(chǔ)上為添加操作系統(tǒng)的接口,接著寫用戶程序,過程幾乎是「一路順風(fēng)」???xv6 的那段時間也經(jīng)常是處于醍醐灌頂?shù)臓顟B(tài)。
最后我終于在差不多一個月前完成了這個簡陋的操作系統(tǒng)內(nèi)核:
LastAvenger/OS67 · GitHub (沒錯其實(shí)我是來騙 star 的)
歷時一年,一路點(diǎn)亮了不少技能樹(雖然都點(diǎn)得不好),這樣算是「從零開始寫一個簡單的操作系統(tǒng)」么? 跟進(jìn)一步說,有誰不是從零開始的呢?所以想做的話,現(xiàn)在就開始做好了。
這是被「翻爛」了的 xv6 源代碼和中文文檔(其實(shí)是放書包里被磨爛了)
「故事」講完了,接下來說一點(diǎn)經(jīng)驗(yàn)之談吧……
* 知乎上總是有人在討論「做一個玩具編譯器和做一個玩具內(nèi)核何者更有趣」之類的問題,然后總有各種大V 跳出來說內(nèi)核有多 dirty 而編譯器多 clean,事實(shí)上除了 CPU 上的幾個表因?yàn)闅v史原因長得惡心一點(diǎn),內(nèi)核并沒有什么特別 dirty 的地方,另外,想做點(diǎn)什么打發(fā)時間,不過是兩個代碼量稍多的入門項(xiàng)目,有什么好糾結(jié)的?
* 寫內(nèi)核的過程中,你會接觸到一些這輩子大概只會用到一次的知識,A20 線已經(jīng)成為歷史,日常的編程里面也不需要你懂得 GDT IDT 的結(jié)構(gòu)。但是單憑內(nèi)核主要部分部分(文件系統(tǒng),進(jìn)程,內(nèi)存)給你帶來的知識而言,這點(diǎn)冗余是值得的。
* 盡早實(shí)現(xiàn)調(diào)試函數(shù)并大量使用,善于利用 bochs 的內(nèi)置調(diào)試器,能省下你不少時間。
* 有時候覺得書里的做法非常奇怪,你覺得你有更好的做法,一般是你想錯了。(當(dāng)然只是一般)
* 上面說看 xv6 一路順風(fēng)是假的,20% 時間在抄代碼,80% 的時間用來調(diào)試。
* 對我這種能力一般的人來說,「寫內(nèi)核」只是好聽的說法,正確的說法是「抄內(nèi)核」。當(dāng)然,就算是抄一個,也算是受益匪淺了。
* 抄 xv6 的好處在于,即使你的代碼出錯了,你可以堅信,正確的答案肯定在 xv6 的代碼里,或許只是你還沒理解透而已,只要不斷地看和理解,你就離正確的道路越來越近。
最后,感謝 @fleuria 在微博和郵件里的多次幫助, @To淺墨 的 hurlex-doc 文檔,鮮染同學(xué)翻譯的 xv6 中文文檔, @郭家華 完美地解答了我一開始的疑問,讓我在內(nèi)核中得以使用 C 語言。
在 #archlinuxcn 頻道里也得到了很多人的幫助。
發(fā)布于 2015-11-09
邱永臣 喜劇演員,兼開發(fā)工程師
890 人贊同
大二的時候,老師(中山大學(xué)萬海)對我們說:“如果有誰能自己寫一個內(nèi)核出來,那么,他平時可以不來聽課,也不用做平時作業(yè),做出來還能加分,怎么樣,有沒有人有興趣?”
和老師一番討價還價之后,我成為全年級幾百號人里唯一一個自己寫內(nèi)核/整個學(xué)期都不去教室聽課/任何作業(yè)都不做的那個人(代表著我的身邊將沒有可以提供參考的人,任何資料都只能自己找)。
一開始買了《30天自制操作系統(tǒng)》,上面寫著需要軟盤還有其它的模擬器,我的初衷是寫一個可以燒在真機(jī)上一按開機(jī)鍵就能跑起來的那種,所以看了幾頁后就丟開了。后來又找了國人寫的一本,也不是特別符合,也丟開了。
這時我看到了那本教材(俗稱綠寶書),約莫800頁。之后的兩個星期里,我每天泡圖書館,以每小時10頁的速度讀完了它,在上面亂涂亂畫了許多標(biāo)記。800頁的英文書,我從中學(xué)到了大量的基本概念(線程進(jìn)程,內(nèi)存算法,尋址方式等等)。
接著我尋思直接從網(wǎng)絡(luò)上而不是從書上尋找資料,TA師兄給我提供了一個OS Development,我照著上邊的例子,寫了數(shù)以千記的匯編代碼,習(xí)得了匯編技能。
此時,我具備基本的概念知識,對程序的語言也已經(jīng)理解,知道了虛擬機(jī)的調(diào)試方法,差的,就只有對內(nèi)核整體是如何協(xié)作不太明白。于是我去找來老師用于教學(xué)的PintOS,找來MIT那個項(xiàng)目的代碼,還有國內(nèi)一個高校自制的OS(是幾個研究生一起寫的),仔細(xì)研究了一遍,最后開始寫代碼。
在那個學(xué)期里,我放棄了LOL,一心看代碼,寫內(nèi)核,寫各種模塊,將過程記錄在博客上,花了三個月的時間,最終寫出一個具備terminal的內(nèi)核(文件系統(tǒng)沒寫好,時間不夠),可以跑命令,運(yùn)行函數(shù),管理內(nèi)存和進(jìn)程,處理中斷。
--------------------------
這個Tittle非常好,衷心希望不要因?yàn)槟氂械睦碛煞鈿ⅰ?/p>
分享文章:寫一個windows系統(tǒng)的簡單介紹
瀏覽地址:http://jinyejixie.com/article12/hojsgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、響應(yīng)式網(wǎng)站、ChatGPT、網(wǎng)站營銷、網(wǎng)頁設(shè)計公司、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)