為什麼操作系統必須要有內核?


操作系統內核的作用是實現對軟體、硬體資源的管理。

確實,操作系統可以不要內核,後果就是你玩遊戲的時候就不能開迅雷了。內核的一個作用就是實現任務調度,讓計算機的資源都被均衡的調度。

沒有操作系統內核,那麼所有任務(程序)都是完全獨佔計算機的,你玩完遊戲退出想用WORD?對不起,請重啟計算機先。

沒有操作系統內核,內存的動態管理也將不存在,後果就是可能沒有虛擬內存,那就是說,如果某遊戲需要運行內存是2G,那麼如果不巧的是自己的電腦只有1G內存,則完全玩不起來(有操作系統的情況下,用虛擬內存是可以的)

沒有操作系統內核,設備管理的功能就不存在了,比如動態的設備插拔等等,並且計算機啟動的時間可能會非常漫長,因為需要檢測並載入各種驅動。

沒有操作系統內核,多線程的操作甚至都不能支持,因為信號量、消息隊列這些也都是操作系統提供的,所以現在的程序都需要徹底重新修改才能適應沒有內核的情況。

沒有操作系統內核,多核的CPU也可能沒有用了。

能想到的就這麼多,所以,要有操作系統內核。

-------------------補充-------------------

評論里有人提到,早期的時候(DOS時代)有些遊戲就是直接從軟盤啟動的。這是因為那時候操作系統很小,功能弱,系統資源有緊缺,所以沒有內核也可以,但現在硬體資源很豐富,操作系統很龐大,沒有內核統一管理的話,要麼太浪費、要麼軟體自己的負擔會很重


你說的叫「內核」的那個東西碰巧叫「內核」,你完全可以管它叫別的。但是一定要有「那麼一個東西」在,否則就不是操作系統了。


請問什麼叫做內核?

以前是沒有「內核」這個稱呼的,操作系統就是操作系統,它只負責任務管理、內存管理、輸入輸入等基本事務,再提供個簡單的用戶界面就行了。但後來,廠商在操作系統里打包了大量的驅動程序、系統軟體、應用軟體,然後把這一大包東西叫做操作系統,那麼為了把這個操作系統和之前那個負責各種基本事務的操作系統區分開,就把以前那個叫做內核。

看到了沒,這完全是個名詞解釋的問題。為什麼要有內核?那麼為什麼要有操作系統呢?


這個問題有種最後會變成語義學爭論的預感。


不是操作系統必須有內核,而是操作系統必須要以內核為基礎運行

內核提供最基本的對計算機的操作,並且讓計算機底層盡量安全和容易管理

然後操作系統對此進行擴充,更加符合用戶的使用習慣

另外可以參考一下Linux,Linux狹義上是個內核,現在能見到的Linux都是Linux發行版。

內核 - Linux

系統 - GNU(這是一堆以linux為基礎運行的軟體、庫)

用戶 - 桌面環境等


額,我想知道你感受到了內核的存在了么。。。

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

內核說通俗點就是做了點程序調度啊,管理下內存,驅動點設備啊。。不然你還用個毛的電腦。

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

如果你不想要內核很簡單,直接不裝系統,沒事自己就寫點裸機程序驅動下這設備那設備應該也是蠻有成就感的。。。


操作系統嚴格意義上就是內核。不要操作系統是可以的,但是有幾個問題。

我特別喜歡玩遊戲,但是我顯卡不給力,總是卡頓,於是我花錢買了最牛逼的顯卡,興奮的拿回家,發現遊戲不能運行了。因為遊戲是針對某些特點硬體編寫的,需要重寫遊戲才能運行。操作系統將硬體抽象為服務,只有有對應驅動,遊戲一次編寫,就可以運行在不同硬體上了。

不同程序怎麼配合?比如你一邊玩遊戲,一邊聽音樂。遊戲要主動放棄對cpu的佔用,讓給音樂程序,音樂程序也要主動放棄cpu的佔用,還給遊戲,這樣頻繁切換,才會有同時進行的感覺。萬一有人寫一個一直佔用cpu的程序怎麼辦? 因此操作系統可以用來管理程序直接的調度。

如果有人寫了一個惡意軟體,掃描內存中的特定數據,就可能盜取你的私密信息了。操作系統把物理內存空間抽象位虛擬內存空間。程序認為它擁有全部內存,但實際上系統只給它分配了一些內存片段。這樣無論如何掃描虛擬內存空間,實際也只是掃描自己擁有的物理內存空間。惡意程序就不能用這樣的方法偷聽啦。

這個壞人又想破壞你的電腦,他可以直接對硬體發出指令,比如讀取硬碟數據,然後隨意修改數據段寄存器的位置,這樣你在萬人禮堂演講時播放宣傳片的時候會突然播放愛情動作片,好尷尬啊。操作系統把用戶程序做上標記,不允許它執行內核級的指令,這樣就不怕惡意程序搗亂了。

操作系統把全部硬體抽象為進程,把程序和自己映射到進程中,把虛擬地址和物理地址通過分頁表對應起來,實現了進程切換,隔離,設置用戶代碼許可權等等必要功能。


操作系統不一定要有內核,誰告訴你一定有的?問題就有錯誤,已舉報。


linux把操作系統打包成一個文件,所以叫內核,這個文件以外的不叫內核。 freebsd內核就沒有打包成一個文件,不過還是有一個叫kernel的文件,負責操作系統工作,驅動等模塊叫內核模塊,也算是內核吧,freebsd是把內核和各種工具文件一起發布,能獨立存在,所以叫操作系統。linux只有內核是不能運行的,需要安裝各種工具,打包發布,形成各種發行版本,但是同一個版本內核都一樣,


這個問題就好像問「人為什麼要有心臟和大腦」一樣,類比推理一下你就能懂為什麼操作系統要有內核了吧。


推薦閱讀:

基於什麼樣的理由或特徵可以判別某個系統是 Android 的修改版本而不是另一個基於 Linux 開發的系統?
學習bash編程時,應該養成哪些好的習慣?
用 SSH 登錄伺服器用 Vim 在線寫 PHP 代碼的體驗是怎樣的?
Google 的 Android 為什麼不自主開發一個內核而要用 Linux 內核?
一個新手面試 Linux 運維工作至少需要知道哪些知識?

TAG:MicrosoftWindows | Linux | BSD | 操作系統內核 |