计算机组成原理 第七章-I/O系统第一部分--概述,常见的I/O设备,以及I/O芯片的组成

这里就是计算机组成原理的最后一部分了。我们先是学习了计算机的性能指标,学习了机器的编码,包括补码和运算,也就是CPU的运算器的原理,之后学习了存储器的基本原理,然后又回到控制器和CPU,学习了汇编语言,学习了计算机指令的原理,包括数据寻址等知识,然后我们进一步了解了一个指令是怎么执行的,学习了微指令的概念,并且学习了指令流水线,然后我们还学习了连接各个部件的总线的基本原理。到这里,我们虽然造不出电脑,但是至少说出一个能实现加减乘除运算的计算器的工作原理已经没有太大问题了,甚至给你一堆零件(上面写明是什么部件),并且把几根不同的总线也给你,你是可以拼接出一台计算机了。现在我们还需要学习最后一环,就是输入输出设备,比如显示屏,键盘等在计算机的工作原理。

1. I/O系统概述

这个图可以帮你快速回忆一下学了啥:
在这里插入图片描述
我们已经学完了主机,现在就需要来详细学习外设的实现。先来个定义:把数据输入到主机内部,或者接收主机输出的数据的设备就是输入输出设备,简称I/O设备。和操作系统不同的是,本部分学习的是这些设备的硬件实现原理。

1.1 I/O接口

I/O接口通过设备总线和主机进行数据交互,I/O接口也叫设备控制器或者I/O控制器,也就是说它其实是一个小芯片,目前的I/O接口多数是USB标准的,你拆开你电脑的接口那里一般都有,所以把电脑拆开就看见了,这都是焊死在你主板上的。
在这里插入图片描述
当然,因为设备的接口不一样,有USB的,有SATA的,所以一般而言,有些电脑有多个接口,能支持不同协议的外部设备。像图里面这个老主板的接口是PS2的,它的芯片在后面一点点:
在这里插入图片描述
现在的电脑基本都不是单独放一处了,而是集成在南桥芯片里面。I/O接口的芯片里面一般有三个寄存器:
(1)数据寄存器:用来保存输入的或者输出的数据。
(2)控制寄存器:用来控制外部设备的,比如让音响的哪个部分震动发出什么样的声音,或者说控制一个炫彩的键盘哪个灯闪亮等。
(3)状态寄存器:反应当前寄存器的状态,比如键盘正在输入,那么数据寄存器就要做好准备,也比如打印机正在忙碌,那么就不能立即打印新的文件。
这个芯片和三个总线相连接,如图:
在这里插入图片描述## 1.2 程序查询方式
早期的CPU在发出读命令(比如显示一个输入框)之后需要不断地询问I/O控制器的数据寄存器和状态寄存器,来看设备是否有输入或者状态是否改变。这也叫程序查询方式,这种方式会让CPU处于一个空闲状态,效率不高。

1.3 程序中断方式

于是出现了程序中断方式,CPU发出读命令以后,先去忙其他的,当你接触到键盘的一瞬间,从I/O接口发出一个中断请求,CPU来处理输入的数据。需要注意的是,程序中断只适用于慢速的I/O设备,比如键盘,因为一秒一次的输入对CPU来说很慢,它可以干很多事情,但是现在你插一个高速U盘,那么CPU就会被连续地多次中断,效率反而会降低(因为中断也是需要时间的),所以在对于高速的外设时,我们采用DMA控制

1.4 DMA控制器

DMA控制器也叫DMA接口,是专门同高速的外部设备比如磁盘进行连接的,它也是I/O接口的一种。DMA是直接内存访问的意思,它和CPU通过DMA总线直接连接,CPU可以直接通过DMA线去控制磁盘读写哪些内容和主存交互,一般CPU会发出一系列的读取命令(给个地址,然后连续读写),然后DMA控制器就把这些命令存下来,紧接着控制和DMA连接的外设执行这些命令,这个时候CPU就不需要接管了。需要注意的是,现在程序中断方式已经很少用于外部设备了,USB口都支持DMA方式,因为技术的几步,所以目前的I/O芯片会根据外设的种类,来选择是程序中断还是DMA控制方式。DMA不是不中断,而是在DMA里面存的指令全部运行完成以后再中断,让CPU发出新的命令。

1.4 通道

但是,如果你设备有一堆,比如百度云的超级服务器,即便使用DMA方式,也需要连续不断的中断(一个执行完以后另一个又接着执行完了)。于是就有了通道,前面已经提及过这个设备,它是一个简单的小CPU,它只能执行简单的通道指令。当CPU忙不过来的时候,CPU会指示通道要管理哪些I/O设备,并且会指示好通道要执行哪些通道指令,最后当通道执行完以后再向CPU发出中断

这里有点乱,我来总结一下:
首先,外部设备需要向CPU发出中断信号,提醒CPU需要发出信号。
(1)当设备是比较慢速的,比如键盘等:在使用的时候每用一次向CPU发一次中断。
(2)当设备比较快,比如磁盘等:第一次中断以后,CPU交给DMA一个连续执行的指令,然后等设备连续执行完成以后,DMA再向CPU发出中断。
(3)当设备又多又快时:由CPU指定通道需要管理哪些设备,并且要执行什么,通道代替CPU去执行管理即可,不影响CPU的工作。这是一个层层递进的关系。
这里看不懂没有关系,因为I/O控制中断的方式的很多细节都很重要,将会在本章的下一部分细讲,到时候会全面细致地进行描述,这里就当作预习

1.5 I/O指令和通道指令的区别

I/O指令是让CPU去完成的(比如接收键盘输入的数字并相加),而通道指令是通道去执行完成的(比如把键盘输入的数据显示到屏幕上)。
(1)I/O指令分为三段:

操作码(表明这是I/O指令)命令嘛(要设备做啥)设备码(控制哪个设备)

不同的设备,驱动不同,I/O指令还不同,所以有的时候一些设备接到电脑上如果不能运行,需要去找厂家安个驱动,这些驱动其实就是指令集,告诉CPU需要哪些指令来控制这个设备。一般驱动都是厂家写的,所以音响没有声音不需要找电脑商的麻烦,找音响卖家要驱动先。
(2)通道程序是存在内存里面,通道指令的格式一般由:操作码,记数段,内存地址段,结束标志组成:

操作码记数段内存地址结束标志

但是其实不同的协议,不同的计算机,通道指令的格式还不一样,所以这里仅供参考,考试也不会考:
(1)操作码:操作码是指令中用来标识所需执行操作类型的字段。它指示通道应该执行的具体操作,例如发送数据、接收数据、打开通道或关闭通道等。操作码告诉通道控制器如何处理数据以及应采取的行动。
(2)记数段:记数段提供了有关操作中涉及的数量或计数的信息。这个部分通常指定传输的数据长度、传输的数据量、待处理的数据块数量,或通道控制器的计数器设置等。记数段有助于指定操作的规模和范围。
(3)内存地址段:内存地址段提供了所操作数据在内存中位置的信息。这个部分指定了要发送或接收数据的内存地址或缓冲器的位置。通过指定内存地址,通道控制器可以准确地找到数据并进行相关操作。
(4)结束标志:结束标志用于指示通道指令的结束。它告诉通道控制器在完成指定任务后停止执行命令。结束标志可以是一个特定的位模式,一个字节值或者一个特定的字符。结束之后就会向CPU发出中断。

2.外部设备有哪些

外部设备分为输出设备,输入设备和外部存储器,只靠显存的计算,其他都不考,所以简单了解即可。

2.1 键盘

在这里插入图片描述
确定按键,已经翻译都是键盘的硬件直接完成的,把编码传给主机是靠I/O接口实现的。

2.2 鼠标

在这里插入图片描述
图1是机械式的,现在已经被淘汰,现在都是光电式的,用光传感器,更灵敏。

2.3 显示器

2.3.1 显示器的基本性能指标(会和显存的计算一起考察)

因为我们用屏幕的对角线来表示其大小(因为对角线最长,所以卖家喜欢),所以同英寸的屏幕正方形的最大。直接放上王道完整的PPT:
在这里插入图片描述
图中的灰度级,现在叫位深度或者颜色深度,比如我电脑是8位,也就是说我的颜色各有 2 8 = 256 2^8=256 28=256种,完全够用了:
在这里插入图片描述
你甚至可以改分辨率合刷新率来省电。显示器常见的位深度有以下几种:
1位深度:也称为单色模式,只能显示两种颜色,通常是黑色和白色。
8位深度:也称为256色模式,可以显示256种不同的颜色。
16位深度:也称为高彩色模式,可以显示约6万种不同的颜色。
24位深度:也称为真彩色模式,可以显示约1600万种不同的颜色。
32位深度:也称为真彩色模式+透明通道,可以显示约1600万种不同的颜色,并支持透明效果。深度越高,价格是直线上升。同样的大小的屏幕,分辨率决定的是清晰度,颜色深度决定的是色彩的丰富程度,比如同样的夕阳西下画面,颜色深度越深就越真实。但是8bit之后区别就不是那么大了,所以市面上的显示屏多是8比特的,8比特之后,就追求分辨率即可。

较高的位深度可以提供更丰富和准确的颜色表现,使图像显示更加真实和精细。然而,需要注意的是,位深度较高也会占用更多的存储空间和图形处理能力。

2.3.2 阴极射线管显示器

目前已经被淘汰了,因为有辐射,容易坏。
在这里插入图片描述
里面的所谓优点目前也被液晶显示屏全面碾压。但是这种显示器在很多玩具,或者机器人上还在使用,它还能进一步分类:

2.3.2.1 字符显示器(会考)

选择题会考察的是显示的过程:
(1)显存把输入的ASCLL码转换成点阵(字形码)放入字符发生器,所以显存存的是ASCLL码
(2)点阵存在由ROM构成的字符发生器中,然后字符发生器和控制器一同 控制发出电子显示图像;所以题目如果说ASCLL码存在字符发生器里,或者说点阵存在显存里面都是错的
在这里插入图片描述
在这里插入图片描述
如图所示,根据点阵的信息,会自动的发出电子,然后点亮屏幕:
在这里插入图片描述
其实后面的液晶显示器等,原理也差不多。

2.3.2.2 图形显示器

在这里插入图片描述
在这里插入图片描述
比如示波器等。而且还能分:
在这里插入图片描述

2.3.2.3 图像显示器

其实这种显示器很常见的,比如小霸王:
在这里插入图片描述
这些大家了解即可。

2.3.3 液晶显示屏和LED显示屏

一开始液晶显示屏分辨率高,稳定,无辐射主要用于平时的电脑,LED则分辨率低一些(你靠近会看见是很多的小LED灯泡)但是比较便宜,所以用于广场的大屏幕(离得远看上去效果不错)。
在这里插入图片描述
因为集成技术的发展,LED的灯泡可以做得很小,显示很精细,显示的能力甚至超越了LCD所以目前也用作屏幕,我的电脑也是LED的。
在这里插入图片描述
这段话的描述并不是是绝对的,因为时代在进步,LCD的性能目前也不比LED差,大有弯道超车的意思。不过,目前OLED逐渐成为主流。现在的一些高端电脑还用WLED作为LCD的背景光源,来生产高分辨率屏幕,是一个百花齐放的时代。

2.3.4 OLED显示屏

OLED(Organic Light Emitting Diode)是一种先进的显示技术,其主要特点是利用有机材料发射光来显示图像。它既不是LCD也不是LED,与传统的两种显示技术相比,OLED具有许多显著优势。OLED的优势有:
(1)OLED是自发光的,不需要背光源,可以实现出色的对比度和黑色表现。
(2)OLED具有较宽的可视角度,观察者可以从几乎任何角度获得一致的图像质量。
(3)OLED响应时间快,在显示动态内容时表现出色。
(4)OLED具备较高的色彩表现能力,可以实现更广泛的颜色范围和准确的色彩再现。
(5)OLED存在一些挑战和限制,如“烧屏”现象和较高的制造成本。
(6)OLED在移动设备、电视、电子看板和可穿戴设备等领域有广阔的应用前景。
目前的大部分手机的屏幕都是这种,比如华为mate60:
在这里插入图片描述

2.4 显卡(选择题大题都会考察)

显卡可以完成复杂的矩阵运算等,但这不是重点,重点是其显存的计算,往往会和上面说的显示器一起考察。
我们知道显示屏是一帧一帧播放画面的,就像看书一样,一页一页的翻动。因为要保证翻动的速度足够快,所以它在放完当前的画面以后,再去生成下一帧画面是来不及的,必须提前生成好,然后先存起来,等当前这帧画面放完立刻用。所以显存里面存的就是马上要在屏幕上显示的一帧图像的信息,听名字VRAM也知道它是RAM存储器。

2.3.1 VRAM的最小容量

显存大小的计算
V R A M 容量 = 分辨率 × 灰度级 VRAM容量=分辨率\times 灰度级 VRAM容量=分辨率×灰度级
因为一个像素点占一位,所以一共多少个点(分辨率),每一个点有多少位(灰度级/位深度),就是基本的内存。 但是实际上,显存是越大于你当前的下一帧的画面的,比如我的电脑:1920x1080x8/8B=21B=4MB。但是我的显卡内存有16G显存,由此可见差距,这是因为显存不仅存画面,其实还存了要一直用的3D模型等。最后补充一点,没有独立显卡的电脑,显存其实只是从主存划分一部分过去,只有有独立显卡的电脑才有单独的显存。并且显存合显卡并不在显示器里面,通常是在主板上的,通过总线和显示器连接。

2.3.2 VRAM的最小带宽

计算处VRAM的容量以后,还需要可以根据显存的刷新率来计算其一秒钟能支持写入多少的数据,我们称为VRAM带宽
V R A M 带宽 = V R A M 容量 × 帧频 ( 也就是刷新率 ) VRAM带宽=VRAM容量\times 帧频(也就是刷新率) VRAM带宽=VRAM容量×帧频(也就是刷新率)
因为VRAM容量是一次有多少,刷新率就是一秒多少次。

如下就是我的显卡参数:
在这里插入图片描述
其中的内存带宽就是VRAM带宽,系统共享内存就是显存,下面总线还写了用的是PCI-E的标准,理论上我一帧是4MB,然后我刷新率是165,那么应该是660MB就够了,但是这里到了192GB,这是因为它还可以协助CPU完成一些超级复杂的矩阵运算,人工智能或者3D场景的实时演算。但是考试只会考察最小的,其他的了解即可

2.4 打印机

在这里插入图片描述
像开发票的机器,银行的票据的机器一般都是击打式的(因为防伪性能好,每一个击打式打印机打出来的痕迹都是独一无二的),我们去复印用的是非击打式的。目前反而非击打式打印机更便宜。
还有其他的分类,了解即可:
在这里插入图片描述
在这里插入图片描述
击打式的打印机都是针式打印机,剩下两种都是非击打式。因为喷墨打印机便宜(黑白复印就便宜),但是目前激光打印机价格也降低了,所以激光打印机从一开始的只打照片到现在啥都打(彩印还是贵)。一台彩色喷墨打印机最便宜才200-500,黑白的激光打印机也是200-300,彩色打印要上千。这些了解一下即可。

3.I/O接口详解

前面我们已经简单的学习了什么是I/O接口,并且简单的说了它的工作原理,但是没有详细的说明,现在我们就来更加系统详细地学习一下它是怎么工作的。
在这里插入图片描述

3.1 I/O 接口的功能

总功能是完成主机和设备的数据通信,可以拆分为以下几类:
(1)数据缓冲它的数据寄存器(也叫数据缓冲寄存器DBR)可以作为CPU和I/O设备之间的缓冲,来缓解两者速度不匹配的问题。这里说一下什么是速度不匹配:因为CPU和I/O设备都不是存储元件,虽然CPU里面有寄存器,但是这些寄存器往往只用于计算,所以CPU在一瞬间产生的大量数据,不能立即就显示到外部设备上,因为外部设备显示数据其实相比起CPU来,需要大量的准备时间,所以就需要先把这些数据存到某一个地方,然后外部设备准备好以后再一点点调用。
(2)状态或者错误检测:CPU可以根据状态寄存器里面的值检测外部设备或者准备的数据是否出错
(3)控制和定时:CPU发出的控制信号,还是总线发出的时钟信号其实都控制的是I/O接口,由控制寄存器暂存,CPU和系统总线是不与外部设备直接交互的。
(4)数据转换:因为CPU内部总线是并行的,CPU处理的数据也是并行的,但是外部总线包括设备的数据是串行的,所以I/O接口还负责把串行数据转并行,把并行数据转串行的操作,但是目前的电脑都是串行,所以不用转了。

3.2 I/O接口的内部结构

除了刚刚说的三种寄存器以外,一个I/O接口芯片的完整结构如下:
在这里插入图片描述
主机侧就是接口和主机进行数据交互的地方,在2001年以前,这里的数据都要从串行转并行才能传输,但是目前已经不用了,这里再强调一下,因为一些教材很老旧,所以题目里面说要从串行转并行或者并行转串行也是对的。主机侧直接和系统总线连接,本质上连接的就是CPU和主存。本着能复用就复用的原则,一个I/O接口芯片是可以同时控制多个接口的,如图:
在这里插入图片描述
图上的一个I/O接口芯片控制了四个USB插口。下面金色的排插就是主机侧,但是笔记本电脑是直接焊死在主板上的,主机侧的总线是光刻机刻出的。

3.3 I/O接口的工作流程

I/O接口的工作可以分为以下几步:
(1)发命令CPU根据驱动程序向I/O的控制寄存器发送命令字(也叫控制字),然后I/O的控制寄存器再发给设备,设备会将自身的状态发到I/O接口的状态寄存器里面。因为I/O接口的控制寄存器把控制信号发给设备以后,不管设备是正常工作还是不正常工作,只要返回了一个状态,就说明这个控制信号发送成功了,所以这个控制指令其实就不需要存着了,改成存储发回来的状态,这样就更能节省内存也更好实现(接一根线,反馈的数据直接覆盖原数据即可),所以如图上所示,状态寄存器也是控制寄存器,它们就是同一个东西
(2)读状态CPU从I/O寄存器的状态寄存器里面读取状态字,看看设备工作是否正常,还包括了目前设备是需要数据还是输入了数据。
(3)读写数据:如果设备正常工作,那么设备会需要数据的输入,或者已经把数据输入到了I/O接口的数据寄存器里面,所以CPU就会根据状态发送数据到I/O数据寄存器或从I/O数据寄存器里面取出数据

3.4 I/O接口的各个部件

(1)首先,我们将I/O接口里面的各个寄存器称之为I/O端口,比如图上的数据缓冲寄存器是0号I/O端口,下面的状态/控制寄存器是1号I/O端口。
(2)下面的地址线连接的地址译码器是用来选通对应的I/O端口的,每一个I/O端口都有自己的地址。
(3)最下面的控制线是用来I/O逻辑控制单元的控制信号的,有读信号,还有写信号,以及中断信号。
(4)设备侧,也就是外设控制逻辑其实就是电脑上的小插口。因为有多个外设,所以有的系统通过地址线来选通需要的外设,但是因为地址译码器一次只能选通一个部件,所以寄存器的选同和设备的选通需要分开来进行。第二种方法反而是目前常用的方法,也就是给每一个插口都分配一组独立的寄存器,也就是一个口一组I/O端口,然后地址译码器选通的寄存器只能和对应的插口进行数据交互,这样就不需要二次选通的,缺点就是增加了寄存器的数量,成本也增加了。

3.5 I/O 端口的编址

前面说了,目前一个I/O接口里面有多组寄存器,每一组至少两个寄存器(数据,控制/状态),所以选通哪个寄存器是按照它们的地址来的,那么它们的地址如何设计呢?有两种方式:

3.5.1 统一编址

统一编址也叫存储器映射方式。因为数据交互的时候总是会涉及到内存,地址译码器是可以直接选通内存,然后让内存和设备进行数据交互的,所以干脆把I/O端口的地址按照顺序排列在内存地址的后面,靠地址译码器去分辨它需要选通的是寄存器还是内存。它的特点是,地址译码器看地址就可以分辨数据存哪
在这里插入图片描述
这种方式常用于RISC指令集(因为它要的就是简单化),只有少部分的CISC采用这种方式。优点就是需要的指令少,所有的访存指令都可访问它,比较灵活。编址的空间比较大,控制电路的设计也简单。
缺点就是比较长,地址译码器译码的时间也被拉长了,同时原本内存地址只需要8位,现在加上I/O端口的地址之后可能会长到9位,让所有的内存地址都被迫扩大一位。

3.5.2 独立编址

顾名思义,独立编址就是单独为这些I/O端口编写一组地址码,它也叫I/O映射方式。如图所示:
在这里插入图片描述
其实它并没有更新出什么新的编码方式,还是用内存编码的方式去作为I/O端口的地址码,像图上的0-5内存和I/O端口的地址码是一模一样的,地址译码无法直接通过地址码进行区分。这个时候,为了防止搞混,只有I/O指令有权限访问I/O端口,也就是说I/O指令里面包含的地址码才是寄存器的,否则就是内存的。因特尔常用的I/O指令有In写数据,和OUT读数据等。
优点是编辑简单,对程序员友好,因为哪个访存哪个是访问端口一目了然。并且需要的地址数不多,所以访问起来很快。它还不会影响主存的地址空间
缺点:就是不灵活,只能用I/O指令去访问端口,不灵活(因为I/O指令很少,所以有的程序写起来就较为复杂)。CPU的控制信号增加了,因为还需要额外的增加一个控制端口的信号,导致设计起来更加复杂。

3.6 I/O接口的分类

(1)按照数据的传输形式可分为串行接口和并行接口,和总线是一致的。目前多数都是串行接口了。
(2)按照CPU什么时候查询接口(称为I/O方式),可分为:程序查询接口(就是前面说的一直问),中断接口(就是前面说的程序中断)还有DMA接口。这个看前面的知识即可简单了解,后面会一一细说。
(3)有的I/O接口还能编程,也就是可让程序编写它允许什么数据等,于是还分为:可编程接口和不可编程接口。

本章的第一部分就结束了,本章的第二部分将聚焦于I/O方式,描述程序查询,中断,和DMA的具体实现,以及逻辑细节。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值