編程學習網 > 服務器 > Linux > Linux 內核及 GNU/Linux 操作系統的基本體系結構
2020
08-01

Linux 內核及 GNU/Linux 操作系統的基本體系結構


1. Linux 內核簡介


內核:在計算機科學中是一個用來管理軟件發出的數據 I/O(輸入與輸出)要求的計算機程序,將這些要求轉譯為數據處理的指令并交由中央處理器(CPU)及計算機中其他電子組件進行處理,是現代操作系統中最基本 的部分。
它是為眾多應用程序提供對計算機硬件的安全訪問的一部分軟件,這種訪問是有限的,并由內核決定 一個程序在什么時候對某部分硬件操作多長時間。直接對硬件操作是非常復雜的。所以內核通常提供一種硬件 抽象的方法,來完成這些操作。通過進程間通信機制及系統調用,應用進程可間接控制所需的硬件資源(特別 是處理器及 IO 設備)。


 2. GNU/Linux 操作系統與 Linux 內核關系


我們通常說的 Linux 實際上指的是內核,即 Linux 內核。而 Linux 的操作系統實際是 GNU/Linux 操作系統, 即使用 Linux 內核的 GNU 系統。 


3.GNU/Linux 操作系統的基本體系結構


3.1 用戶空間

最上面是用戶(或應用程序)空間。這是用戶應用程序執行的地方。用戶空間之下是內核空間,Linux 內核正是位于這里。GNU C Library (glibc)也在這里。它提供了連接內核的系統調用接口,還提供了在用戶空間應用程序和內核之間進行轉換 的機制。這點非常重要,因為內核和用戶空間的應用程序使用的是不同的保護地址空間。每個用戶空間的進程 都使用自己的虛擬地址空間,而內核則占用單獨的地址空間。 3.2 Linux 內核的體系結構內核是操作系統的核心,具有很多最基本功能,它負責管理系統的進程、內存、設備驅動程序、文件和網絡系統,決定著系統的性能和穩定性。Linux 內核由如下幾部分組成:內存管理、進程管理、文件系統、設備驅動程序和網絡接口程序等。 3.2.1 系統調用接口(System Call Interface 簡稱 SCI)SCI 層提供了某些機制執行從用戶空間到內核的函數調用。這個接口依賴于體系結構,甚至在相同的處 理器家族內也是如此。SCI 實際上是一個非常有用的函數調用多路復用和多路分解服務。在 ./linux/kernel 中您可以找到 SCI 的實現,并在 ./linux/arch 中找到依賴于體系結構的部分。 3.2.2 內存管理對任何一臺計算機而言,其內存以及其它資源都是有限的。為了讓有限的物理內存滿足應用程序對內存 的大需求量,Linux 采用了稱為“虛擬內存”的內存管理方式。Linux 將內存劃分為容易處理的“內存頁” (對于大部分體系結構來說都是 4KB)。Linux 包括了管理可用內存的方式,以及物理和虛擬映射所使 用的硬件機制。不過內存管理要管理的可不止 4KB 緩沖區。Linux 提供了對 4KB 緩沖區的抽象

例如 slab 分配器。這種內存管理模式使用 4KB 緩沖區為基數,然后從中分配結構,并跟蹤內存頁使用情 況,比如哪些內存頁是滿的,哪些頁面沒有完全使用,哪些頁面為空。這樣就允許該模式根據系統需要來動態 調整內存使用。
為了支持多個用戶使用內存,有時會出現可用內存被消耗光的情況。由于這個原因,頁面可以移出內存 并放入磁盤中。這個過程稱為交換,因為頁面會被從內存交換到硬盤上。內存管理的源代碼可以在 ./linux/mm 中找到。 3.2.3 進程管理進程實際是某特定應用程序的一個運行實體。在 Linux 系統中,能夠同時運行多個進程,Linux 通過 在短的時間間隔內輪流運行這些進程而實現“多任務”。這一短的時間間隔稱為“時間片”,讓進程輪流運 行的方法稱為“進程調度” ,完成調度的程序稱為調度程序。 

進程調度控制進程對 CPU 的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的進程。一個可運行的進程是指該進程的進程狀態為 TASK_RUNNING,意味著這個進程是可運行的:要么它正在運行,要么在 runqueue 中等待運行。對于 「用戶空間」(指內存上用戶進程運行的空間) 正在運行的進程來說,它只可能是可運行的。對于「內核空間」(內存上內核運行并提供服務的空間)正在運行的進程來說,可運行狀態也是可能的。一個 runqueue (運行隊列)是 scheduler (調度器)里面的基本數據結構,它保存了可運行進程的列表,這些列表中的進程隨后會被 CPU 執行scheduler (調度器)也被稱為 process scheduler (進程調度器),是內核的一部分,它會為不同的可運行進程分配 CPU 時間,Linux 使用了比較簡單的基于優先級的進程調度算法選擇新的進程。 通過多任務機制,每個進程可認為只有自己獨占計算機,從而簡化程序的編寫。每個進程有自己單獨的地址空間,并且只能由這一進程訪問,這樣操作系統避免了進程之間的互相干擾以及“壞”程序對系統可能造成 的危害。為了完成某特定任務,有時需要綜合兩個程序的功能,例如一個程序輸出文本,而另一個程序對文本進行排序。為此,操作系統還提供進程間的通訊機制來幫助完成這樣的任務。Linux 中常見的進程間通訊 機制有信號、管道、共享內存、信號量和套接字等。內核通過 SCI 提供了一個應用程序編程接口(API)來創建一個新進程(forkexec 或 Portable Operating System Interface [POSIX] 函數),停止進程(killexit),并在它們之間進行通信 和同步(signal 或者 POSIX 機制)。

3.2.4 文件系統

和 DOS 等操作系統不同,Linux 操作系統中單獨的文件系統并不是由驅動器號或驅動器名稱(如 A: 或 C: 等)來標識的。相反,和 UNIX 操作系統一樣,Linux 操作系統將獨立的文件系統組合成了一個層 次化的樹形結構,并且由一個單獨的實體代表這一文件系統。
Linux 將新的文件系統通過一個稱為“掛裝”或“掛上”的操作將其掛裝到某個目錄上,從而讓不同的文件 系統結合成為一個整體。Linux 操作系統的一個重要特點是它支持許多不同類型的文件系統。
Linux 中最普遍使用的文件系統是 Ext2,它也是 Linux 土生土長的文件系統。但 Linux 也能夠支持 FAT、VFAT、FAT32、MINIX 等不同類型的文件系統,從而可以方便地和其它操作系統交換數據。由于 Linux 支持許多不同的文件系統,并且將它們組織成了一個統一的虛擬文件系統. 


虛擬化文件系統:

虛擬文件系統(VFS)是 Linux 內核中非常有用的一個方面,因為它為文件系統提供了一個通用的接口抽 象。VFS 在 SCI 和內核所支持的文件系統之間提供了一個交換層。即VFS 在用戶和文件系統之間提供了一 個交換層。 虛擬化文件系統隱藏了各種硬件的具體細節,把文件系統操作和不同文件系統的具體實現細節分離了開來,為 所有的設備提供了統一的接口,VFS提供了多達數十種不同的文件系統。虛擬文件系統可以分為邏輯文件系統 和設備驅動程序。邏輯文件系統指Linux所支持的文件系統,如ext2,fat等,設備驅動程序指為每一種硬件 控制器所編寫的設備驅動程序模塊。 


3.2.5 設備驅動程序

設備驅動程序是 Linux 內核的主要部分。和操作系統的其它部分類似,設備驅動程序運行在高特權級的處理器環境中,從而可以直接對硬件進行操作,但正因為如此,任何一個設備驅動程序的錯誤都可能導 致操作系統的崩潰。 設備驅動程序實際控制操作系統和硬件設備之間的交互。設備驅動程序提供一組操作系統可理解的抽象接口完成和操作系統之間的交互,而與硬件相關的具體操作細節由設備驅動程序完 成。
一般而言,設備驅動程序和設備的控制芯片有關,例如,如果計算機硬盤是 SCSI 硬盤,則需要使用 SCSI 驅動程序,而不是 IDE 驅動 程序。


 3.2.6 網絡接口程序

提供了對各種網絡標準的存取和各種網絡硬件的支持。網絡接口可分為網絡協議和網絡驅動程序。網絡 協議部分負責實現每一種可能的網絡傳輸協議。眾所周知,TCP/IP 協議是 Internet 的標準協議,同時 也是事實上的工業標準。Linux 的網絡實現支持 BSD 套接字,支持全部的TCP/IP協議。Linux內核的網 絡部分由BSD套接字、網絡協議層和網絡設備驅動程序組成。 網絡設備驅動程序負責與硬件設備通訊,每一種可能的硬件設備都有相應的設備驅動程序。

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取