当前位置: 首页 > article >正文

计算机组成原理学习笔记

第一章   概论

1.1   电子计算机与存储程序控制

1.1.1   电子计算机的发展

电子计算机的概念:

一种不需要人工直接干预,能够自动、告诉、准确地对各种信息进行处理和存储的电子设备

电子计算机的分类:

电子模拟计算机、电子数字计算机

电子模拟计算机:处理信息是连续变化的物理量,运算过程也是连续的

电子数字计算机:处理的信息是时间上离散的数字量,运算过程是不连续的

                一般所说的计算机都是电子数字计算机

计算机的发展历史:

四代:

电子管计算机,晶体管计算机,

中、小规模集成电路(SSI、MSI)计算机

大、超大规模集成电路(LSI、VLSI)计算机

发展趋势:两极分化:微型,巨型

1.1.2   存储程序概念

存储程序概念概括:

1)计算机(指硬件)应该由运算器存储器控制器输入设备输出设备五大基本部件组成

2)计算机内部采用二进制来表示指令和数据

3)将编好的程序和原始数据事先存入存储器中,然后再启动计算机工作,这就是存储程序的基本含义

来历:冯·诺依曼等人在1945年提出

冯·诺依曼对计算机的最大贡献:“存储程序控制”概念的提出和实现

符合该概念的计算机统称为冯·诺依曼型计算机

冯·诺依曼型计算机的主要弱点:存储器访问会称为瓶颈

突破该概念的计算机:非冯计算机,如:数据驱动的数据流计算机、需求驱动的归约计算机、模式驱动的智能计算机


1.2   计算机的硬件组成

概念补充:

通常将运算器和控制器合称为中央处理器(CPU,Central Processing Unit)

中央处理器和主存储器(内存储器)一起组成主机部分

除去主机部分以外的硬件装置(输入设备、辅助存储器等)称为外围设备或外部设备

1.2.1   计算机的主要部件
1)输入设备:

输入设备的任务是把人们编号的程序和原始数据送到计算机中,并且将它们转换成计算机内部所能识别和接受的信息;常见的输入设备:鼠标键盘,摄像头扫描仪。辅助存储器(磁盘磁带)也可以视作输入设备

2)输出设备:

输出设备的任务是将计算机的处理结果以数字、字符(汉字)、图形、图像、声音等形式送出计算机;常见的输出设备:打印机、显示器、绘图仪。辅助存储器也可以视作输出设备

3)存储器

存储器是用来存放程序和数据的部件,它是一个记忆装置,是计算机能够实现“存储程序控制”的基础

存储系统:在计算机系统中,规模较大的存储器往往分成若干级,称为存储系统

常见的三级存储系统:高速缓冲存储器 <——> 主存储器<——> 辅助存储器

主存储器:可由CPU直接访问,存取速度快,但是容量较小,一般用来存放当前正在执行的程序和数据

辅助存储器:设置在主机外部,它的存储容量大,价格低,但是存储速度较慢,一般用来存放暂时不参与运行的程序和数据CPU不可以直接访问辅存,它中的数据在需要时才传送到主存,因此它是主存的补充和后援。

高速缓冲存储器:目的:当CPU速度很高时,为了使访问存储器的速度能和CPU的速度相匹配,在主存和CPU间设置了一级 Cache (高速缓冲存储器)。Cache的存储速度比主存更快,但是容量更小,用来存放当时最急需处理的程序和数据,以便快速地向 CPU 提供指令和数据

4)运算器

运算器是对信息进行处理和运算的部件。经常进行的运算是算术运算和逻辑运算,所以说运算器又称为算术逻辑运算部件(ALU, Arithmetic and Logical Unit)

运算器的核心:加法器。

运算器中还有若干个通用寄存器或累加寄存器,用来暂存操作数并存放运算结果。寄存器的存取速度比存储器的存取速度快得多

5)控制器

控制器是整个计算机的指挥中心,主要功能是按照人们预先确定的操作步骤,控制整个计算机的各部件有条不紊地自动工作

控制器从主存中逐条地取出指令进行分析,根据指令的不同来安排操作顺序,向各部件发出相应的操作信号,控制它们执行指令所规定的任务。

1.2.2   计算机各大部件之间连接

 1)总线结构(小、微型机的典型结构)

总线(Bus):一组能为多个部件服务的公共信息传送路线,它能分时地发送和接收各部件的信息

采用的优点:可以大大减少信息传送线的数量,又可以提高计算机扩充主存以及外部设备的灵活性

单总线结构:(图片来源于百度)

解释

各大部件都连接在单一的一组总线上,该单总线称作系统总线。CPU与主存,CPU与外设之间可以直接进行信息交换,主存与外设,外设与外设之间也可以直接信息交换,无需经过CPU干预

优点:提高了 CPU 工作效率,而且外设连接灵活,易于扩充。

缺点:由于所有部件都挂在同一组总线上,而总线又只能分时地工作,故同一时刻只允许一对设备(或部件)传送信息

系统总线细分:按照传送信息的不同:地址总线,数据总线,控制总线

地址总线(Address Bus):由单方向的多根信号线组成,用于CPU向主存、外设传输地址信息

数据总线(Data Bus):由双方向的多根信号线组成,CPU可以沿这些线从主存或外设读入或送出数据

控制总线(Control Bus):传输控制信息,包括 CPU 送出的控制命令和主存(或外设)返回 CPU 的反馈信号

总线结构是微型计算机的典型结构,原因:小、微型计算机的设计目标是以较小的硬件代价组成具有较强功能的系统

2)大、中型计算机的典型结构

大计算机设计目标:着重于系统功能扩大和效率的提高。

在系统连接上分为四级:主机、通道、设备控制器、外部设备

图片来源于课本:《计算机组成原理(第四版)》 清华大学出版社

 通道:承担 I/O 操作管理的主要部件,每个通道可以接多台设备控制器,每个设备控制器又可接多台外部设备,这样整个系统就可以连接很多的外部设备。

这种结构具有较大的扩充变化余地:

系统较小:将设备控制器和外设合并在一起,CPU和通道合并在一起

系统较大:单独设置通道部件

更大系统:通道可发展成为具有处理功能的外围处理机

1.2.3   不同对象观察查到的计算机硬件系统

1)一般用户观察到的计算机硬件系统

        一般用户是指那些仅局限于使用计算机最基本功能的用户。他们观察到的只是计算机的用户界面,如人机交互使用的键盘、鼠标、显示器,用于存储信息的 光盘、磁盘等。计算机本身对于他们来说只是一个铁盒子

2)专业用户观察到的计算机硬件系统

        专业用户观察到的计算机硬件系统要比一般用户深入的多,他们可能更多地关注计算机机箱内各部分的结构和组成,如下图,除了键盘、显示器之外,其余部分都在机箱内。机箱中的核心是主板,微处理器、内存条、外部高速缓存寄存器(Cache)、显卡、磁盘控制器等可以直接制作在主板上或插在主板上。近年的计算机已都将外部Cache集成在微处理器芯片中了

3)计算机设计者观察到的计算机硬件系统

        计算机的设计者更多地关心计算机的组成原理和实现方法,从下图可以看出,计算机硬件系统是由运算器、控制器、存储器和外设组成的,这就是系统级。系统级是由寄存器级组成的,寄存器级又是由门级组成的,门级最后由晶体管级组成,而晶体管的物理实现有两种:金属氧化物半导体(MOS)、和晶体管-晶体管逻辑(TTL)

1.2.4   冯·诺依曼结构和哈佛结构的存储器设计思想

分类根据:根据程序(指令序列)和数据的存放形式,分为上述两种

1)冯·诺依曼结构

        冯·诺依曼结构也称普林斯顿结构,是一种传统的存储器设计思想,即指令和数据是不加区别地混合存储在同一个存储器中的,共享数据总线

指令地址和数据地址指向同一个存储器的不同物理位置,指令和数据的宽度相同。

由于指令和数据存放在同一存储器中,因此冯·诺依曼结构中不能同时取指令和取操作数。

又由于存储器存取速率远远低于 CPU 运算速度,从而使计算机运算速度收到很大性质,CPU 与共享存储器之间的信息交换成了影响高速计算和系统性能的”瓶颈“

2)哈佛结构

        冯·诺依曼结构在面对高速、实时处理时,不可避免会造成总线拥挤。为此,哈佛大学提出......(反正就是哈佛结构)。

        哈佛结构的指令和数据是完全分开的,存储器分为两部分,一个是程序存储器,用来存放指令,另一个是数据存储器,用来存放数据。哈佛结构至少有两组总线:程序存储器(PM)的数据总线和地址总线,数据存储器(DM)的数据总线和地址总线。这种分离的程序总线和数据总线,可允许同时获取指令字(来自程序存储器)和操作数(来自数据存储器)而互不干扰。这意味着在一个机器周期内可以同时准备好指令和操作数,本条指令执行时可以预先读取下一条指令,所以哈佛结构的中央处理器通常具有较高的执行效率。同时由于指令和数据分开存储,可以使指令和数据有不同的数据宽度。

大多数单片机和数字信号处理(DSP)系统都使用哈佛结构

目前,许多现代微型计算机中的高速缓冲存储器(Cache)采用哈佛结构,将Cache分为数据 Cache和指令 Cache 两个部分,而主存储器采用冯·诺依曼结构,只有一个,由指令和数据合用。

这样结合起来,不仅可以提高主存储器的利用率,而且可以提高程序执行的效率,缩短指令执行的时钟周期


1.3   计算机系统

        一个完整的计算机系统包含硬件系统和软件系统两大部分。硬件通常是指一切看得见,摸得着的设备实体;软件通常是泛指各类程序和文件,它们实际上是由一些算法以及在计算机中的表示所构成的

1.3.1   硬件和软件的关系

        硬件是计算机系统的物质基础,正是在硬件高度发展的基础上,才有软件赖以生存的空间和活动场所,没有硬件对软件的支持,软件的功能就无从谈起

        软件是计算机系统的灵魂,没有软件的硬件”裸机“ 将不能提供给用户使用,犹如一堆废铁

总结:硬件和软件是相辅相成、不可分割的整体

        当前,计算机的硬件和软件正朝着互相渗透、互相融合的方向发展,在计算机系统中没有一条明确 的硬件和软件的分界线

硬件软化:一些由硬件实现的功能改由软件模拟来实现,可以增强系统的功能和适应性

软件硬化:一些由软件实现的功能改由硬件来实现,可以显著降低软件在时间上的开销

固件(Firmware):

指的是那些存储在能永久保存信息的器件(如ROM)中的程序,是具有软件功能的硬件。

固件的性能指标介于硬件和软件之间,吸收了软、硬件各自的优点,其执行速度快于软件,灵活性优于硬件,是软硬件结合的产物

1.3.2   系列机和软件兼容

系列机:指一个厂家生产的,具有相同的系统结构,但是具有不同组成和实现的一系列不同型号的机器

        系列机从程序设计者的角度看具有相同的机器属性,即相同的系统结构。这里的相同是指在指令系统,数据格式,字符编码、终端系统、控制方式和输入输出操作方式等多个方面保持统一,从而保证软件兼容。

系列机的软件兼容分为:向上兼容、向下兼容、向前兼容、向后兼容

向上(下)兼容:按某挡及其机器编制的程序,不加修改就能运行在比它更高(低)档的机器上

向前(后)兼容:按某个时期投入市场的某种型号机器编制的程序,不加修改就能运行在在它之前(后)投入市场的机器上

1.3.3   计算机系统的多层次结构

现代计算机系统是一个硬件与软件组成的综合题,可以看作按功能划分的,多级层次结构:

从第零级到第六级:下方文字,再下方有图

0)硬联逻辑级:计算机的内核,由 门、触发器等逻辑电路组成

1)微程序机器级:这级的机器语言是微指令集,用微指令编写的微程序一般是直接由硬件执行的

2)传统机器级:这级的机器语言是该机的指令集,用机器指令编写的程序可以由微程序进行解释

3)操作系统机器级:从操作系统的基本功能来看,一方面它要直接管理传统机器中的软硬件资源,另一方面它优势传统机器的延伸

4)汇编语言机器级:这级的机器语言是汇编语言,完成汇编语言翻译的程序称作汇编程序

5)高级语言机器级:这级的机器语言就是各种高级语言,通常用编译程序来完成高级语言翻译的工作

6)应用语言机器级:这一级是为了使计算机满足某种用途而专门设计的,影刺这一级语言就是各种面向问题的应用语言

1.3.4   实际机器和虚拟机器

        在上图所示的多层层次结构中,对每一个机器级的用户来说,都可以将此机器级看作一台独立的使用自己特有的”机器语言“的机器

实际机器:指由硬件或固件实现的机器,如上图的第零级到第二级。

虚拟机器:指以软件或以软件为主实现的机器,如上图的第三级到第六级

        虚拟机器只对该级的观察者存在,即在某一级观察者看来,它只需要通过该级别的语言来了解和使用计算机,下级怎么工作和实现就不必关心。举例:高级语言级机器及应用机器语言级的用户,不必了解机器的具体组成,不必熟悉指令系统,直接用指定的语言描述问题即可


1.4   计算机的工作过程和主要性能指标

1.4.1   计算机的工作过程

编制好的程序放在主存中,由控制器控制逐条取出指令执行,举例如下:

计算 a + b - c = ? (设a,b,c 为已知的三个数,分别存放在主存的 5 ~ 7 号单元中,结果将存放在主存的 8 号单元),如果采用单累加寄存器结构的运算器,完成该计算需要至少 5 条指令,这 5条指令依次放在主存的 0 ~ 4 号单元中,参加运算的数也必须存放在主存指定的单元,主存中有关单元的内容如图 a ,运算器的简单框图如图 b ,参加运算的两个操作数一个来自累加寄存器,一个来自主存,运算结果则放入累加寄存器中,b 图中的存储器数据寄存器是用来暂存从主存中读出的数据或写入主存的数据的,它本身不属于运算器的范畴

计算机的控制器将控制指令逐条执行,步骤如下:

1)执行取数指令,从主存 5 号单元取出数 a, 送入累加寄存器中

2)执行加法指令,将累加寄存器中的内容 a 与从主存 6 号单元取出的数 b 一起送到 ALU 中相加,,结果 a + b 保留在累加寄存器内

3)执行减法指令,将累加寄存器中的内容 a + b 与从主存 7 号单元取出的数 c 一起送到 ALU 中相减,结果 a + b - c 存放在累加寄存器中

4)执行存数指令,把累加寄存器的内容 a + b - c 存至主存 8 号单元

5)执行停机指令,计算机停止工作


1.4.2   计算机的主要性能指标

1)机器字长

        机器字长是指参与预算的数的基本位数,它是由加法器、寄存器的位数决定的,所以说机器字长一般等于内部寄存器的大小。字长标志着精度,字长越长,计算精度越高

        在计算机中为了更灵活地表达和处理信息,以字节(Byte)为基本单位,字节用大写字母B表示。一个字节等于 8 位二进制(bit),位用小写字母 b 表示。通常所说的字(Word)是指数据子,不同的计算机,数据字长度可以不相同,但系列机的数据字长度应该相同

注意:此处的字(数据字)和字长(机器字长)概念不同,字实际上是一个度量单位,用于度量各种数据类型的宽度,字长表示数据运算的宽度,反映了计算机处理信息的能力,二者长度可以一样,也可以不一样

2)数据通路宽度

        数据总线一次所能并行传输信息的位数,称为数据通路宽度。它影响到信息的传送能力,从而影响计算机的有效处理速度。这里所说的数据通路宽度是指外部数据总线的宽度,它与 CPU 内部的数据总线宽度(内部寄存器的位数)有可能不同。有些 CPU 的内、外数据总线宽度相等,也有大于的,小于的。

举个例子:Pentium,所有的Pentium都有 64 位外部数据总线和32为内部寄存器——这一结构看起来似乎有问题,这是因为 Pentium 有两条 32 位流水线,它就像两个合在一起的 32 位芯片,64 位数据总线可以满足高效地充满多个寄存器的需要

3)主存容量

        一个主存储器所能存储的全部信息量称为主存主存容量。通常,以字节数来表示存储容量,这样的计算机称为字节编址的计算机。也有一些计算机是以字为单位编址的,它们有字数 乘以字长来表示存储容量。在表示容量大小时,经常用到 K、M、G、T、P 之类的字符,意义如下图:

         1024 个字节称为 1KB,1024KB 称为 1MB,以此类推。计算机的主存容量越大,存放的信息就越多,处理问题的能力就越强

4)运算速度

        计算机的运算速度与许多因素有关,如机器的主频、执行什么样的操作以及主存本身速度等。

        1、吞吐量和响应时间

        吞吐量是指系统在单位时间内处理请求的数量。响应时间是指系统对请求做出相应的时间,响应时间包括 CPU 时间(运行一个程序所花费的时间)与等待时间(用于磁盘访问、存储器访问、I/O操作、操作系统开销等时间)的总和。

        2、主频和 CPU 时钟周期

        CPU 的主频又称为时钟频率,表示在 CPU 内数字脉冲信号震荡的速度。主频的倒数就是 CPU 时钟周期,这是 CPU 中最小的事件元素。每个动作至少需要一个时钟周期

        3、CPI

        CPI (Cycles per Instruction)是指每条指令执行所用的时钟周期数、在线代高性能计算机中,由于采用各种并行技术,使指令执行高度并行化,唱唱是一个系统时钟周期内可以处理若干条命令,所以 CPI 参数经常用 IPC (Instructions per Cycle)表示,即每个时钟周期执行的指令数

        IPC = 1 /  CPI

        4、CPU 执行时间

        CPU 执行时间 = CPU 时钟周期数  /  时钟频率 = 指令数 * CPI  /  时钟频率

        5、 MIPS 和 MFLOPS

        MIPS(MIllion Instructions per Second)表示每秒执行多少百万条指令

这里所说的指令一般指的是加、减运算这类短指令

        MFLOPS表示每秒执行多少百万次浮点运算,适用于衡量向量机的性能


课后习题

1-1   电子数字计算机和电子模拟计算机的区别在哪里

电子模拟计算机:处理的信息是连续变化的物理量,运算过程也是连续的

电子数字计算机:处理的信息是在时间上离散的数字量,运算的过程是不连续的

1-2   冯·诺依曼计算机的特点是什么?其中最主要的一点是什么?

(1)计算机硬件应该由运算器、存储器、控制器、输入设备、输出设备五大基本部件组成

(2)计算机内部采用二进制来表示指令和数据

(3)将编好的程序和原始数据实现存入存储器中,然后再启动计算机工作

(3)是最主要的

1-3   计算机的硬件是由哪些部件组成的?它们各有哪些功能?

输入设备:把人们编好的程序和原始数据送到计算机中,并将其转换成计算机所能识别和接收的

输出设备:把计算机的处理结果以数字、字符等形式送出计算机

存储器:用来存放程序和数据的部件

运算器:对信息进行处理和运算的部件

控制器:按照人们预先确定的操作步骤,控制整个计算机的各部件有条不紊地自动工作

1-4   什么叫总线?简述单总线结构的特点

总线:一组能为多个部件服务的公共信息传送线路

特点:可以提高 CPU 工作效率,外设连接灵活,易于扩充,同一时刻只允许一堆设备之间传送信息

1-5   简述计算机的层次逻辑,说明各层次的主要特点

硬联逻辑层、微程序机器级、传统机器级、操作系统机器级、汇编语言机器级、高级语言机器级、应用语言机器级,翻上面笔记得了

1-6   计算机系统的主要技术指标有哪些

机器字长、数据通路宽度、主存容量、运算速度








第二章   数据的机器层次表示

2.1   数值数据的表示

        在计算机中,采用数字化方式来表示数据,数据有无符号数和带符号数之分,其中带符号数根据其编码的不同又有原码、补码和反码三种表示形式

2.1.1   计算机中的数值数据

简而言之:

下标:(1010)_{2} ..(1010)_{8}..(1010)_{10}..(1010)_{16} 下标是几就是几进制

后缀:B:二进制,Q:八进制(应该为O,但是O与0易混),H:十六进制,D:十进制

举例:375D、101B、76Q、A17H

前缀:八进制0,十六进制0x

2.1.2   无符号数和带符号数

无符号数:整个字长的全部二进制位均表示数值位(无符号位)

带符号数:最高位用来表示符号位,不再表示数值位。一般二进制中,最高位0表示正号,1负号

例如:01001 无符号数:9,带符号数:+9

再如:11001 无符号数:25,带符号数:原码则 -9,补码则 -7,反码则 -6

2.1.3   原码表示法

        原码表示法是一种最简单的机器数表示法,其最高位为符号位,符号位为 0 时表示该数为正,符号位为 1 时表示该数为负,数值部分与真值相同,下方为机器数长度为5的情况

补:机器数为 n+1 位的无符号数的表示范围为 0~(2^{n+1}-1),例:字长8位,范围为0~255

纯小数:

[X]原 = X,        0 ≤ X < 1                        [X]原 = 1 - X = 1 + |X|       -1 < X <= 0

例:X = 0.0110,[X]原 = X = 0.0110        X = - 0.0110  [X]原 = 1 - (- 0.0110) = 1+0.0110 = 1.0110

 纯整数:

[X]原  = X,0 <= X < 2的n次        [X]原  = 2的n次 - X = 2的n次 + |X|     -2的n次 < X <=0

例: X = 1101,[X]原 =01101(机器数长度为5)

X = - 1101,[X]原  = 2的4 次 - (-1101) = 10000+1101 = 11101

优点:直观易懂,机器数和真值间的相互转换很容易,实现乘除运算规则简单

缺点:实现加减运算规则较复杂

2.1.4   补码表示法

概念补充:模和同余

        模(Module):是指一个计量器的容量,可用 M 表示。例如,4 位二进制计数器,当计数器从 0 计到 15 后,再加 1 ,计数值变回 0,这个计数器的容量 M = 2^{4} = 16,即模为 16。

由此可见,纯小数的模为 2 ,字长为 n+1 位的纯整数的模为 2的 n+1 次

        同余:两个正数A,B除以同一个正整数 M,所得余数相同,则称 A与B对 M 同余,

即 A 和 B 在 以 M 为模时是相等的,可写成如下形式: A = B ( mod M )

对钟表而言:模 M = 12,故 4 点和 16点 、5 点 和 17 点......均是同余的,可以写成:

4 = 16 ( mod 12 ),         5 = 17 ( mod 12 )

        利用模和同余概念的补码表示法在进行算数运算时可以使减法运算转化成加法运算,从而简化机器的运算器电路

第二章现在不带写了,之后再写得了

第三章   指令系统

        指令和指令系统是计算机中最基本的概念。指令是指示计算机执行某些操作的命令,一台计算机的所有指令的集合构成该机的指令系统,也称指令集。指令系统是计算机的主要属性,位于硬件和软件的交界面上。本章讨论一般计算机的指令系统所涉及的基本问题

3.1   指令格式

3.1.1   机器指令的基本格式

        一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如下:

操作码字段

地址码字段

其中,操作码指明了指令的操作性质及其功能,地址码给出了操作数的地址

指令长度:一条指令中所包含的二进制代码的位数,它取决于操作码字段的长度、操作数地址的个 数及长度。指令长度与机器字长没有固定的关系

单字长指令:指令长度等于机器字长的指令

半字长指令:指令长度等于半个机器字长的指令

双字长指令:指令长度等于两个机器字长的指令

定长指令字结构:一个所有指令的长度都相等的指令系统。该系统控制简单,但是不够灵活

变长指令字结构:各种指令的长度随着指令功能而异。系统灵活,能充分利用指令长度,控制复杂

3.1.2   地址码结构

        计算机执行一条指令所需要的全部信息都包含在指令中。对于一般的双操作数运算类指令来说,除了操作码(Operation Code)之外,指令还应该包含以下信息:下文1,2,3,4为下标
1)第一操作数地址,用A1表示

2)第二操作数地址,用A2表示

3)操作结果存放地址,用A3表示

4)下一条将要执行指令的地址,用A4表示

显地址:上述信息在指令中明显给出        隐地址:按照某种事前约定,用隐含方式给出

从地址角度介绍几种指令格式:

1、四地址指令

前述的 4 个地址信息都在地址字段中明显给出,格式为:

OPA1A2A3A4

指令的含义为:  (A1)OP(A2)—>A3                A4 = 下一条将要执行指令的地址

其中,OP表示具体的操作,Ai表示地址,(Ai)表示存放于该地址中的内容,例如(A1)

总结:

优点:直观,下一条指令的地址明显

严重缺点:指令长度太长,若每个地址为 16 位,整个地址码字段就长达 64 位,此格式不切实际

2、三地址指令

原理:一般情况下,指令 是按顺序 依次 被从主存中 取出来 执行的 ,只有遇到 转移指令时,程序的执行顺序才会改变。因此,可以使用一个程序计数器(Program Counter,PC)来存放指令地址。通常每执行一条指令,PC 就自动加一(设每条指令只占一个主存单元),直接得到将要执行的下一条指令的地址。这样指令中就不必明显给出下一条指令的地址,其指令格式为:

OPA1A2A3

指令含义:(A1)OP(A2)——>A3        (PC)+ 1 ——> PC(隐含)

执行一条三地址的双操作运算指令,至少需要访问 4 次主存。第一次:取指令,第二次:取第一操作数,第三次:取第二操作数,第四次:保存运算结果。

总结:

省去了一个地址,但是指令长度还挺长,所以说只在字长较长的大型、中型计算机中使用,小微机不常用

3、二地址指令

原理:三地址指令执行完后,主存中的两个操作数均不会被破坏。然而,通常并不一定需要完整的保留两个操作数。例如,可让第一操作数地址同时兼作存放结果的地址(目的地址),这样就得到了二地址指令,格式为:

OPA1A2

指令含义:(A1)OP(A2)—>A1        (PC)+1 —>PC(隐含)

其中:A1 为目的操作数地址, A2 为源操作数地址

注意:指令执行之后,目的操作数地址中原存的内容已被破坏

执行一条二地址的双操作数运算指令同样至少需要访问 4 次主存

4、一地址指令

累加寄存器(Accumulator,ACC):在连续运算中,保存着多条指令连续操作的累积结果,故得名

原理:只有一个地址,缺少一个操作数,在哪?按照事先约定,隐含操作数就放在一个专门的寄存器中:累加寄存器(Accumulator,ACC)

顾名思义只有一个显地址,格式为:        OP | A1

含义: (Acc)OP(A1)—> Acc        (PC)+ 1 —>PC(隐含)

执行一条一地址的双操作数运算指令,只需要访问两次主存。第一次:取指令,第二次:取第二操作数,第一操作数和运算结果都存放在累加寄存器中,所以读取和存入都不需要访问主存

5、零地址指令

只有操作码字段,没有地址码字段,其格式:        OP

原理:零地址的算术逻辑类指令是用在堆栈计算机中的,堆栈计算机没有一般计算机中必备的通用寄存器,因此堆栈就成为提供操作数和保存运算结果的唯一场所。通常参加算数逻辑运算的两个操作数隐含地从对战顶部弹出,送到运算器中进行运算,运算的结果再隐含地压入堆栈

选择总结:

三地址指令格式:缩短程序长度、用户使用方便、增加操作并行度

一地址指令格式:缩短指令长度、减少访存次数、简化硬件设计

对于同一个问题:

三地址指令编写程序最短,指令长度(程序存储量)最长

二、一、零:程序一个比一个长,指令长度一个比一个短

        前面介绍的操作数地址都是指主存单元的地址,实际上许多操作数可能是存放在通用寄存器里的。计算机在 CPU 中设置了相当数量的通用寄存器,用它们来暂存运算数据或中间结果,这样可以大大减少访存次数,提高计算机的处理速度。实际使用的二地址指令多为二地址R(通用寄存器)型,一般通用寄存器数量有 8~32个,其地址(或称寄存器编号)有 3~5未就可以了。由于二地址R型指令的地址码字段很短,且操作数就在寄存器中,所以这类指令的程序存储量最小,程序执行速度最快,在小型、微型计算机中被大量使用

3.1.3   指令的操作码

        指令系统的每一条指令都有一个唯一确定的操作码,指令不同,其操作码的编号也不同。通常,希望用尽可能短的操作码字段来表达全部的指令。指令操作码的编码可以分为规整性和非规整型两类编码

1、整规型编码(定长编码)

操作码字段的 位数 和 位置 是固定的

为了能表示整个指令系统中的全部指令,指令的操作码字段应当具有足够的位数

嘉定指令系统共有m条指令,指令中操作码字段的位数为N位,则有:

m\leq 2^{n}

定长编码对于简化硬件设计、减少指令译码的时间是非常有利的,在字长较长的大型、中型计算机以及超级小型计算机上广泛使用

2、非规整型编码(变长编码)

变长编码的操作码字段的位数不固定,且分散地放在指令字的不同位置上。这种方式能有效地亚索指令中操作码字段的平均长度,在字长较短的小型、微型计算机上广泛采用。。书p52,53

3.2 寻址技术

寻址:指的是寻找操作数的地址或者吓一跳将要执行的指令地址。寻址技术包括编址方式和寻址方式。

3.2.1 编址方式

在计算机中,编址方式是指对各种存储设备进行编码的方式

1、编址

通常,指令中的地址码字段将指出操作数的来源和去向,而操作数则存放在相应的存储设备中。再计算机中需要编址的设备主要有CPU中的通用寄存器、主存储器和输入输出设备三种

要对上述三种设备进行访问,首先必须对他们进行编址。就像一个大楼有许多房间,首先必须给每一个房间编上一个唯一的号码,人们才能据此招到需要的房间一样

如果存储设备是CPU中的通用寄存器,指令字中应给出寄存器编号

如果是主存中的一个存储单元,指令字中应该给出主存单元的地址

如果是输入输出设备(接口)中的一个寄存器,指令字中应该给出设备编号或者设备端口地址或者设备映像地址(与主存地址统一编址时)

2、编址单位:目前常用:字编址,字节编址,位编址

1)字编址

实现起来最容易,因为每个编址单位与访问单位相一致,即每个编制单位所包含的信息量(二进制位数)与访问一次寄存器、主存所获得的信息量相同。早期机器大多采用

每执行一条指令,程序计数器加一;每从主存中读出一个数据,地址计数器加一。实现起来简单,地址信息没有任何浪费。但是主要缺点是不支持非数值应用。但目前计算机实际应用领域中,非数值应用已经超过数值应用

2)字节编址

目前采用最普遍的编址方式。因为需要适应非数值应用的需求。字节编址方式使编址单位与信息的基本单位(一个字节)相一致,这是它的最大优点。然而,如果主存的访问单位也是一个字节的话,那么主存的带宽就太窄了,所以编址单位和主存的访问单位时不相同的。通常主存的访问单位是编址单位的若干倍

在采用字节编址的机器中,如果指令长度是32位,那么每执行完一条指令,程序计数器要加4。如果数据字长是32位,当连续访问存储器时,每读写完一个数据字,地址寄存器要加四。由此可见,字节编址方式存在着地址信息的浪费。

3)位编址

部分计算机系统采用,比如STAR—100巨型计算机。这种编址方式的地址信息浪费更大

3、指令中操作码的位数

指令格式中每个地址码的位数是与主存容量和最小寻址单位(编址单位)有关的。主存容量越大,所需要的地址码位数就越长。对于相同容量来说,如果以字节位最小寻址单位,那么地址码的位数就需要长一些,但是可以方便地对每一个字符进行处理;如果以字位最小寻址单位(假定字长位16位火更长),那么地址码的位数可以减少,但对字符操作比较困难。

例如:主存容量位2的20次方个字节,机器字长32位,若其最小寻址单位为字节(按字节编址),其地址码应为20位;若最小寻址单位为字(按字编址),其地址码只需18位。从减少指令长度的角度看,最小寻址单位越大越好;而从对字符或位的操作是否方便的角度看,最小寻址单位越小越好。

3.2.2 指令寻址和数据寻址

指令寻址:寻找下一条将要执行的指令地址,较简单,细分为顺序寻址和跳跃寻址

数据寻址:寻找操作数的地址。种类较多,最终目的都是寻找所需操作数

顺序寻址:指令寻址的一种,可通过程序计数器+1,自动形成下一条指令的地址;跳跃寻址则需要通过程序转移类指令实现

跳跃寻址:转移地址形成方式有3种:直接(绝对)、相对和间接寻址,它与下面介绍的数据寻址方式中的直接、相对、间接寻址是相同的,只不过寻找到的不是操作数的有效地址而是转移的有效地址

3.2.3 基本的数据寻址方式

数据寻址方式是根据指令中给出的地址码字段寻找真实操作数地址的方式。一般情况下,由于指令长度的限制,指令中的地址码不会很长,而主存的容量却可能越来越大,假设一台机器主存容量1MB,但是指令中的地址码字段最长位16位,结果就是仅能直接访问主存的一小部分,而无法访问整个主存空间。就是在字长很长的大型机中,即使指令中能够拿出足够的位数来作为访问整个主存空间的地址,为了灵活方便的编制程序,也需要对地址进行必要的变换。指令中地址码字段给出的地址称之为形式地址(用字母A表示)这个地址可能不能直接用来访问主存。形式地址经过某种运算而得到的能够直接访问主存的地址称为有效地址(用字母EA表示)。从形式地址生成有效地址的各种方式称为寻址方式,即:指令中的形式地址经过寻址方式加工,生成有效地址

几种基本寻址方式:

1、立即寻址

是一种特殊的寻址方式,指令中在操作码字段后面的部分不是通常意义上的操作数地址,而是操作数本身。也就是说,数据就包含在指令中,只要取出指令,也就去处可以立即使用的操作数,这样的数称之为立即数。其指令格式为: OP | 立即数

特点是:在取指令时,操作码和操作数被同时取出,不必再次访问主存,从而提高了指令的执行速度。但是,因为操作数是指令的一部分,不能被修改,而且立即数的大小受指令长度的限制,所以这种寻址方式灵活性最差,通常用于给某一寄存器或主存单元赋初值或提供一个常数

2、寄存器寻址

寄存器寻址指令的地址码部分给出某一个通用寄存器的编号Ri,这个指定的寄存器中存放着操作数。IR表示指令寄存器,它的内容是从主存中取出的指令。操作数S与寄存器Ri的关系为:S=(Ri),两个明显优点:

1)从寄存器中存取数据比从主存中存取快得多

2)由于寄存器的数量较少,其地址码字段比主存单元地址字段短得多

这种方式可以缩短指令长度,提高指令的执行速度

3、直接寻址

指令中地址码字段给出的地址A就是操作数的有效抵制,即形式地址等于有效地址;EA=A。由于这样给出的操作数地址是不能修改的,与程序本身所在的位置无关,所以又称为绝对寻址方式。

这种寻址方式不需要做任何寻址运算,简单直观,也便于硬件实现,但是地址空间收到指令中地址码字段位数的限制

4、间接寻址

间接寻址意味着指令中给出的地址A不是操作数的地址,而是存放操作数地址的主存单元的地址,简称操作数地址的地址。通常再指令格式中划出一位作为直接或者间接寻址的标志位,间接寻址时标志位@=1

间接寻址中又有一级间接寻址和多级间接寻址之分。在一级间接寻址中,首先按指令的地址码字段先从主存中取出操作数的有效抵制,即EA=(A),然后再按此有效抵制从主存中读出操作数。操作数S与地址码A的关系为: S=((A))

多级间接寻址为取得操作数需要多次访问主存,即使在找到操作数有效地址后,还需要再访问一次主存才可以得到真正的操作数。对于多级间接寻址来说,在寻址过程中访问到的每个主存单元的内容中都应该设置有一个标志位。通常将这个标志位放在主存单元的最高位,当该位为1时,表示该主存单元中仍然是间接地址,需要继续间接寻址;当位为0时,表示已经招到有效地址,根据这个地址可以读出真正的操作数

间接寻址比直接寻址灵活得多,主要优点如下:

1)扩大了寻址范围,可用指令中的短地址访问大的主存空间

2)可将主存单元座位程序的地址指针,用以只是操作数在主存中的位置。当操作数的地址需要改变时,不必修改指令,只需修改存放有效地址的哪个主存单元的内容即可

但是,间接寻址再取出指令之后至少需要两次访问主存才能取出操作数,降低了取操作数的速度。尤其是在多级间接寻址时,寻找操作数要花费相当多的时间,甚至可能发生间接地址循环

5、寄存器间接寻址

目的:为了克服间接寻址中访存次数多的缺点

指令中的地址码给出某一通用寄存器的编号,在被指定的寄存器中存放操作数的有效地址,而操作数则存放在主存单元中

这种寻址方式的指令较短,且在取出指令后只需要一次访问主存便可以得到操作数,因此指令执行速度比间接寻址快。

6、变址寻址

将变址寄存器Rx的内容与指令中给出的形式地址A相加,形成操作数有效地址,即EA=(Rx)+A。Rx的内容称为变址值。

变址寻址应用广泛,最典型的用法是将指令中的形式地址作为基准地址,而变址寄存器的内容作为修改量。在遇到需要频繁修改地址时,无需修改指令,只需要修改变址值就可以,对于数组运算、字符串操作等成批数据处理是很有用的。例如:将一组连续存储数据(首地址A)依次传送到另一个储存区(首地址B)中,只需要在指令中写明两个首地址A和B,用同一变址寄存器提供修改量K,即可实现(A+K)->B+K

7、基址寻址

将基址寄存器Rb的内容与指令中给出的位移量D相加,形成操作数有效地址,即EA=(Rb)+D

8、相对寻址

是基址寻址的一种变通,由程序计数器PC来提供基准地址,指令中的地址码字段作为位移量D,两者相加得到操作数的有效地址

特点:

1)操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值

2)指令中给出的位移量可正可负

678都差不多,原理都是一个定量+一个变化的量,只不过在变址寻址中,指令提供固定量,寄存器提供修改量,而基址寻址中,指令提供变化量,寄存器提供固定量

9、页面寻址

页面寻址相当于将整个主存空间分成若干个大小相同的区,每个区称为一页,每页有若干个主存单元

3.2.4 变型或组合寻址方式 (见书P61)

3.3 堆栈与堆栈操作(见书P63)

3.4 指令类型

3.4.1 数据传送类指令

最基本的指令类型,主要用于寄存器之间,寄存器与主存间,主存间的数据传送。可细分为:

1、一般传送指令

具有数据复制性质,常用MOV表示,根据源和目的地不同,可分为:

1)主存单元之间的传递

2)主存传送到寄存器。某些计算机中使用LOAD(取数指令)表示

3)寄存器到主存。某些计算机中采用STORE(存数指令)表示

2、堆栈操作指令

一种特殊的数据传送指令。分为进栈(PUSH)和出栈(POP)

3、数据交换指令

前述的都是单方向的,这个就是双方向的

3.4.2 运算类指令

1、算术运算类指令

主要用于定点和浮点运算。包括加减乘除指令和加一、减一、比较等

绝大多数算术运算指令都会影响到状态标志位,通常标志位有:进位、溢出、全零、正负、奇偶等

一般也设置了带进位加和带借位减指令

2、逻辑运算类指令

与或非异或等

常见应用:按位测(位检查)、按位清(位清除)、按位置(位设置)、按位修改、判符合

3、移位类指令

分三种:算数移位、逻辑移位、循环移位,它们又可以分为左移和右移

1)算数移位

对象是带符号数,移位过程中必须保证操作数符号不变

左移时,若不溢出,则数值乘2;右移时,若不考虑舍去的末位数,则数值除以2

2)逻辑移位

对象是无符号数,移位时不需要考虑符号问题,其他与算数相同

3)循环移位:就是屁股挪到头,头挪到屁股

小循环:不带进位循环                大循环:带进位循环

3.4.3 程序控制类指令

用于控制程序的执行顺序,并使程序具有测试、分析、判断能力。主要包括:

转移指令、子程序调用和返回指令等

1、转移指令

用于改变程序的执行顺序。分为无条件和条件两种

1)无条件转移:又称必转,执行时将改变程序的常规执行顺序,不受任何条件约束,助记符JMP

2)条件转移:必须受到条件约束,若满足指令所规定条件,则程序转移;否则,此程序顺序执行

2、子程序调用指令

子程序是一组可以公用的指令序列,只要知道子程序的入口地址就可以调用它。

通常一些需要重复使用并能独立完成某种特定功能的程序单独编成子程序

定义:从主程序转向子程序的指令称为子程序调用指令,简称转子指令。助记符CALL

转子指令和转移指令都可以改变程序的执行顺序,但区别很大:

1)转移指令使程序转移到新的地址后继续执行指令,不存在返回问题,所以说没有返回地址

转子指令要考虑返回问题,所以说必须以某种方式保存返回地址,以便于返回原位置

2)转移指令用于实现统一程序内的转移;而转子指令转去执行一段子程序,实现不同程序之间的转移

返回地址是转子指令的下一条指令的地址,包括:

1)用子程序的第一个字单元存放返回地址

2)用寄存器存放返回地址

3)用堆栈保存返回地址

3、返回指令

从子程序转向主程序的指令称之为返回指令,助记符RET,子程序的最后一条指令一定是返回指令。

3.4.4 输入输出类指令

输入输出类指令即I/O类指令。用于实现主机与外部设备之间的信息交换,包括输入输出数据,主机向外设发控制命令或外设向主机报告工作状态等。主要两种编址:独立编址和统一编址

1、独立编址的IO指令

使用专门的输入输出指令(IN/OUT)。以主机位基准,信息由外设传送给主机称之为输入,反则输出。指令中应给出外部设备编号(端口地址)。这些端口地址与主存地址无关,是另一个独立的地址空间

2、统一编址的IO指令

统一编址就是把外设寄存器和主存单元统一编址。不需要专门的IO指令,就用一般的数据传送类指令来实现IO操作

独立编址优缺点:

IO指令和访存指令容易区分,外设地址线少,译码简单,主存空间不会减少

但是控制线增加了IO Read和IO Write信号

统一编址优缺点:

总线结构简单,全部访存类指令都可用于控制外设,可直接对外设寄存器进行各种运算

但占用主存一部分地址,缩小了可用的主存空间

3.4.5 80x86指令系统距离,见书P70

3.5 指令系统的发展

3.5.1 x86架构的扩展指令集 见书P72

3.5.2 从复杂指令系统到精简指令系统

指令系统的发展有两种截然不同的方向,一种是增强原有指令的功能,设置更为复杂的新指令,来实现软件硬化;另一种是减少指令种类和简化指令功能,提高指令执行速度。前者称为复杂指令系统,后者称为精简指令系统

基于复杂指令系统设计的计算机称之为复杂指令系统计算机,即CISC。

CISC的“20%~80%律”:最常用的是比较简单的指令,它们仅占指令总数的20%,但是再各种程序中出现的频度占据了80%。其余大多数指令是功能复杂的指令,占了总数的80%,使用频度却仅有20%

从28律这个事实出发,基于精简指令系统的精简指令系统计算机RISC随之诞生

RISC 的中心思想是要求指令系统简化,尽量使用寄存器-寄存器操作指令,除去访存指令(LOAD和STORE)外的其他指令的操作均在单周期内完成,指令格式力求一致,寻址方式尽可能减少,并提高编译效率

3.5.3 VLIW和EPIC 见书P74

第四章 数值的机器运算 见书P79

第五章 存储系统和结构

5.1 存储器分类

5.1.1 存储器分类

1、按存储器在计算机系统中的作用分类

1)高速缓存寄存器(Cache)

位于主存和CPU之间,用来存放正在执行的程序段和数据,以便CPU能高速使用他们。存取速度可以与CPU的速度相匹配,但是容量较小,价格较高

2)主存储器

主存,用于存放计算机运行期间所需要的程序和数据,CPU可直接随机进行读写访问,具有一定容量,存取速度较高。CPU会频繁访问主存,所以说主存性能在很大程度上影响了整个计算机系统的性能

3)辅助存储器

外存储器或者后援存储器。存放当前暂不参与运行的程序和数据以及一些需要永久性保存的信息。容量极大,成本很低,但是存取速度较低,且CPU无法直接访问。辅存中的信息必须调入主存之后,CPU才能使用

2、按存取方式分

1)随机存取储存器(Random Access Memory, RAM)

随机存取:CPU可以对存储器中的内容随机地存取,CPU对任何一个存储单元的存取时间都是相同的,不受其物理位置影响。RAM读写方便,使用灵活,主要用作主存,也可用作高速缓冲寄存器

2)只读存储器(Read Only Memory,ROM)

可以看作RAM的一种特殊形式,特点:存储器的内容只能随机读出但是无法写入。通常用来存放那些不能改变的信息。信息一旦写入就固化了,即使断电,写入的内容也不会丢失,又称固定存储器。一般存放BIOS程序,还用来存放专用的子程序,或用作函数发生器、字符发生器,微程序控制器中地方控制存储器

3)顺序存取存储器(Sequential Access Memory,SAM)

SAM的存取方式与前两种存储器完全不同。SAM的内容只能按某种顺序存取,存取时间的长短与信息在存储体上的物理位置有关,所以SAM只能用平均存取时间作为衡量存取速度的指标。磁带机就是这一类存储器

4)直接存取存储器(Direct Access Memory,DAM)

DAM既不像RAM能随机访问任意一个存储单元,也不像RAM那样完全按照顺序存取,而是介于两者之间。当要存取时,第一步直接指向整个存储器中的某个小区域(如磁盘上的磁道);第二部在小区域内顺序检索或等待,直到找到目的地后再进行读写。磁盘机属于这类存储器

由于SAM和DAM的存取时间都与存储体的物理位置有关,它们又叫串行访问存储器

3、按存储介质分类

1)磁芯存储器

特点: 信息可以长期储存,不会因断电而丢失。但磁芯存储器的读出是破坏性读出,读出后内容一律变为0,因此需要重写一次。

2)半导体存储器

主要有MOS型存储器和双极型(TTL电路或者ECL电路)两类

MOS型特点:集成度高、功耗低、价格便宜、存取速度较慢

双极型:存取速度快、集成度较低、功耗大、成本高

半导体RAM存储器的信息会因断电而丢失

3)磁表面存储器

在金属或塑料基体上,涂覆一层磁性材料,用磁层存储信息。常见的就是此盘磁带

容量大、价格低、存取速度慢,多用作辅助存储器

4)光存储器

激光技术控制访问,一般分为:只读式、一次写入式、可改写式3中

4、按信息的可保存性分类

易失性存储器:断电后存储信息即消失的存储器,例如半导体RAM

非易失性存储器:断电后信息仍然保存的。ROM、磁芯存储器、磁表面存储器和光存储器

破坏性读出:存储信息被读出时,原 存信息被破坏。非破坏性读出与之相反

5.1.2 存储系统层次结构

为了解决存储容量、存取速度和价格之间的矛盾,通常把不同存储容量、不同速度的存储器按一定的体系结构组织起来,形成一个统一的存储整体

多级存储层次:n中不同存储器M1—Mn在逻辑上是一个整体。其中M1容量最小,速度最快,价格最高,Mn容量最大,速度最慢,价格最低。整个储存结构具有接近于M1的速度,相等或接近与Mn的容量,接近与Mn的价位。最常用的数据在M1中,次常用在M2,最少使用在Mn中

命中率H:CPU产生的逻辑地址能在M1中访问到的概率。假设两级存储结构层次M1和M2,其中访问M1和M2的时间分别为TA1和TA2。设访问M1次数N1,M2次数N2

则命中率 H = N1 / (N1+N2)

由高速缓冲寄存器、主寄存器、辅助存储器构成的三级存储系统分为两层

Cache-主存存储层次(Cache存储系统):高速缓存+主存

主存-辅存存储层次(虚拟存储系统):主存+辅存

Cache存储系统:为了解决主存速度不足

从CPU看,速度接近Cache速度,容量是主存容量。对系统程序员和应用程序员都是透明的

虚拟存储系统:为了解决主存容量不足。

从CPU看,速度接近主存,容量是虚拟的地址空间。对系统程序员是不透明的,但对应用程序员是透明的

5.2 主存储器的组织

主存储器是整个存储系统的核心,它用来存放计算机运行期间所需要的程序和数据,CPU可直接随机地对它进行访问

5.2.1 主存储器的基本结构

主存通常由:储存体、地址译码(address decoding)驱动电路、IO和读写电路组成

存储体:主存储器的核心,程序和数据都存放在存储体中

地址译码驱动电路:包括译码器和驱动器两部分。译码器将地址总线输入的地址码转换成与之对应的译码输出线上的有效电平,以表示选中了某一个存储单元,然后由驱动器提供驱动电流去驱动相应的读写电路,完成对被选中存储单元的读写操作

IO和读写电路:包括读出放大器、写入电路、读写控制电路,用来完成存储单元中的读入、写出

主存的读写操作是在控制器的控制下进行的,只有接受到信号后,才能实现正确的读写操作

5.2.2 主存储器的存储单元

位是二进制数的最基本单位,也是存储器存储信息的最小单位。一个二进制数由若干位组成

存储字:一个二进制数作为一个整体存入或者取出

存储单元/主存单元:存放存储字或存储字节的主存空间

存储体:大量存储单元的集合

为了区分存储体中的各个存储单元,必须将其编号。存储单元的编号称为地址,地址和单元有一对一的关系。就像大楼的每个房间都有房间号

大端方案:字地址等于最高有效字节地址,且字地址总是等于4的倍数,正好用地址码的最末两位来区分同一个字的四个字节

小端方案:字地址等于最低有效地址,且字地址总是等于2的整倍数,用地址码的最末一位来区分同一个字的两个字节

5.2.3 主存储器的主要技术指标

1、存储容量

对于字节编址的计算机,以字节数来表示存储容量;对于字编址的计算机,以字数乘以字长来表示存储容量。例:主存容量位64Kx16,表示它有64K个存储单元,每个存储单元字长16位,若改用字节数表示,则可记为128K字节

2、存取速度

主存的存取速度通常由存取时间Ta,存取周期Tm和主存带宽Bm等参数来描述

1)存取时间Ta

存取时间又称为访问时间或读写时间,它是指从启动一次从存储器操作开始到完成该操作所经历的时间。

2)存取周期Tm

又称读写周期,仿存周期,指主存进行一次完整的读写操作所需的全部时间。一般情况下Tm肯定大于Ta。因为对于任何一种存储器,在读写操作后,总要有恢复内部状态的复原时间。对于破坏性读出的RAM,就会更长,因为需要在读出后立刻重写

3)主存带宽Bm

又称为数据传输率,表示每秒从主存进出信息的最大数量,单位字每秒或位每秒。

Bm = 主存等效工作频率 x 主存位宽 / 8 (字节每秒)

3、可靠性

在规定的时间内,存储器无故障读写的概率。通常用平均故障间隔时间MTBF来衡量可靠性。MTBF越长,可靠性越高

4、功耗

反应存储器件耗电多少,同时反应了发热程度。通常希望功耗小,有利于存储器件的工作稳定性

5.2.4 数据在主存中的存放 见书129

5.3 半导体随机存储器和只读存储器

5.3.1 RAM 记忆单元电路 书130

5.3.2 动态RAM的刷新  (有题)

1、刷新间隔

刷新原因:为了维持DRAM记忆单元的存储信息

需要刷新的原理:栅极电容上的电荷数目有限,虽然释放速度慢,但是经过一段时间后会使得记忆单元中存储的信息丢失,因此每隔一段时间必须向栅极电容补充一次电荷,这被称为”刷新“

一般选定的最大刷新间隔为2ms或4ms甚至更大,应在规定的时间内,将全部存储体刷新一次

注意:刷新和重写(再生)是完全不同的概念。重写是随机的,某个存储单元只有在破坏性读出之后才需要重写。刷新是定时的,即使许多记忆单元长期未被访问,若不及时补充电荷的话,信息也会丢失。重写一般是按照存储单元进行的,刷新通常以存储体矩阵中的一行位单位进行的

2、刷新方式

常见的:集中式、分散式、异步式

1)集中刷新方式

在允许的最大刷新间隔内,按照存储芯片容量大小,集中安排若干个刷新周期,刷新时停止读写

刷新时间 = 存储矩阵行数 x 刷新周期

此处”刷新周期“就是指刷新一行所需要的时间,由于刷新过程就是”假读“的过程,所以说刷新周期等于存取周期。

优点:读写操作时不受刷新工作影响,系统存取速度比较高。

缺点:集中刷新时间必须停止读写,这段时间称为”死区“,且存储容量越大,死区越长

距离:1024个记忆单元(排列成32 x 32 的存储矩阵),对其刷新。假设存取周期为500ns,即0.5微秒。已知需要32个周期。假设最大刷新间隔2ms。则2ms内可以安排4000个存取周期。从0—3967个周期内继续进行读写操作或保持。从3968—3999最后32个周期集中安排刷新操作

2)分散刷新方式

把刷新操作分散到每个存取周期内进行,此时存取周期被分为两部分,前一部分时间进行读写或保持。后一部分时间内进行刷新。一个存取周期内刷新存储矩阵中的一行

人话:

集中刷新是:读写,读写,......读写,刷新,刷新...刷新

分散刷新是:读写刷新,读写刷新......读写刷新

这种刷新方式增加了系统的存取周期,若芯片的存取周期为0.5微秒,则系统的存取周期应为1微秒,也就是前半截读写,后半截刷新

优点:刷新没有死区

缺点:加长了系统的存取周期,降低整机速度;刷新过于频繁,没有充分利用所允许的最大刷新间隔

3)异步刷新方式

可以看成是前面两种的结合,充分利用了最大刷新间隔时间,把刷新操作平均分配到整个最大刷新间隔时间内进行

对于32x32 的矩阵来说:在2ms内需要将32行刷新一次。则每行间隔:2ms / 32 = 62.5微秒

则每隔62.5微秒安排一个刷新周期,刷新时禁止读写

这样也会有死区,但是比集中刷新小很多,仅为0.5微秒。这样可以避免使CPU连续的我哪个带过长时间,且减少了刷新次数

消除死区的方法质疑:不定时刷新:在CPU不访问存储器的空闲时间里,这段时间用来刷新。比如CPU取出指令后译码的时间,这段时间没有死区,也不会降低存储器的存取速度;但是控制复杂,实现困难

3、刷新控制

需要增加刷新控制电路,其主要任务是:解决刷新和CPU访问存储器之间的矛盾。通常,当刷新和访问请求同时发生时,应优先刷新。有些DRAM芯片本身具有自动刷新功能,即刷新控制电路在芯片内部

DRAM的刷新要注意以下问题:

1)无论是由外部刷新控制电路产生刷新地址逐行循环刷新,还是芯片内部的刷新地址计数器自动地控制刷新,都不依赖于外部的访问,刷新对CPU是透明的

2)刷新通常是一行一行进行的,所以说只需要行地址,不需要列地址

3)刷新类似读出操作,但是又有所不同。因为刷新作用仅是给栅极电容补充电荷,不需要信息输出。另外,刷新时不需要加片选信号,即整个存储器中的所有芯片同时被刷新

4)因为所有芯片同时被刷新,所以在考虑刷新问题时,应当从单个芯片的存储容量着手,而不是从整个存储器的容量着手

5.3.3 RAM芯片分析 书135

5.3.4 半导体只读存储器        Read Only Memory ROM 见书138

5.3.5 半导体存储器的封装 见书139

5.4 主存储器的链接与控制

5.4.1 主存容量的扩展

首先考虑:如何选片,然后考虑:如何连接芯片

总片数 = 总容量 / 每片容量

比如:存储器容量 8K x 8 若选用 1K x 4的存储芯片

则需要: 8kx8 / 1Kx4 = 8 x 2 = 16片

将多片组合起来常用:位扩展法、字扩展、位和字同时扩展

1、位扩展

只在数位方向扩展(加大字长),而芯片的字书和存储器字数是一致的

连接方式:各存储芯片的地址线,片选线,读写线相应并联,数据线单独列出

例如: 用64K x 1 的芯片组成64K x 8 的存储器,计算得知需 8片;

这种情况下,CPU将提供16根地址线,因为 2的16次方 = 65536 = 64 x 1024

8根数据线与存储器相连,存储芯片则有:16根地址线,1根数据线

地址线条数决定了可以访问的存储单元范围。

对于2^N个存储单元,需要N条地址线来唯一地指定每个存储单元

为什么是64x1024? 因为64Kx8意味着:64K 片 8位每片的存储单元,同理,64Kx1就是64K个1位每片存储单元

未完,但不续。


http://www.kler.cn/a/526106.html

相关文章:

  • 供应链系统设计-供应链中台系统设计(十)- 清结算中心概念片篇
  • C++:PTA L2-003 月饼
  • 萌新学 Python 之数值处理函数 round 四舍五入、abs 绝对值、pow 幂次方、divmod 元组商和余数
  • OpenCV:开运算
  • 02.05、链表求和
  • Node.js下载安装及环境配置教程 (详细版)
  • 组合模式 - 组合模式的实现
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(OLED设备层封装)
  • Sqoop源码修改:增加落地HDFS文件数与MapTask数量一致性检查
  • [Java]泛型(二)泛型方法
  • AJAX综合案例——图书管理
  • 01-时间与管理
  • DeepSeek-R1 论文解读:强化学习如何 “炼” 出超强推理模型?
  • 使用 Context API 管理临时状态,避免 Redux/Zustand 的持久化陷阱
  • Web-3.0学习路线
  • Python学习之旅:进阶阶段(六)数据结构-有序字典(collections.OrderedDict)
  • 单片机串口打印printf函数显示内容(固件库开发)
  • 蓝桥云客 好数
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.24 随机宇宙:生成现实世界数据的艺术
  • DeepSeek r1本地安装全指南
  • Java中运行Python程序
  • vscode+WSL2(ubuntu22.04)+pytorch+conda+cuda+cudnn安装系列
  • Rust语言进阶之chain用法实例(九十七)
  • 爱快 IK-W35 面板式AP 简单开箱评测和拆解,双频WiFi6 AX3000,2.5G网口
  • 2025年1月22日(网络编程)
  • 数据结构实战之线性表(三)