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操做接口