从内核到用户空间传输数据

Relay 是一种从linux内核空间到用户空间高效传输数据传输技术。适合大量数据从内核空间传到用户空间的情形。

(1)Relay 原理

用户定义的relay通道将大量数据传到用户空间。由一组和CPU对应的内核缓存区组成。内核空间用户提供可以利用relay提供的API接口来写入数据。这些数据会被自动写入当前的CPU ID对应的那个relay  buffer.从用户空间看,这是一组普通文件。

 

(2) Relay API

API按照面向用户空间和面向内核空间。

1.面向用户空间---向用户空间程序提供了访问relay 通道缓存区数据的基本操作的入口。

(1)Open()允许用户打开一个已经存在的通道缓存区

(2)mmap()使通道缓存区被映射到位于用户空间的调用者的地址空间。整个缓冲区的映射。

(3)read() 读取通道缓存区的内容 ,一旦读出,他们用户空间的程序就消耗掉了。

(4)poll()支持POLLIN/POLLRDNORM/POLLERR 信号,每次子缓存区的边界被越过时,等待用户空间程序会得到通知。

2.面向内核空间的API---对位于内核空间的用户提供了管理RELAY通道,数据写入功能。

relay_open()  创建一个relay 通道,包括每个CPU对应的relay缓存区。

relay_close()  关闭一个relay通道。释放relay buffer

relay_write() 将数据写入当前CPU对应的relay buffer

relay_reserve() 在relay通道中保留一块连续的区域来作为未来的写入操作。

 

 

你可能感兴趣的:(移动开发)