Linux Kernel(核)
可以說:The linux kernel is important in that it serves as the glue between the user and the computer hardware. The kernel is the operating system.
Linux 作業系統的一個component 就是kernel(核)。 kernel 就像一座橋樑一樣, 將我們這些user 和 計算機的硬體(例如RAM, CPU, 以及其他的一些例如鍵盤滑鼠硬體資源) 聯絡起來了。
user和作業系統的kernel的關係如下所示:
我們在user space中, 或者我們有一個shell application, 想kernel 發出request, 例如列印一個message到螢幕上, 或者從鍵盤中讀取資訊等等。 kernel 收到這些請求之後, 去和Hardware 交流, 通過這樣, kernel 滿足我們的請求, 最終完成任務。
在kernel內部, 有如下的元件:
process Scheduler(程式排程器), memory managers(記憶體管理器)(注意是記憶體(RAM), 不是硬碟), I/O Scheduler(輸入輸出排程器), IPC(inter-process communications(程式之間的通訊)), Network services(網路服務), File system I/O。
process Scheduler: kernel 通過它使得CPU將時間均分為多個程式。
程式: Program that are actively running in memory(即正在執行的程式。 或者更準確的說, 程式是一個被載入到記憶體中, 並且準備執行的程式)。 程式可能執行在單個電腦上, 也可能執行在由網路連線的多個電腦中。
memory manager(記憶體管理器): kernel通過這個元件管理shell, 為不同的applications 分配記憶體空間。
I/O sheduler : kernel 利用這個元件對輸入輸出裝置進行管理。 例如鍵盤啊, 螢幕啊啥的。
IPC: IPC module 含有a set of methods for the exchange of data among multiple threads in one or more porocesss(一個或者多個程式內部的多個執行緒之間交換資料資訊的)。 例如當多個執行緒(multiple threading )同時執行的時候, 需要保持同步(synchronization).。 總體來說, IPC module 中的methods 主要分為如下幾種:
message
passing(訊息傳遞), synchronization(同步), shared
memory(共享記憶體), and remote
procedure calls
Network services(網路服務): kernel 也提供用於網路服務的介面。 這樣你就可以訪問網路了。
File system I/O(檔案系統輸入輸出): Linux的 kernel 具有一個Virtual File system(虛擬檔案系統), 正是因為有個這個虛擬檔案系統, 我們的kernel才能夠同不同格式的檔案交流(talk to) in a uniform manner。 也就是說, Linux kernel中的 Virtual File system 具有一層抽象, 這樣我們就不用為不同格式的檔案獨特的的複雜性煩惱了。 所以虛擬檔案系統對於Linux 十分的重要。 而且, 這個虛擬檔案系統talks to device driver(裝置驅動器), 然後device driver(一段程式, 即驅動程式) 再talk to Hardware(硬體).。
關於kernel的工作情況, 如下:
user (human)在user space 或者shell applications 通過向kernel傳送request(請求) 來talk to kernel。我們需要注意的是kernel工作的模式總是privileged mode, 即kernel 可以access any aspect of the computer at any time, 控制著所有的RAM, 而且可以和(talik to)與計算機以及與計算機相連的所有的硬體交流。
但是我們的在user space, 或者shell application, 均不能talk to hardware, 例如鍵盤等等。 只能通過kernel 傳送請求。 硬體通過中斷和kernel交流。
我們可以下載kernel , 網站是 www.kernel.org。
我們也可以在Linux 終端(terminal)輸入:
uname -r 指令來檢視kernel的version(版本)(單詞r 代表release version):
3是major number
2是minor number。 如果這個數字是偶數, 則表示這個版本是stable的。 如果是奇數, 表明是實驗的。 即處於development stage。 上述的版本是stable.
0表示revision number。
一旦我們獲得了kernel的source, 可以解壓縮到 /usr/src:
相關文章
- 2022-05-18-空間靜態kernel核密度、空間動態kernel核密度工具更新
- Linux kernel mapLinux
- Linux動態列印kernel日誌Linux
- Understanding the linux kernel Chapter 6 Timing MeasurementsLinuxAPTREM
- Linux核心Kernel啟動過程Linux
- Linux kernel 堆溢位利用方法Linux
- Structure of Linux Kernel Device Driver(Part II)StructLinuxdev
- Linux Boot,Kernel 和 Service 介紹Linuxboot
- 在 Linux Mint 安裝 Linux Kernel 4.12(穩定版)Linux
- 編譯linux kernel預裝工具list編譯Linux
- Linux Kernel 5.9-rc3 釋出了Linux
- 【Linux】kernel.shmmax和shmall設定LinuxHMM
- Linux kernel 堆溢位利用方法(二)Linux
- Linux kernel 堆溢位利用方法(三)Linux
- linux kernel記憶體碎片防治技術Linux記憶體
- VirtualBox 7.0.8釋出:初步支援Linux Kernel 6.3Linux
- 人工智慧之機器學習線代基礎——核空間(Kernel Space)人工智慧機器學習
- linux系統關於kernel.sem調優Linux
- 如何進行Linux CPU中的Kernel space分析Linux
- 淺析Linux Kernel[5.11.0]記憶體管理(一)Linux記憶體
- Proxmox VE 8.1 Kernel 6.5.13-5-pve ,無法支援核顯 SR-IOV 的問題
- 2022-05-07-無條件、空間靜態、空間動態kernel核密度工具
- Exploiting “BadIRET” vulnerability (CVE-2014-9322, Linux kernel privilege escalation)Linux
- linux kernel 關於RSS/RPS/RFS/XPS的介紹Linux
- 在 Linux 中查詢 CPU 的核數Linux
- linux 核心 LINUX_VERSION_CODE 和 KERNEL_VERSION 宏定義 版本資訊Linux
- CentOS7/8 安裝 5+ 以上的Linux kernelCentOSLinux
- Kernel Method
- 如何處理錯誤訊息Please install the Linux kernel header filesLinuxHeader
- PostgreSQL 原始碼解讀(226)- Linux Kernel(虛擬記憶體)SQL原始碼Linux記憶體
- kernel_mktime() 詳解 —— Linux-0.11 學習筆記(四)Linux筆記
- Linux開機流程詳解:BIOS->MBR->GRUB->KernelLinuxiOS
- 核心引數kernel.shmall和kernel.shmmaxHMM
- wsl中用qemu執行linux kernel ,ping github.com有問題LinuxGithub
- Linus Torvalds發話:Rust For The Kernel可能會被合併到 Linux 5.20RustLinux
- PostgreSQL 原始碼解讀(229)- Linux Kernel(程式虛擬記憶體#3)SQL原始碼Linux記憶體
- PostgreSQL 原始碼解讀(227)- Linux Kernel(程式虛擬記憶體#2)SQL原始碼Linux記憶體
- CentOS7 編譯安裝最新的Linux Kernel 6.0 rc3CentOS編譯Linux
- disable Nouveau kernel driver