shell、操作系統、內核是一個東西嗎?
經常聽到內核、操作系統、shell這三樣東西,但素不明白這三樣東西是同一個嗎?他們到底是什麼?
這東西是有標準答案的,去翻翻wiki或者百度百科都能看明白。
我給題主拿實際例子來說說吧
操作系統:
包括操作系統內核、shell、驅動、運行庫、引導程序等各種東西都是操作系統的一部分。
對於Windows來說,大部分Windows目錄下的東西都屬於操作系統的一部分。
對於Linux來說,/lib,/boot下的大多數東西都屬於操作系統
內核:
操作系統最核心的部分,一般來說,內核特指某一個或者幾個文件。
對於Windows來說,內核文件是Windowssystem32NTOSKRNL.EXE
對於Linux來說,是內核鏡像,一般在boot下面,具體是哪個要看配置情況。
Shell(外殼):
一般是指跟用戶直接交互的界面,可以是命令行,也可以是窗口,用戶通過shell訪問並控制計算機。
對於Windows來說,Shell應該是資源管理器(也就是我的電腦)。
對於Linux來說,就是命令行。
一個操作系統的Shell可以被替換,Linux也可以搞圖形界面,Windows也可以自定義Shell(方法比較麻煩)。
所以Shell和內核都是操作系統的一部分,Shell是你能看見的部分,內核是最核心的部分(一般情況下也看不見),操作系統本身規模最大的應該是驅動和各種支撐庫,Shell和內核只佔一小部分。前台,公司,管理層
內核+shell &< 操作系統
內核需要做的工作:進程管理(創建進程、進程調度等)、進程間通信(管道、信號等)、文件操作(在硬碟上以我們熟悉的文件的形式創建文件,讀文件,寫文件等和保存修改等),內存管理(段、頁,線性地址到物理地址、進程共享頁面),網路(TCP/IP,和遠端的計算機收發消息的協議),緩衝區(內存與外設之間的cache,多進程操作緩衝區),以及最開始的計算機硬體中只是操作系統剛剛載入的空空如也的狀態到系統怠速迎接響應用戶的需求等等等等。內核是操作系統最最核心的部分,可以將內核比喻成大腦,遇到事情,如何應激面對,調用自己身體的其他部分(譬如一些外設)。shell要做的工作:剛剛將內核比喻成大腦,shell我覺得可以比喻成皮膚、眼睛、耳朵等用於感知的器官。用戶的應用程序如何讓內核去調度去執行它,我們不可能一下子將應用程序要做的計算直接塞到大腦(內核)中,shell就是應用程序的入口。shell本身也是一個進程,當沒有需求的時候它處於休眠狀態,當有需求的時候,它就運行起來。當我們用戶有需求的時候,譬如在terminal執行./HelloWorld,shell這個進程感知我們這一命令需求,它就作為我們HelloWorld的父進程,去為我們HelloWorld未來以後能夠在進程調度的時候被調度做準備工作,例如fork()等,而fork做的工作,譬如創建進程式控制制塊等就是內核要做的工作,可以比喻成你要記住一篇英語課文,那你的大腦需要分化出一部分腦細胞用於記住這篇課文。
硬體譬如顯示器,硬碟,鍵盤等可以比喻成四肢、手(或者乾脆比喻成骨頭)等,因為他們是能夠干具體的事情的,譬如你的手能夠將大腦中記住的課文寫下本子上,同時內核也能夠根據應用程序的需要將「Hello World!」寫在顯示器上。
還有一部分很重要的就是硬體的驅動程序,可以將它比喻成神經細胞,就是大腦的命令需要他們傳輸到四肢上。這樣將計算機系統解剖了,可能不恰當。我認為操作系統 = 內核 + shell + 驅動,不知道這麼說恰恰不恰當。哦,對了,操作系統的順利工作離不開中斷技術(硬、軟)!Linux系統的話就是計算機硬體上面和應用軟體下面的部分,話說貌似應該還需要包含部分的應用軟體。
從這張圖來看的話,應該要看的明白一些了~shell,內核,操作系統不是一個東西,操作系統包含了內核和shell,然後shell使用了系統調用來完成各種任務。內核的話我也一直理解的不是很清楚,個人覺得就是管理各種硬體資源什麼的,訪問硬體資源只能由內核去干,其他什麼程序都不行。
自己畫的圖,湊活看一下吧。
圖裡面只給出了「shell」和「內核」。內核:是直接接管硬體軟體,往往是一些與硬體緊密相關的、使用頻率較高的、基礎的、公共的的程序和數據結構的集合。這些程序包括但不僅限於:進程管理、存儲器管理、設備管理、中斷處理和時鐘管理
shell:如同他的名字一樣,是「包裹」在內核外圍的「殼」,系統軟體、應用軟體和用戶通過shell來操縱內核,控制整個計算機硬體。圖中也可以看到,用戶即可以直接操縱shell,也可以通過系統或應用軟體間接操縱shell。這裡的系統軟體通常指:資料庫管理系統、編譯程序、彙編程序等。
操作系統:「操作系統是配置在計算機硬體上的第一層軟體,是對硬體系統的首次擴充」(《計算機操作系統》西安電子科技大學出版社)
所以,操作系統的最小組成應該是shell+內核。當然現代操作系統還包括大量的系統軟體。所以,才會有答案說:「內核+shell<操作系統」kernel是內核,就是堅果里的果仁、果核;shell就是堅果的外殼;操作系統嘛,就是各種口味的堅果了(也許加了點其他的風味,比方說奶油味、椒鹽味之類的)。反正單詞kernel跟shell本身就是有這個意思的嘛~
內核就是你的小JJ,shell就像安全套,很重要但是用著很不爽。內核和操作系統的關係就像火車和山洞
推薦閱讀:
※孫志崗是誰?在他的背後又有哪些傳奇經歷?
※WINDOWS睡眠以後會很卡,為什麼?
※為何Win7 64位操作系統 8G內存,還會卡?程序經常假死(未響應)
※如何評價對於微軟的「新CPU強制用Win10」?
※為什麼 Windows 8 比 Windows 7 快那麼多?
TAG:MicrosoftWindows | 操作系統 | Linux | Linux內核 | 操作系統內核 |