設計一個全新的計算機操作系統需要哪些知識?

作為一名計院軟體工程的大一學生,在日常的電腦操作系統(Win7/10)的使用中,一些體驗有著自己更喜歡的想法,想通過業餘時間逐步學習,做出一個自己的操作系統,想給自己五年的時間來完成這個DIY的計算機操作系統,作為一個萌新,請教各位大神我應該在學好自身課程的情況下學習哪些相關的知識

附學校開設課程(已刪減部分公共基礎課程,如圖)

看到一個問題

開發一個 Windows 級別的操作系統難度有多大?

說明:會參考開源操作系統,想作為一個興趣來逐步實現


我與題主也有一樣的想法,不過最多只是自己照貓畫虎。要設計一個與現有系統不同的新系統難度很大。所以,自己照於淵的書里自己仿了個。為了不是簡單的複製粘貼,我寫了點注釋,看到不懂的地方到處找資料。

在專欄里寫了點東西。- 【構建操作系統】Hello world! https://zhuanlan.zhihu.com/p/25819125

五年的話,可以做到起碼像OS67那樣的水平,包括文件讀寫,多進程,bash等。

最重要的就是不能中途放棄。。我不清楚題主是否因為心血來潮。。我上學時也想做編譯器做UI做遊戲做網站做資料庫做物理引擎做電路模擬等等,不過一件都沒完成,因為自己基礎還不紮實,寫的代碼太少,懂的思路不夠。後面,我還是從讀輪子哥的源碼庫開始自己造輪子,說實話大佬的C++代碼對我的啟發特別大,他不用stl,從零開始就擼了個GUI,包括了很多東西。呵畢業了才靜下心來一次只想一個項目,然後一步步鑽研把東西做好。

編程興趣是很重要,不過就算寫操作系統寫了幾天就放棄了那也沒關係,畢竟這裡面全是黑魔法和枯燥的代碼,沒幾個人會真正喜歡的,其實也許原因就是不實用。

說了那麼多,其實想法有很好,還是要在一定的編程基礎上,才有可能實現你的想法,如果你的水平還沒法達到要求,那也許就是考驗你的毅力了,這時候會面臨一些抉擇,要不要繼續幹下去 ,還是說回去打打基礎。所以要貴在堅持啊!


前置知識:二選一

現代操作系統 第三版

操作系統概念 第七版

------------------------

簡單實現:二選一(可不做,直接做下面的)

30天自製操作系統

orange『s 一個操作系統的實現

-----------------------

配套課程+lab:

MIT 6.828 6.828 / Fall 2016


我上大學的時候看過 Orange#x27;S:一個操作系統的實現 (豆瓣) 這本書,比較具有實踐性,對提高動手能力和coding水平有很大幫助。但是從就業的角度來說自己寫一個操作系統沒什麼實用性。


我還是那句話,大一好好學英語和高數吧,別好高騖遠折騰這些,浪費時間,也學不到什麼正經東西。


勇氣可嘉


同為操作系統的愛好者,打算在暑假來完成自己的kernel,了結一下自己的執念。

自己做一個操作系統並不算什麼新奇的想法,我自己在收集資料的過程中,發現很多人都自己做過,很多學校的課程都會用實驗來實現kernel的全部或者部分功能。

首先,大一的話建議先了解操作系統的概念。

推薦閱讀:操作系統之哲學原理 (豆瓣)

這本書基本不涉及具體的實現,主要是講述操作系統的概念和設計思想。

同時學習前置課程,《計算機組成原理》《微機原理和介面技術》《數據結構》三門課。

之後可以閱讀現代操作系統(第3版) (豆瓣),有三門課做基礎你已經能夠看懂了,至少看完前五章,如果只是作為應用開發者,對操作系統了解到這個程度已經足夠了,你再思考一下要不要繼續。

如果決定繼續,推薦清華的課程:操作系統 (自主模式)-學堂在線-最大的中文慕課(mooc)平台

認真完成配套的實驗,你就可以像完成填空題一樣,補全完成一個簡單的操作系統。

還可以參考這些資料:

1.Linux操作系統分析(2017秋)-學堂在線-最大的中文慕課(mooc)平台 (中科大孟寧老師的課,主要講了Linux系統調用,進程管理的代碼實現)

2.mit-pdos/xv6-public(MIT的課程也有配套實驗,清華的課程是模仿它來做的)

3.xv6 中文文檔 · GitBooks

4.angwf/walleclass(一位浙大研究生寫的教程)

5.操作系統真象還原 (豆瓣)


還是做做上層的東西,比如系統界面和應用比較實際,再深入點開發一些庫,底層內核都是幾十年難得一遇的大神做的,一般人沒那個精力和能力。多自己的不要太高,同是基於Linux,你能比做得比騙經費的那些人更系統底層一些就很不錯了。


在github上有手把手教寫os的。knowledge上最簡單的你得有一個scheduler,和mmu,簡單的io,中斷什麼的。所以你需要找一個mcu平台,對他的架構和指令集有個概念,你才能跑起來。或者用開源的os改改?


最重要的是想法。你寫來寫去,會發現不過是把教科書轉化成代碼而已。你寫來寫去,會發現你也寫不出比別人更高效的演算法。最後下來等於是做了一套比較難的習題集。

只有你認真的去研究了linux,windows這些系統,你才會對操作系統有想法,進而提出自己的想法。這才是有價值的。但大一沒有太多經歷怎麼能有想法呢?

有回答說好好學高數和英語,是大實話。


編譯器是操作系統之母,

編程語言是操作系統之父。

建議把底層技術搞透,再搞操作系統。


彙編、C、OS Concept,如果跑在x86下,要多翻intel manual,

當然最重要的是你的堅持不懈


調度演算法


不如去學在linux基礎下的桌面環境開發^-_-^


我覺得吧,開發出操作系統並不是大問題,或者說不是主要問題(那也沒看我自己做一個出來,逃ε=ε=ε=┏(゜ロ゜))主要還是軟體問題。一個沒有軟體適配的操作系統完全沒有實用價值。

具體請參考巨硬的Windows Phone系列的失敗歷程


5年太多,你肯定有一定基礎嘍,看看實現的書,半年不用你就能寫出內核。甚至快的話3個月就行。


推薦閱讀:

Minix 操作系統有什麼發展潛力嗎?
2G內存的筆記本電腦,更適合裝win7還是win8?
如何完整純正地將裝有應用的win7/8/10系統移植到另一台機器上?
Windows的回收站設定有什麼存在的必要性?
DOS 系統和 Windows 系統有什麼關係?

TAG:MicrosoftWindows | 操作系統 | 編程 | 彙編語言 | 電子計算機 |