核心與作業系統:
核心是作業系統的核心部分,包含了系統啟動並執行核心過程,決定系統的效能,作業系統啟動核心被裝入到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:一部分用於核心映像,其餘虛擬記憶體處理
核心記憶體 Clerk:KMA 處理記憶體請求子系統
l 速度快
l 減少記憶體浪費
l 減輕記憶體片段
l 與其他記憶體管理合作(頁框)
l 記憶體配置演算法
進程虛擬空間地址處理:核心分配給進程的虛擬位址空間由以下記憶體區組成:
l 程式的可執行代碼
l 程式的初始化資料
l 程式未初始化資料
l 初始化程式棧
l 所需共用庫的可執行代碼和資料
l 程式動態請求的記憶體堆
快取:
裝置驅動程式:
核心通過裝置驅動程式與I/O裝置互動,裝置驅動程式在核心中,使用者程式通過核心訪問裝置。