XNU内核(四)进程间通信
- Shared Memory
- Mach Messaging(Mach Ports)
- Distributed Object for Cocoa
- Apple Events、Distributed Notifications
- Sockets、Ports and Stream
- BSD Pipes、BSD Notifications
- FSEvents
- Kernel Queues and Kernel Events
- 其他所有IPC方式在实现上或多或少依赖mach ports
- 简单来说,一个“进程”构造mach msg发送到另一个“进程”的port,实现通信(“进程”应该是Task或者Thread)
- 实际情况比较复杂:
- mach msg是一个灵活的复杂的消息结构,有多个不同类型
- port有不同权限、类型和级别(host、task、thread)
- 关于mach ports这种IPC方式有很多API可用
- 还有其他很多细节
- 这是task结构定义的部分截图
- 其实host结构也有exc_actions并且情况相同(不再赘述)
- 每个task有一个数组exc_actions,由几个exception_action组成,每个exception_action可以代表一种异常情况
- task创建时,继承父task的exc_actions
- 这是thread结构定义的部分截图;
- 每个thread也都有一个数组exc_actions,也由几个exception_action结构组成;同样每个exception_action可以代表一种情况的异常
- thread创建时,exc_actions中的exception_action都设置为空(不同于task)
- 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操作接口
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。