原创 《Linux內核設計與實現》讀書筆記——內核數據結構

鏈表 簡單鏈表: 雙向鏈表: 環形鏈表: 如果對數據集合的主要操作是遍歷數據,就使用鏈表。   雙向鏈表 Linux不是將數據結構塞入鏈表,而是將鏈表節點塞入數據結構。 鏈表節點(include\linux\list.h): /*

原创 《Linux內核設計與實現》讀書筆記——塊IO層

塊設備 系統中能夠隨機訪問固定大小數據片的硬件設備成爲塊設備。比如硬盤,軟盤,光盤,閃存等。 另一種基礎設備類型是字符設備。比如鍵盤,串口等。 塊設備最小的尋址單元是扇區。 扇區大小是2的整數倍,一般是512字節。 扇區的大小是設備的物理

原创 《Linux內核設計與實現》讀書筆記——內存管理

頁 內核把物理頁作爲內存管理的基本單位。 內存管理單元(MMU)是用來管理內存並將虛擬地址轉換爲物理地址的硬件。 內核中的物理頁由page結構體表示(include\linux\mm_types.h,稍有刪減): struct page

原创 《Linux內核設計與實現》讀書筆記——內核同步介紹

臨界區和競爭條件 訪問和操作共享數據的代碼段稱爲臨界區(臨界段)。 多個執行線程(如進程、中斷處理程序,內核線程等)同時執行臨界區代碼,可能導致資源共享,因此需要避免在臨界區中併發訪問。 因此臨界區代碼在執行結束前不可被打斷,整個臨界區需

原创 《Linux內核設計與實現》讀書筆記——內核同步方法

原子操作 原子操作是其它同步方法的基石。 內核提供了兩組原子操作接口,分別是針對整數和針對單獨的位的操作。 針對整數的原子操作只能對atomic_t類型的數據進行處理(include\linux\types.h)。 typedef st

原创 《Linux內核設計與實現》讀書筆記——調試

printk() printk()在“任何時候任何地方”都能調用,除了在終端初始化前的某些地方。 還有個early_printk(),能夠比printk()還要早就能使用。 一個例子: printk(KERN_INFO "Warp PO

原创 《Linux內核設計與實現》讀書筆記——虛擬文件系統

虛擬文件系統 虛擬文件系統爲用戶空間程序提供了文件和文件系統相關的接口。 VFS提供了通用文件系統模型。 實際文件系統通過編程提供VFS所期望的抽象接口和數據結構。   VFS對象及其數據結構 VFS以後四個主要的對象: 超級塊對象:

原创 《Linux內核設計與實現》讀書筆記——設備與模塊

設備類型 在所有Unix系統中爲了統一普通設備的操作所採用的分類。   to be continued...

原创 《Linux內核設計與實現》讀書筆記——可移植性

內核的可以一致性策略 中間路線: 差不多所有的接口和核心代碼都是獨立於硬件體系架構的C語言代碼; 在對性能要求很嚴格的部分,內核的特性會根據不同的硬件體系進行調整; 與體系架構相關的代碼都放在arch/xx/目錄中,xx是體系架構名,比如

原创 《Linux內核設計與實現》讀書筆記——系統調用

C庫、API和系統調用 一般情況下,應用程序通過用戶空間實現的應用編程接口(API)而不是直接通過系統調用來編程。 LInux系統調用像大多數Unix系統一樣,作爲C庫的一部分提供。 C庫實現了Unix系統的主要API,包括標準C庫函數和

原创 《Linux內核設計與實現》讀書筆記——下半部和推後執行的工作

中斷處理程序的侷限 中斷處理程序以異步方式執行,有可能打斷其它重要代碼; 需要避免被打斷的代碼停止時間過長; 當前中斷處理程序正在執行時,其它中斷會被屏蔽; 中斷處理程序執行越快越好; 被屏蔽的中斷會在後續激活,而不是放棄; 中斷處理程序

原创 《Linux內核設計與實現》讀書筆記——進程地址空間

進程地址空間 內核除了管理本身的內存之外,還需要管理用戶空間的內存。 用戶空間中進程的內存稱爲進程地址空間,也就是系統中每個用戶空間進程所看到的內存。 Linux採用虛擬內存技術,因此係統中所有的進程之間以虛擬方式共享內存。 對一個進程而

原创 《Linux內核設計與實現》讀書筆記——進程調度

進程調度程序 進程調度程序負責決定將哪個進程投入運行,何時運行以及運行多長時間。 在運行態進程之間分配有限的處理器時間資源。 多任務系統分爲搶佔式和非搶佔式。 Linux使用搶佔式。(大部分現代系統都是搶佔式)   策略 IO消耗型進程:

原创 《Linux內核設計與實現》讀書筆記——Linux內核簡介

基礎 書中說明使用的內核源碼版本:Linux 2.6.34 國內可以在如下網站下載內核的鏡像: http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/   什麼是操作系統

原创 《Linux內核設計與實現》讀書筆記——從內核出發

內核下載 內核源碼一般安裝在/usr/src/linx目錄下。 這裏Ubuntu的例子中默認並沒有安裝,但是可以通過命令下載得到: apt install linux-source 下載linux-2.6.34.1.tar.bz2,解