Mach 是面向通信的操作系统微内核。
具有五个基本抽象:
任务 Task
基本工作单位是 task
线程 Thread
端口 Port
消息 Message
内存对象 Memory
Mach 内核提供了一种IPC 的通信机制(Mach Message,IPC机制)
内核中,BSD 进程是一种数据结构,与 Mach Task 之间具有一对一 映射关系。
Task 是一个执行环境与静态实体。它并不直接执行计算,而是提供了一个框架,其他实体(例如线程)在其中执行。内核中的BSD 进程(类似 Unix 进程)与 Mach task 有着一一对应的关系。
Task 还是资源分配的基本单元。那些与 BSD 进程所关联的资源被包含于 Task 中。
同时每个 Task 也代表了保护边界。在获取访问权限前,不同 task 不能访问其他的 Task 中的资源。
thread 是 Mach 中实际执行的实体,也是 task 的控制流执行点。它在 task 的上下文中执行,代表 Task 内独立的程序计算器—指令流。
thread 执行的代码驻留在其 task 中的地址空间中。每个 task 中包含 0 至多个 thread。
每个 Thread 都属于一个 Task,一个Task 内的线程共享 Task 的所有资源,每个 Thread 都有自己的 计算状态,包括处理器寄存器,程序计数器和栈
通过上面的说明,我们也可以将 task 这个概念,间接理解成传统意义上的 process(是不是非常的相似:))
Mach Port 是受内核保护的 单向
IPC 通道 、功能和名称。
被实现成一个 有限长度
且 被内核所维护的消息队列
与 Linux Pipe 有些相似,都会因为队列满或者队列空而阻塞,其基本操作为发送和接收消息。该队列是多生产者、单消费者队列,只能有单个 receive right。
Task 需要有合适的权限 用于 操作 Mach Port
如 receive right,send right