首頁 運維 linux運維 linux核心的子系統有哪些

linux核心的子系統有哪些

Nov 26, 2021 am 10:46 AM
linux內核 子系統

linux核心的子系統有5個:1、 進程調度控制系統(SCHED);2、記憶體管理系統(MM),主要作用是控制多個進程安全地共享主記憶體區域;3、虛擬檔案系統(VFS);4、網路介面(NET);5、進程間通訊(IPC)。

linux核心的子系統有哪些

本教學操作環境:Ubuntu 16.04系統、Dell G3電腦。

核心:

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

linux核心的子系統有哪些

Linux核心主要由進程調度(SCHED)、記憶體管理(MM)、虛擬檔案系統(VFS)、網路介面(NET)和進程間通訊(IPC)5個子系統組成,如下圖所示。

linux核心的子系統有哪些

1、程式調度

    程式調度控制系統中的多個進程對CPU的訪問,使得多個進程能在CPU中「微觀串行,宏觀並行」地執行。進程調度處於系統的中心位置,核心中其他的子系統都依賴它,因為每個子系統都需要掛起或恢復進程。

    如下圖所示,Linux的進程在幾個狀態之間切換。


Linux進程狀態轉換

    在裝置驅動程式設計中,當請求的資源無法滿足時,驅動一般會調度其他進程執行,並使本進程進入睡眠狀態,直到它所要求的資源被釋放,才會被喚醒而進入就緒狀態。睡眠分成可中斷的睡眠和不可中斷的睡眠,兩者的差異在於可中斷的睡眠在收到訊號的時候會醒。

    完全處於TASK_UNINTERRUPTIBLE狀態的進程甚至都無法被“殺死”,所以Linux 2.6.26之後的內核也存在一種TASK_KILLABLE的狀態,它等於“TASK_WAKEKILL|TASK_UNINTERRUPTIBLE”,可以響應致命信號。

    在Linux核心中,使用task_struct結構體(include/linux/sched.h)來描述進程,該結構體中包含描述該進程記憶體資源、檔案系統資源、檔案資源、tty資源、訊號處理等的指針。 Linux的執行緒採用輕量級進程模型來實現,在用戶空間透過pthread_create()API建立執行緒的時候,本質上核心只是建立了一個新的task_struct,並將新task_struct的所有資源指標都指向建立它的那個task_struct的資源指標。

    絕大多數行程(以及行程中的多個執行緒)是由使用者空間的應用程式所建立的,當它們存在底層資源和硬體存取的需求時,會透過系統呼叫進入核心空間。有時候,在核心程式設計中,如果需要幾個並發執行的任務,可以啟動核心線程,這些線程沒有使用者空間。啟動核心執行緒的函式為:pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);

##2、記憶體管理

#    記憶體管理的主要功能是控制多個進程安全地共享主記憶體區域。當CPU提供記憶體管理單元(MMU)時,Linux記憶體管理對於每個程序完成從虛擬記憶體到實體記憶體的轉換。 Linux 2.6引入了對無MMU CPU的支援。

    如圖所示,一般而言,32位元處理器的Linux的每個進程享有4GB的記憶體空間,0~3GB屬於用戶空間,3~4GB屬於核心空間,核心空間對常規內存、I/O裝置記憶體以及高階記憶體有不同的處理方式。核心空間和使用者空間的具體界限是可以調整的,在核心配置選項Kernel Features→Memory split下,可以設定界限為2GB或3GB。


Linux進程位址空間

    如上圖所示,Linux核心的記憶體管理整體較為龐大,包含底層的Buddy(夥伴)演算法,它用於管理每頁的佔用情況,內核空間的slab分配器以及用戶空間的C庫的二次管理。另外,核心也提供了頁快取的支持,用記憶體來快取磁碟,per backing device info flusher執行緒用來刷回髒的頁快取到磁碟。 Kswapd(交換程序)則是Linux中用於頁面回收(包括file-backed的頁和匿名頁)的核心線程,它採用最近最少使用(LRU)演算法進行記憶體回收。

3、虛擬檔案系統

#    如圖所示,


Linux虛擬檔案系統

    Linux虛擬檔案系統隱藏了各種硬體的特定細節,為所有裝置提供了統一的介面。而且,它獨立於各個特定的檔案系統,是對各種檔案系統的抽象。它為上層的應用程式提供了統一的vfs_read()、vfs_write()等接口,並調用具體底層文件系統或設備驅動中實現的file_operations結構體的成員函數。

4、網路介面

    網路介面提供了各種網路標準的存取和各種網路硬體的支援。如圖3.8所示,在Linux中網路介面可分為網路協定和網路驅動程序,網路協定部分負責實現每一種可能的網路傳輸協議,網路裝置驅動程式負責與硬體裝置通信,每一種可能的硬體設備都有對應的設備驅動程式。


Linux網路體系結構

    Linux核心支援的協定堆疊種類較多,如Internet、UNIX、CAN、NFC、Bluetooth、WiMAX、IrDA等,上層的應用程式統一使用套接字介面。

5、進程間通訊

    進程間通訊支援進程之間的通信,Linux支援進程間的多種通訊機制,包含信號量、共享記憶體、訊息佇列、管道、UNIX域套接字等,這些機制可協助多個進程、多資源的互斥存取、進程間的同步和訊息傳遞。在實際的Linux應用程式中,人們更趨向於使用UNIX域套接字,而不是System V IPC中的消息佇列等機制。 Android核心則新增了Binder進程間通訊方式。

Linux核心5個組成部分之間的依賴關係如下:

  • 進程調度與記憶體管理之間的關係:這兩個子系統互相依賴。在多程式環境下,程式要運行,則必須為之建立進程,而創建進程的第一件事情,就是將程式和資料裝入記憶體。

  • 進程間通訊與記憶體管理的關係:進程間通訊子系統要依賴記憶體管理支援共享記憶體通訊機制,這種機制允許兩個行程除了擁有自己的私有空間之外,還可以訪問共同的記憶體區域。

  • 虛擬檔案系統與網路介面之間的關係:虛擬檔案系統利用網路介面支援網路檔案系統(NFS),也利用記憶體管理支援RAMDISK設備。

  • 記憶體管理與虛擬檔案系統之間的關係:記憶體管理利用虛擬檔案系統支援交換,交換進程定期由調度程式調度,這也是記憶體管理依賴進程調度的原因。當一個進程存取的記憶體映射被換出時,記憶體管理向虛擬檔案系統發出請求,同時,掛起目前正在運行的進程。

    除了這些依賴關係外,核心中的所有子系統還要依賴一些共同的資源。這些資源包括所有子系統都用到的API,如分配和釋放記憶體空間的函數、輸出警告或錯誤訊息的函數及系統提供的偵錯介面等。

相關推薦:《Linux影片教學

以上是linux核心的子系統有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

探秘Linux核心功能:五大部分的詳細介紹 探秘Linux核心功能:五大部分的詳細介紹 Mar 21, 2024 am 09:57 AM

Linux核心作為作業系統的核心部分,承擔管理硬體資源、提供系統呼叫等重要功能。本文將深入探討Linux核心的五大大部分,包括進程管理、檔案系統、網路通訊、裝置驅動和記憶體管理,並提供詳細的介紹和程式碼範例。一、進程管理進程的創建在Linux核心中,進程的創建透過fork()系統呼叫來實現。下面是一個簡單的範例程式碼:#include

實戰 | RISC-V Linux入口位址2M預留記憶體優化 實戰 | RISC-V Linux入口位址2M預留記憶體優化 Aug 01, 2023 pm 03:37 PM

上篇分析了RISC-V Linux啟動的頁表創建,提到RISC-V Linux入口地址必須2M對齊,今天講講如何解決2M對齊的問題,或者說如何優化部分內存。

深入探索Linux內核原始碼分佈 深入探索Linux內核原始碼分佈 Mar 15, 2024 am 10:21 AM

這是一篇深度探索Linux內核原始碼分佈的關於1500字的文章。因為篇幅有限,我們將重點介紹Linux核心原始碼的組織結構,並提供一些具體的程式碼範例,以幫助讀者更好地理解。 Linux核心是一個開源的作業系統內核,其原始碼託管在GitHub上。整個Linux核心原始碼分佈非常龐大,包含了數十萬行程式碼,涉及多個不同的子系統和模組。要深入了解Linux核心原始碼

非MMU的支援是由Linux核心的uClinux移植提供的嗎? 非MMU的支援是由Linux核心的uClinux移植提供的嗎? Jan 26, 2024 pm 05:18 PM

篇幅長,技術內容多,點選關注不走散。序言:了解Linux核心一個電腦系統是一個硬體和軟體的共生體,它們相互依賴,不可分割。電腦的硬體linux核心移植步驟,富含週邊設備、處理器、記憶體、硬碟和其他的電子設備組成電腦的缸體。並且沒有軟體來操作和控制它,自身是不能工作的。完成這個控制工作的軟體就稱為作業系統,在Linux的術語中被稱為“核心”,也可以稱為“核心”。 Linux核心的主要模組(或元件)分成以下幾個部分:儲存管理、CPU和行程管理、檔案系統、裝置管理和驅動程式、網路通訊linux論壇,以及系

Linux核心TCP協定棧優化的秘密技巧揭示 Linux核心TCP協定棧優化的秘密技巧揭示 Jan 28, 2024 am 09:39 AM

尊敬的讀者們,您好!在此,我有幸與您分享我作為資深網路工程師,以其專業的技術在Linux內核TCP協議棧的研發及優化工作中所積累下的寶貴經驗與技巧。相信透過此文,我們能互相學習、探討,為對該領域有著濃厚興趣或正在進行相關工作的你們帶來實際且有益的參考資料。 1.TCP連線建立TCP連線建立乃是TCP協定棧關鍵事務,然而面臨諸多連線問題並不少見。經過深思熟慮及詳細調試,我挖掘出一些普遍存在且實用的問題及其解決方案,包括防範SYN洪氾攻擊(可透過調整系統參數)及應對網絡擁塞(亦即運用TCPFastOp

Linux核心:揭秘電腦作業系統的隱形大BOSS Linux核心:揭秘電腦作業系統的隱形大BOSS Mar 24, 2024 am 09:10 AM

论述了Linux内核在计算机操作系统中发挥重要作用的观点linux内核设计和实现,通过深入解析Linux内核设计及实际应用,揭示了它在该领域的显著地位和影响力量。1.优化的内存管理通过采用虚拟内存管理技术,Linux内核能高效率地完成内存分配与回收。在置换页面算法帮助下linux内核设计和实现,精确处理物理内存至虚拟内存之间的映射关系。依据应用程序具体需求,实现可动调整,从而提升了整个系统性能表现。2.强大的进程管理内核借助其卓越的多任务处理技术,使多个进程能够和谐共处于单一系统中。精心制定的进

探討安卓系統與Linux核心的關係 探討安卓系統與Linux核心的關係 Mar 14, 2024 pm 12:48 PM

安卓系統與Linux核心是息息相關的兩個實體,它們之間的關係緊密而又複雜。在安卓系統中,Linux核心扮演著重要的角色,為安卓系統提供了底層的硬體驅動和系統呼叫支援。本文將探討安卓系統與Linux核心之間的關係,以及它們是如何互動、協同工作的,同時提供一些具體的程式碼範例。安卓系統是基於Linux核心開發的行動作業系統,主要用於智慧型手機、平板電腦等行動裝置。 L

你真的會調試 Linux 核心故障嗎,看完這篇後你會茅塞頓開的! 你真的會調試 Linux 核心故障嗎,看完這篇後你會茅塞頓開的! Aug 03, 2023 pm 04:50 PM

Linux核心是作業系統的核心,它控制對系統資源(例如:CPU、I/O裝置、實體記憶體和檔案系統)的存取。在引導過程中以及系統運行時,核心會將各種訊息寫入核心環形緩衝區。這些訊息包括有關係統操作的各種資訊。

See all articles