冯·诺依曼在研究EDVAC 机时提出了“存储程序”的概念,“存储程序”的思想奠定了现代计算机的基本结构,以此概念为基础的各类计算机通称为冯·诺依曼机,其特点如下:
计算机的工作过程分为以下三个步骤:
翻译的方式有两种,一个是编译,一个是解释。
编译型语言写的程序在执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,如果源程序不变以后要运行的话就不用重新翻译。解释则不同,解释性语言的程序不需要编译,在运行程序的时候才翻译,翻译一句执行一句,不生成目标程序,这样解释性语言每执行一次就要翻译一次,效率比较低。
.java文件->编译->.class文件,编译成.class字节码,.class需要jvm解释,然后解释执行。Java很特殊,Java程序需要编译但是没有直接编译成机器语言,即二进制语言,而是编译成字节码(.class)再用解释方式执行。java程序编译以后的class属于中间代码,并不是可执行程序exe,不是二进制文件,所以在执行的时候需要一个中介来解释中间代码,这就是所谓的java虚拟机(JVM)。
C语言编译过程分成四个步骤:
1, 由.c文件到.i文件,这个过程叫预处理,将#include包含的头文件直接拷贝到hello.c当中;将
#define定义的宏进行替换,同时将代码中没用的注释部分删除等
2, 由.i文件到.s文件,这个过程叫编译
3, 由.s文件到.o文件,这个过程叫汇编
4, 由.o文件到可执行文件,这个过程叫链接,将翻译成的二进制与需要用到库绑定在一块
程序中第一条指令的地址置于PC 中,根据PC 取出第一条指令,经过译码、执行步骤等,控制计算机各功能部件协同运行,完成这条指令的功能,并计算下一条指令的地址。用新得到的指令地址继续读出第二条指令并执行,直到程序结束为止。下面以取数指令(即将指令地址码指示的存储单元中的操作数取出后送至运算器的ACC 中)为例进行说明,其信息流程如下:
根据PC 取指令到IR, 将PC 的内容送MAR, MAR 中的内容直接送地址线,同时控制器将读信号送读/写信号线,主存根据地址线上的地址和读信号,从指定存储单元读出指令,送到数据线上,MDR 从数据线接收指令信息,并传送到IR 中。
指令译码并送出控制信号。控制器根据IR 中指令的操作码,生成相应的控制信号,送到不同的执行部件。在本例中, IR 中是取数指令,因此读控制信号被送到总线的控制线上。
取数操作。将IR 中指令的地址码送MAR, MAR 中的内容送地址线,同时控制器将读信号送读/写信号线从主存指定存储单元读出操作数,并通过数据线送至MDR, 再传送到ACC 中。此外,每取完一条指令,还须为取下一条指令做准备,形成下一条指令的地址,即(PC)+1 —> PC。
机器字长是指计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数,通常与CPU 的寄存器位数、加法器有关。因此,机器字长一般等于内部寄存器的大小,字长越长,数的表示范围越大,计算精度越高。计算机字长通常选定为字节(8 位)的整数倍。
数据通路带宽是指数据总线一次所能并行传送信息的位数。这里所说的数据通路宽度是指外部数据总线的宽度,它与CPU 内部的数据总线宽度(内部寄存器的大小)有可能不同。各个子系统通过数据总线连接形成的数据传送路径称为数据通路。
主存容量是指主存储器所能存储信息的最大容量,通常以字节来衡量,也可用字数x字长(如512Kx16 位)来表示存储容量。其中, MAR 的位数反映存储单元的个数, MAR 的位数反映可寻址范围的最大值(而不一定是实际存储器的存储容量)。
(1) 吞吐量和响应时间。
? 吞吐量:指系统在单位时间内处理请求的数量。它取决于信息能多快地输入内存, CPU能多快地取指令,数据能多快地从内存取出或存入,以及所得结果能多快地从内存送给一台外部设备。几乎每步都关系到主存,因此系统吞吐量主要取决于主存的存取周期。
? 响应时间:指从用户向计算机发送一个请求,到系统对该请求做出响应并获得所需结果的等待时间。通常包括CPU 时间(运行一个程序所花费的时间)与等待时间(用于磁盘访问、存储器访问、I/0 操作、操作系统开销等的时间)。
(2) 主频和CPU 时钟周期。
? CPU 时钟周期:通常为节拍脉冲或T周期,即主频的倒数,它是CPU 中最小的时间单位,每个动作至少需要1 个时钟周期。
? 主频:机器内部时钟的频率。
(3)CPI(Clock cycle Per Instruction),即执行一条指令所需的时钟周期数。
C 语言中的float 和double 类型分别对应于IEEE 754 单精度浮点数和双精度浮点数。long double类型对应于扩展双精度浮点数,但long double 的长度和格式随编译器和处理器类型的不同而有所不同。在C 程序中等式的赋值和判断中会出现强制类型转换,以char->int->long->double 和float->double
最为常见,从前到后范围和精度都从小到大,转换过程没有损失。
int
或float
转换为double
时,因为double 的有效位数更多,因此能保留精确值。double
转换为float
时,因为float 表示范围更小,因此可能发生溢出。此外,由于有效位数变少,因此可能被舍入。float 或double 转换为int
时,因为int 没有小数部分,所以数据可能会向0 方向被截断(仅保留整数部分),影响精度。另外,由于int 的表示范围更小,因此可能发生溢出。从可行性来说,采用二进制,只有0 和1 两个状态,能够表示0 、1 两种状态的电子器件很多,如开关的接通和断开、晶体管的导通和截止、磁元件的正负剩磁、电位电平的高与低等,都可表示0、1 两个数码。使用二进制,电子器件具有实现的可行性。
从运算的简易性来说,二进制数的运算法则少,运算简单,使计算机运算器的硬件结构大大简化(十进制的乘法九九口诀表有55 条公式,而二进制乘法只有4 条规则)。
从逻辑上来说,由于二进制0 和1 正好和逻辑代数的假(false) 和真(true) 相对应,有逻辑代数的理论基础,用二进制表示二值逻辑很自然。
为了解决存储系统大容量、高速度和低成本3 个相互制约的矛盾,在计算机系统中,通常采用多级存储器结构,在图中由上至下,位价越来越低,速度越来越慢,容量越来越大, CPU 访问的频度也越来越低
实际上,存储系统层次结构主要体现在"Cache-主存”层次和“主存-辅存”层次。前者主要解决CPU和主存速度不匹配的问题,后者主要解决存储系统的容量问题。在存储体系中, Cache 、主存能与CPU 直接交换信息,辅存则要通过主存与CPU 交换信息;主存与CPU 、Cache 、辅存都能交换信息。
存储器层次结构的主要思想是上一层的存储器作为低一层存储器的高速缓存。从CPU 的角度看,"Cache—主存”层次速度接近于Cache, 容量和位价却接近千主存。从“主存—辅存”层次分析,其速度按近于主存,容址和位价动接近于辅存。这就解决了速度、容量、成本这三者之间的矛盾。
在“主存—辅存”这一层次的不断发展中,逐渐形成了虚拟存储系统,在这个系统中程序员编程的地址范围与虚拟存储器的地址空间相对应。对具有虚拟存储器的计算机系统而言,编程时可用的地址空间远大于主存间。
主存储器由DRAM 实现,靠处理器的那一层(Cache) 则由SRAM 实现,它们都属于易失性存储器,只要电源被切断,原来保存的信息便会丢失。DRAM 的每比特成本低千SRAM, 速度也慢于SRAM, 价格差异主要是因为制造DRAM 需要更多的硅。而ROM 属千非易失性存储器。
通常把存放一个二进制位的物理器件称为存储元,它是存储器的最基本的构件。地址码相同时多个存储元构成一个存储单元。若干存储单元的集合构成存储体。静态随机存储器(SRAM) 的存储元是用双稳态触发器(六晶体管MOS) 来记忆信息的,因此即使信息被读出后,它仍保持其原状态而不需要再生(非破坏性牍出)。SRAM 的存取速度快,但集成度低,功耗较大,所以一般用来组成高速缓冲存储器。
与SRAM 的存储原理不同,动态随机存储器(DRAM) 是利用存储元电路中栅极电容上的电荷来存储信息的, DRAM 的基本存储元通常只使用一个晶体管,所以它比SRAM 的密度要高很多。DRAM 采用地址复用技术,地址线是原来的1/2, 且地址信号分行、列两次传送。相对于SRAM 来说, DRAM 具有容易集成、位价低、容量大和功耗低等优点,但DRAM 的存取速度比SRAM 的慢,一般用来组成大容量主存系统。DRAM 电容上的电荷一般只能维持1~2ms, 因此即使电源不断电,信息也会自动消失。为此,每隔一定时间必须刷新,通常取2ms, 这个时间称为刷新周期。常用的刷新方式有3 种:集中刷新、分散刷新和异步刷新。
ROM 和RAM 都是支持随机存取的存储器,其中SRAM 和DRAM 均为易失性半导体存储器。而ROM 中一旦有了信息,就不能轻易改变,即使掉电也不会丢失,它在计算机系统中是只供读出的存储器。ROM 器件有两个显著的优点:
1) 结构简单,所以位密度比可读写存储器的高。
2) 具有非易失性,所以可靠性高。
为了提高CPU 访问存储器的速度,可以采用双端口存储器、多模块存储器等技术,它们同属并行技术,前者为空间并行,后者为时间并行。
双端口RAM 是指同一个存储器有左、右两个独立的端口,分别具有两组相互独立的地址线、数据
线和读写控制线,允许两个独立的控制器同时异步地访问存储单元,如图所示。当两个端口的地
址不相同时,在两个端口上进行读写操作一定不会发生冲突。
为提高访存速度,常采用多模块存储器,常用的有单体多字存储器和多体低位交叉存储器。
注意: CPU 的速度比存储器的快,若同时从存储器中取出n 条指令,就可充分利用CPU 资源,提高运行速度。多体交叉存储器就是基于这种思想提出的。
(1)单体多字存储器
单体多字系统的特点是存储器中只有一个存储体,每个存储单元存储m 个字,总线宽度也为m 个字。一次并行读出m 个字,地址必须顺序排列并处于同一存储单元。单体多字系统在一个存取周期内从同一地址取出m条指令,然后将指令逐条送至CPU执行,即每隔1/m 存取周期, CPU 向主存取一条指令。显然,这增大了存储器的带宽,提高了单体存储器的工作速度。
缺点: 指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或操作数不能连续存放,这种方法的效果就不明显。
(2)多休并行存储器
多体并行存储器由多体模块组成。每个模块都有相同的容量和存取速度,各模块都有独立的读写控制电路、地址寄存器和数据寄存器。它们既能并行工作,又能交叉工作。多体并行存储器分为高位交叉编址(顺序方式)和低位交叉编址(交叉方式)两种。
Cache存储器:电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(Dynamic Random Access Memory)之间,规模较小,但速度很高的存储器,通常由SRAM(Static Random Access Memory静态存储器)组成。Cache的功能是提高CPU数据输入输出的速率。Cache容量小但速度快,内存速度较低但容量大,通过优化调度算法,系统的性能会大大改善,仿佛其存储系统容量与内存相当而访问速度近似Cache。
Cache通常采用相联存储器。
使用Cache改善系统性能的依据是程序的局部性原理
替换算法:
当Cache产生了一次访问未命中之后,相应的数据应同时读入CPU和Cache。但是当Cache已存满数据后,新数据必须替换(淘汰)Cache中的某些旧数据。最常用的替换算法有随机算法、先进先出算法(FIFO)和近期最少使用算法(LRU)。
写操作:
因为需要保证缓存在Cache中的数据与内存中的内容一致,Cache的写操作比较复杂,常用的有写直达法、写回法和标记法。
与主存的映射方式:
直接映射:主存数据块只能装入Cache中的唯一位置
全相联映射:可以把主存数据块装入Cache 中的任何位置
组相联映射:将Cache分为若干组,一个数据块可以装入一组内的任何一个位置
虚拟存储器的基本概念
虚拟存储器是指具有请求调入和置换功能,能从逻辑上对内存容量加以扩存的一种存储器系统
页式虚拟存储器
页式管理:是把虚拟存储空间和实际空间等分成固定大小的页,各虚拟页可装入主存中的不同实际页面位置.页式存储中,处理机逻辑地址由虚页号和页内地址两部分组成,实际地址也分为页号和页内地址两部分,由地址映射机构将虚页号转换成主存的实际页号.
段式虚拟存储器
段式管理: 把主存按段分配的存储管理方式.它是一种模块化的存储管理方式,每个用户程序模块可分到一个段,该程序模块只能访问分配给该模块的段所对应的主存空间.段长可以任意设定,并可放大和缩小.
段页式虚拟存储器
段页式管理:是上述两种方法的结合,它将存储空间按逻辑模块分成段,每段又分成若干个页,访存通过一个段表和若干个页表进行.段的长度必须是页长的整数倍,段的起点必须是某一页的起点.
流水线基本原理:
流水线技术是一种显著提高指令执行速度与效率的技术。方法是:指令取指完成后,不等该指令执行完毕即可取下一条指令。如果把一条指令的解释过程进一步细分,例如分成取指,译码, 访存,执行,和写回五个子过程,并用五个子部件分别处理这五个子过程.这样只需在上一指令的第一子过程处理完毕进入第二子过程处理时,在第一子部件中就开始对第二条指令的第一子过程进行处理.随着时间推移,这种重叠操作最后可达到五个子部件同时对五条指令的子过程进行操作。
典型的五级流水线的数据通路:
流水线方式的特点:
与传统的串行执行方式相比,采用流水线方式具有如下特点:
影响流水线性能的因素
1)结构相关是当多条指令同一时刻争用同一资源形成冲突
解决方案:(1)暂停一个时钟周期(2)单独设置数据存储器和指令存储器
2)数据相关是指令在流水线中重叠执行时,当后继指令需要用到前面指令的执行结果时发生的.
解决方案:(2)暂停一个时钟周期(2)数据旁路:把前一条指令的ALU计算结果直接输入到下一条指令
3)控制相关是当流水线遇到分支指令和其他改变PC值的指令时引起的.
解决方案:(1)延迟转移技术。(2)转移预测技术
中央处理器(CPU) 由运算器和控制器组成。其中,控制器的功能是负责协调并控制计算机各部件执行程序的指令序列,包括取指令、分析指令和执行指令;运算器的功能是对数据进行加工。
CPU 的具体功能包括:
错误,原因如下:
引入总线结构主要有以下优点:
1)简化了系统结构,便于系统设计制造。
2)大大减少了连线数目,便于布线,减小体积,提高系统的可靠性。
3)便于接口设计,所有与总线连接的设备均采用类似的接口。
4)便于系统的扩充、更新与灵活配置,易千实现系统的模块化。
5)便于设备的软件设计,所有接口的软件对不同的接口地址进行操作。
6)便于故障诊断和维修,同时也能降低成本。
1)分成数据总线、地址总线以及控制总线。
2)数据总线:各个功能部件之间传送数据信息,双向传输;
3)地址总线:用来指明数据总线上,源数据或目的数据所在的主存单元的地址。单向:由CPU发出
4)控制总线:用来发送各种控制信号。对于控制总线中的单根线,是单向的,即只能由一个部件发向另一 个部件。而一组控制总线中,有输入也有输出,因此,控制总线也可以看成是双向的。
1)总线宽度:数据总线的根数,一般是8的倍数。是衡量计算机系统性能的重要指标;
2)总线带宽:即总线数据传输速率,总线上每秒能够传输的最大字节量。
3)总线复用:一条信号线上分时传送两种信号。例如数据总线和地址总线的分时复用;
4)信号线数:地址总线、数据总线和控制总线三种总线的线数之和。
1)在CPU 内部设置的中断屏蔽触发器必须是开放的。
2)外设有中断请求时,中断请求触发器必须处于"1" 状态,保持中断请求信号。
3)外设(接口)中断允许触发器必须为"1"'这样才能把外设中断请求送至CPU 。
具备上述三个条件时, CPU 在现行指令结束的最后一个状态周期响应中断。
中断响应优先级是由硬件排队线路或中断查询程序的查询顺序决定的,不可动态改变;而中断处理优先级可以由中断屏蔽字来改变,反映的是正在处理的中断是否比新发生的中断的处理优先级低(屏蔽位为"0", 对新中断开放),若是,则中止正在处理的中断,转到新中断去处理,处理完后再回到刚才被中止的中断继续处理。
1)中断向量:每个中断源都有对应的处理程序,这个处理程序称为中断服务程序,其入口地址称为中断向量。所有中断的中断服务程序入口地址构成一个表,称为中断向量表;也有的机器把中断服务程序入口的跳转指令构成一张表,称为中断向量跳转表。
2)向量地址:中断向量表或中断向量跳转表中每个表项所在的内存地址或表项的索引值,称为向量地址或中断类型号。
3)向量中断:指一种识别中断源的技术或方式。识别中断源的目的是找到中断源对应的中断服务程序的入口地址的地址,即获得向量地址。
两者的根本区别主要表现在服务时间和服务对象上不一样。