首页 > 其他分享 >探索计算机的I/O控制方式:了解DMA控制器的作用与优势

探索计算机的I/O控制方式:了解DMA控制器的作用与优势

时间:2023-09-10 12:44:07浏览次数:36  
标签:DMA 控制器 驱动程序 探索 中断 CPU 设备

I/O控制方式

在前面我们已经了解到,每个设备都配备了一个设备控制器。当CPU向设备控制器发送命令并将其存储在寄存器中时,设备控制器会执行相应的操作。然而,尽管设备控制器会更新状态寄存器的状态,但是如何将这些信息传达给CPU呢?

在设备控制器的寄存器中,通常会有一个状态标志位,用于指示输入或输出操作是否完成。因此,我们可以考虑第一种简单的方法,即轮询等待的方式,让CPU一直检查寄存器的状态,直到状态标志位被设置为完成。然而,显然这种方式非常低效,它会占用CPU的全部时间。

除了轮询等待的方式,还有一种更高效的方法是采用异步通知。这种方式需要一个中间人来进行通知,即中断控制器,它负责向CPU发送中断信号。当设备控制器完成操作后,会触发中断信号发送到中断控制器,然后中断控制器通过通知CPU来暂停当前的处理逻辑,以处理中断。这种方式能够有效地利用CPU的时间,提高系统的响应速度和效率。

中断可以分为软中断和硬中断两种形式。软中断可以由程序或操作系统主动触发,而硬中断则是由硬件通过中断控制器触发的,例如鼠标等外部设备。是由硬件设备发出的信号,通知系统进行相应的处理。中断的使用可以大大提高系统的并发性和响应能力,使得CPU能够更加高效地处理多个任务。

中断虽然是一种优化方法,但它也存在一个不足之处,就是会打断CPU当前的工作。特别是在需要进行耗时的操作,例如从磁盘读取数据到内存的IO操作,CPU会被占用大量的时间,导致无法同时处理其他任务。对于这种情况,我们可以借助DMA(直接内存访问)控制器来解决这个问题。

DMA控制器是在学习Java零拷贝技术时经常提到的一个概念。它的作用是让设备在没有CPU参与的情况下,能够自行将设备的输入/输出数据传输到内存中。要实现DMA功能,需要有硬件上的支持,即DMA控制器。那么我们来看看DMA是如何帮CPU解决问题的。

image

DMA 的工作方式如下:

首先,CPU向DMA控制器发送指令,告知需要读取的内容以及存储数据的内存地址。

接着,DMA控制器代替CPU与磁盘控制器通信,向磁盘控制器发送读取数据的命令。当磁盘控制器将数据缓冲区填满后,它会将数据传输到指定的内存地址。

一旦磁盘控制器完成将数据传输到内存的操作,它会通过总线向DMA控制器发送一个确认成功的信号。

当DMA控制器接收到确认信号后,它会发送中断通知给CPU,告知数据传输已经完成。

此时,CPU可以直接从内存中读取数据,而无需额外的操作。可以看出,在CPU需要读取磁盘数据时,只需向DMA控制器发送指令,然后CPU可以继续执行其他任务。当磁盘数据被拷贝到内存后,DMA控制器通过中断的方式通知CPU数据已经准备就绪,可以直接从内存中读取。因此,除了在传输开始和结束时需要CPU的干预外,CPU的参与度较低。这样可以极大地提高系统的并发性和响应能力。

有人可能会质疑:为什么DMA的效率比中断高呢?磁盘控制器完成读取后只需向CPU发送一个中断,DMA完成后也需要发送一个中断,所以它们不是一样的吗?只是DMA直接将数据读取到内存中了?

其实中断方式的控制模式是这样的:硬件每准备好一段数据(存放在自己的内部缓冲区中),就向CPU发送一个中断信号;CPU接收到中断信号后,会停止当前的工作,并将硬件缓冲区的每个字符逐个读取到自己的寄存器中,然后将每个字符逐个写入内存。之后,其他应用可以通过系统调用将内存中的数据取出进行进一步处理。

而DMA方式是这样的:硬件先准备好若干数据,并将其存放在自己的缓冲区(比如网卡板载的内存芯片)。然后,硬件向CPU发送一个中断信号,表示有一定量的数据要提交。CPU发现硬件支持DMA,就向硬件发送通知——将数据存放在内存的特定地址范围内,然后让硬件自行处理。

之后,CPU不再理会这个硬件,而是让硬件通过自己线路板上的简单处理器,逐个字节地将缓冲区中的数据写入指定的内存位置。需要注意的是,在DMA方式下,内存的内容是由硬件自己维护的,CPU不再参与。这样,当硬件自行搬运缓冲区数据时,CPU可以继续处理自己的任务,提高了系统的并发性和响应能力。

设备驱动程序

尽管设备控制器屏蔽了设备的诸多细节,但每种设备控制器都具有独特的寄存器、缓冲区等使用模式。因此,为了有效屏蔽设备控制器之间的差异,操作系统引入了设备驱动程序。通过设备驱动程序,操作系统能够统一管理不同设备控制器的操作,使其在各种设备上都能正常工作。

image

设备控制器作为硬件的一部分,并不属于操作系统的范畴。然而,设备驱动程序则是操作系统的一部分,它提供了一个接口,使得操作系统的内核代码可以像本地调用代码一样使用设备驱动程序。设备驱动程序是专门针对设备控制器编写的代码,它发出指令来操作设备控制器,从而实现对设备的操控。通过设备驱动程序,操作系统能够与设备控制器进行有效的通信,并实现对设备的控制和管理。

尽管不同的设备控制器具有不同的功能,但设备驱动程序会提供一个统一的接口给操作系统,这样不同的设备驱动程序就可以以相同的方式接入操作系统。下图展示:

image

在前面的讨论中,我们提到了中断的重要性。当设备完成了任务时,它会发送一个中断信号来通知操作系统。操作系统需要有一个地方来处理这个中断,而这个地方就是设备驱动程序。设备驱动程序会及时响应控制器发来的中断请求,并根据中断的类型调用相应的中断处理程序来进行处理。

当设备驱动程序初始化时,通常会注册一个与该设备相关的中断处理函数。中断处理程序的处理流程如下:当设备控制器触发中断并通知中断控制器后,中断控制器会向CPU发出中断请求,CPU会停止当前进程的执行并保存当前进程的上下文。接着,CPU会调用相应的中断处理函数来处理该中断。中断处理函数完成后,CPU会恢复之前保存的进程上下文,并继续执行被中断的进程。

image

总结

在本文中,我们总结了关于I/O控制方式的内容。首先,我们介绍了轮询等待和异步通知两种基本的I/O控制方式。轮询等待方式效率低下,会占用CPU的全部时间,而异步通知方式通过中断控制器来通知CPU,能够有效提高系统的响应速度和效率。

接着,我们介绍了中断的使用和分类。中断可以分为软中断和硬中断两种形式,它们能够大大提高系统的并发性和响应能力。然而,中断也存在一个问题,即会打断CPU当前的工作,导致无法同时处理其他任务。

为了解决这个问题,我们引入了DMA(直接内存访问)控制器。DMA控制器能够让设备在没有CPU参与的情况下,自行将设备的输入/输出数据传输到内存中,从而减少CPU的参与度,提高系统的并发性和响应能力。

最后,我们介绍了设备驱动程序的作用和重要性。设备驱动程序是操作系统的一部分,它提供了一个接口,使得操作系统能够统一管理不同设备控制器的操作。设备驱动程序还负责处理设备触发的中断请求,并调用相应的中断处理程序来进行处理。

标签:DMA,控制器,驱动程序,探索,中断,CPU,设备
From: https://www.cnblogs.com/guoxiaoyu/p/17683650.html

相关文章

  • 嵌入式基础知识-DMA
    本篇来介绍DMA的一些基础知识。1DMA简介DMA(DirectMemoryAccess),中文名为直接内存访问,它是一些计算机总线架构提供的功能,能使数据从附加设备(如磁盘驱动器)直接发送到计算机主板的内存上。对应嵌入式处理器来说,DMA可以提供外设和存储器之间,或存储器与存储器之间的高速数据传输,无须C......
  • 探索灵活布局:深入了解Flexbox
    介绍:Flexbox是一种用于网页布局的强大工具,它提供了一种灵活且直观的方式来排列和对齐网页元素。在本文中,我们将深入探讨Flexbox的使用,包括基本概念、常用属性和实际应用场景。正文:基本概念和语法Flexbox基于容器和子项的概念进行布局。容器是包含子项的父元素,而子项则是容器的直......
  • KdMapper扩展实现之CrystalMark(winring0x64.sys)
    1.背景  KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称winring0x64.sys 时间戳47......
  • KdMapper扩展实现之CPUID(cpuz141.sys)
    1.背景  KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称cpuz141.sys 时间戳583446......
  • osg场景中的坐标和模型在3dmax的坐标有什么关联
    在OpenSceneGraph(OSG)中的坐标系统与3dsMax(3DStudioMax)中的坐标系统之间存在一些基本的关联,但也有一些重要的差异。以下是它们之间的主要区别和关联:坐标系方向:OSG使用右手坐标系,其中X轴指向右侧,Y轴指向上方,Z轴指向观察者的方向(远离观察者)。3dsMax通常使用左手坐标系,其......
  • RDMA-内核接口-rxe_map_mr_sg
    描述:映射mr的sg调用链:此处多处调用staticintnvme_rdma_map_sg_fr(structnvme_rdma_queue*queue,    structnvme_rdma_request*req,structnvme_command*c,    intcount){   req->mr=ib_mr_pool_get(queue->qp,&queue->qp->rdma_mrs);  /*  ......
  • 构筑下一代数据中心互联的“超级高速公路”,中科驭数正式发布KPU FLEXFLOW®-2100R RDM
    2023服贸会期间,中科驭数重磅推出最新自研的高性能网络“利器”——KPUFLEXFLOW®-2100RRDMA加速DPU卡。这款产品的发布标志着中科驭数在高性能计算和数据中心领域的不断创新,旨在面向高速网络、高性能存储搭建起算力集群内部通信的"超级高速公路”,助力高性能计算领域创新。站在数......
  • P6037 Ryoku 的探索
    题目传送门思路提供首先,我们从题目中可以看到,存在$n$个点$n$条边,所以此题考查的是基环树,那么什么是基环树——基环树是一个$n$个点$n$条边的图,比树多出现一个环。因此,这棵树上是存在一个环的(而且很重要),所以我们要先找出这个环,基环树找环有两种基本的算法,一种是DFS而......
  • @supermap/iclient-leaflet使用tiledMapLayer报错
    使用leaflet加载超图的时候有时候超图无法加载有时候报如下错误因为手上有好几个项目都在使用leaflet但是同样都使用@supermap/iclient-leaflet(版本11.1.0-a)加载超图,有的项目可行,有的不可行最后打开项目根目录下node_modules里查看@supermap文件夹里的iclient-leafl......
  • 探索神秘的细胞世界:我的旅程与洞见
    在我的科学探索之旅中,我深入挖掘了神秘而令人着迷的细胞世界。我尝试了解这个微观世界的各种奇迹和困惑,从细胞的再生能力到细胞的可塑性和干细胞技术的潜力。下面,我将与你分享我在这次旅程中的见解和发现。神秘的神经细胞:更新与替换的奇迹我首先探索了神经细胞的世界。我很惊讶......