这一切都在 Linux 和 C 中。
我有一个用户空间库函数,最多需要调用设备驱动程序的读/写函数 8 次。(我正在编写库和设备驱动程序。)我看到了两种实现方式:
- 让库调用读/写所需的次数。
- 让驱动程序处理读取/写入设备所需的次数。
驱动程序已经根据先前的 ioctl 调用知道所需的次数,无论如何都会发生。选项 1 需要在用户空间和内核空间之间进行更多切换,我知道这会降低性能。另一方面,选项 2 会产生问题。对于读取调用,传递回用户空间的缓冲区最多将大 8 倍,除非可以一次将 1 个读取传递回用户空间,而无需在两种模式之间切换。除非每次都写入相同的数据,否则 write 调用也会有同样的问题。因此,选项 2 的最坏情况需要比选项 1 来回传递的缓冲区大 8 倍。
最终,哪一个更有效?