直接内存访问DMA

如果我们要在磁盘拷贝大量文件的话,我们如果用CPU来进行控制的话,这就显着有点浪费了,因为CPU还有其他很重要的事情要处理,所以很多计算机为了减去CPU的负担,就把一部分任务下放给一个专用的处理器,称为DMA控制器

我们在进行DMA传输的时候,主机向内存中写入DMA命令块,这个块当中包括传输的源地址指针、传输的目的地址指针、传输的字节数

CPU在将这个命令块的地址写入到DMA控制器的时候,就去继续其他的工作

DMA控制器则继续下去直接操作内存总线,不需要CPU的帮忙,就可以去将地址放到总线上开始传输,一般来说PC上采用总线控制I/O的主板都拥有它们自己的高速DMA硬件

DMA控制器和设备控制器之间的握手通过一对被称为DMA-request和DMA-acknowlege的线来进行。如果有数据传输的时候,设备控制器就通过DMA-request线发送信号,这个信号会导致DMA控制器使用内存总线,然后在内存地址总线上放上所需要的地址,并通过DMA-acknowlege线发送信号,当设备控制器收到DMA-acknowlege信号的时候就可以向内存传输数据,并清除DMA-request请求信号

在传输完成之后,DMA控制器会中断CPU,当DMA控制器使用内存总线的时候,CPU暂时不能访问主内存,但是可以访问一级或二级高速缓存中的数据项,虽然可能会导致CPU计算速度变慢点,但是对于改善系统总体的性能还是很好的

有的计算机体系结构的DMA使用物理内存地址,而有的使用直接虚拟内存访问,这里使用的虚拟内存地址需要经过虚拟到物理地址转换。DVMA可以直接实现两个内存映射设备之间的传输,而不需要CPU的干涉或使用主内存

这里写图片描述

简单介绍下关于实模式和保护模式

实模式:是指直接访问物理内存,指令中的地址值是物理内存地址。

保护模式:是指指令中的地址不再是物理地址,而是虚拟地址,要经过MMU的处理转换成物理地址。

现代操作系统在刚加电时首先运行在实模式下,然后再切换到保护模式下运行,在保护模式下,操作系统不允许进程之间向设备发送命令,也就是说会保护操作系统不会因为设备控制器的错误使用而崩溃

所以操作系统选择倒出一些函数,然后这些函数可以被有足够特权的进程来访问底层硬件的底层操作

如果没有内存保护的内核,进程可以直接去访问设备控制器,这个直接访问肯定是提高了性能,因为不需要进行内核通信、上下文切换和内核软件层,不过这样破坏了系统的安全和稳定,所以现在的操作系统基本都是在保护模式下运行的

猜你喜欢

转载自blog.csdn.net/zcmuczx/article/details/80711914