• 缓存IO读写的方式


    转自: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与外设并行工作

  • 相关阅读:
    MySQL如何监测是否命中索引? mysql执行计划解读
    mysql修改用户密码的方法及命令
    php7 安装rabbitmq 扩展 amqp扩展
    HAProxy的高级配置选项-Web服务器状态监测
    HAProxy 配置SSL
    nginx request_body 为空 没有参数 ;关于client_max_body_size client_body_buffer_size配置
    mysql 存储过程 函数的 导入导出
    postman设置客户端证书
    python字符串和列表之间相互转换
    python 发邮件 带附件 给多人发邮件
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/15314868.html
Copyright © 2020-2023  润新知