剖析 Linux 內核在底層是如何工作的
Linux 內核就像一座橋梁,可以實現應用程序和硬件之間的計算通信并管理系統的資源。Linus Torvalds 使用 C 和 Assembly 開發了 Linux 內核,因此,他成功地創建了一個輕量級和可移植的內核,并以開源的形式向公眾發布。
您可以在太空、計算機、智能手表、手機、機器人和健康等許多不同領域看到 Linux 內核。但是你有沒有想過 Linux 內核在底層是如何工作的?
Linux 下的硬件使用情況
首先,Linux 內核控制在您打開計算機時運行哪些硬件以及以何種方式運行。此外,借助編程接口,控制高端軟件成為可能。舉一個這些控件的例子,您可以查看安裝在主板插槽中的硬件信息,并從這些詳細信息中受益。
此外,這個編程接口提供了一個抽象層。例如,如果您想與朋友進行視頻對話,則需要一個網絡攝像頭。抽象層使您使用的軟件可以使用此網絡攝像頭,無論其品牌和型號如何。這里的軟件只能使用 Linux 存在的接口。Linux 內核將此接口的函數調用轉換為網絡攝像頭所需的實際硬件命令。
使用/proc和/sys虛擬文件系統,Linux 內核可以導出有關它檢測到的硬件的詳細信息。您可以在下面看到一些用于此目的的工具以及它們導出的設備和卡:
- lspci:用于 PCI 設備
- lsusb:用于 USB 設備
- lspcmcia: 用于 PCMCIA 卡
如您所見,上面屏幕截圖中的 Linux 發行版在 VMware 上運行。但是,您有機會看到很多信息,例如 VGA、USB 控制器、橋接器和 SATA 控制器。
您還可以使用-v參數來獲取更詳細的信息。
在 Linux 內核中,應用程序通常通過/dev目錄中存在的特殊文件訪問設備。這些特殊文件代表磁盤驅動器和其他物理設備。/dev/hda、/dev/sdc、/dev/sdc3、/ dev/input/mouse0和dev/snd/*等文件就是這些特殊文件的示例。
Linux 文件系統管理
文件系統是 Linux 內核中最著名的組件之一。Linux 的文件系統是其最大的優點之一。Linux 系統上的所有文件都集中在一個分支中。因此,用戶可以利用這個層次結構到達他們想要的地方。
此層次結構的起點是根目錄 ( / )。其他子目錄在根目錄下。/下最常用的子目錄是/home目錄。該子目錄包含其他子目錄,每個目錄都有存儲實際數據的文件。
例如,您可以考慮桌面上的文本文件。如果您在桌面上創建一個名為helloworld.txt的文本文件,則可以將其稱為/home/linuxmi/Desktop/helloworld.txt。這里/linuxmi 是我的用戶名,你們的會有所不同。因為這個子目錄名取決于你當前的用戶名。使用這個命名系統,Linux 內核在磁盤上存在的實際存儲和物理存儲之間進行轉換。
此外,Linux 內核可以集成來自多個磁盤的數據。這就是安裝系統發揮作用的地方。它使用根系統中的一個磁盤并將其他磁盤安裝到層次結構中的現有目錄。然后將其他磁盤放置在安裝點下。這允許用戶將/home目錄存儲在另一個硬盤上,該硬盤還包含其他子目錄。
當您將磁盤掛載到/home目錄時,您可以從正常位置訪問這些目錄。因此,/home/linuxmi/Desktop/helloworld.txt等路徑繼續有效。
您可以使用findmnt -A命令查看系統上文件之間的掛載點。
對于許多文件系統格式,您可以將數據物理存儲在磁盤上。Linux 上最廣為人知的是ext2、ext3和ext4文件系統格式。但是,還有許多其他文件系統格式。在任何情況下,您都必須在掛載文件系統之前對其進行格式化。為此,您可以使用mkfs.ext3(mkfs 代表 make file system,而 ext3 是文件系統)之類的命令。
這些命令接受您要格式化的設備文件路徑作為參數。這是一種破壞性操作,如果您不想擦除或重置文件系統,則應謹慎使用。
除此之外,還有Linux 內核使用的NFS 等網絡文件系統。NFS 是一種網絡文件系統,其中數據不存儲在本地磁盤上。使用 NFS,數據通過網絡傳輸到存儲數據的服務器。由于數據將在服務器上,用戶不必經常處理它。他們也可以像往常一樣使用傳統的 Linux 分層文件系統。
共享功能操作
Linux系統中的所有軟件都有共同的功能。這就是為什么這些函數是 Linux 內核的核心。例如,打開一個文件時,你可以只用文件名打開它,而不知道文件的物理存儲位置,以及它將使用什么功能和操作。所有這些功能都已經存在于內核中。
您可以將文件存儲在硬盤上,在多個硬盤之間拆分,甚至將其保存在遠程服務器上。在這種情況下,共享文件通信功能很重要。無論數據如何移動,應用程序都會交換數據。共享通信功能可以進行這些數據交換。這一舉措可以通過無線網絡甚至固定電話線進行。
Linux 中的進程管理
對內存中的數據或信息進行操作的程序的活動實例稱為進程。Linux 內核的任務是生成并跟蹤這些內存區域。內核為正在運行的程序分配內存,并將可執行代碼從文件系統加載到內存中。緊接著,內核運行代碼。
Linux 內核支持多任務處理。它能夠同時運行多個進程。但是,在任何給定的時間范圍內只有一筆交易。但是,Linux 內核將時間分成小塊,因此每個過程都是按順序進行的。
由于這些小時間段以毫秒為增量,因此它們僅在特定時間處于活動狀態,其余時間保持空閑狀態。Linux 內核在這里的工作是通過一次運行多個進程來最大化性能。
如果時隙太長,正在運行的應用程序可能不會像您希望的那樣響應。如果時間框架太短,任務更改可能會出現問題。根據進程的優先級,此處所需的時間幀間隔會有所不同。您之前可能聽說過高優先級進程和低優先級進程。這是 Linux 內核控制的功能之一。
這種解釋并不總是正確的。真正的限制是每個處理器內核一次只能有一個工作進程。多處理器系統允許多個進程并行運行。一個基本系統幾乎總是有幾十個正在運行的進程。
Linux 中的訪問權限
與其他操作系統一樣,您可以在 Linux 系統上創建許多用戶。在這種情況下,有一個支持單個用戶和組的權限管理系統。這就是文件和用戶權限發揮作用的地方。
Linux 內核管理數據并檢查每個進程的必要權限。例如,如果您嘗試打開文件,內核必須根據訪問權限檢查進程 ID。如果內核檢查并看到您有權限,它將打開該文件。
Linux 內核控制一切
正如您所看到的,Linux 內核監督從您的文件安全到創建用戶和從網絡下載文件的所有事情。一切都有一定的順序。每個用戶都有權限。Linux內核管理進程和時隙以獲得最佳性能。
此外,文件系統是將 Linux 內核區別于其他操作系統的最大特性之一,它非常重要。Linux 不是一個隱藏的盒子。相反,所有文件和源代碼都是可訪問的。為了更好地理解 Linux 內核的實用性和強大特性,您可以研究Linux目錄系統層次結構。