什么是 MIPS 中的“轮询”以及如何在内存映射 I/O 中“轮询”

问题描述 投票:0回答:1

我很难理解这个主题,简单的互联网搜索只显示中断处理,所以我假设它是一种中断?抱歉,如果我太笨了。

assembly io mips polling memory-mapped-io
1个回答
0
投票

轮询是一种I/O方法,用户程序直接管理设备。

轮询方法涉及“忙等待”循环,然后进行数据传输。这种方法很简单,目前仍在嵌入式控制器上使用,软件简单,硬件相对节能。 繁忙的等待循环非常简单:查询内存位置(设备拥有的 MMIO 位置,指示设备的状态),如果该内存位置报告设备未就绪,则在循环中重复该操作。当设备准备就绪时,向设备传输一个数据字节(例如字符)或从设备传输一个数据字节。

轮询的优点是简单。用户程序一次向控制台发送一个字符,在每个字符之间忙等待(轮询)。键盘输入也是如此,一次按下一个键,然后在每个键之间忙着等待。

轮询对于通用计算机来说是不利的,因为它消耗过多的 CPU,几乎什么也不做。如果设备是键盘,CPU 将在忙等待中循环,直到用户按下某个键,这可能是运行该循环的秒、小时或天。

此外,如果程序没有注意查找键盘字符而多次按下按键,则轮询可能会丢失键盘字符。 (有些系统会丢失较新的字符,而另一些系统则会丢失较早的字符。)

对于系统来说,繁忙等待循环就像其他普通且重要的用户代码一样:它不会专门将 CPU 交给系统上的其他软件,也不会允许系统进入较低功耗模式。

忙等待循环方法使用户程序直接与设备交互。例如,在多个同时运行的线程或程序之间共享控制台将很困难(例如轮询不是线程安全的)。

中断是忙等待设备 IO 的另一种方法。有效使用中断需要对输入和输出进行缓冲,这意味着必须以解耦单个字符的发送和接收的方式编写用户程序。通常,这种解耦是操作系统“系统调用”提供的。解耦后,当设备未准备好时,用户程序可以挂起,从而将CPU让给其他程序或降低CPU的功耗状态。由于用户程序代码不能直接访问设备,因此可以采取允许在多个线程和程序之间共享设备的步骤。

轮询中断仍然是一种基于中断的方法,只是可以在中断处轮询多个设备以识别哪个设备触发了中断——这在设计和连接中断机制以合并(或无法区分)时使用间)多个设备。轮询中断中没有忙等待循环。

© www.soinside.com 2019 - 2024. All rights reserved.