谷歌、DeepMind提出高效Transformer评估基准
05 微内核进程间通信由于进程间通信对于微内核系统性能的重要意义,大部分微内核操作系统都会优先从性能角度来设计和实现进程间通信。 1. Mach:早期的微内核进程间通信设计 Mach通过两种基本的抽象——端口(port)和消息(message),设计和实现了一种间接通信IPC:通信的双方不需要显式指定另一方,而是通过端口进行通信(对应于“信箱”)。进程之间通过端口流通的数据就是消息。
作为一个早期的微内核系统,Mach系统的性能比起当时的宏内核系统(如UNIX)还是存在不小的差距。其中一个原因是Mach为了实现大量的目标,如可裁剪性、可移植性等,导致其内核复杂,且代码量较大。不过,Mach的IPC设计仍对后来的很多系统有着非常重大的影响。 3. 权限检查 进程间通信通常依赖于一套权限检查的机制来保证连接的安全性。例如,seL4等微内核系统中的Capability机制,会将所有的通信连接抽象成一个个的内核对象。而每个进程对内核对象的访问权限(以及能够在该内核对象上执行的操作)由Capability来刻画。 当一个进程企图和某其他进程通信时,内核会检查该进程是否拥有一个Capability,是否有足够的权限访问一个连接对象并且对象是指向目标进程的。类似地,宏内核,如Linux系统,通常会复用其有效用户/有效组的文件权限,以刻画进程对于某个连接的权限。 4. 命名服务 命名服务像是一个全局的看板,可以协调服务端进程和客户端进程之间的信息。简单来说,服务端进程可以将自己提供的服务告诉命名服务进程,比如文件系统进程可以注册一个“文件系统服务”,网络系统进程可以注册一个“网络服务”。 而客户端进程可以去命名服务上查询当前的服务,并选择自己希望建立连接的服务去尝试获取权限。具体是否分发权限给对应的客户端进程,是由命名服务和对应的服务端进程根据特定的策略来判断的。 04 宏内核进程间通信宏内核下的典型的进程间通信机制,具体包括管道,System V中的消息队列、信号量、共享内存,Linux信号机制,以及套接字机制(socket)。 宏内核操作系统中进程间通信更多的是应用之间的交互,因此,设计的重心通常会放在接口的易用性、稳定性等方面。图7-5给出了典型的宏内核进程间通信机制的对比。
可以看到,虽然在IPC的几个设计角度上几个方案都各有异同,但是它们之间的主要区别是在数据抽象上。在实际的应用中,虽然多种IPC方案都可以作为通信的选择,但是应用程序往往会根据对数据抽象的需求来选择具体的方案。 (编辑:孝感站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
