DMA--直接存储器访问 可重入过程

来源:互联网 发布:sql修改语句怎么写 编辑:程序博客网 时间:2024/05/21 09:43

   讲道理的说。。我不知道为什么用MarkDown写文章写一半所有写的东西都丢失了。。。所以从终端到I/O通信我总结的都丢了。。好在看了的毕竟是自己的。。。留个印象就好,我就不再一次的去写了。。DMA貌似很重要,所以我单开一篇。。不用MarkDown了

    DMA可以由系统总线中的一个独立模块完成,也可以并入一个I/O模块中。

    当处理器要读或写一块数据时,它给DMA发送以下信息

    (1)是否请求一次读或写

    (2)涉及的I/O设备的地址

    (3)开始读写的存储器单元

    (4)需要读或写的字数

DMA直接与存储器交互,传送整个数据块每次传送一个字节,这个过程不需要处理器参与

这是比可编程I/O和中断驱动I/O更有效的地方,也是最大的不同。


DMA需要控制住总线以与存储器传送数据,由于总线存在竞争,当处理器需要使用总线时要等待DMA模块

但这不是一个中断,处理器没有保存上下文去做别的事情,而是仅仅暂停一个总线周期(在总线上传输一个字的时间)。



唯一恶劣影响是DMA传送中当处理器需要访问总线时处理器的执行速度会变慢。


DMA最大的两个好处

(1)不需要处理器干预,可以提高系统执行引用程序的效率

(2)数据直接在源地址和目的地址之间传送,不需要中间媒介


关于可重入过程:

概念:

程序代码的一个副本在同一段时间中可被多个用户共享使用。


两个重要特征:

(1)程序代码修改自身,那么每个用户的局部数据必须单独保存

(2)一个可重入过程可以被中断,且可以由一个正在中断的程序调用,而在返回该过程时,它仍能正确执行。


在共享系统中可重入可以更有效的使用主存储器:程序代码的一个副本保留在主存储器中,有多个应用程序可以调用这个过程。


总结:

可重入过程必须有一个永久不变的部分(组成过程的命令)

和一个临时部分(指向调用程序的指针以及只想程序所使用的局部变量的存储地址指针)


过程的每个执行实例称为激活,它将执行永久部分的代码,但拥有自己的局部变量和参数的副本


激活记录:

与特定的激活相关联的临时部分。


支持可重入过程最方便的方法是使用栈,当调用一个可重入过程时,该过程的激活记录保存在栈中,这样激活记录就成为过程调用所创建的栈桢的一部分。




0 0
原创粉丝点击