• 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操作接口
     
  • 相关阅读:
    Objective C 快速入门学习五
    Objective C 快速入门学习四
    Objective C 快速入门学习三
    Objective C 快速入门学习二
    Objective C 快速入门学习一
    基于内容的音频和音乐分析领域的研究工作
    特征选择常用算法综述
    外包项目网站积累
    IOS开发资料积累
    小心被“杜比”认证忽悠了
  • 原文地址:https://www.cnblogs.com/andypeker/p/4360563.html
Copyright © 2020-2023  润新知