“现代操作系统中的直接内存访问”,Andrew S. Tanenbaum,Herbert Bos,2014,
为了简化解释,我们假设CPU通过连接CPU、内存和I/O设备的单个系统总线访问所有设备和内存,如图5-4所示。

问:在第二步,
- isn't the data transferred "**from the controller's buffer**" to the main memory? Why does it say both "**from the controller’s buffer**" and "**from a controller device register**"?
- in the second step, can the controller transfer data from its buffer to the main memory, without interrupting to the cpu, and without involving OS again?问:在第二步中,DMA控制器请求磁盘控制器将数据从磁盘控制器的缓冲区传输到主内存。在第一步中,CPU向磁盘控制器发出命令,告诉它将数据从磁盘读入其内部缓冲区。同时,当磁盘控制器完成将数据从磁盘传输到磁盘控制器的缓冲器时,CPU也能告诉磁盘控制器将数据从磁盘控制器的缓冲区传输到主存,这样DMA控制器就不需要告诉磁盘控制器将数据从磁盘控制器的缓冲区传输到主存储器了吗?(我不明白为什么我们需要一个DMA控制器来在磁盘和主内存之间进行数据传输,所以我猜我错过了一些重要的东西来理解引号)。
谢谢!
发布于 2015-02-08 14:50:44
在第一步中,我们不使用DMA,因此磁盘控制器的内容由处理器逐个读取。处理器当然会(假设数据实际上将被用于某些事情,而不仅仅是被丢弃)将其存储在系统的内存中。
在这种情况下,缓冲区是硬盘(控制器)本身上的一块内存,控制器设备注册硬盘(控制器)本身的控制寄存器。
不涉及操作系统(或其他一些软件)将需要某种DMA操作,您在这部分问题中讨论的文本部分不使用DMA。所以,不,在这种情况下是不可能发生的。
因此,DMA控制器的全部目的是“执行将设备内部缓冲区中的东西存储到主存中的繁琐任务”。CPU将与DMA控制器和磁盘设备一起工作。如果磁盘可以自己执行此操作,则不需要DMA控制器。
事实上,在现代系统中,DMA能力通常内置于硬盘控制器本身,也就是说控制器具有“总线控制”功能,这意味着控制器本身就是设备的DMA控制器。然而,把它们看作是两个独立的设备,整个DMA的概念就不那么容易理解了。
Q3 (某种)
如果你把硬盘看作是刚送到建筑工地的砖块,而处理器就是铺砖盖房子的砖头工。DMA控制器是将砖块从一叠砖运到砖工需要的地方的劳动者,这意味着砖头工可以集中精力做砌砖的实际工作(如果你自己尝试过,这是一项技术熟练的工作),而“取砖和搬运”的简单工作可以由技能较低的工人来完成。
轶事证据:当我第一次了解DMA从磁盘到内存的传输大约是在1997年左右,当IDE控制器开始使用DMA时,您需要一个“主板IDE控制器”驱动程序来允许IDE进行DMA,那时,从硬盘读取大约需要CPU时间的6%-10%,而在同一设置中DMA将占用CPU时间的大约1%。在此之前,只有具有SCSI磁盘控制器的高级系统才会使用DMA。
https://softwareengineering.stackexchange.com/questions/272470
复制相似问题