7

最近在学操作系统,关于 IO 一点疑问

 2 years ago
source link: https://www.v2ex.com/t/816700
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

最近在学操作系统,关于 IO 一点疑问

  yezheyu · 4 小时 42 分钟前 · 644 次点击

举例:用迅雷下载电影

迅雷进程先在自己的栈区和内核开辟一块缓冲区。 通过系统调用让 DMA 控制器接管总线,自己阻塞让出 CPU 执行权限。 DMA 从网卡取数据,保存到内核缓冲区 内核缓冲区满后,DMA 通过中断通知 CPU 唤醒迅雷进程, 并把内核缓冲区的数据复制到用户栈的缓冲区 迅雷进程打开一个文件通过系统调用把用户栈缓冲区数据写入

重复从网卡取数据,缓冲区满了就保存到文件直到电影下载完

我理解的有错吗?

打开文件是重新在内核开辟一块缓冲区 然后把用户缓冲区的数据拷贝到这个内核缓冲区,再让 DMA 保存到磁盘 还是复用之前下载用的内核缓冲区?

能绕过用户缓冲区,直接使用内核缓冲区下载并保存吗?

还有保存到磁盘时,我查了下还有磁盘缓冲区这个东西,它是磁盘里的一块内存吗 那 DMA 传输的数据是谁和谁之间的?是内核缓冲区到磁盘缓冲区吗? 那磁盘缓冲区到磁盘的数据拷贝由谁控制? IO 控制器? DMA ,又或者驱动程序?

在内核开辟的内核缓冲区是专属迅雷这个进程吗? 其它进程能通过系统调用访问吗


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK