《第一章》簡介和概述
實現策略:微內核、宏內核
命名空間:全局資源具有不同的分組
由於被中斷的進程與中斷原因沒有什么關系,因此內核無權訪問被中斷進程用戶空間的內容。
頁表
虛擬地址的分割:
頁表的一個特色在於:對虛擬地址空間中不需要的區域,不必創建中間頁目錄或者頁表,與直接使用一級頁表數組的方式相比,節省了大量的內存。
加速轉換:1.MMU硬件支持,2.TLB硬件緩存(有些架構下TLB運轉透明,有些需要內核專門處理)
內存映射:內存映射是一種重要的抽象手段,可以將任意來源的數據傳輸到進程的虛擬地址空間,映射到的這部分虛擬地址空間可以像內存一樣被操作,其上的修改會被內核自動傳輸到數據源。這樣就可以使用相同的函數處理不同的目標對象。
物理內存分配
伙伴系統:
伙伴系統一定程度上可以減少碎片,但不能完全消除。
slab緩存:
內核經常需要比一個頁幀小得多的一塊內存。內核使用slab機制。
伙伴系統、slab緩存、內核其他部分的聯系:
系統調用分類:
進程管理、信號、文件、目錄和文件系統、保護機制、定時器函數。
VFS:
對象管理和引用計數:
內核采用了一般性的方法來管理(例如引用計數)內核對象。管理操作包括 引用計數、管理對象鏈表、集合加鎖、將對象屬性導出到用戶空間(via sysfs)。
struct kobject {
constchar * k_name;
struct kref kref;
struct list_head entry;
struct kobject * parent;
struct kset * kset;
struct kobj_type * ktype;
struct sysfs_dirent * sd;
};
將kobject嵌入到其他數據結構中
struct sample {
… …
struct kobject kobj;
… …
};