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

相关文章
相关标签/搜索