linux內核參數詳解「linux的內核是什麼」

目錄

一、什麼是內核?

1.1 內核的能力

二、操作系統分層

三、內核是如何工作的?

四、Linux 的設計

4.1 Multitask and SMP(Symmetric multiprocessing)

4.2 ELF(Executable and Linkable Format)

4.3 Monolithic Kernel

4.4 在內核層和在用戶層有什麼區別?

五、Window 設計

六、總結


一、什麼是內核?

說到操作系統,就必須說內核。內核是操作系統中應用連接硬件設備的橋樑。

1.1 內核的能力

對於一個現代的操作系統來說,它的內核至少應該提供以下 4 種基本能力:

  • 管理進程、線程(決定哪個進程、線程使用 CPU);
  • 管理內存(決定內存用來做什麼);
  • 連接硬件設備(為進程、和設備間提供通信能力);
  • 提供系統調用(接收進程發送來的系統調用)。

二、操作系統分層

從上面 4 種能力來看操作系統和內核之間的關係,通常可以把操作系統分成 3 層,最底層的硬件設備抽象、中間的內核和最上層的應用

Linux 內核和 Windows 內核有什麼區別
Linux 內核和 Windows 內核有什麼區別

三、內核是如何工作的?

內核權限非常高,它可以管理進程、可以直接訪問所有的內存,因此確實需要和進程之間有一定的隔離。這個隔離用類似請求/響應的模型,非常符合常理。

Linux 內核和 Windows 內核有什麼區別
Linux 內核和 Windows 內核有什麼區別

但不同的是在瀏覽器、服務端模型中,瀏覽器和服務端是用不同的機器在執行,因此不需要共享一個 CPU。但是在進程調用內核的過程中,這裡是存在資源共享的。

比如,一個機器有 4 個 CPU,不可能讓內核用一個 CPU,其他進程用剩下的 CPU。這樣太浪費資源了。

再比如,進程向內核請求 100M 的內存,內核把 100M 的數據傳回去。 這個模型不可行,因為傳輸太慢了。

所以,這裡多數操作系統的設計都遵循一個原則:進程向內核發起一個請求,然後將 CPU 執行權限讓出給內核。內核接手 CPU 執行權限,然後完成請求,再轉讓出 CPU 執行權限給調用進程。

四、Linux 的設計

Linux 操作系統第一版是1991 年林納斯托·瓦茲(一個芬蘭的小夥子,當時 22 歲)用 C 語音寫的。 寫完之後他在網絡上發佈了 Linux 內核的源代碼。又經過了 3 年的努力,在 1994 年發佈了完整的核心 Version 1.0。

4.1 Multitask and SMP(Symmetric multiprocessing)

MultiTask 指多任務,Linux 是一個多任務的操作系統。多任務就是多個任務可以同時執行,這裡的「同時」並不是要求並發,而是在一段時間內可以執行多個任務。當然 Linux 支持並發。

SMP 指對稱多處理。其實是說 Linux 下每個處理器的地位是相等的,內存對多個處理器來說是共享的,每個處理器都可以訪問完整的內存和硬件資源。 這個特點決定了在 Linux 上不會存在一個特定的處理器處理用戶程序或者內核程序,它們可以被分配到任何一個處理器上執行。

4.2 ELF(Executable and Linkable Format)

Linux 內核和 Windows 內核有什麼區別
Linux 內核和 Windows 內核有什麼區別

這個名詞翻譯過來叫作可執行文件鏈接格式。這是一種從 Unix 繼承而來的可執行文件的存儲格式。我們可以看到 ELF 中把文件分成了一個個分段(Segment),每個段都有自己的作用。

4.3 Monolithic Kernel

這個名詞翻譯過來就是宏內核,宏內核反義詞就是 Microkernel ,微內核的意思。Linux 是宏內核架構,這說明 Linux 的內核是一個完整的可執行程序,且內核用最高權限來運行。宏內核的特點就是有很多程序會打包在內核中,比如,文件系統、驅動、內存管理等。當然這並不是說,每次安裝驅動都需要重新編譯內核,現在 Linux 也可以動態加載內核模塊。所以哪些模塊在內核層,哪些模塊在用戶層,這是一種系統層的拆分,並不是很強的物理隔離。

與宏內核對應,接下來說說微內核,內核只保留最基本的能力。比如進程調度、虛擬內存、中斷。多數應用,甚至包括驅動程序、文件系統,是在用戶空間管理的。

Linux 內核和 Windows 內核有什麼區別
Linux 內核和 Windows 內核有什麼區別

4.4 在內核層和在用戶層有什麼區別?

感覺分層其實差不多。 我這裡說一個很大的區別,比如說驅動程序是需要頻繁調用底層能力的,如果在內核中,性能肯定會好很多。對於微內核設計,驅動在內核外,驅動和硬件設備交互就需要頻繁做內核態的切換。

當然微內核也有它的好處,比如說微內核體積更小、可移植性更強。不過我認為,隨着計算能力、存儲技術越來越發達,體積小、安裝快已經不能算是一個很大的優勢了。現在更重要的是如何有效利用硬件設備的性能。

之所以這麼思考,也可能因為我是帶着現代的目光回望當時人們對內核的評判,事實上,當時 Linux 團隊也因此爭論過很長一段時間。 但是我覺得歷史往往是螺旋上升的,說不定將來性能發展到了一個新的階段,像微內核的靈活性、可以提供強大的抽象能力這樣的特點,又重新受到人們的重視。

還有一種就是混合類型內核。 混合類型的特點就是架構像微內核,內核中會有一個最小版本的內核,其他功能會在這個能力上搭建。但是實現的時候,是用宏內核的方式實現的,就是內核被做成了一個完整的程序,大部分功能都包含在內核中。就是在宏內核之內有抽象出了一個微內核。

五、Window 設計

Windows 和 Linux 的設計有很大程度的相似性。Windows也有內核,它的內核是 C/C++ 寫的。準確地說,Windows 有兩個內核版本。一個是早期的Windows 9x 內核,早期的 Win95, Win98 都是這個內核。我們今天用的 Windows 7, Windows 10 是另一個內核,叫作 Windows NT。NT 指的是 New Technology。接下來我們討論的都是 NT 版本的內核。

下面我找到一張 Windows 內核架構的圖片給你一個直觀感受。

Linux 內核和 Windows 內核有什麼區別
Linux 內核和 Windows 內核有什麼區別

Windows 同樣支持 Multitask 和 SMP(對稱多處理)。Windows 的內核設計屬於混合類型。你可以看到內核中有一個 Microkernel 模塊。而整個內核實現又像宏內核一樣,含有的能力非常多,是一個完整的整體。

Windows 下也有自己的可執行文件格式,這個格式叫作 Portable Executable(PE),也就是可移植執行文件,擴展名通常是.exe、.dll、.sys等。

PE 文件的結構和 ELF 結構有很多相通的地方,我找到了一張圖片幫助你更直觀地理解。

Linux 內核和 Windows 內核有什麼區別
Linux 內核和 Windows 內核有什麼區別

Windows 還有很多獨特的能力,比如 Hyper-V 虛擬化技術.

六、總結

這一講我們學習了內核的基礎知識,包括內核的作用、整體架構以及 3 種內核類型(宏內核、微內核和混合類型內核)。

內核很小(微內核)方便移植,因為體積小、安裝快;內核大(宏內核),方便優化性能,畢竟內核更了解計算機中的資源。

Linux 內核和 Windows 內核有什麼區別?

【解析】 Windows 有兩個內核,最新的是 NT 內核,目前主流的 Windows 產品都是 NT 內核。NT 內核和 Linux 內核非常相似,沒有太大的結構化差異。

從整體設計上來看,Linux 是宏內核NT 內核屬於混合型內核。和微內核不同,宏內核和混合類型內核從實現上來看是一個完整的程序。只不過混合類型內核內部也抽象出了微內核的概念,從內核內部看混合型內核的架構更像微內核。

另外 NT 內核和 Linux 內核還存在着許多其他的差異,比如:

  • Linux 內核是一個開源的內核;
  • 它們支持的可執行文件格式不同;
  • 它們用到的虛擬化技術不同。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/252752.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-14 02:19
下一篇 2024-12-14 02:19

相關推薦

發表回復

登錄後才能評論