I/O设备与主机信息传送的方式(程序查询方式,程序中断方式,DMA方式)

news2024/9/20 20:28:06

一.程序查询方式

CPU和I/O设备串行工作,CPU连接I/O设备和内存,CPU需要等待,效率很低

(由CPU通过程序不断查询IO设备是否已经做好准备,从而控制IO设备与主机交换信息)

二.程序中断方式:

中断:CPU在执行程序的过程中,如果发生意外或特殊事件,cpu要中断当前程序的处理,转而去处理特殊事件,中断结束后要返回之前的断点,继续执行之前的程序。

CPU一定程度解放,在IO设备自身准备的时候,CPU可以先进行自己的工作(不需要主动查询外设的状态),当IO与主机进行信息交换的时候,CPU暂停自身程序,参与信息交换

 程序中断的步骤:

•收到中断请求信号

•执行完第K条指令(执行周期结束)后保存(要执行现场保存)

•跳转到中断服务程序

•执行中断服务程序,执行完中断程序后再去执行K+1条指令

单重中断:中断服务过程中不允许响应其他中断

多重中断:中断服务过程中可以响应更高优先级的中断,当遇到更高优先级中断时,此中断也被当作是一个普通的程序,转而去执行更高优先级的中断

补充:中断判优

当某一个时刻有多个中断源提出中断请求时,中断系统必须按照其优先顺序予以响应。

1.硬件故障中断属于最高级,其次是软件中断
2.非屏蔽中断优于可屏蔽中断
3.DMA请求优于I/O设备传送的中断请求
4.高速设备优于低速设备
5.输入设备优于输出设备
6.实时设备优于普通设备

可以通过硬件来实现:

硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中

 设备1#,2#,3#,4#优先级按降序排列

INTR=1表示有请求。那么其他的中断不允许有请求,在同样的时间内,只有一个中断请求

可以通过软件实现:

利用程序查询的方式来控制中断源的优先级:

 如果有A请求,就进入A请求的中断服务程序,如果没有就跳到B的,即将优先级从高到低进行一次遍历和查询

三.DMA(Direct Memory Access)方式:直接内存访问

使外部设备和主存之间直接建立联系,不经过CPU,外部设备直接从内存存取数据的数据交换模式

DMA的工作过程可以分为请求,响应,传输,结束

请求
CPU对DMA控制器初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求。
响应
DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求
传输
DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。
结束
当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。

•外设通过DMA控制器向CPU发送DMA请求

•CPU响应DMA请求后,就会转变为DMA工作方式 

•CPU将总线的控制权交给DMA控制器

•DMA控制器发送存储器地址并且决定传送数据块的长度,实行I/O设备与主存之间的传送

•操作完毕后,将总线控制权交还给CPU,CPU再执行现行程序

DMA与主存交换数据的三种方式:
1.停止CPU访问主存:

 由图中可以看到,CPU对于主存的利用率没有充分发挥

2.周期挪用(或周期窃取)

DMA访问主存有三种可能
•CPU此时不访存:DMA可以访存,CPU继续执行不访存的指令

•CPU正在访存:DMA等待CPU访存
•CPU与DMA同时请求访存:此时CPU将总线控制权让给DMA

 3.DMA与CPU交替访问:(效率最高)
不需要申请建立和归还总线的使用权

 

对比程序中断方式和DMA方式:

•中断方式是在数据缓冲寄存区满后,发中断请求,CPU进行中断处理。

• DMA方式则是以数据块为单位传输的,在所要求传送的数据块全部传送结束时要求CPU进行中断处理,这样大大减少CPU进行中断处理的次数,并且CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高。

•中断方式,可以进行异常处理,处理步骤1.保存被中断的现场2.执行中断处理函数3.恢复现场

DMA不能处理异常情况,所以两者是不能相互替代的

•中断方式是程序切换,每次操作需要保护和恢复现场,中断次数多,CPU需要花较多的时间处理中断,中断次数多也会导致数据丢失。但是DMA是必须利用中断的,DMA是通过硬件实现的,否则CPU无法得到数据已经传输结束的信号,当数据传输结束的时候,DMA控制器给CPU一个中断信号,CPU进行响应.这个就大大的节约了CPU的资源。

•中断方式的数据传送方向是由设备CPU再到内存,或者相反。
DMA方式的数据传送则是将所传输的数据由设备直接送入内存,或是由内存直接送到设备。

 •DMA的优先级比中断方式的优先级高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/675888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端Vue自定义数字输入框 带加减按钮的数字输入框组件

前端Vue自定义数字输入框 带加减按钮的数字输入框组件&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13163 效果图如下&#xff1a; # cc-numbox #### 使用方法 使用方法 <!-- title: 标题 isSetMax: 是否设置最…

手把手叫你学会搭建FreeRTOS工程文件

手把手教你学会搭建FreeRTOS工程文件 一.序言二.提取文件2.1 Source文件夹2.2 portble文件夹2.3 Demo 文件夹 三.建立FreeRTOS工程3.1 新建FreeRTOS目录3.2 移植src文件夹3.3 移植port文件夹3.4 添加include文件夹3.5 提取FreeRTOSConfig.h文件3.5.1 拷贝FreeRTOSConfig.h文件 …

前端Vue自定义简单实用轮播图封装组件 快速实现轮播图

前端Vue自定义简单实用轮播图封装组件 快速实现轮播图&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13153 效果图如下&#xff1a; # cc-mySwiper #### 使用方法 使用方法 <!-- 自定义轮播图 swiperArr: 轮播数…

Day5——数据库基础2-SQL查询语句

网络安全学习笔记Day5 SQL查询语句&#xff08;重在实操&#xff01;&#xff01;&#xff01;&#xff09; 回顾1.中英文符号混淆2.数据库的操作流程&#xff08;回顾mysql相关语句&#xff09;3.“everything”工具 学习目标1.查询数据基本语法形式基本查询语句表单查询where…

ubuntu20下yolov4训练多目标实战

1、安装nvidia驱动和cudnn,不熟悉的小伙伴请移步&#xff1a;Ubuntu20.04安装NVIDIA显卡驱动、CUDA、CUDNN及突破NVENC并发限制_ubuntu20.04安装显卡驱动_BetterJason的博客-CSDN博客 2、编译opencv&#xff0c;不熟悉的小伙伴请移步:ubuntu20.04 和centos8平台opencv4.5.3&am…

【八大排序(九)】计数排序-非比较排序法

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:八大排序专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习排序知识   &#x1f51d;&#x1f51d; 计数排序 1. 前言2. 计数排序基本思路3. …

6.19 Nginx网站服务——服务基础

文章目录 一.Nginx服务基础1.关于Nginx的特点2.简述Nginx和Apache的差异3.Nginx 相对于 Apache 的优点4.Apache 相对于 Nginx 的优点5.阻塞与非阻塞6.同步与异步7.nginx的应用场景 二.编译安装nginx服务1.在线安装nginx1.1 yum部署Nginx1.2 扩展源安装完后直接安装Nginx 2.ngin…

【Red Hat 7.9---详细安装Oracle 11g】---静默方式安装

【Red Hat 7.9---详细安装Oracle 11g】---静默方式安装 &#x1f53b; 一、安装前规划&#x1f53b; 二、安装前准备一&#xff08;系统参数修改&#xff09;⛳ 2.1 内核版本、系统版本查看⛳ 2.2 修改主机名-重启生效⛳ 2.3 关闭selinux⛳ 2.4 防火墙设置1521端口开放⛳ 2.5 系…

哈希密码的加盐强化

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、什么是哈希加密&#xff1f; 二、哈希加密…

讯飞星火大模型详细内测体验:看它能否应对这些挑战?

名人说&#xff1a;一花独放不是春&#xff0c;百花齐放花满园。——《增广贤文》 作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、简要介绍二、分类问题测试0️⃣自我介绍1️⃣语言理解2️⃣知识问答3️⃣逻辑推…

“房地一体”专用系列:DG3M、D2M产品发布

基于“房地一体”项目的作业特点&#xff0c;睿铂听取客户作业过程中的需求反馈&#xff0c;在D2PSDK、D3PSDK基础之上推出全新中端产品&#xff1a;D2M和DG3M。 D2M适用于地势平坦区域的房地一体项目&#xff0c;DG3M适用于落差较大场景的房地一体项目和智慧城市三维建模项目…

【面试】标准库相关题型(二)

文章目录 1. deque底层实现原理1.1 概述1.2 原理图1.3 类结构1.4 操作函数 2. 什么时候使用vector、list、deque2.1 vector2.2 list2.3 deque 3. priority_queue的底层实现原理3.1 一句话概括&#xff1a;用堆来实现优先级队列3.2 堆结构3.3 底层容器3.4 STL对堆结构提供的接口…

计算机网络-物理层

目录 一、物理层的基本概念 二、物理层下的传输媒体 &#xff08;一&#xff09;引导型传输媒体 &#xff08;二&#xff09;非引导型传输媒体 三、传输方式 &#xff08;一&#xff09;串行传输和并行传输 &#xff08;二&#xff09;同步传输和异步传输 &#xff08;…

STL之位图(bitset)

目录 位图bitset介绍bitset使用 模拟实现位图的应用——题目总结 位图 bitset介绍 参考文档:bitset 在 C STL 中&#xff0c;std::bitset 是一个固定大小的容器类&#xff0c;用于表示二进制位序列。它可以被看作是一个长度固定为 N 的布尔数组&#xff0c;其中每个元素只有两…

[Selenium] 通过Java+Selenium查询文章质量分

文章目录 前言一、环境准备二、查询文章质量分2.1、修改pom.xml配置2.2、配置Chrome驱动2.3、引入浏览器配置2.4、设置无头模式2.5、启动浏览器实例&#xff0c;添加配置信息2.6、访问质量分地址2.7、窗口设置2.8、定位到输入框并输入博文地址2.9、定位到查询按钮并点击2.10、强…

三、Docker的基本组成和常用命令(二)

文章目录 容器命令创建并启动容器列举运行的容器退出容器命令启动容器重启容器停止容器强制停止容器删除容器 常用其他命令后台启动容器查看运行日志查看容器中的进程信息查看容器或镜像的元数据进入当前正在运行的容器从容器内拷贝文件到主机上 容器命令 说明&#xff1a;有镜…

【Linux】常用指令(二)

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 man指令 echo指令 补充: echo和cat的区别&#xff1f; CP指令 mv命令 ctrlc 指令 which指令 学习中遇到得问题: 1.如何看待指令&#xff1f; 2.在执行指令之前&#xf…

【MySQL】不就是MySQL——子查询

前言 今天我们来学习多表查询的下一个模块——子查询&#xff0c;子查询包括了标量子查询、列子查询、行子查询、表子查询&#xff0c;话不多说我们开始学习。 目录 前言 目录 一、子查询 1. 子查询的概念 2. 子查询语法格式 2.1 根据子查询结果不同可以分为&#xff1a;…

全志V3S嵌入式驱动开发(基于usb otg的spi-nor镜像烧入)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 说到了用usb otg来实现spi nand flash的烧入&#xff0c;这中间主要用到了PhoenixSuit软件。那么怎么用usb otg来实现spi nor flash的烧入呢&#…

从零开始 Spring Boot 47:缓存

从零开始 Spring Boot 47&#xff1a;缓存 图源&#xff1a;简书 (jianshu.com) Spring 提供一个简单但使用的缓存&#xff08;Cache&#xff09;机制&#xff0c;我们可以利用它来优化代码执行效率。 简单示例 老规矩&#xff0c;我们从一个简单示例开始&#xff1a; Serv…