当前位置:网站首页>DMA 的工作方式
DMA 的工作方式
2022-08-03 03:19:00 【[email protected]】
DMA 的工作方式如下:
- CPU 需对 DMA 控制器下发指令,告诉它想读取多少数据,读完的数据放在内存的某个地方就可以了;
- 接下来,DMA 控制器会向磁盘控制器发出指令,通知它从磁盘读数据到其内部的缓冲区中,接着磁盘控制器将缓冲区的数据传输到内存;
- 当磁盘控制器把数据传输到内存的操作完成后,磁盘控制器在总线上发出一个确认成功的信号到 DMA 控制器;
- DMA 控制器收到信号后,DMA 控制器发中断通知 CPU 指令完成,CPU 就可以直接用内存里面现成的数据了;
可以看到, CPU 当要读取磁盘数据的时候,只需给 DMA 控制器发送指令,然后返回去做其他事情,当磁盘数据拷贝到内存后,DMA 控制机器通过中断的方式,告诉 CPU 数据已经准备好了,可以从内存读数据了。仅仅在传送开始和结束时需要 CPU 干预。
我们来看看,中断处理程序的处理流程:
- 在 I/O 时,设备控制器如果已经准备好数据,则会通过中断控制器向 CPU 发送中断请求;
- 保护被中断进程的 CPU 上下文;
- 转入相应的设备中断处理函数;
- 进行中断处理;
- 恢复被中断进程的上下文
键盘敲入字母时,期间发生了什么?
那当用户输入了键盘字符,键盘控制器就会产生扫描码数据,并将其缓冲在键盘控制器的寄存器中,紧接着键盘控制器通过总线给 CPU 发送中断请求。
CPU 收到中断请求后,操作系统会保存被中断进程的 CPU 上下文,然后调用键盘的中断处理程序。
键盘的中断处理程序是在键盘驱动程序初始化时注册的,那键盘中断处理函数的功能就是从键盘控制器的寄存器的缓冲区读取扫描码,再根据扫描码找到用户在键盘输入的字符,如果输入的字符是显示字符,那就会把扫描码翻译成对应显示字符的 ASCII 码,比如用户在键盘输入的是字母 A,是显示字符,于是就会把扫描码翻译成 A 字符的 ASCII 码。
得到了显示字符的 ASCII 码后,就会把 ASCII 码放到「读缓冲区队列」,接下来就是要把显示字符显示屏幕了,显示设备的驱动程序会定时从「读缓冲区队列」读取数据放到「写缓冲区队列」,最后把「写缓冲区队列」的数据一个一个写入到显示设备的控制器的寄存器中的数据缓冲区,最后将这些数据显示在屏幕里。
显示出结果后,恢复被中断进程的上下文。
版权声明
本文为[[email protected]]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_59287292/article/details/126119215
边栏推荐
猜你喜欢
我终于逃离了互联网,却陷入了迷茫
Postman如何做接口自动化测试?
vant-field中colon属性为true报错
# RACE32——高级断点的设置和应用
ClickHouse—高级
leetcode:153. 寻找旋转排序数组中的最小值
Best Practices for Migration from Jincang Database from MySQL to KingbaseES (3. MySQL Database Migration Practice)
Jmeter TCP/UDP测试
基于 jetpack compose,使用MVI架构+自定义布局实现的康威生命游戏
企业上云规划与云原生环境设计
随机推荐
ClickHouse删除表
SPI机制是什么?
15【背景 渐变色】
基于 jetpack compose,使用MVI架构+自定义布局实现的康威生命游戏
什么是数据标注? 数据标注公司主要做什么?
工业边缘计算研究现状与展望
大佬们,我有点不明白:为什么oracle-cdc的文档写connector可以做到exactly-o
MySQL-多表查询
MySQL-Explain详解
【GO记录】从零开始GO语言——用GO语言做一个示波器(二)基于arduino的简易示波器
数字3d虚拟交互展厅顺应时代发展需求和趋势
一文了解SAP IBP是什么?
Auto.js Pro write the first script hello world
云原生(三十一) | Kubernetes篇之平台基本预装资源
金仓数据库 OCCI 迁移指南(5. 程序开发示例)
我的“眼睛”就是尺!
ClickHouse delete table
(一)Nacos注册中心集群环境搭建
ClickHouse常用函数速查大全
详细讲解一下JVM的内存模型与实现?