当前位置:网站首页>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
边栏推荐
- TRACE32——使用读写断点
- Auto.js Pro write the first script hello world
- Compose the displacement of the view
- Jincang Database OCCI Migration Guide (5. Program Development Example)
- 在VScode里调试ROS程序
- 【TA-霜狼_may-《百人计划》】先行部分 手搓视差体积云
- Auto.js Pro 编写第一个脚本hello world
- 金仓数据库 MySQL 至 KingbaseES 迁移最佳实践(3. MySQL 数据库移植实战)
- 数字3d虚拟交互展厅顺应时代发展需求和趋势
- 05-分布式计算框架
猜你喜欢
随机推荐
智能健身动作识别:PP-TinyPose打造AI虚拟健身教练!
基于flowable的upp(统一流程平台)运行性能优化(2)
使用docker容器搭建MySQL主从复制
爆肝22个ES6知识点
Postman如何做接口自动化测试?
Jincang Database Pro*C Migration Guide ( 5. Program Development Example)
leetcode:151. 颠倒字符串中的单词
什么是数据标注? 数据标注公司主要做什么?
mysql-installer安装教程(详细图文)
05-分布式计算框架
leetcode:140. 单词拆分 II
ClickHouse数据类型
Go新项目-编译项目的细节(4)
Chapter 8 Character Input Output and Input Validation
leetcode:172. 阶乘后的零
金仓数据库 OCCI 迁移指南(5. 程序开发示例)
密码学的基础:X.690和对应的BER CER DER编码
Pro_07丨波动率因子3.0与斜率因子
成都高新南区 高新西区 东部新区 多边形范围点位 AOI 高德
Guys, I don't understand a bit: why the documentation of oracle-cdc writes that the connector can be done exactly-o









