內核與操作系統:
內核是操作系統的核心部分,包含了系統運行的核心過程,決定系統的性能,操作系統啟動內核被裝入到RAM中;
操作系統與底層硬件設備交互和為運行應用程序提供執行環境。
Linux內核與微內核比較:
微內核:內核只需要一個很小的函數集,通常包括幾個同步原語,一個簡單的調度程序和進程間通信機制。
運行在微內核之上的幾個系統進程實現系統級功能:內存分配,設備驅動程序……完全的模塊化進程。任何操作
系統層都是獨立的程序模塊,通過模塊化的方法定義明確清晰的軟件接口與其它層交互。內核中暫且不需要執行
的系統進程可以被調出或者撤銷。微內核便於移植和充分利用RAM,但開銷大效率是個問題。
宏內核:Linux內核:單塊結構。內核的全部代碼,包括所有子系統(如內存管理、文件系統、設備驅動程序)
都打包到一個文件中。內核中的每個函數都可以訪問內核中所有其他部分。模塊特性依賴於內核與用戶層之間設計
精巧的通信方法,這使得模塊的熱插拔和動態裝載得以實現。
每個內核層都被繼承到整個內核程序中,並代表着當前進程在內核態下運行。
模塊化(非進程)——允許在運行狀態下動態的安裝。模塊是一個目標文件,其代碼在運行時鏈接到內核或從內核解除鏈接。
目標代碼通常是一組函數組成,用來實現文件系統,驅動程序……這些模塊與其他靜態鏈接內核函數一樣,代表着當前進程
在內核態下執行,直接函數調用避免進程切換消息傳遞的開銷,效率可能更高。
Linux用戶程序兩種狀態:
用戶態和內核態;用戶態切換到內核態:
l 進程系統調用
l CPU異常
l 中斷
l 內核線程被執行
多用戶系統:
能並發執行和獨立的執行多個用戶的應用程序,各個用戶擁有獨立空間。用戶組,Root用戶。
Linux進程:
進程Process:
l 操作系統的基本抽象。
l 進程是程序執行時的一個實例;一個運行程序的執行上下文。
l 幾個進程能並發的執行同一個程序;而同一個進程能順序執行幾個程序。
l 具有獨立的地址空間;多個進程可以同時執行。
進程受內核管理;每個進程由一個進程描述符表示,包含進程當前的狀態信息。
當內核暫停一個進程的執行時,就把幾個相關處理器寄存器的內容保存在進程描述符中。這些寄存器包括:
l 程序計數器PC和棧指針SP寄存器
l 通用寄存器
l 浮點寄存器
l 包含CPU狀態信息的處理控制寄存器
l 跟蹤進程對RAM訪問的內存管理寄存器
當內核恢復執行進程時:將進程描述符中合適字段來裝在CPU寄存器,根據程序計數器指向恢復到程序執行的地方。
Linux重入內核:
內核可重入:
可重入函數:使用局部變量
實現同步機制:信號量、鎖、關中斷
進程執行狀態切換: 進程在用戶態與內核態的轉換,Linux是搶占式內核
進程地址空間:每個進程運行在似有地址空間
同步和臨界區:內核數據操作訪問。
進程間通信IPC:信號量、消息隊列、共享內存
進程管理:fork與_exit,exec(),子進程與父進程
Linux文件系統:
文件系統是對存儲設備上的數據和元數據進行組織的機制,以樹形結構組織。
文件類型:
不同文件
目錄
符號鏈接
面向塊得設備文件 (設備驅動相關)
面向字符的設備文件 (設備驅動相關)
管道(pipe)和命名管道(named pipe)(進程間通信相關)
套接字(socket) (進程間通信相關)
文件訪問權限和訪問模式
文件描述符和索引節點:記錄文件的信息數據。
文件操作的系統調用:open、read、write……
內存管理:
虛擬內存:處於應用程序內存請求與硬件內存單元之間的邏輯層。
隨即訪問存儲器RAM:一部分用於內核映像,其余虛擬內存處理
內核內存分配器:KMA 處理內存請求子系統
l 速度快
l 減少內存浪費
l 減輕內存碎片
l 與其他內存管理合作(頁框)
l 內存分配算法
進程虛擬空間地址處理:內核分配給進程的虛擬地址空間由以下內存區組成:
l 程序的可執行代碼
l 程序的初始化數據
l 程序未初始化數據
l 初始化程序棧
l 所需共享庫的可執行代碼和數據
l 程序動態請求的內存堆
高速緩存:
設備驅動程序:
內核通過設備驅動程序與I/O設備交互,設備驅動程序在內核中,用戶程序通過內核訪問設備。