Kernel會使用device driver提供的API要求device driver的服務
Kernel在啟動之前會先載入基本的device driver才能開始動作,並且會在運作的過程中偵測system上有哪些hardware而一一載入device driver
有些kernel會動態偵測system新增的hardware而載入device diver。 例如: user將滑鼠插入USB孔時,kernel可以偵測到system有新增了滑鼠,所以會把滑鼠的device driver載入,讓滑鼠可以正常使用
Kernel提供system call讓system library與shell取得kernel的服務
Kernel將software的執行環境依照權限、能做的事情分成兩種模式: user mode與kernel mode
Kernel會利用CPU的privilege level設計,控管software可以執行的操作與功能
CPU privilege level: CPU會將指令集區分成不同的權限需求,並且使用不同的模式開放權限,高權限需求的指令無法在低權限的模式中執行。例如: RISC-V CPU有machine mode, supervisor mode, user mode三種privilege level。
User mode: 只能執行包含無關hardware resource管理、CPU狀態變更此類一般指令的function
例如: user mode執行function的可以做DRAM的讀寫,但不可以控制CPU停止處理interrupt。
Kernel mode: 可以執行包含任何指令的software
例如: kernel mode執行的function可以要求kernel做檔案存檔。
Kernel service會運作在kernel mode下,避免未經kernel允許的software取得過高權限而影響其他software的運作
System call是讓software從user mode切換到kernel mode呼叫kernel service,獲得更高權限後可以使用kernel的服務做更多事情
System call是一種software interrupt(軟體中斷),觸發之後會由kernel的interrupt service routine (ISR)接手完成
例如: Linux環境當中,printf這個system library中的function會使用system call-write()讓kernel在kernel mode中完成字串輸出到console上的工作。