缓存IO读写的方式
2023-09-14 09:11:21 时间
转自:https://blog.csdn.net/weixin_42096901/article/details/103017044
1.中断
- ①用户进程发起数据读取请求
- ②系统调度为该进程分配cpu
- ③cpu向io控制器(ide,scsi)发送io请求
- ④用户进程等待io完成,让出cpu
- ⑤系统调度cpu执行其他任务
- ⑥数据写入至io控制器的缓冲寄存器
- ⑦缓冲寄存器满了向cpu发出中断信号
- ⑧cpu读取数据至内存
缺点:中断次数取决于缓冲寄存器的大小。
2.DMA : 直接内存存取
- ①用户进程发起数据读取请求
- ②系统调度为该进程分配cpu
- ③cpu向DMA发送io请求
- ④用户进程等待io完成,让出cpu
- ⑤系统调度cpu执行其他任务
- ⑥数据写入至io控制器的缓冲寄存器
- ⑦DMA不断获取缓冲寄存器中的数据(需要cpu时钟)
- ⑧传输至内存(需要cpu时钟)
- ⑨所需的全部数据获取完毕后向cpu发出中断信号
减少cpu中断次数,不用cpu拷贝数据
2.1 DMA了解
https://blog.csdn.net/zhejfl/article/details/82555634
DMA(Direct Memory Access,直接存储器访问),DMA的出现就是为了解决批量数据的输入/输出问题。
DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。这样数据的传送速度就取决于存储器和外设的工作速度。
通常系统总线是由CPU管理的,在DMA方式时,就希望CPU把这些总线让出来,而由DMA控制器接管,控制传送的字节数。
对于实现DMA传输,它是由DMA控制器直接掌管总线(地址总线、数据总线和控制总线),因此,存在一个总线控制权转移问题
DMA传输开始前: CPU------>DMA控制器
DMA传输结束后: DMA控制器------>CPU
一个完整的DMA传输过程必须经历DMA请求、DMA响应、DMA传输、DMA结束4个步骤。
理解关键点:在数据准备阶段,CPU与外设并行工作。
相关文章
- 闲谈关于discuz内核缓存机制
- Laravel 文件缓存也可以快得飞起,tmpfs 了解一下
- 分布式缓存-Memcached
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
- EasyCamera海康摄像机向EasyDarwin云平台推送音视频数据的缓存设计
- Glide Picasso Fresco UIL 图片框架 缓存 MD
- SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]
- uni-app:数据缓存(hbuilderx 3.6.18)
- 使用nginx的proxy_cache做网站缓存
- SpringBoot + Shiro 缓存&记住密码
- springboot2.3.4集成EhCache缓存框架完整代码
- 〖Python 数据库开发实战 - Python与Redis交互篇⑧〗- 利用 redis-py 实现缓存观众投票数据信息案例
- Vue项目打包部署Nginx配置及前端缓存问题解决
- 操作系统——IO缓存技术
- Spring实战——缓存
- HTTP协议缓存机制的应用
- 007-guava 缓存
- asp.net core webapi Session 内存缓存