Linux核心入門(一) 體系架構

2021-09-05 01:38:49 字數 2239 閱讀 7233

linux是一套免費使用和自由傳播的類unix作業系統,它最先用於基於x86系列cpu的計算機上。這個系統是由世界各地的成千上萬的程式設計師設計和實現的。其目的是建立不受任何商品化軟體的版權制約的、全世界都能自由使用的unix相容產品。

我們不去介紹作業系統的歷史了,也不管作業系統這門學科上對作業系統的分類了,閒話少說,linux作業系統只是乙個非常新的作業系統。它不拘泥於某種特定的作業系統型別,從核心上講,它是乙個分時作業系統,但又具備實時作業系統的特性;從體系上講,它是乙個單核心作業系統,但又具備模組化的微核心特徵;它支援各種網際協議,所以又是乙個網路作業系統;它支援大規模集群、網格計算,甚至現在還有人在它上面架設雲計算、雲儲存等環境,所以它又是乙個分布式作業系統…… 

不管怎麼說,linux的開源性質決定了世界上各式各樣的人可以按照自己的需求去發展它、完善它,於是乎linux就具備了高效能、高可用、可擴充套件、可移植等多種特性。

當今it業界,小到嵌入式、手機、pc機,大到大規模集群、網格、雲,都能看到linux的身影。本人寫一系列瘋狂linux核心博文的目的,就是讓廣大的中國同胞了解到這一偉大作業系統的內部真實面貌,讓你感受到它為什麼偉大。

linux是乙個作業系統,也是乙個軟體。既然乙個軟體,肯定就要遵循所有軟體的特點,那就是其本質=演算法+資料結構+文件。本文就從他的架構入手,一步步進入其內部。

1 linux體系結構

上面就是一幅我認為還比較完美的linux架構圖。從圖中我們可以看見,使用者使用到的應用程式,最終會通過中斷的形式訪問核心。詳細一點描述就是:應用程式向核心發出系統呼叫這一特殊中斷,隨後包含該程式的程序又使用者態進入核心態,就可以訪問核心提供的各式各樣的函式和資料結構了。更具體的描述我們隨後再細說,先來介紹一些概念吧:

「檔案」和「程序」是linux核心中的兩個最基本實體和中心概念,linux系統的所有操作都是以這兩者為基礎的。整個系統核心由以下五個部分組成:

① 虛擬檔案系統:檔案管理和磁碟快取記憶體管理(節點和空間管理)

② i/o裝置管理:塊裝置驅動(隨機訪問裝置)、原始裝置(raw裝置,字元裝置,裸裝置)

③ 程序控制:程序的排程、同步和通訊

④ 儲存管理:在主存與cpu二級儲存之間對程式進行搬遷

⑤ 網際協議棧:實現各式各樣的網路協議。

2 一般程式的執行

乙個程序在執行系統呼叫exec期間(exec("命令名",引數)),就把可執行檔案裝入本程序的三個區域中:

·正文區:對應可執行檔案的正文段

·資料區:對應可執行檔案的資料標識段

·堆疊區:新建立的程序工作區

堆疊是乙個重要的概念,其主要用於傳遞引數,保護現場,存放返回位址以及為區域性動態變數提供儲存區。我們後面的博文將會重點討論這個,因為堆疊這個東西太重要了。

程序在核心態下執行時的工作區為核心棧,在使用者態下執行時的工作區為使用者棧。核心棧和使用者棧不能交叉使用。

來,我們來看乙個程式,使用者在標準終端上敲入:copy oldfile newfile。此處,oldfile 是乙個現存盤名,而 newfile 是乙個新檔名。有:(其中,變數version是初始化資料;陣列buffer是未初始化的資料)

#include

char buffer[2048];

int version=1;

main(int argc, char *argv)   /*系統引用main時需要提供argc作為表argv中的 */

fdold = open(argv[1], o_rdonly);  /* 開啟原始檔唯讀 */

if (fdold == -1)

fdnew = creat(argv[2], 0666);     /* 建立可為所有使用者讀寫的目標檔案 */

if(fdnew == -1)

copy(fdold, fdnew);

exit(0);

}copy(int old, int new)

當main被呼叫時,main中的引數argc和argv、變數fdold、fdnew及相關函式位址資訊就會被壓棧;並且無論何時,遇到下乙個函式(本例中是 copy 函式),其引數和變數以及相關位址也會被壓棧:(假設程式不進入三個if程式段中的堆疊過程,其實if後也有個壓棧的過程,我們省略了,但千萬別以為沒有)

我們看到:linux的程序工作在兩種狀態——核心態(kernel mode)和使用者態(user mode)。 所以,linux系統的核心棧和使用者棧是分開的。使用者棧儲存的是程式中的一般函式和系統呼叫函式相關資訊,對使用者是可見的; 核心棧儲存的是核心中的函式或資料,如getblk函式等,對使用者是透明的。

那麼,程式什麼時候使用使用者棧,什麼時候使用核心棧呢?且聽下回分解。

MySQL 一 體系結構

一 mysql 體系結構 1 client connectors 接入方 2 management serveices utilities 系統管理和控制工具。例如 備份恢復 mysqldump mysql複製集群 分割槽管理 3 connection pool 連線池。管理緩衝使用者連線 使用者名...

Linux核心體系結構 一

linux核心的體系結構主要分為5個模組 程序排程模組,記憶體管理模組,檔案系統模組,程序間通訊模組和網路介面模組。程序排程模組主要負責控制程序對cpu資源的使用,策略是各程序能夠公平合理訪問cpu,同時保證核心能夠及時執行硬體操作。記憶體管理模組主要確保程序能夠安全共享機器記憶體區,並且支援虛擬檔...

(一)Linux核心體系結構

作業系統核心程式,他主要用於對硬體資源的抽象和訪問排程。在單核心模式系統中,作業系統提供服務的流程為 應用主程式使用指定的引數執行系統呼叫指令 int x80 使cpu從使用者態 user mode 切換到和心態 kernel mode 然後系統根據引數值呼叫特定的系統呼叫服務程式,而這些服務程式則...