首页 > 其他分享 >计算机组成原理-第七章输入/输出系统

计算机组成原理-第七章输入/输出系统

时间:2024-07-10 15:27:18浏览次数:18  
标签:输出 传送 DMA 中断 主存 接口 第七章 CPU 输入

2. I/O 接口

I/O接口是主机和外设之间的交接界面,通过接口可以实现主机和外设之间的信息交换。

2.1 I/O接口的功能

  1. 进行地址译码和设备选择
  2. 实现主机和外设的通信联络控制
  3. 实现数据缓冲
  4. 信号格式的转换
  5. 传送控制命令和状态信息

2.2 I/O接口的基本结构

I/O接口在主机侧通过I/O总线与内存、CPU相连。

数据缓冲寄存器用与暂存与CPU或内存之间传送的数据信息

状态寄存器用于记录接口和设备的状态信息

控制寄存器用来保存CPU对外设的控制信息

状态寄存器和控制寄存器在方向上相反,在访问时间上错开,因此将他们合二为一。

下图为I/O接口的通用结构:

注意:!!!!!!!!!!!!!!!!

  • I/O接口的数据线传送的是读/写数据状态信息控制信息中断类型号
  • 地址线传送的是要访问I/O接口的寄存器的地址
  • 控制线传送的是读/写控制信号来确认是读寄存器还是写寄存器。此外控制线传送的是读写控制信号和响应信号仲裁信号握手信号

I/O接口中的I/O控制逻辑还要对控制寄存器的命令字进行译码,并将译码得到的控制信号通过外设控制逻辑送到外设,同时将数据发送到外设从外设接收数据到数据缓冲器。此外其还具有收集外设状态到状态寄存器的功能

I/O指令:对于数据缓冲寄存器,状态/控制寄存器的访问操作只能在操作系统内核的底层I/O软件种使用,是一种特权指令。(计算机指令系统的一部分由CPU执行

I/O指令不直接控制I/O数据的传送,它只负责启动、停止I/O的过程、查询通道和I/O设备的状态以及控制通道进行某些操作(来源于百度百科)

2.3 I/O接口的类型

按数据传送方式:并行接口和串行接口

按主机访问I/O设备的控制方式:程序查询接口、中断接口、DMA接口(下文详解)

按功能选择的灵活性:可编程接口和不可编程接口

2.4 I/O端口及其编址

I/O端口是指I/O接口电路可被CPU直接访问的寄存器,I/O端口要想被CPU访问就必须对各个端口进行编址,每个端口进行编址,而对I/O端口的编址方式有与存储器独立编址和统一编址两种方式

1. 独立编址

也叫I/O映射方式。独立编址对所有I/O端口单独编址I/O端口的地址空间主存地址空间两个独立的地址空间。因此需要有专门的I/O指令区分是哪个地址空间。(相同的地址表示不同的地址空间)

2. 统一编址

统一编址也称存储器映射方式,是指把主存地址空间分出一部分给I/O端口进行编址,I/O端口和主存单元在统一地址空间的不同分段。根据地址范围判断访问的是I/O端口还是主存单元。(无需I/O指令)


3. I/O方式

1. 程序查询方式

信息交换的控制直接由CPU执行程序实现。程序查询方式设置一个数据缓冲器和一个设备状态器

1)程序查询方式的工作流程

  1. CPU执行初始化程序,并预设置传送装置
  2. 向I/O接口发出命令字,启动I/O设备
  3. 从外设接口读取状态信息
  4. CPU周期或持续的查询设备状态,直到外设准备就绪
  5. 传送一次数据
  6. 修改地址和计数器参数
  7. 判断传送是否结束,并未结束转到第3步,直到计数器为0

优点:接口设计简单,设备数少

缺点:CPU在信息传输过程中花费很多时间来用于查询和等待,使用独占查询则在一段时间中只能和一台外设交换信息,效率很低。

根据查询方式的不同,程序查询方式可分为如下两类:

  • 独占查询:一旦设备被启动,CPU就一直持续查询接口状态。(100%)
  • 定时查询:CPU周期查询接口状态,每次等待条件满足才进行一个数据的传送。(某些事件段)

2)程序中断方式

程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。

工作流程:

①中断请求

中断源请求CPU的设备或事件,一台计算机允许有多个中断源,每个中断源向CPU发出中断请求是随机的。为记录中断事件不同的中断源,中断系统需对每个中断源设置中断请求标记触发器

注意:!!!!!!!!!!!!可屏蔽中断不可屏蔽中断
INTR线发出的是可屏蔽中断NMI线发出的不可屏蔽中断。可屏中断的优先级最低,在关中断中不被响应。不可屏蔽中断被用于处理紧急和重要的事件,关中断模式下也响应。

②中断响应判优

中断响应优先级是指CPU响应中断请求的先后顺序,通过硬件排队器实现。一般来说

  1. 不可屏蔽中断 > 内部异常 > 可屏蔽中断
  2. 内部异常中,硬件故障> 软件中断
  3. DMA中断设备 > I/O设备的中断请求
  4. I/O传送类请求中断中,高速设备> 低速设备
  5. 输入 > 输出
③CPU响应的条件
  1. 中断源有中断请求
  2. CPU允许中断以及开中断
  3. 一条指令执行完毕

注意:!!!!!!!
CPU对于外部中断的响应总是在指令结束 (指令周期中的中断周期)

④中断响应过程

CPU响应中断后,经过某些操作转去执行中断服务程序。这些操作是由硬件直接实现的,我们将它称为中断隐指令

中断隐指令并不是指令系统的一条真正的指令,只是一种虚拟的说法,本质上是硬件的一系列自动操作

:采用硬件方法保护并更新PC的内容,而不由软件完成,这样可以避免因为软件保护和恢复PC内容而造成的时间开销和错误风险,1提高中断处理的正确性和效率。

i.关中断

CPU响应中断后,首先要保护程序的断点和信息,在保护断点和现场中,CPU不能响应更高级中断源的中断请求。

ii.保存断点

为保证中断程序执行完后能正确的返回原来的程序,必须将原程序的断点保存在栈中或特定寄存器中,异常和中断的差别,异常指令通常并没有执行成功异常处理后重新执行,所以其断点式当前指令的地址中断的断点式下一条指令的地址。

iii.引出中断服务程序

识别中断源,将对应的服务程序入口送入PC。有两个方式识别中断源:硬件向量法和软件查询法

⑤中断向量

中断识别分为向量中断非向量中断两类,每个中断源都有一个唯一的类型号每个中断类型号对应一个中断服务程序每个中断服务程序都有一个入口地址,即中断向量,CPU找到入口地址。把系统中全部中断向量集中存放到存储器的某个区域内,这个存放中断向量的存储区就被称为中断向量表

注意!!!!!:中断服务程序可以理解为一段服务,是事先编写好的一段程序,一般属于操作系统模块

⑥中断处理过程

  1. 关中断
  2. 保存断点
  3. 中断服务程序寻址
  4. 保存现场和屏蔽字(其中包括了通用寄存器的保护)
  5. 开中断(允许更高级的中断打断)
  6. 执行中断程序
  7. 关中断
  8. 恢复现场和屏蔽字
  9. 开中断
  10. 中断返回

1~3是中断隐指令,硬件自动完成;4~9由中断服务程序完成。单重中断去掉5和7。

注意:!!!!!!!!!!!!!!!
现场和断点
,这两类信息都不可以被中断服务程序破坏。现场信息用指令可以直接访问,通常在中断服务程序中通过指令把他们保存道栈中(软件决定);断点信息由cpu在中断响应时自动保存到栈或指定的寄存器中(硬件实现)。

3)多重中断和中断屏蔽技术

CPU具备多重中断的功能,必须满足下列条件

  • 在中断服务程序中提前设置开中断指令
  • 优先级高的中断源有权中断优先级低的中断源

中断优先级是指多重中断的实际优先级处理次序,可以利用中断屏蔽技术动态调整,从而可以灵活地调整中断服务程序的优先级,使中断处理更加灵活,中断源有一个屏蔽触发器(MASK)1表示屏蔽中断源的请求,0表示可以正常请求,所有屏蔽触发器组合在一起构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字

3)DMA方式

DMA方式是一种完全由硬件进行成组信息传送的控制方式,它具有程序中断的优点,CPU与外设并行工作。DMA在外设与内存开辟了一条“直接数据通路”,信息传送不再经过CPU。也叫直接存储器存取方式

注意:!!!!!!
DMA可以在每个机器周期结束只要CPU不占用总线就可响应。

①DMA方式的特点

主存和DMA接口之间有一条直接数据通路

由于DMA方式传送数据不需要经过CPU,因此不必中断现行程序,I/O与主机并行工作,程序和传送并行工作。

DMA方式具有下列特点:

  1. 它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外设访问
  2. 在数据块传送时,主存地址的确定传送数据的计数等都由硬件电路直接实现。
  3. 主存中要开辟专用缓冲区及时供给接收外设的数据
  4. DMA传送速度快CPU和外设并行工作,提高了系统效率。
  5. DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理
②DMA控制器

image-20240418214730744

CPU向DMA控制器指明要输入还是输出;要传送多少个数据;数据在主存、外设中的地址。

工作流程

  1. 接受外设发出的DMA请求,并向CPU发出总线请求。
  2. CPU响应此总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周期。
  3. 确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数。
  4. 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作
  5. 向CPU报告DMA操作的结束
③DMA控制器的组成

image-20240427200401786

主存地址计数器(AR):存放要交换数据的主存地址。在传送前,其保存的是传送数据的主存起始地址;每传送一个字,地址寄存器的内容就加1,直至该批数据传送完毕。

传送长度计数器(WC):记录传送数据的总长度。在传送前,其记录的是该批数据的总字数;每传送一个字,计数器就减1,直至计数器为0,表示该批数据传送完毕。

数据缓冲寄存器:暂存每次传送的数据。通常,DMA接口与主存之间的传送单位为字,而DMA与设备之间的传送单位可能为字节或位。

DMA请求触发器:每当I/O设备准备好数据后,发出一个控制信号,使DMA请求触发器置位。

“控制/状态”逻辑:用于指定传送方向,修改传送参数,并对DMA请求信号、CPU响应信号进行协调和同步。

中断机构:当一批数据传送完毕后触发中断机构,向CPU提出中断请求。

④DMA传送过程

image-20240418215001078

预处理:CPU完成寄存器初值设置等准备工作。

数据传送:CPU继续执行主程序,DMA控制器完成数据传送

后处理:CPU执行中断服务程序做DMA结束处理。

⑤DMA传送方式

主存和DMA控制器之间有一条数据通路,因此主存和I/O设备之间交换信息时,不通过CPU。但当I/O设备和CPU同时访问主存时,可能发生冲突,为了有效地使用主存,DMA控制器与CPU通常采用以下3种方法使用主存。

i.停止CPU访问主存

image-20240418215144916

控制简单,CPU处于不工作状态或保持状态,未充分发挥CPU对主存的利用率。

ii.DMA与CPU交替访存

image-20240418215312322

这种方式适用于CPU的工作周期比主存存取周期长的情况。例如,若CPU的工作周期是1.2us,主存的存取周期小于0.6us,则可将一个CPU周期分为C1和C2两个周期,其中C1专供DMA访存,C2专供CPU访存。

不需要总线使用权的申请、建立和归还过程,硬件逻辑更为复杂。

iii.周期挪用(周期窃取)

由于I/O访存的优先级高于CPU访存(I/O不立即访存就可能丢失数据),因此由I/O设备挪用一个存取周期,传送完一个数据字后立即释放总线。它是一种单字传送方式

image-20240418215421609

DMA 访问主存有三种可能:1.CPU 此时不访存(不冲突)2.CPU 正在访存(存取周期结束让出总线)3.CPU 与DMA 同时请求访存(I/O访存优先)

既实现了I/O传送,又较好地发挥了主存与CPU的效率。但是每挪用一个主存周期,DMA接口都要申请、建立和归还总线控制权。

⑥DMA方式与中断方式

image-20240418215648825

注意:!!!!!!!!!!!!
关于CPU在开中断时检测到中断请求就进行中断响应,我的理解是检测中断请求是在每个指令周期快结束的中断周期处,只要由有中断请求就会检测到,接着就直接进入中断。

关于中断我觉得王道讲这个题目的老师举得例子特别的好:中断就类似于上课,这个过程一般是一直进行下去的。上课中,当你想上厕所时,就会请示老师,接着就去上厕所,这就是故障;上课中你听不懂,自己就会胡思乱想,这就是陷入;上课时,当中暑了,就必须终止上课,这就是终止;上课时,有人打电话,上课不接,等到下课时再回拨,这就是可屏蔽中断(中介直接不回应,父母电话回拨);当上课时,教室停电了,无法上课,这就是不可屏蔽中断(其实我觉得地震例子更好)。

标签:输出,传送,DMA,中断,主存,接口,第七章,CPU,输入
From: https://blog.csdn.net/qq_65880213/article/details/140246410

相关文章

  • C语言—-数据的输入输出
    数据的输入C程序中实现输入的函数很多,下面逐个来进行介绍用printf函数输出数据printf函数的一般格式printf(“格式控制”,输出列表);例如#include<stdio.h>intmain(){ inta=1; printf("a=%d\n",a); printf("HelloWord"); return0;}......
  • 用kali学Python第7章用户输入和while循环的代码截图和分析
    第7章   用户输入和while循环用户输入演示代码7-1name=input("Pleaseenteryourname:")print(f"\nHello,(name)!”)运行结果Pleaseenteryourname:iTuringHello,iTuring!字符串转换其他类型•int(string):将字符串转换为整数值。•float(string):将字符串......
  • 推挽输出和开漏输出
    一、推挽输出1.1推挽输出的概念推挽(push-pull)输出是由两个MOS或者三极管组成,两个管子始终保持一个导通,另一个截止的状态。当输入高电平时,叫做推;上管Q1导通,下管Q2关闭;电流走向VCC→Q1→Vout。   当输入低电平时,叫做挽;上管Q1关闭,下管Q2导通;电流走向Vout→Q2→GND1.2推......
  • Franka demo1 - 输出机器人状态(echo_robot_state)
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<iostream>#include<franka/exception.h>#include<franka/robot.h>/***@exampleecho_robot_state.cpp......
  • 010 基于 SBI 服务完成输出和关机
    RustSBI的两个职责它会在计算机启动时进行它所负责的环境初始化工作,并将计算机控制权移交给内核在内核运行时响应内核的请求为内核提供服务这里用不太确切的话表述一下,RustSBI作为介于内核和硬件之间的软件,要完成输出和关机,思路是内核需要调用RustSBI进行对硬件的控制的.......
  • TPS61040D 升压 输出电压 一加加负载就降低
    TPS61040从5V升压到12V,空载输出电压正常,但是只要有20mA的负载,电压就被拉低到10V以下,研究了很久,一度怀疑时买到假芯片了,立创商城买的,按说不会有问题。后来发现时TPS61040输入端的大电容没有焊接导致,原来这颗IC不光需要输出电容,还需要输入接个大一点的电容。。。加电容后输出......
  • 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数, 在
    /编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。只要结果,别输出什么提示信息。/#include<stdio.h>#include<string.h>#include<ctype.h>intfun(char*buff){intsum=0;while(*buff......
  • 将C++ DLL文件输出设置到项目调试目录
    将C++DLL文件输出设置到项目调试目录在项目开发过程中,有时需要边开发DLL代码,边开发项目,将DLL文件输出设置到解决方案的项目调试目录,调试过程中可一键生成解决方案,省去重新更换DLL文件的过程。前提:在同一解决方案下添加项目工程与DLL工程。前文提示:关于C++DLL的封装可参......
  • 单片机知多少之STM32F103-GPIO输出应用篇
    示例:选择GPIOB做流水灯控制逻辑将8个发光二极管的负端分别接入PB0~PB7,正端接5V电源,当配置GPIO为低电平时,回路导通,二极管开始工作,亮灯;当配置GPIO为高电平时,回路等电位断开,二极管不工作,灭灯,使GPIO输出按一定顺序执行,即流水灯。编写代码变量定义:GPIO_InitTypeDefGPIO_InitSt......
  • P0916VB 触点输入模块
    型号:P0916VB类别:触点输入模块成色:全新,非全新质保:一年P0916VB触点输入模块的工作原理基于触点信号的检测与转换。当外部设备的触点闭合或断开时,会产生相应的电信号变化。触点输入模块通过内部的电路设计,能够检测到这种电信号的变化,并将其转换为控制系......