您好,登錄后才能下訂單哦!
這篇文章主要介紹“linux的內核有哪些子系統”,在日常操作中,相信很多人在linux的內核有哪些子系統問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”linux的內核有哪些子系統”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
linux內核的子系統有5個:1、 進程調度控制系統(SCHED);2、內存管理系統(MM),主要作用是控制多個進程安全地共享主內存區域;3、虛擬文件系統(VFS);4、網絡接口(NET);5、進程間通信(IPC)。
本教程操作環境:Ubuntu 16.04系統、Dell G3電腦。
內核:
在計算機科學中是一個用來管理軟件發出的數據I/O(輸入與輸出)要求的計算機程序,將這些要求轉譯為數據處理的指令并交由中央處理器(CPU)及計算機中其他電子組件進行處理,是現代操作系統中最基本的部分。它是為眾多應用程序提供對計算機硬件的安全訪問的一部分軟件,這種訪問是有限的,并由內核決定一個程序在什么時候對某部分硬件操作多長時間。直接對硬件操作是非常復雜的。所以內核通常提供一種硬件抽象的方法,來完成這些操作。通過進程間通信機制及系統調用,應用進程可間接控制所需的硬件資源(特別是處理器及IO設備)。
linux內核的子系統有哪些
Linux內核主要由進程調度(SCHED)、內存管理(MM)、虛擬文件系統(VFS)、網絡接口(NET)和進程間通信(IPC)5個子系統組成,如下圖所示。
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的內核有哪些子系統”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。