zoukankan      html  css  js  c++  java
  • 计算机组成:输入输出系统

    输入输出系统

    image-20200109003048593.png
    通道可以看做是DMA的升级版,通道有自己的控制器甚至是存储器、内存

    通道可以执行由通道指令编写的程序,由操作系统完成

    image-20200109003436972.png
    如果使用通道,就不是连接接口了,而是连接设备管理器

    I/O处理机可以使用微处理器甚至直接使用和主处理器相同的处理器来做,当然这就不是家用电脑的范畴了,强大的I/O处理机甚至在没有IO工作时,可以作为主机的处理器来使用

    I/O和主机的连接方式

    统一编址:将io地址看成内存地址的一部分。这种方式实现了io和内存的统一不需要单独的io指令,CPU指令集相对简单,如果内存空间比较大(eg.64位)可以采用这种方式

    单独编址:

    image-20200109003800800.png
    image-20200109003817940.png
    串行速度慢,但是适合长距离传输

    image-20200109004005353.png
    image-20200109004049914.png
    image-20200109004118494image-20200109004133160.png
    不便于增删设备

    image-20200109004204133.png
    外部设备输出的数据可以先缓存到io接口,进行数据格式的转换等操作再输入主机

    便于增删设备、采用标准接口,可移植性强

    信息传送的控制方式

    image-20200109004403311.png
    image-20200109004422026.png
    CPU直接对IO进行管理

    缺点就是广为人知的,浪费CPU

    image-20200109004812464.png
    image-20200109004825916.png
    image-20200109005020151.png
    DMA请求:向CPU申请占用一个存取周期的总线控制权从而将外部设备的数据加载到内存中,这个周期内CPU不能使用总线对内存进行访问,但是这段时间CPU依然可以正常使用(由于CPU会预先取一部分指令,这段时间不能访问内存有可能影响不大)

    image-20200109005743458.png

    外部设备简介

    image-20200109005917384.png
    image-20200109005907104.png
    image-20200109010032357.png
    主观图像:用户绘制的图像,由点线面构成,就是简单的那种

    客观图像:eg.GUI

    A:模拟信号

    D:数字信号

    image-20200109010234110.png

    IO接口

    为什么使用接口

    主机可能使用并行传输,几个位一起传;而IO设备有可能是一位一位传,这就需要在接口进行数据的格式转换

    电平转换:工作电平不一致

    image-20200109010548993.png

    接口的功能和组成

    image-20200109010631458.png
    注意线的信息传递方向

    设备选择线上的数据在IO接口进行匹配,确定是否是这个接口的某个设备

    image-20200109011052126.png
    完成触发器:标记设备是否准备好、数据是否准备好

    工作触发器:外部设备是否忙

    中断请求触发器:向主机提出中断请求

    屏蔽触发器:如果值为1,就不能向主机发送中断请求(当主机处理的工作优先级更高时)

    image-20200109011136724.png
    命令的译码工作也是在接口完成的

    image-20200109011316764.png

    程序查询方式

    程序查询方式是最早期的IO通讯方式,在IO准备数据的过程中,CPU一直在原地踏步等待,效率低

    image-20200109210242504.png
    多个设备时,查询顺序是按优先级来的

    计数器用来存储要传输的数据大小

    image-20200109210608657.png
    image-20200109211602244.png
    CPU原地踏步一直到查询到D等于1,表示此时数据准备完成了,就开始传输

    中断

    中断是比程序查询方法高级的IO连接方式

    image-20200109211745835.png
    image-20200109211811448.png
    排队器:为同时提出中断请求的设备按优先级排序

    image-20200109212303375.png
    指令执行周期结束前,CPU发出中断查询信号,此时接口电路如果需要中断,就发出中断请求。

    只有完成触发器设置为1并且不屏蔽时(注意Q是一个非端),提出请求到中断请求触发器

    image-20200109212746646.png
    链式的这种和主线占用那里的逻辑很像

    image-20200109212935195.png
    前面的设备有中断请求的话,后面的值都被设置为0,不能产生中断请求

    image-20200109213322873.png
    中断向量:中断服务程序的入口地址,有时候也指执行中断程序时需要的状态字

    入口地址指中断要跳转执行的位置的地址

    image-20200109213637298.png
    排队器输出只能有一个是1

    这个形成部件实际上就是设备编码器

    image-20200109213840302.png
    image-20200109214017652.png
    image-20200109214448353.png
    中断处理过程,以输入为例:

    1. CPU处理程序时处理到一条读入指令,先将地址装在地址线上,送入设备选择电路。对应设备被选中后SEL信号有效。
    2. CPU同时给接口送入启动命令,在接口中译码后和SEL信号同时有效,使得B被设置为有效,但此时数据还没有准备好,所以D还是0
    3. B的信号用于启动设备
    4. 设备启动、查询数据完成后,将数据送入DBR,并将D设置为1,B为0(因为此时设备已经处于空闲)
    5. CPU执行指令停止后,发出中断查询信号,将INTR的值设置为1,同时启动排队器排队
    6. 排队器将输出信号送给设备编码器
    7. CPU发出中断响应信号,设备编码器形成向量地址传输给CPU
    8. CPU利用这个地址找到中断服务程序,该程序完成对应的数据操作

    可见,在这个过程中,主要的控制来源是CPU

    image-20200109215448059.png
    中断隐指令:不是指令,是硬件在中断时为了“保护现场”自动进行的一系列操作

    注意寄存器不一定要进栈,也可以保存到内存中,或者转存到其他寄存器中

    image-20200109215824469.png
    image-20200109231232024.png
    可以看到,中断周期中做的事情被称为中断隐指令,当然它们其实并不是指令

    可以看到,多重中断也不是不关闭中断,只是在保护完现场之后就打开了而已,主要就是在设备服务这个主要的部分之前打开了中断

    image-20200109233030195.png
    image-20200109233145547.png
    image-20200109233159962.png

    DMA

    image-20200109233412476.png

    DMA与主存交换数据的三种方式

    image-20200109233843275.png
    DMA数据传输间隔(可能会比较大,会超过一个内存访问周期)内CPU不能访问主存、DMA在这段时间内也不活动,这个时间就浪费了

    image-20200109234156876.png
    CPU如果正在访问主存的话,DMA不能抢占

    CPU和DMA同时请求的话,优先DMA,因为DMA上连接的都是高速设备,要尽量保证他们的访问,否则可能会导致数据丢失

    image-20200109234211968.png
    由图可知,他们是轮流占用访问主存的周期的,这提高了内存的利用率,这一点对于现代计算机发展是很重要的

    来源:https://baike.baidu.com/item/%E5%86%85%E5%AD%98%E5%A2%99/445399

    内存墙,指的是内存性能严重限制CPU性能发挥的现象。内存的性能指标主要有“带宽”(Bandwidth)和“等待时间”(Latency)。

    提到系统的性能瓶颈,也许大家最先想到的是硬盘,但你知道内存同样也是系统中的性能“短板”吗?由于处理器厂商与内存厂商相互分离的产业格局,导致了内存技术与处理器技术发展的不同步。在过去的20多年中,处理器的性能以每年大约55%速度快速提升,而内存性能的提升速度则只有每年10%左右。长期累积下来,不均衡的发展速度造成了当前内存的存取速度严重滞后于处理器的计算速度,内存瓶颈导致高性能处理器难以发挥出应有的功效,这对日益增长的高性能计算(High Performance Computing,HPC)形成了极大的制约。事实上,早在1994年就有科学家分析和预测了这一问题,并将这种严重阻碍处理器性能发挥的内存瓶颈命名为"内存墙"(Memory Wall)。

    当处理器厂商意识到单纯依靠提高处理器频率并不能持续提升计算性能时,便把目光转向了利用多核心并行计算技术来提升计算性能,同时也希望该技术能缓解内存瓶颈。 但处理器核心越多,性能就越高吗?实际情况并没有那么简单,除了如何有效地给多核心分配任务这一难题之外(核心越多,任务分配的难度越大),多核心并行计算还遭遇到了更为严重的“内存墙”问题。这是因为在高度并行的处理方式下,多核心共享有限的内存带宽将会造成更大的延迟,就好像一条高速公路只有4条道,却有4辆以上的车要并列行驶,当然会造成道路拥堵、行驶缓慢了。

    这种实际意义不太强

    由于时间固定,所以不需要争取对内存和主线的控制权、速度快,但是同样的,也不够灵活

    image-20200109234718449.png

    DMA接口的功能和组成

    image-20200109235011395.png
    每传输完一个字,都要修改数据地址和剩余长度

    AR:地址存储器

    WC:字数,使用补码,每次访问一个字就加一,等溢出了就表示访问完了

    BR:数据缓存器

    DAR:设备地址寄存器,记录要管理和传输数据的设备相关的数据

    DREQ:设备请求

    HRQ:总线使用请求信号

    image-20200109235550025.png

    DMA的工作过程

    image-20200110000601743.png
    image-20200110000826268.png
    具体来看数据的输出和输入过程

    image-20200110001102902.png
    image-20200110001336225.png
    image-20200110001453751.png

    DMA接口和系统的连接方式

    所有DMA接口共享一条请求线

    这个图和我们讲的主线的串行连接是一样的

    image-20200110001723324.png
    image-20200110002859426.png
    每个接口都有独立的请求和响应线,排队在CPU内部完成

    image-20200110004502988.png

    DMA接口的类型

    image-20200110004614707.png
    这个好理解

    image-20200110005637450.png
    但是真正进行数据传输时,也只能有一个设备同时和主存进行数据传输,并行主要体现在了数据准备阶段上。

    来源:https://blog.csdn.net/weixin_41413511/article/details/87075098

    通道和DMA区别
    1、通道一般用在大型计算机系统中(不是大型机)。
    2、通道实质是一台能够执行有限的输入输出指令,并能被多台外设共享的小型DMA专用处理机。
    3、通道的作用–解决了两个问题。
    a.由cpu承担输入输出的工作。
    虽然dma无需cpu进行外设与内存的数据交换工作,但是这只是减少了cpu的负担。因而dma中,输入输出的初始化仍然要由cpu来完成。
    b.大型计算机系统中高速设备共享dma接口的问题。大型计算机系统的外设太多以至于不得不共享有限的dma接口(小型计算机系统比如pc机中每个高速设备分配一个dma接口)。

    DMA方式,是CPU通过向DMA控制器设定若干参数,然后DMA打开了一条内存到设备的通道,这样,设备(内存)中的数据可以不通过CPUl来进行数据交互。缺点是,DMA是多少设备就需要多少DMA,而且,DMA方式下,CPU的访问设备是以数据块为周期的。
    传送门1
    传送门2

    每个通道下有多个子通道,多个外部设备可以并行执行数据准备,提前将数据放入子通道的字节缓存中

    它的工作原理如下:

    image-20200110010014900.png
    速度越高的设备,优先级越高,因为高速设备受耽误时信息丢失的可能性也越大

    我们假设真正用于数据传输的时间是5微秒

    由上图可见,即使在真正用于通道和主存之间的数据传送时是串行的,总体占用的比例依然不高、依然有很大的拓展余地

  • 相关阅读:
    JAVA -数据类型与表达式---表达式
    JAVA -数据类型与表达式---基本数据类型
    【网易官方】极客战记(codecombat)攻略-森林-背靠背-back-to-back
    【网易官方】极客战记(codecombat)攻略-森林-荆棘农场thornbush-farm
    【网易官方】极客战记(codecombat)攻略-森林-村庄守护者
    【网易官方】极客战记(codecombat)攻略-森林-If 的盛宴
    【网易官方】极客战记(codecombat)攻略-森林-鹰眼
    【网易官方】极客战记(codecombat)攻略-森林-野餐毁灭者
    【网易官方】极客战记(codecombat)攻略-森林-巡逻兵克星A
    【网易官方】极客战记(codecombat)攻略-森林-巡逻兵克星
  • 原文地址:https://www.cnblogs.com/jiading/p/12240868.html
Copyright © 2011-2022 走看看