用户态与内核态
Linux操作系统体系架构分为用户态与内核态。内核次要管制计算机的硬件资源,为下层利用提供运行反对。用户态为下层利用的流动空间,应用程序的执行须要内核的反对,如CPU资源,存储资源,IO资源等,用户态通过内核提供的拜访接口也就是零碎调用来应用这些资源。
基于间接外在(DMA)实现的文件传输
- 应用程序调用read(),上下文切换到内核,DMA将磁盘数据复制到内核的缓存空间
- read()返回,上下文切换到用户态,CPU将数据复制到用户的缓存空间
- 应用程序调用write(),上下文再次切换到内核,CPU将数据复制到内核socket缓存
- write()返回,上下文再次切换到用户态,DMA将socket缓存数据复制到网卡缓存上
这里一共呈现了4次上下文切换,4次数据拷贝
通过sendfile实现的零拷贝
- 应用程序发现sendfile零碎调用,用户空间切换到内核态
- 通过DMA将磁盘文件拷贝到内核缓冲区
- DMA收回中断,CPU解决中断,将数据从内核缓冲区拷贝到内核中与socket相干的缓冲区。而后sendfile零碎调用返回,从内核态切换到用户态
- DMA将内核空间socket缓冲区数据拷贝到网卡
这里一共呈现了2次高低切换,3次数据拷贝
未完。。。