我認爲微內核的意義(3)-分析zircon內核中的對象

 Zircon內核是基於對象的,用戶態差不多僅通過對象Handles與OS資源交互,一個Handle可以認爲是一個與OS特定資源的子系統範圍的活躍的回話。

Zircon動態管理的資源有:處理器時間;內存和地址空間;設備I/O內存;中斷;信號和等待。

內核爲應用提供的對象:

IPC

通道;Socket;FIFO。

任務

進程;線程;JoB;任務。

信號

事件;事件對;Futex。

內存和地址空間

虛擬內存對象;虛擬內存地址空間;總線事務發起者(Bus Transaction Initiator BTIs,表示一個設備的總線主/DMA能力,可以被用於賦予設備訪問內存的能力)。

等待:端口

內核爲驅動準備的對象

中斷;資源;log

內核對象和LK

一些內核對象包含一到多個LK級別的結構體,如線程對象包含一個thread_t,而通道對象則不包含任何LK級別的對象。

內核對象生命週期

內核對象是引用計數的;大多數內核對象由syscall產生,引用計數大於0則保持生存,引用計數由綁定作爲syscall輸出的handle值。Handle對象的保持存活需要附屬於一個Handle表;關閉Handle則會從Handle表中刪除對應Handle(如通過sys_close()),同樣會減少內核對象的引用計數。一般來說,當最後一個關聯到內核對象的Handle關閉,內核對象的引用計數將會歸0,然後內核對象的析構函數將會運行。

當新Handle和(內核中)直接指向此對象指針的創建將引起引用計數的增加;因此一個內核對象的生命週期可能比創建它的進程更長。

調度器

內核對象由C++的類實現,從調度器(Dispatcher)導出,並覆蓋其實現的方法。因此,線程對象的代碼可在線程調度器(ThreadDispatcher)找到,有大量的代碼僅關注內核對象的一般意義,對於這種情況可以到fbl::RefPtr<Dispatcher>查找。

內核對象安全

原則上,內核對象沒有對安全的固有概念,不做認證檢查,安全權限由Handle持有,一個進程可以含有一個對象的兩個不同權限的Handle。

發佈了37 篇原創文章 · 獲贊 4 · 訪問量 3381
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章