操作系统在读取文件内容时,首先将内容读入内核缓冲区,然后再复制到用户缓冲区,为什么读取的数据不能直接存放在用户缓冲区,这样不是减少了一个内存拷贝吗?希望有人能给予更详细的解释
cyvaqqii1#
以下是一些原因:1.数据所在的设备(磁盘)可能需要特定的对齐,以便执行i/o。1.该设备可能仅以大于用户提供的大小来递送I/O。1.用户请求可能包括几个盘扇区,并且开始和结束可能不与设备要求对准。1.用户缓冲器可能由于诸如上述的约束而不适合DMA,或者系统可能具有其他DMA约束。通常,你可以通过mmap()实现零拷贝i/o。在这种情况下,系统可以对齐并选择Map的缓冲区,以符合目标硬件的对齐和地址约束。
1条答案
按热度按时间cyvaqqii1#
以下是一些原因:
1.数据所在的设备(磁盘)可能需要特定的对齐,以便执行i/o。
1.该设备可能仅以大于用户提供的大小来递送I/O。
1.用户请求可能包括几个盘扇区,并且开始和结束可能不与设备要求对准。
1.用户缓冲器可能由于诸如上述的约束而不适合DMA,或者系统可能具有其他DMA约束。
通常,你可以通过mmap()实现零拷贝i/o。在这种情况下,系统可以对齐并选择Map的缓冲区,以符合目标硬件的对齐和地址约束。