在块模式下,DMA控制器告诉设备获取总线,然后执行一系列传输操作,然后释放总线。这种操作的形式称为突发模式。这种模式比周期窃取更有效,因为获取总线需要时间,一次获取总线的代价是可以同时传输多个字。缺点是如果此时突发传输时间较长,CPU等设备可能会被长时间阻塞。
在我们讨论的模型中,有时称为飞越模式,DMA控制器会告诉设备控制器直接将数据传输到内存。一些DMA控制器使用的另一种模式是,设备控制器将字发送到DMA控制器,然后DMA控制器发送第二个总线请求,将字写入任何可以写入的位置。在这种方案中,每个传输的字都需要额外的总线周期,但它更灵活,因为它还可以执行器件到器件的复制,甚至是存储器到存储器的复制(通过预先读取存储器,然后写入存储器)。
大多数DMA控制器使用物理地址进行传输。使用物理地址需要操作系统将目标内存缓冲区的虚拟地址转换为物理地址,并将物理地址写入DMA控制器的地址寄存器。另一种方案是一些DMA控制器将虚拟地址写入DMA控制器。然后,DMA控制器必须使用MMU来完成从虚拟到物理的转换。只有当MMU是内存而不是CPU的一部分时,虚拟地址才能放在总线上。
文章比较长,字数比较多,可以先打开头像关注我,再慢慢看。///有个感叹:我今年年初录了一套比较系统的单片机入门教程,所以想问我的同学可以去拿。这是免费的,我可以私信。点击我头像左下角的黑色字体,我也能得到。最近挺闲的。我会带学生参加省级以上比赛。///
当一个I/O设备完成它的工作时,它会产生一个中断(默认操作系统已经打开了中断),它可以通过在总线上声明分配的信号来达到这个目的。主板上的中断控制器芯片会检测到这个信号,然后执行中断操作。
如果在中断之前没有其他中断操作被阻塞,中断控制器将立即处理该中断。如果中断前有其他中断操作正在进行,或者其他设备发出更高级别的中断信号,那么这个设备暂时不会处理。在这种情况下,设备将继续在总线上设置中断信号,直到它获得CPU服务。
为了处理中断,中断控制器在地址线上放置一个数字来指定关注哪个设备,并断言一个信号来中断CPU。中断导致CPU停止当前正在做的事情,开始做其他事情。地址线上会有一个中断向量表的索引,用来获取下一个程序计数器。
这个新获得的程序计数器也表示程序即将开始,它将指向程序的开始。从这个角度来看,陷阱和中断通常使用相同的机制,并且通常共享相同的中断向量。中断向量的位置可以硬连线到机器中,也可以位于内存中的任何位置,CPU寄存器指向它的起始点。
中断服务程序开始运行后,中断服务程序通过将某个值写入中断控制器的I/O端口来确认中断。告诉它中断控制器可以发出另一个中断。使CPU延迟响应以实现同时到达CPU的多个中断涉及竞争。一些旧电脑没有集中的中断控制器,通常每个设备都请求自己的中断。
对单片机感兴趣的朋友可以给我打电话。我录过一些关于单片机的入门教程。有需要的童鞋可以从我这里拿,免费。可以私信我“林老师”领取~点击打开我的头像即可领取。