RunLoop_3.png
RunLoop_4.png
在硬件層上面的三個(gè)組成部分:Mach、BSD、IOKit (還包括一些上面沒標(biāo)注的內(nèi)容),共同組成了 XNU 內(nèi)核。
XNU 內(nèi)核的內(nèi)環(huán)被稱作 Mach,其作為一個(gè)微內(nèi)核,僅提供了諸如處理器調(diào)度、IPC (進(jìn)程間通信)等非常少量的基礎(chǔ)服務(wù)。
BSD 層可以看作圍繞 Mach 層的一個(gè)外環(huán),其提供了諸如進(jìn)程管理、文件系統(tǒng)和網(wǎng)絡(luò)等功能。
IOKit 層是為設(shè)備驅(qū)動(dòng)提供了一個(gè)面向?qū)ο?C++)的一個(gè)框架。
Mach 本身提供的 API 非常有限,而且蘋果也不鼓勵(lì)使用 Mach 的 API,但是這些API非常基礎(chǔ),如果沒有這些API的話,其他任何工作都無法實(shí)施。在 Mach 中,所有的東西都是通過自己的對(duì)象實(shí)現(xiàn)的,進(jìn)程、線程和虛擬內(nèi)存都被稱為"對(duì)象"。和其他架構(gòu)不同, Mach 的對(duì)象間不能直接調(diào)用,只能通過消息傳遞的方式實(shí)現(xiàn)對(duì)象間的通信。"消息"是 Mach 中最基礎(chǔ)的概念,消息在兩個(gè)端口 (port) 之間傳遞,這就是 Mach 的 IPC (進(jìn)程間通信) 的核心