操作码算法
A. GPU和CPU之间是如何协调数据处理的
因为设计的目标不同,当今的CPU和GPU功能上有本质的不同。作为通用处理器的CPU,顾名思义,它是设计用来处理通用任务的处理、加工、运算以及系统核心控制等等的。CPU中包含的最基本部件有算术逻辑单元和控制单元,CPU的微架构是为高效率处理数据相关性不大的计算类、复杂繁琐的非计算类的等等百花八门的工作而优化的,在处理日常繁复的任务中应付自如。
计算机的“灵魂”——操作系统,以及几乎100%的系统软件都主要仰仗CPU来顺利运行。CPU面对的算术、逻辑运算以及控制处理是非常繁琐和复杂的,面对处理的数据和信息量不仅数量多而是种类多。CPU运算和控制多面手的这种设计,让它在计算机中得心应手,位置不可动摇。
GPU设计的宗旨是实现图形加速,现在最主要的是实现3D 图形加速,因此它的设计基本上是为3D图形加速的相关运算来优化的,如z-buffering 消隐,纹理映射(texture mapping),图形的坐标位置变换与光照计算(transforming & lighting)等等。这类计算的对象都是针对大量平行数据的,运算的数据量大,但是运算的类型却并不复杂,大多类似和雷同,计算性强但是逻辑性不强,如矩阵运算就是图形运算的典型特性。
如今的游戏,单单从图象的生成来说大概需要下面四个步骤:
1、Homogeneous coordinates(齐次坐标)
2、Shading models(阴影建模)
3、Z-Buffering(Z-缓冲)
4、Texture-Mapping(材质贴图)
在这些步骤中,显示部分(GPU)只负责完成第三、四步,而前两个步骤主要是依靠 CPU 来完成。而且,这还仅仅只是3D图象的生成,还没有包括游戏中复杂的AI运算。场景切换运算等等……无疑,这些元素还需要CPU去完成,这就是为什么在运行《魔兽世界》的时候,当场景切换时再强劲的显卡都会出现停顿的现象。
对于需要CPU进行大量AI运算的游戏来说,在固定的显示分辨率下,CPU的架构越强、主频越高的确有一定的优势。着名的FPS第一人称设计游戏——CSS,就是一个很好的例子。当你开启了30个左右的机器人,在大混战的时候就很容易体现出高端CPU与入门级CPU之间的区别了。
打造一套完整的游戏 PC 系统,CPU和显卡的搭配应该相得益彰,高成低就或低成高就都是不平衡的组合方式。
第一代 GPU 首先,CPU将数据传递给GPU进行处理,数据先进入T&L单元中的Transform Engine,在这里,数据将以顶 点的形式接受视野范围的判断,当处理单元判断某部分顶点处于观察者的视线范围以外时,Transform Engine将把这部分顶点“剪除”以使其不会 干扰后续的流水线操作, 具个简单的例子:当你在某FPS游戏中突然打开狙击枪的狙击镜,视野变成了一个圆形的空洞,而其他部分则为黑色,这时 Transform Engine将去除这个圆形视野范围以外的所有顶点,不过,这里进行的只是视野范围的判断,Transform Engine去除在 你的视线范围内但是被其它东西挡住了的物体,另外,每一个三角形可能被旋转,放大/缩小,上升,下降,左偏,右移等。 这就是多边形转换转换。 Transform Engine根据你的视角,改变了由程序提供的组成3D物体的顶点的坐标。经过Lighting Engine处理后的图象经过判断 处理后的数据将流入T&L单元中的Lighting Engine,根据光源的类型,距离,角度,数目,应用方式等不同参数,每一个多边形都会有 不同的光影表现和光影关系,因而需要不同的光线函数予以表征,在Lighting Engine中,处理单元将根据软件提出的光源分布情况为每个顶点计算 出它所具有的光线矢量,以便后续进行的光线纹理贴图,着色等操作
经过Lighting Engine处理的画面
其实,经由T&L单元处理过的数据还只是抽象的数据,并不是具体的图形,上面两副图仅仅是方便读者进行想象的示意图。
接下来数据将流入Setup Engine,在这里,运算单元将进行三角形的设置工作,这是整个绘图过程中最重要的一个步骤,Setup Engine甚 至直接影响着一块GPU的执行效能。三角形的设置过程是由一个一个的多边形组成的,或者是用更好的三角形代替原来的三角形。在三维图像中可能会有些三角形 被它前面的三角形挡住,但是在这个阶段3D芯片还不知道哪些三角形会被挡住。所以三角形建立单元接收到的是一个个由三个顶点组成的完整三角形。三角形的每 个角(或顶点)都有对应的X轴、Y轴和Z轴坐标值,这些坐标值确定了它们在3D景物中的位置。同时,三角形的设置也确定了像素填充的范围
经过Setup Engine处理的画面
最终着色完毕的画面
在三角形设置完毕后,T&L单元的全部运算就完成了。接下来数据将进入NV15独有的NSR像素处理单元进行一定的像素处理,接着流入像素流水线 进行后续的纹理像素填充等操作,这部分操作在DriectX7.0中的变化并不明显,基本的渲染填充过程与过去的显卡几无二异
T&L虽然再一定程度上缓解了CPU运算能力的不济所带来的瓶颈,使得系统在图形方面的资源得到了再分配和增强,但同时,T&L也将新的矛盾转到了GPU上
T&L是一组相对固定的简单的图形函数,所实现的特效受到了函数本身语句的限制,虽然这种固定的指令集设计可以带来比较高的执行效率,但这种设置 使得DX7下所能实现的特效受到了指令集的约束,许多逼真的特效无法实现,程序员的思想也被限定在一个相对狭窄的范围内。
2、我要看到你飘逸的秀发和迷人的微笑—可编程Shader以及第二代GPU
DriectX8.0在传统T&L的基础上加入了两个新的概念—可编程的Vertex Shader和Piexl Shader,同样的,第二代 GPU的标志就是硬件级别的可编程Shader运算,代表产品为NV2X(Geforce3/4Ti),R2XX(Radeon8500)等
可编程Shader的复杂程度远非T&L可比,为了方便大家理解第二代GPU的特点,我们先来认识一下什么是可编程Shader,以及可编程Shader运算单元
可编程Vertex Shader及顶点处理器:
可编程Vertex Shader让程序员能够对特定物体,甚至整个画面的每一个顶点,指定特别的运算程序,却不需要CPU介入。每一个顶点都携带相当多 的信息,比如坐标,重量,法线,颜色,纹理坐标,雾和点大小数据。顶点处理器能够以简短的程序来改变上述这些信息。 这些小程序直接由顶点着色引擎本身执 行,不必劳驾CPU。 典型的T&L引擎将程序员限制在3D运算的光影转换之前, 在有了顶点处理器的支持之后,游戏设计师对游戏场景里的3D物 体能够为所欲为的操纵变化,而且不需要用到中央处理器。
这导致了一场革新,程序可以改变顶点的坐标,这样基本上改变物体的形状,以达到更接近真实的移动、移动残影、混色、内插(在两种外型间转换),以及变形, 比如改变角色脸部的骨骼和皮肤一个产生一个适时的微笑。也可改变顶点上的颜色数据和纹理坐标,物体表面的颜色达到设计师所想要的色彩效果、投影、凹凸贴图 设置(如Blinn Bump mapping)或者其它投射的纹理。光源也可以为程序员随心所欲的调整,不再像过去那样需要对光源的效果进行笨拙的光线 纹理贴图,而这些在以前是不可想象的。这一切都归功于可编程Vertex Shader和顶点处理器的出现
Blinn Bump mapping
可编程Piexl Shader以及像素处理器
在NV15中,nVidia曾经尝试加入一个叫NSR的像素处理单元,它可以在数据进入像素流水线之前对每个像素进行一系列运算操作,虽然同为每像素操 作,但NSR与Piexl Shader可不能同日而语, NSR对于像素的运算只有7种,同T&L一样,它依然是固定模式的,程序员依然要依照 规定好的条条框框写出程序,而Piexl Shader则不同,我们可以用许多不同方式去编程,以实现不同的特效,下面就是一般的像素处理器所具备的特 性:
· 阴影贴图
· 快速纹理载入
· 影像乘法,对称核心
· 支持4096x4096或512x512x512 纹理
· 立方体贴图每边可4096x4096x32-位
· 支持YUYV的纹理(自动转换成RGB三原色)
· 支持全景贴图
可以指向任何一个图像,如背景缓冲区(back buffer),而可直接当作纹理使用
· 边缘色彩及边缘纹理
· 硬件同步化读/写
对同一张纹理的读及写允许全流水线操作。
可以对背景缓冲区着色,然后马上能当作纹理使用
· Pass through colors
· 支持DX6规格的环境凹凸/亮度贴图(就是环境凹凸贴图)
· 简单的纹理,S,T 在alpha/红(AB)及蓝/绿 (BG)
· 等向的双方向性反射分布功能光源
· 内积产生色彩贴图或Z坐标
· 真实反射凹凸贴图
这看起来似乎有点抽象,简单的说,可编程Piexl Shader实现了一个非常重要的特效—真实的毛发
古老街道上昏暗灯光中的狼人
在3D渲染中,渲染真实的毛发一直是一件非常困难的事情,大量的多边形给多边形生成带来了严峻的考验,而每一根毛发之间复杂多变的即时光影关系更不是几个简单固定的指令所能实现的。Piexl Shader的可编程性和运算能力很好的解决了这个问题
好啦,现在让我们来看看第二代GPU是如何完整处理一个画面的吧
首先,来自CPU的各种物理参数进入GPU,Vertex Shader将对顶点数据进行基本的判断,如果没有需要处理的Vertex效果,则顶点数据直 接进入Transform&Lighting Unit进行传统的T&L操作以节约时间提高效率,如果需要处理各种Vertex效果,则 Vertex Shader将先对各种Vertex Programs的指令进行运算,一般的Vertex Programs中往往包含了过去转换,剪 切,光照运算等所需要实现的效果,故经由Vertex Shader处理的效果一般不需要再进行Transform&Lighting操作;另 外,当遇到涉及到曲面镶嵌(把曲面,比如弓形转换成为多边形或者三角形)的场合时,CPU可以直接将数据交给Vertex Shader进行处理
另外,在DX8.0的Transform过程中,Vertex Shader可以完成Z值的剔除,也就是Back Face Culling—阴面隐去,这就意味着除了视野以外的顶点外,视野内被前面顶点遮住的顶点也会被一并剪除,这大大减轻了需要进行操作的顶点数目
接下来,经由Vertex Shader处理完成的各种数据将流入Setup Engine,在这里一如既往的进行三角形的设置工作,到这里为止,Vertex Shader的工作就完成了
过去,设置好的三角形本来应该带着各自所有的参数进入像素流水线内进行纹理填充和渲染,但现在则不同,在填充之前我们还需要进行Piexl Shader的操作
其实Piexl Shader并非独立存在的,它位于纹理填充单元之后,数据流入像素流水线后先进入纹理填充单元进行纹理填充,然后便是 Piexl Shader单元,经由Piexl Shader单元进行各种处理运算之后再进入像素填充单元进行具体的着色,再经由雾化等操作后,一个完整 的画面就算完成了
值得注意的是,第二代GPU中普遍引入了独立的显示数据管理机制,他们位于Vertex Shader,Setup Engine以及像素流水线之间,负 责数据的更有效率的传输、组合,各种无效值的剔除,数据的压缩以及寄存器的管理等工作,这个单元的出现对整个GPU的工作效率的保证其到了至管重要的作 用。
HyperZ系列:HyperZ技术本身就是一种类似nVIDIA的“Z-封闭甄别”的技术,但是比nVIDIA还更进一步。它的主要功能简单说来就是分 析在Z轴上的场景,被遮挡的就会被忽略掉,只渲染我们能看到的部分场景;然后对渲染过的Z轴场景进行压缩处理,数据的压缩可减少他所占用的空间,从而在存 取Z-Buffer数据的时候可以保留更多的显存带宽。而且这是一种画面质量没有损害的压缩算法,并不影响画面质量。最后一步就是把经过渲染的场景中的Z -Buffer信息立刻清除掉,这样就更加大了显存带宽的利用率。
LMA(光速显存架构)系列:光速显存架构采用的第一个技术是“显存交错控制”技术, LMA中的显存控制器划分成了4个独立的显存控制单元,每个单元最 大可以进行32bit图形相关数据的存取工作,并且这4个单元之间以及它们和图形处理单元之间都保持密切的通讯联系,并随时协调平衡各个子单元之间的数据 流量,因此整体来看LMA的显存控制单元还是可以进行128bit数据的存储,但是保证了显存带宽的充分利用。光速显存架构采用的第二个技术是“无损Z压 缩算法”。传统的图形芯片对于每个待渲染的图形象素都要进行Z轴数据的读写工作,因此存储这些数据的Z缓存一向是消耗显存带宽的大户。LMA中集成了硬件 “无损Z压缩”单元,采用“无损Z压缩算法”对Z-缓存数据进行4:1的完全无损压缩。 光速显存架构采用的第三个技术是“Z-封闭甄别”。排除了图象中 被遮盖住而不可见的部分,这样GPU就不做隐面模型构建(节省处理器的多边形运算资源),并且渲染管线也不对隐面进行渲染(无需从帧缓存中读写隐面资料数 据,节省渲染管线的象素和纹理生成资源并完全消灭了隐面资料对显存带宽的占用)。最后,LMA还包括了4组高速Cache,对数据传输进行缓冲。
3、梦中的镜花水月—可编程Shader2.0以及第三代GPU
当你第一次看到3Dmark03中的MotherNature时,你有没有感觉到震撼?
更加宽泛的色彩范围能够使得图形的逼真度上升,这就是Shader2.0的由来,Shader2.0的核心实际上就是以扩大指令数目以及FLOAT数据形 式的应用来提高色彩表达的精确度,而第三代GPU的Shader单元也由此而具备了高精度FLOAT色彩数据的运算能力。从一般角度来讲,第三代GPU同 第二代GPU相比在基本的操作控制形式等方面并没有本质的区别,但是由于Shader2.0更大的指令长度和指令个数,以及通用程序+子程序调用的程序形 式等使得第三代GPU在处理高精度的庞大指令时效率上有了明显的提升,同时也使得第三代GPU的可编程性跃上了一个新的台阶
让我们来看看第三代GPU到底有哪些改进吧
Vexter Shader部分
第三代GPU的顶点处理器部分除了一般的操作功能外还具备流程控制能力,包括循环,跳跃以及子程序调用等,这些控制指令以及更多向量(或标量)寄存器的应 用使得顶点处理器能够以更高的效率执行Vertex Programs,提高了Vertex的处理速度。同时,加大的指令长度和指令数量使得顶点处理器的 功能得到了进一步的强化。另外,在第三代GPU中,传统的T&L数据将完全交由顶点处理器来执行,Transform& Lighting Unit将彻底被顶点处理器“吞并”,这也是第三代GPU的一个重要特点
Piexl Shader部分
第二代GPU的Piexl Shader只能实现INT数据的运算,这势必会带来最终运算结果的不精确,而数据的不精确导致了颜色表现的不准确,干扰了最 终画面的质量以及效果的表现,第三代GPU的重点改进就是运算单元和寄存器所支持的运算格式,现在Piexl Shader可以进行更高精度的FLOAT 运算和输出,从而使得图形的色彩显示更加精确
暴光正确的图象
数据精度不当而无法实现的特种暴光
另外,第三代GPU的像素处理器每周期所能处理的材质以及指令也分别增加了数倍,这些新特性使得第三代GPU可以处理各种复杂程度的效果,营造一个更为真实的3D画面,比如更加真实的水面效果
INT Piexl Shader所表现的水面效果
FLOAT Piexl Shader所表现的水面效果
传统的INT无法表现宽泛的波浪效果,程序员害怕数据精度范围狭窄引起的上溢或者下溢的发生而不得不在一个很小的物理参数范围内控制涟漪水面所需的波长、 波浪的大小、移动速度以及反射和折射效果等,现在,由于数据精度的提升,像素处理器完全可以处理一个非常宽泛的数据精度范围,避免数据的溢出,这就使得更 加真实的水面效果得以被表现。第三代GPU的代表是NV3X系列,R3XX系列等,其中R3XX系列的基本处理方式和顺序与第二代GPU在本质上基本相 同,仅仅是Vertex Shader和Piexl Shader的具体操作细节和运算精度上有些许不同,而NV3X虽然在基本原理上也与之大略相同,但 从流水线的角度来看则与完全不同,应该算是个“异类”。产生过程,只分析一下NV3X
以NV35为例:
首先,他具有8个纹理帖图单元,但8个纹理贴图单元并不在固定分布于每一条Piexl流水线,而是集簇在一起,根据情况来搭配,可以是4*2、8*1。
其次,他具有12条Shader流水线,但没有全盘采用浮点渲染流水线,而只是把12条Shader流水线中的8条做成具备浮点处理能力;不过全部12条Shader流水线都具备Fixed-Point Shader的执行能力。
另外,NV3X将流水线后部的各种渲染单元,如雾化,Alpha混合等大幅削减,使得流水线在一定程度上公用这些单元
NV30的构架组成形式基本上与之相当,只是数目上略有不同
由于这个构架并不是传统意义上的4*2或者8*1的固定构架,我们不能象过去那样说NV35“每个流水线具有2个纹理帖图单元”或者“每条管线具有3个Shader流水线”……我们只能说“NV35单位周期可以完成8次左右的纹理贴图或者12次Shader操作”
另外,由于NV3X对于Fixed-Point Shader的支持精度是FP16和FP32,同时NV3X的Shader流水线的单位Fixed- Point Shader处理精度是16位,所以当遇到32位Fixed-Point Shader数据时,能进行Fixed-Point Shader 数据处理的8条Shader流水线也会根据情况进行搭配来运算32位的Fixed-Point Shader数据
Pixel Programs往往是由多条指令构成的,不同的指令需要不同的执行时间来完成,每个像素必须在应用在它“身上”的Pixel Shader 操作完成后才能由像素流水线写入到帧缓存里。故此,对于应用了Piexl Shader的像素实际上是需要多个以上的周期才能写入到帧缓存里,如果采用8 条完整的渲染流水线的话, 流水线后面的雾化、色彩混合等单元很多时候都会处在等待阶段,这部分单元需要占用的晶体管数量不在少数,如果这样浪费就怪可惜 的,砍掉后其中的雾化等单元后,对整体的性能虽然有一些影响,但是却可以把节省下来的晶体管用于加强Pixel Shader的功能和性能上来,同时可以 保证比较高的多重纹理效率,利大于弊。
简单的,这个有点诡异的体系节省晶体管的同时能确保相对较好的Pixel Shader效能,同时还有极高的多重贴图效能
nVidia本指望4条Pixel管线+ 12条Shader流水线的设计能够在现在以及未来较长的一段时间的游戏里提供超过4条甚至8条 Pixel Pipeline显卡的效能。不过,实际情况却与nVidia的初衷有些背道而驰,Shader的完美应用带来的一个结果就是越来越好的非多 纹理光效果,传统的多纹理贴图才能表现的很好的光效果现在只需要进行一次贴图或者直接使用Shader就可以达到,这使得NV3X的设计成为了空架子,实 用意义大大降低,而在单纹理处理过程中由于NV3X的后续效果单元被削减,它的渲染效能注定没有传统的完整流水线高,另外,由于DX9中的最终FP精度被 定义为FP24,这导致了NV3X的相对低下的FP效能。最终,本来“先进”的NV3X构架落的个整体效能低下的下场
从本质上来讲,图形数据在NV3X中的实际处理过程依然是沿着顶点处理器—Setup Engine—像素流水线的顺序进行的,这与R3XX以及所有的第二代GPU是相同的
天堂的入口—可编程Shader3.0,DriectX Next以及未来的GPU
在微软刚刚公布的Driect9.0C中,Vertex Shader和Piexl Shader已经具有了几乎相同的能力,而在nVidia新发布的第 四代GPU—NV40中,我们发现Vertex Shader包含了4个纹理取样器,可以使用texld指令进行查表操作, NV40可以在一个 shader pass里完成4个纹理的读取,这个对于通用替换贴图而言相当的重要,有了vertex texturing功能后, vertex shader就能读取纹理信息直接映射到顶点上,以实现displacement mapping(位移映射)等等效果,用不同的纹理和较 少的顶点传输时间就能实现外形复杂、平滑的模型,这表明GPU中Vertex Shader的功能正在逐渐接近Piexl Shader。随着GPU的发 展,未来GPU中的Vertex Shader和Piexl Shader最终将被合并成一个统一的处理单元—Intergrated Shader,两 种处理单元将使用完全相同的语法以及指令集,Shader的统一将带来完全不同与现在的数据执行处理方式,GPU的内部结构将发生本质的变化, Intergrated Shader带来了更低晶体管数目的解决方案,以更少的晶体管数目来完成现在需要数亿晶体管才能完成的功能,同时统一 Shader将引出类似全通用I/O接口的设计以利资源的更合理的传输和分配,同时,为了解决越来越庞大的数据量,虚拟显存、无限资源访问以及帧缓冲操作 等技术的引入也势在必行。另外,我们在DirectX Next中还发现了整数指令集,处理器等特殊的定义,这些新颖的设计为我们勾勒出了未来GPU的轮 廓
整数指令集
在编程中不必在担心指令限制是一个很大的进步,不过想使得GPU更为通用还需要更多的工作。一个需要提高的主要区域就是整数处理能力。目前基于在着色器中 处理的所有数据都是浮点,这对于大多数显卡操作而言是没有问题的,不过不适合动态分支预测、非内插式显存搜索(如顶点缓冲的索引)等操作。在目前的GPU 中,唯一的内存寻址就是纹理查找,使用的也是浮点值。这样的情况对于纹理定位而言没有什么问题,不过对于通用内存寻址而言就不合适了,这里的连续内存块可 以完全彼此没有关联,采用内插式查找没有任何意义。微软对于这样的情况,在4.0版的Shader模型中引入了全新的、完整的整数指令集。拓扑处理器实际 上,目前的显卡可以在某些情况下新生成三角形,比如在用到直线以及点的时候。大多数的娱乐级显卡只具备对三角形进行光栅化处理的能力,这也就意味着所有的 点、线就必须转化为三角形。点和线在最后都将以2个三角形结束,这样就需要用到2-6个顶点(根据索引方式的不同而变化)。从本质上来说,这样的做法是有 益处的,通过可编程的管线,显示先前应该遮蔽的场景也就无需通过CPU,而可以通过微软的“拓扑处理器”直接完成。从逻辑上来说,这个拓扑处理器和镶嵌单 元是相互独立的,这个处理器在两种操作集中均可以使用。由目前的趋势来看,未来的GPU将向着高运算能力,高精度,高通用性的方向发展,GPU在工作方式 上将越来越接近CPU,由于高通用性等CPU特性的引入,GPU可能在一定程度上替代一部分CPU在非绘图领域的工作,也许在未来我们会看到由全GPU组 成的图形工作站。尽管未来GPU需要面对由于这些改进而带来得的诸多问题,尤其是通用性导致的效率低下,比如Intergrated Shader的效率 低下,但随着时间的推移,各种问题都将会得到妥善的解决。
B. 什么叫机器指令机器指令怎样表示算法为什么要用机器指令表示算法
机器指令是CPU能直接识别并执行的指令,它的表现形式是二进制编码。
机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。
用机器指令来表示算法无疑比其他的指令要复杂,但是它能直接操作计算机的硬件,也就是说它写出来的代码能有很好的硬件响应速度。但随着计算机性能的提升,现在用机器指令写算法越来越少了。
C. 计算机组成原理
计算机组成原理
三、名词解释
1.计算机系统:由硬件和软件两大部分组成,有多种层次结构。
2.主机:CPU、存储器和输入输出接口合起来构成计算机的主机。
3.主存:用于存放正在访问的信息
4.辅存:用于存放暂时不用的信息。
5.高速缓存:用于存放正在访问信息的付本。
6.中央处理器:是计算机的核心部件,由运算器和控制器构成。
7.硬件:是指计算机实体部分,它由看得见摸得着的各种电子元器件,各类光、电、机设备的实物组成。
软件:指看不见摸不着,由人们事先编制的具有各类特殊功能的程序组成。
8.系统软件:又称系统程序,主要用来管理整个计算机系统,监视服务,使系统资源得到合理调度,高效运行。
应用软件:又称应用程序,它是用户根据任务需要所编制的各种程序。
9.源程序:通常由用户用各种编程语言编写的程序。
目的程序:由计算机将其翻译机器能识别的机器语言程序。
10.总线:是连接多个部件的信息传输线,是各部件共享的传输介质。
11.系统总线:是指CPU、主存、I/O设备(通过I/O接口)各大部件之间的信息传输线。
通信总线:是指用于计算机系统之间或者计算机系统与其他系统(如控制仪表、移动通信)之间的通信的线路。
按传送方式分并行和串行。串行通信是指数据在单条1位宽的传输线上,一位一位的按顺序分时传送。并行通信是指数据在多条并行1位宽的传输线上,同时由源传送到目的地。
12.带宽:单位时间内可以传送的最大的信息量。
13.机器字长:是指CPU一次并行处理数据的位数,通常与CPU的寄存器位数有关。
14.主存容量:是指主存中存放二进制代码的总位数。
15.机器数:符号位数字化,0代表正数,1代表负数。
16.定点数:小数点固定在某一位位置的数。
17.浮点数:小数点的位置可以浮动的数。
18.补码:带符号数据表示方法之一,正数的反码和原码相同,负数的反码是将二进制按位取反后在最低位再加1.
19.溢出:在计算机中,超出机器字长,发生错误的结果。
20.非编码键盘:采用软件判断键是否按下及设键、译键、计算键值的方法的键盘。
21.A/D转换器:它能将模拟量转换成数字量,是计算机的输入设备。
22.I/O接口:指主机与I/O设备之间设置的一个硬件电路及器相应的软件控制。
23.端口:指接口电路中的一些寄存器,用来存放数据信息、控制信息和状态信息。
24.中断:计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行转向对这些异常情况或特殊请求处理,处理结束后再返回到现行程序的间断处,继续执行源程序。
25.中断源:凡能向CPU提出中断请求的各种因素统称为中断源。
26.中断嵌套:计算机在处理中断的过程中,有可能出现新的中断请求,此时CPU暂停现行中断服务程序,转向新的中断请求,这种现象称为中断嵌套。
27.优先级:为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别。
28.DMA方式:用硬件在主存与外设之间直接进行数据传送,不须CPU,用软件控制。
29.指令系统:将全部机器指令的集合称为机器的指令系统。
30.寻址方式:是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法,它与硬件结构紧密相关,而且直接影响指令格式和指令功能。
31.指令周期:完成一条指令的时间,由若干机器周期组成。
机器周期:完成摸个独立操作,由若干时钟周期组成。
时钟周期:最基本时间单位,由主频决定。
32.微操作:在微程序控制器中,执行部件接受微指令后所进行的最基本的操作。
33.微指令:控制器存储的控制代码,分为操作控制部分和顺序控制部分,由微命令组成。
34.微程序:存储在控制存储器中的完成指令功能的程序,由微指令组成。
35.控制存储器:CPU内用于存放实现指令系统全部指令的微程序的只读存储器。
二、计算
3.14. 设总线的时钟频率为8MHZ,一个总线周期等于一个时钟周期。如果一个总线周期中并行传送16位数据,试问总线的带宽是多少?
解:由于:f=8MHz,T=1/f=1/8M秒,因为一个总线周期等于一个时钟周期
所以:总线带宽=16/(1/8M) = 128Mbps=16MBps
3.15. 在一个32位的总线系统中,总线的时钟频率为66MHZ,假设总线最短传输周期为4个时钟周期,试计算总线的最大数据传输率。若想提高数据传输率,可采取什么措施?
解:总线传输周期=4*1/66M秒
总线的最大数据传输率=32/(4/66M)=528Mbps=66MBps
若想提高数据传输率,可以提高总线时钟频率、增大总线宽度或者减少总线传输周期包含的时钟周期个数。
3.16. 在异步串行传送系统中,字符格式为:1个起始位、8个数据位、1个校验位、2个终止位。若要求每秒传送120个字符,试求传送的波特率和比特率。
解:一帧包含:1+8+1+2=12位
故波特率为:(1+8+1+2)*120=1440bps
比特率为:8*120=960bps
4.5. 什么是存储器的带宽?若存储器的数据总线宽度为32位,存取周期为200ns,则存储器的带宽是多少?
解:存储器的带宽指单位时间内从存储器进出信息的最大数量。
存储器带宽 = 1/200ns ×32位 = 160M位/秒 = 20MB/秒(注:1ns=10-9s)
4.7. 一个容量为16K×32位的存储器,其地址线和数据线的总和是多少?当选用下列不同规格的存储芯片时,各需要多少片?
1K×4位,2K×8位,4K×4位,16K×1位,4K×8位,8K×8位
解:地址线和数据线的总和 = 14 + 32 = 46根;
选择不同的芯片时,各需要的片数为:
1K×4:(16K×32) / (1K×4) = 16×8 = 128片
2K×8:(16K×32) / (2K×8) = 8×4 = 32片
4K×4:(16K×32) / (4K×4) = 4×8 = 32片
16K×1:(16K×32)/ (16K×1) = 1×32 = 32片
4K×8:(16K×32)/ (4K×8) = 4×4 = 16片
8K×8:(16K×32) / (8K×8) = 2×4 = 8片
6.4. 设机器数字长为8位(含1位符号位在内),写出对应下列各真值的原码、补码和反码。 -13/64,-87
解:真值与不同机器码对应关系如下:
真值 -13/64 -87
原码 1.001 1010 1,101 0111
补码 1.1100110 1,0101001
反码 1.1100101 1,0101000
6.5. 已知[x]补,求[x]原和x。
[x1]补=1.1100; [x2]补=1.1001; [x4]补=1.0000;
[x5]补=1,0101; [x6]补=1,1100; [x8]补=1,0000;
解:[x]补与[x]原、x的对应关系如下:
真值 -1/4 -7/16 -1 -11 -4 -16
[x]补 1.1100 1.1001 1.0000 1,0101 1,1100 1,0000
[x]原 1.0100 1.0111 无 1,1011 1,0100 无
x -0.0100 -0.0111 -1.0000 -1011 -0100 -10000
6.9. 当十六进制数9B和FF分别表示为原码、补码、反码、移码和无符号数时,所对应的十进制数各为多少(设机器数采用一位符号位)?
解:真值和机器数的对应关系如下:
原码 补码 移码 无符号数
9BH -27 -101 +27 155
原码 补码 移码 无符号数
FFH -128 -1 +128 256
6.12. 设浮点数格式为:阶码5位(含1位阶符),尾数11位(含1位数符)。写出-27/1024、-86.5所对应的机器数。要求如下:
(1)阶码和尾数均为原码。
(2)阶码和尾数均为补码。
(3)阶码为移码,尾数为补码。
解:据题意画出该浮点数的格式:
阶符1位 阶码4位 数符1位 尾数10位
将十进制数转换为二进制: x1= -27/1024= -0.0000011011B = 2-5*(-0.11011B)
x3=-86.5=-1010110.1B=27*(-0.10101101B)
则以上各数的浮点规格化数为:
(1)[x1]原=1,0101;1.110 110 000 0
[x3]原=0,0111;1.101 011 010 0
(2)[x1]补=1,1011;1.001 010 000 0
[x3]补=0,0111;1.010 100 110 0
(3)[x1]移补=0,1011;1.001 010 000 0
[x3]移补=1,0111;1.010 100 110 0
6.19. 设机器数字长为8位(含1位符号位),用补码运算规则计算下列各题。
(2)A=19/32,B=-17/128,求A-B。
(4)A=-87,B=53,求A-B。
解:(2)A=19/32= 0.100 1100B, B= -17/128= -0.001 0001B
[A]补=00.100 1100, [B]补=11.110 1111 , [-B]补=00.001 0001
[A-B]补=[A]补+[-B]补
=00.1001100 + 00.0010001
=00.1011101 ——无溢出
A-B= 0.101 1101B = 93/128B
(4)A= -87= -101 0111B, B=53=110 101B
[A]补=11, 010 1001, [B]补=00, 011 0101, [-B]补=11, 100 1011
[A-B]补=[A]补+[-B]补
= 11,0101001 + 11,1001011
= 10,1110100 —— 溢出
6.21. 用原码加减交替法和补码加减交替法计算x÷y。
(2)x=-0.10101, y=0.11011;
(4)x=13/32, y= -27/32。
(2)[x]原=1.10101 x*=0.10101 [X*]补=1.01011 XfYf=1
0.10101
+1.00101
1.11010 0
1.10100
+0.11011
0.01111 0
0.11110
+1.00101
0.00011 011
0.00110
+1.00101
1.01011 0110
0.10110
+0.11011
1.10001 01100
1.00010
+0.11011
1.11101 011000
[y]原=0.11011 y*=0.11011 [Y*]补=0.11011 [-y*]补=1.00101
[x/y]原=1.11000
(4)做法相同,打表格太累,仅给出结果。[x/y]原=1.01111
三、应用
4.14. 某8位微型机地址码为18位,若使用4K×4位的RAM芯片组成模块板结构的存储器,试问:
(1)该机所允许的最大主存空间是多少?
(2)若每个模块板为32K×8位,共需几个模块板?
(3)每个模块板内共有几片RAM芯片?
(4)共有多少片RAM?
(5)CPU如何选择各模块板?
解:(1)该机所允许的最大主存空间是:218 × 8位 = 256K×8位 = 256KB
(2)模块板总数 = 256K×8 / 32K×8 = 8块
(3)板内片数 = 32K×8位 / 4K×4位 = 8×2 = 16片
(4)总片数 = 16片×8 = 128片
(5)CPU通过最高3位地址译码输出选择模板,次高3位地址译码输出选择芯片。地址格式分配如下:
4.29. 假设CPU执行某段程序时共访问Cache命中4800次,访问主存200次,已知Cache的存取周期为30ns,主存的存取周期为150ns,求Cache的命中率以及Cache-主存系统的平均访问时间和效率,试问该系统的性能提高了多少倍?
解:Cache被访问命中率为:4800/(4800+200)=24/25=96%
则Cache-主存系统的平均访问时间为:ta=0.96*30ns+(1-0.96)*150ns=34.8ns
Cache-主存系统的访问效率为:e=tc/ta*100%=30/34.8*100%=86.2%
性能为原来的150ns/34.8ns=4.31倍,即提高了3.31倍。
例7.2设相对寻址的转移指令占3个字节,第一字节为操作码,第二,三字节为相对位移量(补码表示)。而且数据在存储器中采用以低字节地址为字地址的存放方式。每当CPU从存储器取出一个字节时,即自动完成(PC)+1 PC。
(1) 若PC当前值为240(十进制),要求转移到290(十进制),则转移指令的第二、三字节的机器代码是什么?
(2) 若PC当前值为240(十进制),要求转移到200(十进制),则转移指令的第二、三字节的机器代码是什么?
解:(1)PC当前值为240,该指令取出后PC值为243,要求转移到290,即相对位移量为290-243=47,转换成补码为2FH。由于数据在存储器中采用以低字节地址为字地址的存放方式,故该转移指令的第二字节为2FH,第三字节为00H。
(2)PC当前值为240,该指令取出后PC值为243,要求转移到200,即相对位移量为200-243=-43,转换成补码为D5H。由于数据在存储器中采用以低字节地址为字地址的存放方式,故该转移指令的第二字节为D5H,第三字节为FFH。
例7.3一条双字长直接寻址的子程序调用指令,其第一个字为操作码喝寻址特征,第二个字为地址码5000H。假设PC当前值为2000H,SP的内容为0100H,栈顶内容为2746H,存储器按字节编址,而且进栈操作时执行(SP)-△-P,后存入数据。试回答下列几种情况下,PC、SP及栈顶内容各为多少?
(1) CALL指令被读取前。
(2) CALL指令被执行后。
(3) 子程序返回后。
解CALL指令被读取前,PC=2000H,SP=0100H,栈顶内容为2746H。
(1) CALL指令被执行后,犹豫存储器按字节编制,CALL指令供占4个字节,故程序断电2004H进栈,此时SP=(SP)-2=00FEH,栈顶内容为2004H,PC被更新为子程序入口地址5000H。
(2) 子程序返回后,程序断点出栈,PC=2004H,SP被修改为0100H,栈顶内容为2746H。
7.6某指令系统字长为16位,地址码取4位,试提出一种方案,使该地址系统有8条三地址指令、16条二地址指令、100条一地址指令。
解:
OP A2 A1 A0 三地址指令8条
0000
•
•
•
0111
OP A1 A0 二地址指令16条
10000000
•
•
•
10001111
OP A0 一地址指令100条
110000000000
110001100011
7.7设指令字长为16位,采用扩展操作码技术,每个操作码的地址为6位。如果定义了13条二地址指令,试问还可安排多少条一地址指令。
解:(24-3)*26=3*64=192条
7.8某机指令字长16位,每个操作数的地址码为6位,设操作码长度固定,指令分为零地址,一地址和二地址三种格式,若零地址指令有M种,以抵制指令有N种,则二地址指令最多有几种?若操作码位数可变,则二地址指令最多允许有几种?
解:1)若采用定长操作码时,二地址指令格式如下:
OP(4位) A1(6位) A2(6位)
设二地址指令有K种,则:K=24-M-N
当M=1(最小值),N=1(最小值)时,二地址指令最多有:Kmax=16-1-1=14种
2)若采用变长操作码时,二地址指令格式仍如1)所示,但操作码长度可随地址码的个数而变。此时,K= 24 -(N/26 + M/212 );
当(N/26 + M/212 )1时(N/26 + M/212 向上取整),K最大,则二地址指令最多有:
Kmax=16-1=15种(只留一种编码作扩展标志用。)
9.5设机器A的CPU主频为8MHz,机器周期为4个时钟周期,且该机的平均指令执行速度是0.4MIPS,试求该机的平均指令周期和机器周期,每个指令周期中含几个机器周期?如果机器B的CPU主频为12MHz,且机器周期也含有4个时钟周期,试问B机的平均指令执行速度为多少MIPS?
A.CLK=8MHz T=1/8MHz=0.125us
机器周期=4*T=0.5us
因为执行速度为0.4MIPS 所以平均指令周期=1/0.4MIPS=2.5us
2.5us/0.5us=5个 所以每个指令含有5条机器指令
B.T=1/f=1/12MHz=1/12us 机器指令=4*T=1/3us 指令周期=5*1/3=5/3us
平均指令执行速度 1/(5/3)=0.6MIPS
9.6设某计算机的CPU主频为8MHz,每个机器周期平均含2个时钟周期,每条指令平均有4个机器周期,试问该计算机的平均指令执行速度为多少MIPS?若CPU主频不变,但每个机器周期平均含4个时钟周期,每条指令平均有4个机器周期,试问B机的平均指令执行速度为多少MIPS?
1.CLK=8MHz 平均指令执行速度1/(1/8M*2*4)=1MIPS
2.指令周期=4*4*1/8=2us 执行速度=1/(1/8M*4*4)=0.5MIPS
9.7某CPU的主频为10MHz,若已知每个机器周期平均含有4个时钟周期,该机的平均指令执行速度为1MIPS,试求该机的平均指令执行速度为多少MIPS?若CUP主频不变,但每个机器周期平均含有4个时钟周期,每条指令平均有4个机器周期,则该机的平均指令执行速度又是多少MIPS?由此可得出什么结论
1.平均指令周期=1/1MIPS=1us T=1/f=0.1us T机=4*T=0.4us
因为1us/0.4us=2.5 所以每个指令包含2.5个机器周期
2.T=0.4us 速度=1/(0.4*2.5*4)=0.25MIPS
3.因为速度=0.8MIPS 所以T指=1/0.8us
因为T指=4*2.5*T 所以T=1/8us 所以 f=1/T=8MHz
四、简答
1.冯诺依曼机主机主要特点。
○1计算机由运算器、存储器、控制器、输入设备和输出设备五大部件组成。
○2.指令和数据一同等地位存放于存储器内,并可按地址寻访。
○3.指令和数据均用二进制表示。
○4.指令由操作吗和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置。
○5.采用存储控制原理,指令在存储器内按顺序存放。通常指令是顺序执行的,在特定条件下,可根据运算结果或根据设定的条件改变执行顺序。
○6.机器以运算器为中心,输入输出设备与存储器间的数据传说通过运算器完成。
2.计算机硬件主要技术指标,软件定义与分类。
计算机硬件主要技术指标:机器字长、存储容量、运算速度、主频等。
软件定义:看不见摸不着,由人们事先编制的具有各类特殊功能的程序组成。
分类:系统软件和应用软件。
3.计算机组成部分与个部分作用。
运算器:用来完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内。
存储器:用来存放数据和程序。
控制器:用来控制、指挥程序和数据的输入、运行以及处理器运算结果。
输入设备:用来将人们熟悉的信息形式转换为机器能识别的信息形式,常见的有键盘、鼠标等。
输出设备:可将机器运算结果转换为人们熟悉的信息形式,如打印机输出,显示器输出等。
4.总线定义与分类方法,系统总线定义与分类方法。
总线
定义:总线是连接多个部件的信息传输线,是各部件共享的传输介质。
分类:片内总线 系统总线 通信总线
系统总线
定义:系统总线是指CPU、主存、I/O设备(通过I/O接口)各大部件之间的信息传输线。
分类: 数据总线 地址总线 控制总线
5.什么是总线标准,目前流行的总线标准有哪些。
所谓总线标准可视为系统与各模块,模块与模块之间的一个互连的标准界面。
ISA总线、EISA总线、PCI总线、RS—232C总线、IEEE-488(并行通信总线又称GP-IP总线)USB总线。
6.三级存储器系统中各级存储器特点与用途,分哪两个层次。
○1主存 特点:随机访问、速度快。容量大。用途:存放CPU使用的程序和数据。
辅存 特点:容量大、速度慢、价格低、可脱机保存信息。用途:存放大量后备数据
缓存 特点:速度快、容量小、价格高 用途:用于主存与辅存之间作为缓冲,正在使用的程序和数据的付本。
○2缓存-----主存层次和主存---辅村层次。
7.半导体存储器RAM与ROM特点与用途。
RAM特点:可读可写掉电后信息丢失,存临时信息。用途:主要做内存
ROM特点:只读不写掉电后信息不丢失,存长期信息。用途:主要做控制存储器
8.动态RAM与静态RAM特点与用途,DRAM刷新方式与主要优点。
静态RAM特点:信息读出后,仍保持其原有状态,不需要再生。用途:用于Cache
动态RAM特点:靠电容存储电荷的原理来寄存信息。用途:组成内存/主存。
DRAM刷新方式
集中刷新:集中刷新是在规定的一个刷新周期内对全部存储单元集中一段时间逐行进行刷新,此刻必须停止读写操作。
分散刷新:分散刷新是指对每行存储单元的刷新分散到每个存储周期内完成。
异步刷新:异步刷新是前两种方式的结合,它即可缩短“死时间”,又充分利用最大刷新间隔2ms的特点。
优点:单个MOS管组成,集成度高,速度较SRAM慢,价格低,
9.Cache工作原理特点,地址映射方式与替换算法。
原理:利用程序访问的局部性,近期用到信息存于cache。
地址映射方式:直接映射、全相联映射、组相联映射、
替换算法:先进先出算法(FIFO)、近期最少使用算法(LRU)、随机法。
10.主机与外设交换信息采用中断与DMA方式特点与应用场合。
中断方式:
特点:CPU与外设并行工作,效率高
应用场合:管理多种外设并行工作、进行实时处理、进行故障自动处理
DMA方式:
特点:
○1从数据传送看,程序中断方式靠程序传送,DMA方式靠硬件传送。
○2从CPU响应时间看,程序中断方式是在一条指令执行结束时响应,而DMA方式可在指令周期内的任一存取周期结束时响应。
○3程序中断方式有处理异常事件能力,DMA方式没有这种能力,主要用于大批数据的传送,如硬盘存取、图像处理、高速数据采集系统等,可提高数据吞吐量。
○4程序中断方式需要中断现行程序,故需保护现场;DMA方式不中断现行程序,无须保护现场。
○5DMA的优先级比程序中断的优先级高。
应用场合:高速设备 如硬盘
11.I/O端口与接口的区别,I/O接口分类方法。
端口:接口内部寄存器有I/O地址号。一般分为数据口、命令口和状态口。
接口:若干端口加上相应的控制电路组成。
接口分类:按数据传送方式分串行接口和并行接口
按功能选择的灵活性分为可编程接口和不可编程接口
按通用性分为通用接口和专用接口
按数据传送的控制方式分为程序型接口和DMA接口。
12.中断处理过程分成哪两个阶段各完成哪些任务
响应阶段:关中断、保护断点地址、转入中断服务入口地址
处理阶段:保护现场、执行用户编写的中断服务程序、恢复现场。
13.与中断方式比较MDA方式主要特点是什么。
○1从数据传送看,程序中断方式靠程序传送,DMA方式靠硬件传送。
○2从CPU响应时间看,程序中断方式是在一条指令执行结束时响应,而DMA方式可在指令周期内的任一存取周期结束时响应。
○3程序中断方式有处理异常事件能力,DMA方式没有这种能力,主要用于大批数据的传送,如硬盘存取、图像处理、高速数据采集系统等,可提高数据吞吐量。
○4程序中断方式需要中断现行程序,故需保护现场;DMA方式不中断现行程序,无须保护现场。
○5DMA的优先级比程序中断的优先级高。
14.什么是寻址方式,数据寻址方式有哪几种。
寻址方式:是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法,它与硬件结构紧密相关,而且直接影响指令格式和指令功能。
数据寻址方式:立即寻址、直接寻址、隐含寻址、间接寻址、寄存器寻址、寄存器间接寻址、基址寻址、变址寻址、相对寻址、堆栈寻址。
15.RISC主要特点与CISC相比较RISC主要优点。
特点:
选用使用频率较高的一些简单指令以及一些很有用但又不复杂的指令,让复杂指令的功能由频度高的简单指令的组合来实现;
指令长度固定指令格式种类少,寻址方式种类少;
只有取数/存数指令访问存储器,其余指令的操作都在寄存器内完成;
采用流水线技术,大部分指令在一个时钟周期内完成;
控制器采用组合逻辑控制,不用微程序控制;
采用优化的编译程序。
○1充分利用VLSI芯片的面积。
○2提高计算机运算速度。
○3便于设计可降低成本提高可靠性。
○4有效支持高级语言程序。
16.组合逻辑与微程序设计主要特点与应用。
组合逻辑:特点:速度快、复杂不灵活。应用:适用于RISC机。
微程序:特点:引入程序设计与存储逻辑技术,硬件软化,把一条机器指令用一段微程序来实现,存放控制存储器CM中。应用:系列机。
17.什么是指令周期、机器周期、时钟周期 三者的关系如何。
指令周期:完成一条指令的时间,由若干机器周期组成。
机器周期:完成摸个独立操作,由若干时钟周期组成。
时钟周期:最基本时间单位,由主频决定。
关系:时钟周期是最基本时间单位,由若干时钟周期组成机器周期,由若干机器周期组成指令周期。
D. 电路板上的Tⅴ一cⅴBS代表什么
1. 计算机组成原理概论
计算机:数字电子计算机
组成:计算机硬件系统的逻辑实现
原理:不以具体机型为依托的,基本实现原理。
计算机组成原理:掌握如何实现的具体细节。
1.1 计算机系统简介
计算机系统由两大部分组成:硬件和软件。软件又包括系统软件和应用软件。
系统软件可以管理整个计算机系统:
- 语言处理程序(将高级语言转换为机器可以懂得指令)
- 操作系统
- 服务性程序(比如数学库、MPI服务程序进行并行之间的通信)
- 数据库管理系统
- 网络软件
应用软件是按照任务需要编制成的程序。
可以简单将软件看作一个层次结构,硬件为软件提供接口,系统软件又为应用软件形成接口,来完成不同的程序。
对于计算机的物理结构层次,我们这门课主要研究逻辑层和微电路层的具体实现方式。
计算机系统的指令层次如下图所示
操作系统可以管理软硬件的资源。
计算机系统结构定义了系统软硬件的交界面,定义了哪些功能由软件实现,哪些功能由硬件实现,定义为==程序员所见到的计算机系统的属性概念性的结构与功能特性==。(指令系统,数据类型,寻址技术,I/O机理),即程序员需要理解的东西。
计算机组成:实现计算机体系结构所体现的属性,即具体指令的实现。
1.2 计算机的基本组成 1.2.1 冯诺依曼结构
上图实线表示数据流动,虚线表示控制反馈。
- 计算机结构由五大部件组成:存储器、运算器、控制器、输入设备、输出设备
- 以运算器为中心==程序存储在存储器中==
- 指令和数据以同等地位保存在存储器中,可以按照地址寻找。
- 指令和数据由二进制表示,指令由操作码和地址码组成,操作码指明指令要干什么,地址码指明操作数晌运的地址。
冯诺依曼结构以运算器为中心,容易形成瓶颈。我们可以使用存储器作为中心来进行优化,但是还不够。
1.2.2 现代计算机硬件框图
指令和数据都是保存在存储器中的。
1.2.3 存储器的基本组成
MAR是存储器地址寄存器,保存了存储单元的地址和编号,长度猛清反映存储单元的个数。
MDR是存储器数据寄存器,保存了要存入存储体的数据或刚从存储体拿出来的数据,长度反映存储字长。
利用MAR和MDR来将数据放入存储器。
1.2.4 运算器的结构
ALU(算术逻辑单元),通常是一个组合电路,输入撤销,输出也撤销,因此需要加上寄存器保存参与运算的计算。
数据寄存器X保存输入参数,ACC为累加寄存器,保存结果,乘法可能使得数据位数保存不下,使用MQ寄存器保存低位。
上表中存放了不同运算中,运算器的工作过程,以乘法为例,操作过程如下:
- 首先将被乘数取出来放到ACC中
- 从指令中的乘数地址M中取出乘数,送入MQ中
- 将被乘数送到X中
- 将ACC清零
- 完成乘法操作,结果由ACC和MQ保存
这些操作的过程顺序是由控制器来控制完成的。
1.2.5 控制器的基本结构
控制器的功能是解释指令(完成指令)、保证指令的按序执行。
- PC(程序计数器)寄存器保存了当前指令的地址,进行取指令,PC有计数功能。
- IR(指令寄存器)存放当前要执行的指令,将操作码送入CU进行分析。
- CU(控制单元)发出控制信号,控制相对应的部件来执行指令。
下面以取数指令为例分析指令执行过程(取数送到ACC中)
- PC保存指令的地址,送到MAR进行寻址
- MAR根据地址到存储体中找到保存的指令
- MDR从存储体中取出指令
- 送到IR中,IR存放要执行的指令
- IR将操作码送入CU中进行分析
- 同时将地址码送到MAR中找这个数的数据
- MAR根据地址到存储体中找到要取的数
- MDR保存从存储体中取出的数
- CU控制下,将宴知梁要取的数送到ACC中。
CU分析控制这些步骤的过程。
1.3 计算机硬件的主要技术指标
- 机器字长:CPU一次能处理数据的位数,与CPU中寄存器位数有关。
- 运算速度:主频、核数以及每个核支持的线程数、CPI(执行一条指令所需的时钟周期数)、MIPS(每秒执行百万条指令)、FLOPS(每秒浮点运算次数)。
- 存储容量:主存容量(可使用存储单元个数×存储字长来表示存储体容量,MAR * MDR)(也可使用字节数来表示)、辅存容量(字节数表示)。
第一台计算机,1946年ENIAC,十进制运算。
电子技术的发展与计算机体系结构技术的发展对计算机的发展产生了决定性作用。
根据硬件技术来对计算机进行划分代码
电子管→晶体管→大规模集成电路→大规模集成电路→超大规模集成电路
软件技术的发展:机器语言(面向机器)、汇编语言(面向机器)、高级语言(面向问题)。
2.2 计算机的应用
- 科学计算和数据处理
- 工业控制和实时控制
- 网络技术
- 虚拟现实
- 办公自动化和管理信息系统
- CAD/CAM/CIMS
- 多媒体技术
- 人工智能
总线是连接各个部件的信息传输线,是各个部件共享的传输介质,是信号的公共传输线。
如果使用单总线结构(系统总线),那么同时只能有一对部件进行信号传输,效率较低,使用双总线结构效率会更高。
上面的结构,无法在I/O和主存之间进行直接的信息传输,必须要通过CPU。
3.2 总线的分类
- 片内总线:芯片内部的总线。
- 系统总线:计算机各部件之间的信息传输线。可分为:
- 数据总线,双向的,一般小于等于机器字长和存储字长。
- 地址总线,单向的,与存储地址、I/O地址有关。
- 控制总线,双向(CPU发出存储器读写指令,总线允许,中断确认等;CPU接收中断请求、总线请求)
- 通信总线:计算机之间或计算机和其它设备之间的通信,并行通信总线和串行通信总线。
总线印刷到电路板上(主板),其他设备插板插到电路板上。
总线的性能指标:
- 总线宽度:数据线根数,同时可以传输多少位。
- 标准传输率:每秒传输的最大字节数MBps
- 时钟同步/不同步
- 总线复用:地址线与数据线是否可以复用
- 信号线数:地址线、数据线和控制线的总和
- 总线控制方式
- 其他指标:负载能力等
3.4 总线结构
增加了DMA(直接存储器访问)总线,外部设备直接访问存储器内存。高速设备直接通过DMA访问主存。
CPU与cache通过局部总线进行相连,扩展总线将外部设备连接。
高速设备和低速设备分离,分别连接到高速总线和扩展总线上。
PCI高速总线来连接高速设备,PCI总线可以通过桥来进行扩展。
3.5 总线控制 3.5.1 总线判优控制
通过是否能对总线发出占用请求,我们将设备分为主设备(主模块)和从设备(从模块)。主设备可以对总线有控制权,从设备响应从主设备发来的总线命令。
总线判优控制可以分为两种:集中式和分布式。下面介绍几种集中式的总线判优控制结构。
主设备通过BR申请总线的控制权,有设备在使用总线,则设置BS。总线控制部件通过BG来链式查询这些接口是否提出了BR,遇到了BR则交出控制权。
因此,优先顺序则为BG的查询顺序。这种结构对电路故障特别敏感,尤其是BG,如果BG后面出了问题,会导致后面的设备一直不会响应。
数据线用于数据的传输,地址线用于从设备的查找。通过设备地址线来查找某个设备是否发出总线请求。计数器的值通过设备地址线进行传输,来查找某个设备是否发出请求。可以自定义计数器的计数方式,来改变从哪个设备先查询等。
为每个I/O接口增加了BR和BG,通过排队器来进行优先级排队。这种方式使用的线数较多。
3.5.2 总线通信控制
为了解决通信双方(主从设备)协调配合的问题。
总线的传输周期(完成一次主从设备完整可靠的传输所需要的时间):
- 申请分配阶段:主设备申请,总线决定
- 寻址阶段:主设备向向从设备给出地址和命令
- 传数阶段:主设备和从设备进行交换数据
- 结束阶段:主从设备撤销有关信息
- T1,主设备给出地址信号
- T2,给出从设备的读命令信号
- T3,从设备给出数据,输出到总线,完成数据交换
- T4,撤销地址信号,结束周期
强制同步,如果设备之间速度不同,快的设备需要等慢的设备。
不互锁:不管从设备是否接收到请求信号,过段时间主设备都会撤销请求。不管主设备是否接收到应答信号,从设备多段时间都会撤销应答。
半互锁和全互锁针对上面进行改进。
增加等待响应信号,当wait为低电平,则等待一个T。
使用分离式通信来将总线空闲的时间也充分利用起来。
4. 存储器 4.1 概述
按照存取方式对存储器进行分类:
- 存取时间与物理地址无关(随机访问):随机存储器、只读存储器。
- 存取时间与物理地址有关(串行访问):顺序存取存储器(磁带)、直接存取存储器(磁盘)。
按照在计算机中的作用分类:
存储器的层次结构:
- 寄存器包括体系结构寄存器和非体系结构寄存器。
- 一部分缓存放在了CPU之中。
- 缓存——主存层次,使用硬件方法连接到一个整体(对程序员透明,即不需要了解),速度较快,解决CPU和主存之间速度差距较大的问题,缓存即为cache,CPU可以直接从缓存调用数据,cache和主存也进行数据交换。使用主存储器的实地址和物理地址。
- 主存——辅存层次,使用软硬件结合方式连接,容量较大,解决容量不足问题。这个层次称为虚拟存储器,使用虚地址和逻辑地址。
主存的基本组成:
主存与CPU之间的联系:
主存中存储单元地址的分配:
- 每个字节(8位)一个地址,如果一个存储单元存储32位,即四个字节为一个字,可以将高位字节/低位字节,放在小的地址作为字地址。
主存的技术指标:
4.2.2 主存储器半导体芯片简介
基本结构:
- 地址线(单向)给出地址,经过译码驱动电路来选择指定的存储单元,完成数据的读写操作(数据线双向)。
- 片选线是芯片选择信号,给出这次选择的地址是不是这个芯片的地址。
- 读写控制线,控制操作允许读还是写。
- 根据地址线和数据线条数,可以计算出芯片容量。如果地址线10条,数据线4条,那么芯片容量则为1K×4位。即1K个地址,每个地址数据4位。
译码驱动方式:
第一种方法是线选法
- 使用地址译码器,给定输入,输出只有一根线(字线)是有效的,图中一根线中是8个芯片组合成一个字,那么只有一根线的这一组芯片有效。
- 这种方法,每个字的存储单元都需要一根线,当容量较大的时候,很麻烦。
第二种方法是重合法
- 将所有存储单元布置成二维的阵列,使用两个地址译码器XY,一组(X,Y)对应一个存储单元。
- 这样会大大降低所需要的线数量。
SRAM的基本电路:
- 使用触发器T1-T4来存储0/1,T5、T6控制存储单元读写,实际中会有许多虚线框进行堆叠,T7、T8列开关,一列共用。同样,可以横向进行堆叠,那么行地址选择的这一行,所有存储单元的T5和T6都会导通,但是只有对应列也有效的那个存储单元才进行读写。
- 通过行选和列选,选中进行读写操作的存储单元。
SRAM芯片举例(Intel 2114):
- WE读写控制信号,CS片选信号,A0-A9为地址线,4个I/O数据线。
- 10根地址线,使用重合法,6线为行地址,4线为列地址,每个列信号控制四列,这样一次就可以选择4位,将这4位看做是一个存储单元。就完成了1K×4位的选择。
DRAM的基本电路:
- 利用电容,如果电容保存了电荷,则认为保存是1,没有电,则认为是0。
- 保存在Cg上,T1、T2、T3是控制管。
- 读出信息与原信息相反,需要加非门。
- 写入信息与输入信息相同。
还有一种结构是单管动态RAM:
- 读出数据时,数据线有电,则为1。
- 写入时,Cs充电为1,放电为0。
三管DRAM芯片举例(Intel 1103):
- 因为电容会漏电,刷新放大器会定时对存储的信息进行刷新。
单管DRAM芯片举例(Intel 4116 16k×1位):
- 只有7根地址线,通过两次,来接受行地址和列地址,存放到对应的缓存器中。
- 通过行时钟、列时钟、写时钟来控制读写。
动态RAM的刷新:
- 每一次刷新只与行地址有关,与列地址没有关系,每次刷新一行。
- 集中刷新(在某段时间集中刷新所有的电容),这段时间DRAM是不可用的,称为死区。
- 分散刷新(每次读写操作之后,将某一行刷新),相当于将原来的读写操作的时间变长,把刷新操作放在读写操作中,这样就不存在死区。分散刷新比较频繁,有点过度刷新了。
- 异步刷新(将上面两种结合),则每隔一段时间对某一行进行刷新,即多个读写操作加一个刷新操作。
- DRAM的集成度较高,每个存储单元复杂度较低。
- SRAM的速度较快,一般用作缓存。
ROM中一般保存系统信息或系统程序。早期是只读的,不可以写,经过多年的发展和改进,现在的ROM可以自己多次读写。
- 掩模ROM(MROM):只读,不能修改。行列选择线交叉处有MOS管则为1,没有则为0。
- PROM(一次性编程):熔丝断了,则为0,否则为1。可以一次性的破坏性编程。
- EPROM(可以多次编程):N型沟道浮动栅MOS电路。S与D导通为1,不导通为0。
- EEPROM(多次性编程):电可擦写、局部擦写、全部擦写。
- Flash Memory(闪存型存储器):比EEPROM快,具有RAM的一些功能。
存储器容量扩展可以通过位扩展(增加存储字长)、字扩展(增加存储字的数量)、同时扩展。
CPU与存储器的连接:
- 地址线的连接:低位作为地址,高位作为片选信号
- 数据线的连接
- 读写命令控制线的连接
- 片选线的连接:MREQ信号(表示该信号是连接存储器还是I/O接口)一定要连接到片选信号中,使得只有这个信号有效,才是CPU和内存连接工作。
- 合理选择存储芯片(ROM/RAM,芯片的性能参数)
- 其他:时序、负载
校验,检测合法代码,对非法代码进行纠错。
编码的纠错、检错能力与编码的最小距离有关。最小距离为任意两组合法代码之间二进制位数的最小差异。$$ L-1 = D + C (D≥C) $$L为最小距离,D为检测错误的位数,C为纠正错误的位数。
汉明码是具有一位纠错能力的编码,汉明码都采用了奇偶校验和分组校验(分组的奇偶校验,分组之间是有重叠的,校验位放在2 ^ k处,k=0,1,2,3...)。
汉明码的分组,将代码中每一位进行分组(1,2,3,4,5,6,7序号),将每一位的序号进行分组,序号的二进制最右边一位为1的,第一组,右边第二位为1的,第二组......
==最后的校验结果,哪一位是1,那么这位对应的那组中的那个序号的代码位出错。如果出现了多个1,那么就是这几个组中公共的那位出错了。==
4.2.7 提高主存的访问以及存储速度
CPU速度提升很快,但是存储器的速度提升较慢。
我们可以采用高速器件,采用层次结构(Cache-主存),==调整主存结构。==
- 单体多字系统:使得存储器的存储字长大于CPU的字长(比如是CPU字长的4倍),这样一次读取就可以读取多个指令。但是这样会导致存储器结构复杂, 而且,如果需要执行的指令不是连续存放的,会更麻烦。
- 多体并行方式:
- 高位交叉:对各个存储体进行编号,存储体内部自行编号,每个存储体独立,有自己的控制编号。这样CPU给出的地址是体号+体内地址,各个存储体可以并行处理。(类似存储器容量的扩展)如果程序指令存方式顺序的,实际上还是在一个存储体中,并无法提升存储体速度。
- 低位交叉:体内地址+体号,使用横向的编码,比如存储体为M0-M3,那么第一个地址为M0的第一个位置,第二个地址为M1的第一个位置......这样M0中所有地址后两位都为00,M1都为01,M2都为10,M3都为11。后两位给出了存储体的选择地址。这样如果程序指令顺序存放的地址,实际上是不同存储体并行处理,这样就提升了效率,流水操作。
CPU与主存(DRAM)之间存在速度差异,为了避免CPU“空等”的现象,使用cache。
程序访问的局部性原理:
- 时间的局部性:当前正在使用的指令或数据,会在不久的将来还会使用到,那么应该把这种数据或指令放在缓存中。
- 空间的局部性:当前正在使用的指令或数据,不久的将来,相邻的指令或数据会使用到,那么应该把当前和相邻的指令和数据放到缓存中。
cache的工作原理:
把主存和cache分成大小相等的块,每个块大小相等,主存的块数量远远大于cache的块数量。==主存与cache之间的信息传送是按块传送,块内地址不变,cache的每个块的标记,标记了这个块是主存的哪个块。==
主存块调入了缓存(即cache标记了),称为命中,CPU可直接在缓存中取得数据;如果没有调入,称为未命中。
我们希望,每次执行程序,都尽可能的在cache中提取数据,这样速度会很快。CPU欲访问的信息在Cache中的比率称为命中率,命中率与Cache的容量和块长有关。一般每块取4-8个字,一般为一个存取周期内从主存调出的信息长度。
cache与主存的访问效率:
这里面平均访问时间为每次访问的平均时间(可能从cache,可能从主存)。
4.3.2 cache的基本结构与读写操作
cache的基本结构:
读写操作:
- 前者时刻保持了cache和主存的一致,后者只写cache中,当cache中退出时才写回主存。
cache的改进:
- 增加cache的级数:片内cache,片外cache。
- 分立缓存:指令cache,数据cache。
即主存的任意一块加载到cache中的哪块。
直接映射:
即主存中任意一个块,只能映射到指定的一个cache块中,cache块可以是一对多的。相当于将主存分区,每个区内的这些块,对应于cache的所有块;这样在cache的标记中,有t位的标记,表示当前该cache块存放的是主存哪个区的对应位置信息。
这种方法cache块的利用率比较低,且可能会冲突。
全相联映射:
主存中任意一个块,可以被放入cache中的任意一个块中。
这样的话,虽然块的利用率高了,但是因为块可以映射到任意一个位置,如果查询某个主存块是否已经放入cache,需要比较所有的cache标记,速度较慢。
==组相联映射==:
与直接映射相似,==将cache分组,每个组可以有多个块;将主存分区,每个区的大小为cache的组数==。这样每个区的第0块,可以放入cache第0组的任何一个位置,因为每个组有多个块,解决了直接映射的冲突问题;想查询某个主存的块是否放入了cache,只需要在对应的组进行查询即可,解决了全相联映射的问题。
4.3.4 替换算法
如果内存块满了,如何替换,将谁弹出。
先进先出(FIFO)算法
近期最少使用(LRU)算法
4.4 辅助存储器
辅助存储器的主要作用是保存程序、文档和影音资料,不能直接与CPU交换信息,需要调入主存才能进行读写。
包括磁盘存储器和光盘存储器等。