Mac操作系统XNU内核(四)进程间通信

(XNU,是苹果操作系统OS X的内核) 
 
 
OS X系统的全部IPC方式
  1. Shared Memory
  2. Mach Messaging(Mach Ports)
  3. Distributed Object for Cocoa
  4. Apple Events、Distributed Notifications
  5. Sockets、Ports and Stream
  6. BSD Pipes、BSD Notifications
  7. FSEvents
  8. Kernel Queues and Kernel Events
 
mach ports
  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操作接口
 
原文地址:https://www.cnblogs.com/andypeker/p/4360563.html