程序查询、程序中断、DMA之间特点

本文介绍了计算机中I/O设备与主机交互的五种主要方式,包括程序查询方式、程序中断方式、直接存储器访问(DMA)方式等,并对比了它们的特点及CPU利用率情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I/O设备与主机交换信息共有5种方式(我简单记录前三种)

1、程序查新方式
2、程序中断方式
3、直接存储器存取方式(DMA)
4、I/O通道方式
5、I/O处理机方式

1、程序查询方式:

程序查询方式是由CPU不断查询I/O设备是否已做好准备,从而控制I/O设备与主机交换信息。

2、程序中断方式:

CPU在启动I/O设备后,不查询设备是否已准备就绪,继续执行原来的程序,只是当I/O设备准备就绪并向CPU发出中断请求后才给予响应。

3、DMA:

主存与I/O设备之间有一条数据通道,主存与I/O设备交换信息的时,无需调用中断程序服务程序。若是出现DMA与CPU同时访问主存,CPU总是将总线的占有权让给DMA(因为DMA优先级更高),通常将 DMA的这种占有成为周期窃取/周期挪用(窃取时间一般为一个存储周期,会考的哟,嘿嘿嘿)

其中程序查询、程序中断、DMA三者信息交换特点

查询:CPU与设备串行工作,传送与主程序串行工作
中断:CPU与设备并行工作,传送与主程序串行工作
DMA: CPU与设备并行工作,传送与主程序并行工作

其中主机与I/O设备传递数据时,采用DMA方式,CPU利用率最高,程序查询方式,CPU利用率最低。

I/O采用统一编址,进行输入输出操作的指令是:访存指令
I/O采用不统一编制,进行输入输出操作指令是:输入输出指令

简单总结了,便于后期复习呢,寒假快来了,加油(>ω<)喵

### 程序查询程序中断DMA方式和通道方式特点与差异对比 #### 程序查询 程序查询是一种轮询机制,在这种方式下,CPU不断检查I/O设备的状态寄存器来判断数据是否准备好。这种模式会占用大量的CPU资源用于等待操作完成。 - **优点**: 实现简单,适合少量的数据传输场景。 - **缺点**: CPU效率低下,因为大部分时间花费在循环检测状态上[^1]。 ```c while (!isDataReady()) { // 循环等待直到数据准备就绪 } processData(); ``` #### 程序中断 当采用中断方式进行输入输出时,只有在外设准备好数据或发生特定事件时才会触发中断信号通知处理器执行相应的服务例程(ISR),从而减少不必要的轮询开销。 - **优点**: 提高了系统的响应速度并节省了CPU周期;可以处理多个外部请求而不会造成阻塞。 - **缺点**: 中断处理增加了编程复杂度,并且如果频繁触发可能影响实时性能[^2]. ```c void USART_IRQHandler(void){ if (__HAL_UART_GET_FLAG(&huart, UART_FLAG_RXNE)){ __HAL_UART_CLEAR_IT(&huart,UART_IT_RXNE); // 处理接收到的数据 } } ``` #### DMA (Direct Memory Access) 方式 DMA允许外设直接访问内存而不必通过CPU干预,这使得长时间连续的数据流能够更加快捷有效地被传送至目标位置。对于大量数据交换而言尤其有效。 - **优点**: 极大地减轻了中央处理器负担,提高了整体吞吐量;支持多种工作模式如单次传输或多缓冲区循环读写等特性。 - **缺点**: 需要额外配置专用控制器及其参数设置较为繁琐一些[^2]. ```c static void MX_DMA_Init(void) { /* Init with LL driver */ /* DMA controller clock enable */ __HAL_RCC_DMA1_CLK_ENABLE(); /* Configure the DMA handler for transmission process */ hdma_usart_tx.Instance = DMA1_Channel4; ... } // 启动DMA发送 HAL_UART_Transmit_DMA(&huart, pData, Size); ``` #### 通道方式(Channels Mode) 该方法通常指的是利用专门设计好的硬件路径(即DMA通道),让不同类型的外围模块共享同一套总线结构来进行快速的信息传递活动。它可以在不增加软件层面上过多控制逻辑的情况下实现多路并发作业。 - **优点**: 减少了对外部存储空间的需求,简化了系统架构;有助于构建更加紧凑高效的嵌入式平台解决方案。 - **缺点**: 设计灵活性相对较低,一旦选定具体方案则难以更改其内部连接关系. | 特征 | 查询 | 中断 | DMA | 通道 | | --- | --- | --- | --- | --- | | 资源消耗 | 较大 | 小 | 小 | 小 | | 编码难度 | 易 | 中等 | 难 | 中等 | | 数据流量适应性 | 不佳 | 好 | 最优 | 好 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梧杵

还是学生,生活太难

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值