linux核心設計與實現 前言

2021-09-16 22:17:49 字數 1860 閱讀 3643

認真閱讀原始碼很重要,應該鑽研並嘗試著手改一些**,尋找乙個bug然後去修改它,改進你的硬體裝置的驅動程式

unix特點:

作業系統:指系統中負責完成最基本功能和系統管理的部分。包括:核心、裝置驅動程式、啟動引導程式、命令列shell或其他種類的使用者介面、基本的檔案管理和系統工具。

核心組成:中斷服務程式、程序排程程式、記憶體管理程式、網路/程序間通訊等。許多os的中斷服務程式,包括linux的,都不在程序上下文中執行,在乙個與所有程序無關的、專門的中斷上下文中執行。

應用程式通過系統呼叫與核心通訊。

linux支援動態載入核心模組

linux支援對稱多處理機制(smp)

linux核心可搶占

linux對執行緒的支援:核心不區分執行緒與其他一半的程序

linux提供裝置類的物件導向裝置模式、熱插拔,以及使用者空間的裝置檔案系統(sysfs)

核心有兩種:穩定的和處於開發中的。

主版本號.從版本號(偶數穩定,奇數不穩定).修訂版本號.穩定版本號

不過後來的版本不遵守這個了,比如4.16-rc6表示非穩定,4.16.0才是穩定

/usr/src/linux目錄

核心原始碼樹:…

編譯核心

配置核心:**make menuconfig**/ make gconfig, make defconfig會基於預設配置建立,make oldconfig的作用是備份當前.config檔案為.config.old,如若make config/menuconfig設定不當可用於恢復先前的.config。

make -jnmake modules_install,將所有已編譯的模組安裝到正確的主目錄/lib/modules下

編譯時,也會在核心原始碼樹的根目錄下建立乙個system.map,這是乙個符號對照表,將核心符號和他們的起始位址對應起來。

標頭檔案基本的標頭檔案:include目錄(#include)

體系結構相關:arch//include/asm目錄(#include)

gnu c

linux 上可用的 c 編譯器是 gnu c 編譯器。 gnu c 對標準 c 進行一系列擴充套件,以增強標準 c 的功能。不符合ansi c標準,核心開發者總是要用到gcc的拓展部分。核心開發使用的c語言涵蓋iso c99和gnu c擴充套件特性。

內聯函式:對時間要求高,而本身長度較短的函式定義為內聯

static inline void wolf(unsigned long tail_size)

需要使用static作為關鍵字、inline進行限定;內聯函式必須在使用前就定義好,否則無法展開(static inline的內聯函式,一般情況下不會產生函式本身的**,而是全部被嵌入在被呼叫的地方。如果不加static,則表示該函式有可能會被其他編譯單元所呼叫,所以一定會產生函式本身的**。所以加了static,一般可令可執行檔案變小。核心裡一般見不到只用inline的情況,而都是使用static inline。)

內聯彙編:asm()嵌入彙編在**

分支宣告:likely()和unlikely(),內建指令優化

沒有記憶體保護機制:核心錯誤導致oops,核心中的記憶體都不分頁

容積小而固定的棧:8k或16k

同步和併發:自旋鎖和訊號量

linux 核心設計與實現相關

有待繼續補充。第一章 linux核心簡介 需要注意 核心開發其實並不難。第二章 從核心出發 核心開發需要注意 1 沒有c庫,c庫太大了 2 沒有記憶體保護機制 3 不要輕易使用浮點數 4 可移植的重要性 5 同步和併發 疑問 編譯和安裝核心?必須在linux下麼?其他機器安裝了gcc編譯器呢?能否編...

Linux核心設計與實現總結。

1.程序管理。本章主要是介紹程序的乙個靜態的狀態,包括系統如何組織程序。建立,啟動,到最後死亡的乙個概念性認識,沒有更加深刻的知識。2.程序排程。本章比較重要。1.搶占式排程策略。2.倆程序間上下文切換 有倆函式 switch mm 和 switch to倆函式完成此功能。具體細節需要閱讀其他書籍 ...

linux核心設計與實現 核心同步介紹

小結 核心同步方法 順序和屏障 第10章 核心同步方法 臨界區 訪問和操作共享資料的 競爭條件 兩個執行執行緒有可能在同乙個臨界區中同時執行。同步 避免併發和防止競爭條件。鎖的形式和鎖的粒度各不相同,各個鎖機制之前的主要區別在於 當鎖被其他執行緒持有時,其他的行為表現。造成併發執行的原因 使用者空間...