Linxu核心設計與實現 第2章 從核心出發

2021-08-13 13:28:50 字數 2997 閱讀 5927

主要內容:

linux核心基本知識

www.kernel.org

git clone git:

git pull

核心發布:

patch -p1 < ../patch-x.y.z

目錄說明

arch

特定體系結構的**

block

塊裝置i/o層

crypo

加密api

documentation

核心原始碼文件

drivers

裝置驅動程式

firmware

使用某些驅動程式而需要的裝置韌體

fsvfs和各種檔案系統

include

核心標頭檔案

init

核心引導和初始化

ipc程序間通訊**

kernel

像排程程式這樣的核心子系統

lib同樣核心函式

mm記憶體管理子系統和vm

net網路子系統

samples

示例,示範**

scripts

編譯核心所用的指令碼

security

linux 安全模組

sound

語音子系統

usr早期使用者空間**(所謂的initramfs)

tools

在linux開發中有用的工具

virt

虛擬化基礎結構

copying:核心許可證

credits:核心開發者列表

maintainers:維護者列表

makefile:核心makefile

(1)配置項:

(2)配置 make menuconfig

(3)編譯 make

(1)對於核心來說,哪怕是乙個c庫的子集都太大太低效。

(2)大部分常用的c庫函式在核心中都實現了,如操作字串的函式組位於lib/string.c檔案中。只要包含即可。

(3)標頭檔案

基本標頭檔案在核心目錄下的include中,--》 include/linux/inotify.h

體系結構相關的標頭檔案在arch/arm/include/asm中,核心通過asm引用。

(4)printk()函式

把格式化好的字串拷貝到核心日誌緩衝區上。syslog程式就可以通過讀取該緩衝區來獲取核心資訊。

printk(kern_err "this is a error \n");

(1)linux核心是用c語言寫的。核心不完全符合ansi c標準。

(2)內聯函式:

函式會在呼叫的地方展開,消除函式呼叫和返回所帶來的開銷。

c99和gun c都支援內聯函式

什麼時候用:對時間要求高,本身長度又比較短的函式定義為內聯函式。

定義形式:static inline void wolf(),必須在使用前定義(一般在標頭檔案中定義)。

(3)內聯彙編

核心使用彙編+c實現,偏向體系結構底層或者時間要求高的用彙編實現。

(4)分支宣告

likely() 、unlikely()

(1)使用者程式非法記憶體訪問,核心會發現錯誤,傳送sigsegv訊號,並結束整個程序。

(2)核心錯誤會導致oops

核心需要特性都要求能夠併發的訪問共享資料。要求存在同步機制不出現競爭條件:

大部分c**應該與體系結構無關

核心擁有系統最高的管理權

補充學習:

(1)libc庫

libc是s

tantard c library的簡稱,它是符合ansi c標準的

乙個標準函式庫

。libc庫提供c語言中所使用的巨集,型別的定義,字串操作符,數學計算函式以及輸入輸出函式等。正如ansi c是c語言的標準一樣,libc只是乙個函式庫標準,每個作業系統都會按照該標準對標準庫進行具體實現。通常我們所說的libc是特指某個作業系統的標準庫,比如:在linux作業系統下所說的libc即glibc。glibc是類unix作業系統中使用最廣泛的libc庫,它的全稱是gnu c library.

(2)syslog程式

syslog是linux系統預設的日誌守護程序

。預設的主配置檔案和輔助配置檔案分別是/etc/syslog.conf和/etc/sysconfig/syslog檔案。通常,syslog 接受來自系統的各種功能的資訊,每個資訊都包括重要級。/etc/syslog.conf 檔案通知 syslogd 如何根據裝置和資訊重要級別來報告資訊。

(3)gun c

gnu計畫,又稱革奴計畫,是由richard stallman在2023年9月27日公開發起的。它的目標是建立一套完全自由的作業系統。它在編寫linux的時候自己製作了乙個標準成為 gnu c標準。ansi 美國國家標準協會,它對c做的標準ansi c標準後來被國際標準協會接收成為 標準c 所以 ansi c 和標準c是乙個概念。

glibc和libc都是linux下的c函式庫,

libc是linux下的ansi c的函式庫;

glibc是linux下的gun c的函式庫;

ansi c和gnu c有什麼區別呢?

ansi

c是基本的c語言函式庫,包含了c語言最基本的庫函式。

而gnu

c函式庫是一種類似於第三方外掛程式的東西,由於linux是用c語言寫的,所以linux的一些操作是用c語言實現的,所以gun組織開發了乙個c語言的庫.

Linxu核心設計與實現 第5章 系統呼叫

使用者程序與核心互動的介面,使應用程式受限的訪問硬體裝置,提供了建立新程序並與已有程序通訊的機制,也提供了申請作業系統其它資源的能力。應用程式發出請求,核心來滿足這些請求,或者返回乙個錯誤。1 系統呼叫在使用者空間和硬體裝置之間新增了乙個中間層 為使用者空間提供抽象的介面 保證了系統的穩定與安全 2...

Linxu核心設計與實現 第4章 程序排程

主要內容 1 程序排程 是確保核心穩定工作的乙個核心子系統。在可執行態程序之間分配有限的處理器資源的核心子系統。2 作用 程序排程決定將哪個程序投入執行,何時執行,執行多長時間。3 效果 通過合理的排程,系統資源才能最大限度的發揮,多程序才會有併發執行的效果。4 限制 只要有可執行的程序,那麼總會有...

《Linux核心設計與實現》 第4章(程序排程)

排程程式 在可執行態程序之間分配有限處理器時間資源的核心子系統 多工作業系統 同時併發地互動執行多個程序的作業系統 linux提供了搶占式的多工模式,對程序強制的掛起動作即搶占 程序可分為 i o消耗型 和 處理器消耗型 i o消耗型指程序的大多數時間用來提交i o請求或等待i o請求 處理器消費型...