为什么我们需要内存映射的IO?从我在CS课中学到的知识,MMIO摘录了控制设备的特定指令。但是,如果设备的控制寄存器(以及地址空间中每个存储单元的内容)取决于设备的品牌和型号,那么从抽象方面获得了什么?
有控制和数据路径。用于数据路径的内存映射I / O可以减少数据复制。
没有内存映射的I / O,您的应用程序write
将数据复制到内核缓冲区,然后将其传输到设备中。使用内存映射的I / O,内核缓冲区将映射到应用程序地址空间,以便应用程序可以直接将其写入,从而消除了一个数据副本。
类似地,当应用程序调用read
时,内核首先读取内核缓冲区,然后将数据复制到您的应用程序数据中。使用内存映射的I / O,内核可以直接读入应用程序缓冲区。