• DMA 的工作方式


    请添加图片描述
    DMA 的工作方式如下:

    • CPU 需对 DMA 控制器下发指令,告诉它想读取多少数据,读完的数据放在内存的某个地方就可以了;
    • 接下来,DMA 控制器会向磁盘控制器发出指令,通知它从磁盘读数据到其内部的缓冲区中,接着磁盘控制器将缓冲区的数据传输到内存;
    • 当磁盘控制器把数据传输到内存的操作完成后,磁盘控制器在总线上发出一个确认成功的信号到 DMA 控制器;
    • DMA 控制器收到信号后,DMA 控制器发中断通知 CPU 指令完成,CPU 就可以直接用内存里面现成的数据了;

    可以看到, CPU 当要读取磁盘数据的时候,只需给 DMA 控制器发送指令,然后返回去做其他事情,当磁盘数据拷贝到内存后,DMA 控制机器通过中断的方式,告诉 CPU 数据已经准备好了,可以从内存读数据了。仅仅在传送开始和结束时需要 CPU 干预。

    请添加图片描述
    我们来看看,中断处理程序的处理流程:

    1. 在 I/O 时,设备控制器如果已经准备好数据,则会通过中断控制器向 CPU 发送中断请求;
    2. 保护被中断进程的 CPU 上下文;
    3. 转入相应的设备中断处理函数;
    4. 进行中断处理;
    5. 恢复被中断进程的上下文

    键盘敲入字母时,期间发生了什么?请添加图片描述
    那当用户输入了键盘字符,键盘控制器就会产生扫描码数据,并将其缓冲在键盘控制器的寄存器中,紧接着键盘控制器通过总线给 CPU 发送中断请求。

    CPU 收到中断请求后,操作系统会保存被中断进程的 CPU 上下文,然后调用键盘的中断处理程序。

    键盘的中断处理程序是在键盘驱动程序初始化时注册的,那键盘中断处理函数的功能就是从键盘控制器的寄存器的缓冲区读取扫描码,再根据扫描码找到用户在键盘输入的字符,如果输入的字符是显示字符,那就会把扫描码翻译成对应显示字符的 ASCII 码,比如用户在键盘输入的是字母 A,是显示字符,于是就会把扫描码翻译成 A 字符的 ASCII 码。

    得到了显示字符的 ASCII 码后,就会把 ASCII 码放到「读缓冲区队列」,接下来就是要把显示字符显示屏幕了,显示设备的驱动程序会定时从「读缓冲区队列」读取数据放到「写缓冲区队列」,最后把「写缓冲区队列」的数据一个一个写入到显示设备的控制器的寄存器中的数据缓冲区,最后将这些数据显示在屏幕里。

    显示出结果后,恢复被中断进程的上下文。

  • 相关阅读:
    SA实战 ·《SpringCloud Alibaba实战》专栏开篇
    自动化平台测试开发方案(详解自动化平台开发)
    2024年新算法-牛顿-拉夫逊优化算法(NRBO)优化BP神经网络回归预测
    数字翻牌器
    集合—Set接口实现类-LinkedHashSet
    一文详解KMP
    Centos GCC 版本升级
    Windows网络系统架构
    【UiPath2022+C#】UiPath 调试
    Vue项目搭建及使用vue-cli创建项目、创建登录页面、与后台进行交互,以及安装和使用axios、qs和vue-axios
  • 原文地址:https://blog.csdn.net/weixin_59287292/article/details/126119215