Mac操做系統XNU內核(四)進程間通訊

OS X系統的所有IPC方式數組

  1. Shared Memory工具

  2. Mach Messaging(Mach Ports)spa

  3. Distributed Object for Cocoa繼承

  4. Apple Events、Distributed Notifications接口

  5. Sockets、Ports and Stream進程

  6. BSD Pipes、BSD Notificationsip

  7. FSEvents內存

  8. Kernel Queues and Kernel Eventsci

 

mach portsit

  1. 其餘全部IPC方式在實現上或多或少依賴mach ports

  2. 簡單來講,一個「進程」構造mach msg發送到另外一個「進程」的port,實現通訊(「進程」應該是Task或者Thread)

  3. 實際狀況比較複雜:

  • mach msg是一個靈活的複雜的消息結構,有多個不一樣類型

  • port有不一樣權限、類型和級別(host、task、thread)

  • 關於mach ports這種IPC方式有不少API可用

  • 還有其餘不少細節

  

task級port(exception port和special port)

 

  1. 這是task結構定義的部分截圖

  2. 其實host結構也有exc_actions而且狀況相同(再也不贅述)

  3. 每一個task有一個數組exc_actions,由幾個exception_action組成,每一個exception_action能夠表明一種異常狀況

  4. task建立時,繼承父task的exc_actions

 

thread級port(exception port和special port)

 

  1. 這是thread結構定義的部分截圖;

  2. 每一個thread也都有一個數組exc_actions,也由幾個exception_action結構組成;一樣每一個exception_action能夠表明一種狀況的異常

  3. thread建立時,exc_actions中的exception_action都設置爲空(不一樣於task)

 

MIG技術

  1. MIG是一個工具,能夠經過定義文件生成Client-Server形式基於mach IPC的RPC代碼(這裏mach IPC指使用mach port傳遞mach msg)

  2. 典型的IPC代碼須要實現:數據準備、發送、接收、解包、消息複用;MIG自動生成完成這些事情的代碼

  3. MIG生成的代碼,調用mach ports的各類API

  4. MIG定義文件的擴展名.defs

  5. 下面列舉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

  6. MIG生成的代碼,豐富了接口,提供了更多( BSD層沒有的)功能,很是有用:

    • 好比host相關的API能夠獲取硬件信息

    • mach_vm和vm_map相關API提供了虛擬內存操做接口

    • thread_act相關API提供了thread操做接口

相關文章
相關標籤/搜索