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

探索,计算机,控制,方式,了解,dma,控制器,作用,优势 · 浏览次数 : 188

小编点评

**I/O控制方式** I/O控制方式是一种将设备控制器与CPU进行通信的方法。当CPU向设备控制器发送命令并将其存储在寄存器中时,设备控制器会执行相应的操作。 **轮询等待** 轮询等待是一种低效的方法,其中CPU一直检查设备控制器的状态寄存器,直到状态标志位被设置为完成。这种方式会导致CPU占用其全部时间在检查状态。 **异步通知** 异步通知是一种更高效的方法,其中设备控制器在完成操作后,会触发中断信号发送到CPU。CPU可以通过中断信号暂停当前的处理逻辑,以处理中断。 **中断** 中断是一种通知CPU设备完成操作的消息。当设备完成操作时,它会发送一个中断信号到CPU。CPU通过处理中断,可以恢复之前保存的进程上下文并继续执行被中断的进程。 **DMA(直接内存访问)控制器** DMA控制器是一种硬件设备,它可以让设备在没有CPU参与的情况下,自行将设备的输入/输出数据传输到内存中。DMA控制器能够极大地提高系统的并发性和响应能力。 **设备驱动程序** 设备驱动程序是专门针对设备控制器编写的代码,它提供了一个接口,使得操作系统能够统一管理不同设备控制器的操作。设备驱动程序还负责处理设备触发的中断请求,并调用相应的中断处理程序来进行处理。

正文

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的参与度,提高系统的并发性和响应能力。

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

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

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

对于有科班背景的读者,可以跳过本系列文章。这些文章的主要目的是通过简单易懂的汇总,帮助非科班出身的读者理解底层知识,进一步了解为什么在面试中会涉及这些底层问题。否则,某些概念将始终无法理解。这些计算机基础文章将为你打通知识的任督二脉,祝你在编程领域中取得成功!

探索操作系统:内核、启动和系统调用的奥秘

操作系统是计算机不可或缺的一部分,它连接着硬件和应用程序。内核是操作系统的核心,负责管理进程和线程、内存、硬件设备以及提供系统调用接口。计算机启动过程中,ROM负责加载并执行BIOS程序,而RAM用于存储运行中的程序和数据。系统调用是操作系统提供给应用程序的接口,通过系统调用可以访问操作系统的功能。系统调用相当于一个办事大厅,应用程序需要通过系统调用来完成特定的操作或获取特定的服务。

[转帖]计算机体系结构-(2)内存数据保持和刷新

https://zhuanlan.zhihu.com/p/433151653 本人lino,即将毕业的研究生,在此记录下学习过程。本次记录跟随是苏黎世邦理工大学的计算机体系结构课程。 当在memory中存储数据时,数据的保留是个问题,可能会丢失这个数据。因此本次内容围绕着DRAM进行深度探索,了解其

4.5 x64dbg 探索钩子劫持技术

钩子劫持技术是计算机编程中的一种技术,它们可以让开发者拦截系统函数或应用程序函数的调用,并在函数调用前或调用后执行自定义代码,钩子劫持技术通常用于病毒和恶意软件,也可以让开发者扩展或修改系统函数的功能,从而提高软件的性能和增加新功能。钩子劫持技术的实现一般需要在对端内存中通过`create_alloc()`函数准备一块空间,并通过`assemble_write_memory()`函数,将一段汇编代

深入理解HTTP的基础知识:请求-响应过程解析

在当今数字化的世界中,理解HTTP协议的基础知识变得至关重要。本文将带您深入探索HTTP的核心概念和请求-响应的过程。HTTP是一种用于在计算机之间传输超文本数据的协议,它不仅定义了数据交换的规则和格式,还为不同的应用程序提供了通信和交换信息的能力。通过深入了解HTTP的请求-响应过程,我们将更好地理解网络通信的基本原理,为构建和优化网络应用打下坚实的基础。

4.1 应用层Hook挂钩原理分析

InlineHook 是一种计算机安全编程技术,其原理是在计算机程序执行期间进行拦截、修改、增强现有函数功能。它使用钩子函数(也可以称为回调函数)来截获程序执行的各种事件,并在事件发生前或后进行自定义处理,从而控制或增强程序行为。Hook技术常被用于系统加速、功能增强、等领域。本章将重点讲解Hook是如何实现的,并手动封装实现自己的Hook挂钩模板。首先我们来探索一下Hook技术是如何实现的,如下

探究: 编程和英语试卷的奇妙关系

* 很多时候,专业的计算机人士在讨论计算机问题的时候,总在讨论这个实现的原理是什么,这个如何实现,如何更好地实现,如果榨干计算机硬件的性能来实现某个功能活着需求,但是,对于跨学科,跨领域的问题,却很少讨论和涉及,如果你问他们,他们多半会敷衍的回答,没有这样的需求,没有这样的场景. * 其实计算机本身

探索Lighthouse性能分数计算背后的奥秘

作为开发我们都知道,页面性能很重要,一个性能良好的页面可以给用户带来非常好的用户体验。那么,怎么能知道自己写的页面性能是好是坏呢? Lighthouse 是Chrome提供给开发者用来测量页面性能的工具。通过Lighthouse,我们可以很清楚的看到页面的性能情况。 当前页面的性能总体得分为96分,

探究:初学者编程语言的选择

| 日期 | 修改人 | 修改内容 | | | | | | 2023年2月12日 | 北极的大企鹅 |添加了C语言的新比喻 | 前景提要 很多初学者面临的最多的问题就是编程语言的选择问题,一旦你接触编程,无论任何人都会给你提到一个问题,说你要选择一门编程语言学习,才能在后续的计算机学习中取得成绩,但

数据测试实践:从一个bug开始的大数据引擎兼容性探索

数据测试不仅关注数据加工的代码逻辑,还要考虑大数据执行引擎带来的影响,因为各种引擎框架将对同一份数据产生不同的计算或检索结果。本文将从一个年度账单bug引入,讲解在数据测试实践中对大数据执行引擎兼容性