OS X系統的所有IPC方式數組
Shared Memory工具
Mach Messaging(Mach Ports)spa
Distributed Object for Cocoa繼承
Apple Events、Distributed Notifications接口
Sockets、Ports and Stream進程
BSD Pipes、BSD Notificationsip
FSEvents內存
Kernel Queues and Kernel Eventsci
mach portsit
其餘全部IPC方式在實現上或多或少依賴mach ports
簡單來講,一個「進程」構造mach msg發送到另外一個「進程」的port,實現通訊(「進程」應該是Task或者Thread)
實際狀況比較複雜:
mach msg是一個靈活的複雜的消息結構,有多個不一樣類型
port有不一樣權限、類型和級別(host、task、thread)
關於mach ports這種IPC方式有不少API可用
還有其餘不少細節
task級port(exception port和special port)
這是task結構定義的部分截圖
其實host結構也有exc_actions而且狀況相同(再也不贅述)
每一個task有一個數組exc_actions,由幾個exception_action組成,每一個exception_action能夠表明一種異常狀況
task建立時,繼承父task的exc_actions
thread級port(exception port和special port)
這是thread結構定義的部分截圖;
每一個thread也都有一個數組exc_actions,也由幾個exception_action結構組成;一樣每一個exception_action能夠表明一種狀況的異常
thread建立時,exc_actions中的exception_action都設置爲空(不一樣於task)
MIG技術
MIG是一個工具,能夠經過定義文件生成Client-Server形式基於mach IPC的RPC代碼(這裏mach IPC指使用mach port傳遞mach msg)
典型的IPC代碼須要實現:數據準備、發送、接收、解包、消息複用;MIG自動生成完成這些事情的代碼
MIG生成的代碼,調用mach ports的各類API
MIG定義文件的擴展名.defs
下面列舉MIG實現的一些功能:
clock_priv, clock_reply, exc, host_notify_reply, host_priv, host_security, ledger, mach_exc, mach_host, mach_vm, map, memory_object_default, memory_object_name, notify, processor, processor_set, prof, security, semaphore, sync, task_access, thread_act, vm_map
MIG生成的代碼,豐富了接口,提供了更多( BSD層沒有的)功能,很是有用:
好比host相關的API能夠獲取硬件信息
mach_vm和vm_map相關API提供了虛擬內存操做接口
thread_act相關API提供了thread操做接口