通过向程序传递消息而引起程序行为被调用,这种方式在软件工程中使用广泛。一个程序可以通过发送消息改变其他程序的行为,同时程序之间也可以通过发送消息来进行信息交换。BPF最神奇的功能之一就是内核中运行的代码和加载这些代码的程序可以通过消息传递的方式实现实时通信。
本章我们将介绍BPF程序和用户空间程序之间是如何进行通信的。我们将描述内核和用户空间之间的不同通信通道以及它们如何存储信息。同时,我们还会演示这些通信通道的用例以及程序初始化时如何实现数据持久化。
BPF映射以键/值保存在内核中,可以被任何BPF程序访问。用户空间的程序也可以通过文件描述符访问BPF映射。BPF映射中可以保存事先指定大小的任何类型的数据。内核将键和值作为二进制块,这意味着内核并不关心BPF映射保存的具体内容。
BPF验证器使用多种保护措施确保创建和访问BPF映射的方式是安全的。在解释如何访问BPF映射的数据时,我们也会介绍这些保证措施。