举例:用迅雷下载电影
迅雷进程先在自己的栈区和内核开辟一块缓冲区。 通过系统调用让 DMA 控制器接管总线,自己阻塞让出 CPU 执行权限。 DMA 从网卡取数据,保存到内核缓冲区 内核缓冲区满后,DMA 通过中断通知 CPU 唤醒迅雷进程, 并把内核缓冲区的数据复制到用户栈的缓冲区 迅雷进程打开一个文件通过系统调用把用户栈缓冲区数据写入
重复从网卡取数据,缓冲区满了就保存到文件直到电影下载完
我理解的有错吗?
打开文件是重新在内核开辟一块缓冲区 然后把用户缓冲区的数据拷贝到这个内核缓冲区,再让 DMA 保存到磁盘 还是复用之前下载用的内核缓冲区?
能绕过用户缓冲区,直接使用内核缓冲区下载并保存吗?
还有保存到磁盘时,我查了下还有磁盘缓冲区这个东西,它是磁盘里的一块内存吗 那 DMA 传输的数据是谁和谁之间的?是内核缓冲区到磁盘缓冲区吗? 那磁盘缓冲区到磁盘的数据拷贝由谁控制? IO 控制器? DMA ,又或者驱动程序?
在内核开辟的内核缓冲区是专属迅雷这个进程吗? 其它进程能通过系统调用访问吗
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.