FreeBSD核心簡介

2021-09-11 17:23:04 字數 1338 閱讀 8840

freebsd核心可以被看做是一種伺服器,它向使用者程序提供服務。程序通過系統呼叫訪問這些服務。其中有些服務,比如程序排程和記憶體管理,採用核心態執行的程序,或者核心裡定期執行的例程這樣的形式來實現。

核心程序只在核心中發揮作用,執行核心映象的**,以核心特權模式執行。核心還為每台裝置啟動乙個核心程序,負責處理該裝置的中斷。

常見核心程序

idle 在系統沒有其它要執行的任務時執行

pagedaemon 把系程序的部分位址空間寫入輔助儲存器,以支援虛擬記憶體系統的調頁機制

g_event 在發現新裝置以及當裝置消失時清除裝置的過程中,負責處理配置任務

g_up 處理從裝置驅動來的要被送往程序的資料

g_down 處理從程序來的要被送往裝置驅動的資料

在建立好核心程序之後,核心就建立第乙個使用者態程序init,作為以後所有程序的父程序。init程序負責許多管理性的任務,比如為機器上的每個終端派生乙個getty程序、接收孤兒程序的退出狀態,以及在系統從多使用者轉為單使用者模式執行時,負責依次執行關閉操作。

進入核心的人口可以根據發起進入核心的事件或者操作分為以下幾類:

在程序通過陷阱或中斷進入核心時:

1.cpu切換到核心模式,擁有核心棧指標,可以執行特權指令。

2.cpu硬體將程式計數器、處理器狀態等推入程序的核心棧中

3.cpu執行匯程式設計序,將硬體沒有儲存的所有狀態資訊推入核心棧中,比如通用暫存器和使用者態棧指標。

在核心完成處理之後,就會恢復使用者程序的狀態,把控制權還給使用者程序:

1.cpu執行匯程式設計序,將之前儲存的通用暫存器和使用者棧指標恢復回來。

2. cpu硬體恢復程式計數器和處理器狀態,切換到使用者態許可權,擁有使用者態棧指標。

核心可以在邏輯上劃分為上半部下半部

上半部向程序提供服務,對系統呼叫和陷阱做出響應,可以當做是所有程序共享的庫函式。

下半部由負責硬體中斷的例程組成。下半部與上半部是非同步的,也就是說,對於下半部核心來說,沒有當前執行程序的上下文。

當freebsd在上半部執行時,它不會被其它使用者程序搶占,但是當它需要等待某個事件或共享資源時,會主動放棄cpu。

上半部會被下半部打斷,當接收到乙個中斷時,會執行負責處理該裝置的核心程序,這個核心程序要比上半部的核心程序優先順序高。

核心的上下半部也會進行協作,比如上半部啟動乙個i/o操作,隨即放棄cpu進入睡眠狀態,等待下半部發回i/o執行完畢的通知。上下半部可以通過工作佇列通訊。

參考《freebsd作業系統設計與實現》

freeBSD安裝簡介

一 公升級prots 1。如果沒安裝cvsup,就去ports安裝 cd usr ports net cvsup make make install 2。然後就可以更新了 cd usr local bin cvsup gl2 h cvsup.freebsdchina.org usr share ex...

編譯FreeBSD核心

過去編譯過linux的核心,發現挺容易的。現在愛上了freebsd,發現編譯freebsd的核心更加簡單,時間更快 第一步是需要看看在現有的系統上是否存在有原始碼 ls usr src sys若出現的結果是 第二步執行下面的命令 cd usr src sys i386 conf然後 cp gener...

freeBSD核心模組編寫初級

預備知識 freebsd模組事件型別 typedef enum modeventtype modeventtype t 在系統中註冊乙個載入模組和模組事件處理程式 declare module name,data,sub,order name 模組的名字 data 是乙個moduledata t型別...