操作系統(tǒng)概念
操作系統(tǒng)屬于軟件范疇,負責管理系統(tǒng)的硬件資源。OS具備的功能:1.為應用程序提供執(zhí)行環(huán)境。2.為多用戶和應用程序管理計算機的硬件資源。3.虛擬化功能。4.支持并發(fā)。
宏內核與微內核架構
宏內核:所有的內核代碼都編譯成二進制文件并運行在一個大內核地址空間中,整體架構如下:
微內核:把操作系統(tǒng)分成多個獨立的功能模塊,每個功能模塊之間的訪問需要通過“消息”來完成,因此效率沒有宏內核架構高:
宏內核的優(yōu)點:設計簡潔,性能好
微內核的優(yōu)點:模塊化的特點更具實時性
工程實踐中,linux不斷融入微內核的精華到內核中,例如模塊化設計思想,動態(tài)加載內核模塊等,因此linux內核支持模塊化開發(fā),許多功能都可以編譯為一個模塊,并且支持動態(tài)的加載和卸載(例如許多設備的驅動程序),這一點上宏內核架構就做不到,宏內核類似于靜態(tài)編譯的結果而不支持動態(tài)取舍。
OS允許CPU運行在用戶態(tài)和內核態(tài),而 linux 使用ring0和ring3兩種模式實現(xiàn)內核態(tài)和用戶態(tài)。
linux內核為內核態(tài)和用戶態(tài)的切換提供機制:系統(tǒng)調用(本質是中斷,中斷是進入內核態(tài)的唯一方法)
用戶程序可能大部分運行在用戶態(tài),但可能需要使用系統(tǒng)資源(例如磁盤),此時需要通過系統(tǒng)調用的方法進入內核空間。
體系結構Arch抽象層:
linux內核支持多種架構,例如ARM,X86等,目前已經支持幾十種體系結構,而Arch抽象層抹去了不同架構之間的硬件差異,做了一層統(tǒng)一的抽象。在linux內核5.6.18版本的源碼中,直接把不同架構做一個分目錄操作,以提供對各個架構的支持。
內核在操作系統(tǒng)中的位置
- 用戶進程:用戶應用程序是運行在 Linux 操作系統(tǒng)最高層的一個龐大的軟件集合。當一個用戶程序在操作系統(tǒng)之上運行時,它成為操作系統(tǒng)中的一個進程。
- 系統(tǒng)調用接口:在應用程序中, 可通過系統(tǒng)調用來調用操作系統(tǒng)內核中特定的過程, 以實現(xiàn)特定的服務。系統(tǒng)調用本身也是由若干條指令構成的過程。但它與一般的過程不同,主要區(qū)別是:系統(tǒng)調用是運行在內核態(tài)(或叫系統(tǒng)態(tài)),而一般過程是運行在用戶態(tài)。在 Linux 中,系統(tǒng)調用是內核代碼的一部分。
- Linux內核:內核是操作系統(tǒng)的靈魂,它負責管理磁盤上的文件、內存,負
責啟動并運行程序,負責從網絡上接收和發(fā)送數(shù)據包等。簡言之,內核實際是抽象的資源操作到具體硬件操作細節(jié)之間的接口。 - 硬件
Linux內核抽象結構
linux內核有五大主要子系統(tǒng),他們之間的關系如下:
(1)進程調度(SCHED)控制著進程對 CPU 的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的進程??蛇\行進程實際是僅等待 CPU 資源的進程,如果某個進程在等待其他資源,則該進程是不可運行進程。Linux 使用了比較簡單的基于優(yōu)先級的進程調度算法選擇新的進程。
(2)內存管理(MM)允許多個進程安全地共享主內存區(qū)域。Linux 的內存管理支持虛擬內存,即在計算機中運行的程序,其代碼、數(shù)據和堆棧的總量可以超過實際內存的大小,操 作系統(tǒng)只將當前使用的程序塊保留在內存中,其余的程序塊則保留在磁盤上。必要時,操作系統(tǒng)負責在磁盤和內存之間交換程序塊。
內存管理從邏輯上可以分為硬件無關的部分和硬件相關的部分。硬件無關的部分提供了進程的映射和虛擬內存的對換;硬件相關的部分為內存管理硬件提供了虛擬接口。
?。?)虛擬文件系統(tǒng)(Virtul File System,VFS)隱藏了各種不同硬件的具體細節(jié),為所有設備提供了統(tǒng)一的接口,VFS 還支持多達數(shù)十種不同的文件系統(tǒng),這也是 Linux 較有特色的一部分
虛擬文件系統(tǒng)可分為邏輯文件系統(tǒng)和設備驅動程序。邏輯文件系統(tǒng)指 Linux 所支持的文件系統(tǒng),如 ext2,fat 等,設備驅動程序指為每一種硬件控制器所編寫的設備驅動程序模塊。
(4)網絡接口(NET)提供了對各種網絡標準協(xié)議的存取和各種網絡硬件的支持。網絡接口可分為網絡協(xié)議和網絡驅動程序兩部分。網絡協(xié)議部分負責實現(xiàn)每一種可能的網絡傳輸協(xié)議,網絡設備驅動程序負責與硬件設備進行通信,每一種可能的硬件設備都有相應的設備驅動程序。
(5)進程間通信(IPC) 支持進程間各種通信機制。文章來源:http://www.zghlxwxcb.cn/news/detail-488010.html
Linux內核源碼組織
為了深入地了解Linux的實現(xiàn)機制,還必須閱讀Linux的內核源代碼,下面是對有關源代碼的介紹。內核源代碼的版本多,對不同的內核版本,系統(tǒng)調用一般是相同的。新版本也許可以增加一個新的系統(tǒng)調用,在大多數(shù)情況下,設備文件將仍然相同,而另一方面,版本之間的內部接口有所變化。文章來源地址http://www.zghlxwxcb.cn/news/detail-488010.html
- arch目錄:不同平臺體系相關代碼;
- block目錄:塊驅動設備
- certs目錄:與認證和簽名相關代碼
- crypto目錄:內核常用加密、壓縮算法等代碼;
- Documentation目錄:描述模塊功能與協(xié)議規(guī)范代碼;
- Drivers目錄:驅動程序(USB總線、PCI總線、顯卡驅動等等);
- firmware目錄:主要是一些二進制固件;
- fs目錄:虛擬文件系統(tǒng)代碼;
- include目錄:內核源碼依賴絕大部分頭文件;
- init目錄:內核初始化代碼,聯(lián)系到內存各組件入口;
- ipc目錄:進程間通信,比如共享內存、信號量匿名管道等等;
- kernel目錄:內核核心代碼,包括進程管理、IRQ、時間等等;
- lib目錄:C標準庫的子集;
- mm目錄:內存管理相關實現(xiàn);
- net目錄:網絡協(xié)議代碼,比如TCP、IPv6、WiFi、以太網實現(xiàn)等等;
- samples目錄:內核實列代碼;
- scripts目錄:編譯和配置內核所需腳本;Perl/bash
- security目錄:內核安全模型相關代碼;如selinux
- sound目錄:聲卡驅動源碼;
- tools目錄:與內核交互;
- usr目錄:用戶打包和壓縮內核的實現(xiàn)源碼;
- virt目錄:/kvm虛擬化目錄相關支持實現(xiàn)。
- COPYING:許可和授權信息。Linux內核在GPLv2許可證下授權。該許可證授予任何人有權免費去使用、修改、分發(fā)和共享源代碼和編譯代碼。然而,沒有人可以出售源代碼。
- CREDITS : 貢獻者列表
- Kbuild : 這是一個設置一些內核設定的腳本。打個比方,這個腳本設定一個 ARCH變量,這是開發(fā)者想要生成的內核支持的處理器類型。
- Kconfig: 這個腳本會在開發(fā)人員配置內核的時候用到
- MAINTAINERS : 這是一個目前維護者列表,他們的電子郵件地址,主頁,和他們負責開發(fā)和維護的內核的特定部分或文件。當一個開發(fā)者在內核中發(fā)現(xiàn)一個問題,并希望能夠報告給能夠處理這個問題的維護者時,這是是很有用的。
- Makefile :這個腳本是編譯內核的主要文件。這個文件將編譯參數(shù)和編譯所需的文件和必要的信息傳給編譯器。
- README : 這個文檔提供給開發(fā)者想要知道的如何編譯內核的信息。
- REPORTING-BUGS : 這個文檔提供如何報告問題的信息。
到了這里,關于linux內核整體架構的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!