计算机组成原理

计算机系统有硬件和软件两部分组成,软件又可分为系统软件和应用软件
硬件:看得见摸得着的电子元器件,如主机,外部设备
软件:人们事先编制的具有特殊功能的程序
程序通常存放在计算机主存储器或者辅存里
直接执行机器语言的程序:实际机器M(机器语言机器)
符号式的程序设计语言:汇编语言(汇编语言机器称为虚拟机器,实际不存在,使人们感受到存在的具有翻译功能的机器,先将汇编语言翻译成机器语言,再在实际机器上执行)
汇编语言仍是一种面向实际机器的语言,它的每一条语句都与机器语言的某一条指令一一对应。
汇编语言摆脱不了不同机器的指令系统,每台机器都有与之对应的汇编语言
高级语言——————>翻译成汇编语言————————>翻译成机器语言
也可以:高级—->直接翻译成机器语言
将高级语言程序翻译成机器语言程序的软件称为翻译程序
翻译程序有两种:一种是编译程序,另一种是解释程序
编译程序:将高级语言程序一次全部翻译成机器语言,然后在执行
解释程序:翻译一条,执行一条,即使下一条重复执行某个语句,也必须要重新翻译
微程序:将实际机器中的每一条机器指令翻译成一组微指令,即构成一个微程序
将M1称为传统机器,将M0称为微程序机器
计算机组成原理主要讨论传统机器以及微程序机器
软件主要讨论操作系统以上的虚拟机
组成与结构的区分:一台机器是否具备乘法指令的功能,这是结构问题,实现乘法指令采用什么方式,则是一个组成问题
冯*诺伊曼机以运算器为中心
现代计算机以储存器为中心
运算器:完成算术运算和逻辑运算,计算的中间结果暂存在运算器内
储存器:存放数据和程序
控制器:控制程序和数据 输入,运算和处理运算结果
输入设备:转化成机器能识别的信息形式
输出设备:将机器结果转化成人们熟悉的信息形式
计算机五大子系统:输入,输出,控制器,运算器,储存器
运算器和控制器往往集成在同一芯片上,通常将运算器和控制器合称为中央处理器(Central Processing Unit,CPU)
I/O:输入和输出设备,(Input/Output Equipment,I/O)
现代计算机通常认为有三大部分组成:CPU,I/O设备,主储存器MM(Main Memory,MM)。其中,CPU与主储存器合起来称为主机,I/O设备又称为外设设备
主存储器是存储系统的一个子系统,用来存放程序和数据,主存可以直接与CPU交换信息。
辅助存储器:外存,简称辅存
CPU的核心部件:ALU(算术逻辑单元)和CU(控制单元)。算术逻辑单元(ALU,Arithmetic Logic Unit),用来完成算术逻辑运算。控制单元(CU,Control Unit)用来解释储存器中的指令,并发出各种操作指令来执行指令,I/O设备也受CU控制,计算机是在CU(控制器)的统一指挥下的
可以通过迭代法来求x的根号
指令==操作码+地址码
操作码:各种操作的代号
地址码:操作的数在储存器中的位置
操作码,地址码都采用二进制码来表示
指令和数据有自己的地址
主存储器:又称内存,主存。包括存储体M、逻辑部件、控制电路
存储体M:有许多存储单元构成,存储单元又由许多存储元件组成,每个存储元件存储1或者0。一个存储单元可以存储一串二进制代码,称这串二进制代码为一个存储字,这串二进制代码的位数称为存储字长,8,16,32,也就是存储单元的元件个数
存储单元的编号称为存储单元的地址号
一个存储单元里面存着一个存储字,也就是一串二进制数字,说的地址码就是存储单元的地址号
主存的工作方式就是按存储单元的地址号来实现对存储字各位的存和取,称为按地址存取方式,见地址访问存储器(访存)
按地址访问
为了实现按地址访问,主存储器中必须配置两个寄存器MAR和MDR,MAR(Memory Address Register)存储器地址寄存器:放存储单元的地址,MAR的位数代表存储单元的个数,如MAR有10位,则有1024个存储单元,记为1K
MDR(Memory Data Register)存储器数据寄存器,存放从存储体单元取出的代码,或者存放准备送往某单元的代码,MDR的位数与存储字长相等
1Byte==8bit 1字节==8位二进制代码
存储字长,指令字长,数据字长可各不相同
运算器:运算器至少包括三个寄存器(ACC,MQ,X)(或者现代计算机的通用寄存器组),一个ALU(算术逻辑单元)
ACC(Accumulator):累加器
MQ(Multiplier-Quotient Register):乘商寄存器
X:操作数寄存器
控制器:取指、分析(操作种类,按地址码寻址),执行(对操作数进行操作)
控制器:由程序计数器(PC,Program Counter),指令寄存器(IR,Instruction Register),控制单元(CU,Control Unit)
PC:程序计数器,存放当前欲执行指令的地址,具有自动加一的功能,可以形成下一条指令的地址
IR:指令寄存器,存放当前的指令,IR总的操作码OP(IR)->CU,用于分析指令,IR中的地址码Ad(IR)作为操作数的地址->MAR,计作Ad(IR)->MAR
硬件技术指标:
机器字长,越长越好,否则会直接影响加法器(ALU),数据总线,存储字长的位数。机器字长与CPU的寄存器位数有关
存储容量:包括主存容量和辅存容量
主存容量:主存中存放的二进制代码的位数 主存容量==存储单元个数*存储字长
MAR反映了存储单元个数
MDR反应存储字长
MAR为16位,则有2(16)=65536==1024*64(64K)个存储字/存储单元
1个存储单元==1个存储字
MDR为32位,即存储容量==存储单元个数*存储字长==64K*32==2(16+5)=2(20+1)==2M
1M==2(20)
现代计算机常用字节数来表示,1字节==8位,所以2M==2(21-3)==2(18)B==256KB,1K==2(10)
现在机器的运算速度普遍采用单位时间内执行指令的平均条数来衡量,用MIPS(Million Instruction Per Srcond)百万指令每秒来衡量,也可以用CPI(Cycle Per Instruction)执行一条指令所需要的时钟周期(机器主频的倒数),或者用FPOPS(Floating Point Operation Per Second 浮点运算次数每秒)
计算机微芯片上集成的晶体管数目每三年翻两番——————摩尔定律
汇编程序:将汇编语言翻译成机器语言
编译程序和解释程序:将高级语言翻译成机器语言
============================================================================================================
系统总线
============================================================================================================
开始的时候使用分散式连接方式,后来逐渐发展为总线连接方式
某一时刻,只允许一个部件想总线发送信息,可以允许多个部件同时接收信息
总线实际就是多条传输线组成的,每条传输线可以一位一位的传送二进制代码,多条传输线就可以同时传送多条代码
采用双总线连接的计算机结构:
以CPU为中心的双总线结构:一组总线连接CPU和主存,称为存储总线(M总线),另一组总线连接CPU和I/O设备,称为输入输出总线(I/O总线)
缺点:在I/O设备与主存交换信息时需要占用CPU,影响CPU的工作效率
采用单总线连接的计算机:CPU、主存、I/O设备都挂到同一组总线上
原则上不占用CPU,但是易造成拥挤,必须设置总线判优逻辑,让优先级高的先占用总线,这也会影响整机的工作速度
以存储器为中心的双总线结构:在单总线的基础上增加CPU与主存之间的总线,又称存储总线,优点:提高了传输效率,减轻了系统总线的负担,I/O设备与储存器交换信息不经过CPU
总线的分类:并行传输总线和串行传输总线
总线按照连接部件的不同,分为片内总线,系统总线和通信总线
片内总线:芯片内部的总线
系统总线:系统总线指的是CPU,主存,I/O设备这三个部件之间的信息传输线,由于这些部件通常都装在主板上,因此又称为板间总线
系统总线按照传输信息的不同,有分为数据总线,地址总线,控制总线
数据总线:数据总线用来传输个功能部件之间的数据信息,是双向传输总线,数据总线的位数称为数据总线的宽度,数据总线宽度是衡量系统性能的重要参数,总线的位数与机器字长,存储字长有关
地址总线:地址总线主要用来指出数据总线上的源数据或者目标数据在主存中的地址或者I/O设备的地址,相当于专门的指针线,如果地址线有20根,则对应的储存单元有2(20)==1M个
控制总线:由于数据总线,地址总线都是被总线上的所有部件共享的,如果是个部件能在不同时刻占有总线使用权,需依靠控制总线来完成,因此控制总线是用来发出各种控制信号的传输线:协调数据总线,地址总线的使用,对于单一的控制线,传输是单向的,对于CPU而言,控制信号既有输出,又有输入
常见的控制信号:
时钟:用来同步各种操作
复位:初始化所有部件
总线请求:表示某部件需获得总线使用权
总线允许:表示需要获得总线使用权的部件已经获得了总线控制权
中断请求:表示某部件提出中断请求
中断响应:表示中断请求已经被接收
存储器写:将数据总线上的数据写到存储器的制定的地址单元内
存储器读:将制定存储单元内的数据读到数据总线上
I/O读:从指定的I/O端口将数据读到数据总线上
I/O写:将数据总线上的数据输出到指定的I/O端口内
传输响应:表示数据已经被接收,或者数据已经送至传输总线上
通信总线:计算机系统之间,或者计算机系统与其他系统之间的通信。分为串行通信和并行通信
串行通信:数据在单条1位宽的传输线上,一位一位的按顺序分时传送,比如1字节的数据,要分8次由低到高逐位传送
并行通信:数据再多条并行1位宽的传输线上,同时由源传送到目的地,比如1字节的数据,要通过8条并行传输线同时由源传送到目的地
并行通信适宜于近距离的数据传输,通常小于30m
串行通信适宜于远距离传送,可以从几米到几千米
并行通信和串行通讯的数据传输速率都与距离成反比
短距离内,并行数据传送速率比串行传输速率大得多
随着大规模和超大规模集成电路的发展,逻辑器件的价格的价格变低,通信线路的价格变高
对于远距离通信而言,串行通信比并行通信费用低得多
总线特征及性能指标
总线有许多导线直接印在电路板上,延伸到各个部件
CPU、主存、I/O这些插板,通过插头与水平方向总线插槽连接
总线特征:1、机械特性:机械特征是指总线在机械连接方式上的性能
2、电气特征:指的是总线的每一根传输线上的信号传递方向和有效的电平范围,规定,由CPU发出的为输出信号,输入CPU的为输入信号
地址总线属于单项输出线,数据总线属于双向传输线,地址总线和数据总线都定义高电平为1,低电平为0,控制总线的每一根都是单向的,但从整体看,有输入也有输出,控制总线中,有的定义高电平有效,有的定义低电平有效
3、功能特性:总线中每根传输线的功能
4、时间特性:总线中的人一根线在什么时间有效。每条总线上的各种信号,互相存在一种有效时序关系
总线性能指标:
总线宽度:数据总线的根数,用bit表示,64根
总线带宽:总线的数据传输速率,用每秒传输信息的字节数来衡量,单位可以用MBps(兆字节每秒) MHz*B==MBps
时钟同步/异步:总线上的数据与时钟同步工作,称为同步总线,与时钟不同步工作的总线,称为异步总线
总线复用:一条信号线上分时传送两种信号。比如,通常地址总线与数据总线在物理上是分开的两种总线,地址总线传地址码,数据总线传数据码,为了提高总线的利用率,特将地址总线和数据总线共用一组物理线路,称为总线的多路复用
信号线数:地址总线,数据总线,控制总线三种总线数的总和
其他指标:负载能力,电源电压,总线宽度能否扩展
总线的负载能力就是驱动能力,是指总线在接上负载后,总线输入输出的逻辑电平是否能保持在额定的范围内。例如,PC总线的输出信号为逻辑低电平时,会吸入电流,当它吸收电流时,仍能保持额定的逻辑低电平;PC总线的输出为高电平时,要输出电流,人能保持额定的高电平。通常用可扩增电路板数来反映总线的负载能力
总线标准:可视为系统与各模块,模块与模块之间的互联的标准界面。
图形用户结构:(Graphical User Interface ,GUI)
介绍了(ISA,Industrial Standard Architecture)总线,(EISA,Extended Industrial Standard Architecture) 在ISA基础上扩充的总线标准,从CPU中分离出了总线控制权,(VESA,Video Electronic Standard Association)视频电子标准协会提出的局部总线标准
局部总线:是指系统外,为两个以上模块提供的高速传输信息通道,又称VL-BUS(Local BUS)总线,通过局部总线控制器,可以将高速I/O设备直接挂在CPU上,实现CPU与高速I/O设备之间的高速信息交换
PCI总线:随着GUI(Graphical User Interface)和多媒体技术的发展,原有的总线带宽不足,所以出现了PCI总线
PCI总线特点:
高性能:自带总线时钟,与CPU时钟无关,不依附于具体的处理器,支持突发工作方式
突发工作方式:指如果被传输的数据在主存中连续存放,则在访问这个数据时,只需给出第一个数据的地址,占用一个时钟周期,其后的每次传送各占一个时钟周期,不必每次给出各个数据的地址,因此可提高传输效率
兼容性:PCI总线部件和插件接口相对于处理器是独立的,支持现在和将来的不同结构的处理器
支持即插即用:即任何扩展卡只要插入系统就可以用。PCI设备中配有存放设备具体信息的寄存器,这些信息可供BIOS和操作系统软件自动配置PCI总线部件和插件,无需进行手动配置,(设备自带驱动器,可以自动存在PCI寄存器中,不需进行手动按转驱动程序)
支持多主设备能力:主设备就是对总线有控制权的设备,PCI总线支持多主设备,即允许任何主设备和从设备之间实现点对点的对等存取,具有接纳设备的灵活性
具有与处理器和存储子系统完全并行操作的能力:PCI与CPU之间有PCI桥路,PCI桥路有多级缓冲,可以把一批数据快速写入缓冲期,从而实现PCI与处理器,存储器之间的并发操作
提供数据和地址奇偶校验功能,保证数据的完整和准确
支持两种电压标准:内部有组件可以实现两种电压的平滑过渡
可扩充性好:当PCI总线的驱动能力不足时,可以采用多层结构
软件兼容性好:PCI部件可以完全兼容现有的驱动程序和应用程序,设备驱动程序可以被移植到各类平台上
采用多路复用技术:减少总线引脚个数
AGP总线:AGP(Accelerated Graphics Port)加速图形端口,实现卡专用的局部总线,应用于三维技术的大量数据传输需求
RS-232C总线:RS-232C是一种串行通信总线标准,应用于串行二进制交换的终端设备DTE(Data Terminal Equipment)和数据通信设备DCE(Date Communication Equipment)之间的标准接口。DCE实质是一个信号匹配器,既满足DTE的要求,又能使信号符合线路要求,可以是一个Modem调制解调器,RS-231C可以实现DTE与DCE之间的协调配合
计算机之间通信时数字信号,要求的带宽很宽,而计算机之间的信号传输是通过载波电话传送,不可能有这么宽的频带,如果数字信号直接通信,经过传输线后,必然会发生信号的畸变。所以在发送端必须通过调制器将数字信号转化成模拟信号,即对载波电话的线上载波进行调制,
在计算机系统中,+5V代表逻辑1,接地电压代表逻辑0
现代计算机之间的远距离通信可直接由网卡,经网线传输
USB总线:(USB,Universal Serial Bus)通用串行总线:是计算机串行接口总线标准
USB 1.0:基于通用连接技术,实现外设的简单快速连接,达到扩展PC的目的
USB特点:具有真正的即插即用特征,主即可按外设的增删情况自动配置系统资源,外设装置的驱动程序的安装,删除均自动实现
具有很强的连接能力。可以采用USB HUB(USB 集线器)实现系统扩展,最多可链式连接127个外设到同一系统
数据传输率分为普通无屏蔽双绞线和带屏蔽的双绞线,带屏蔽的传输速率快
标准统一:减轻了PC中其他标准接口的需求,串口的键盘,鼠标,并口的打印机,IDE接口的硬盘,都可以改成统一的USB标准接入系统、
连接电缆轻巧,电源体积缩小:USB使用的4芯电缆,2条用于信号连接,2条用于电源/地,可为外设提供+5V的直流电源
总线结构:总线结构可分为单总线结构和多总线结构
单总线结构:所有设备挂在同一组总线上,但是所有信息传送均通过这组总线,极易形成计算机系统的瓶颈,且不允许两个以上部件同时想总线传递信息当I/O设备很多时,信号一个一个的传到I/O设备中,造成很大的延迟,适用于对数据量和传输速率要求不高,多数用于小型机和微型机
多总线结构:双总线结构:将速度较低的I/O总线从单总线上分离出来,形成主存总线和I/O总线分开的结构 其中包含的通道是比较特殊的结构,CPU将一部分功能下放给通道,对I/O设备进行统一的管理,其系统吞吐能力可以相当大
总线控制:主要包括判优控制和通信控制
总线上所连接的设备,按照对总线有无控制能力,可分为主设备和从设备两种
主设备对总线有控制权,从设备只能响应从主设备发来的总线命令
总线上的信息传送是有主设备启动的,如果某个主设备想要与从设备进行通信,首先应从主设备向总线发出请求信号,若多个主设备同时要求使用总线,就由总线控制器的判优仲裁逻辑进行优先等级的排列,只有获得总线使用权的主设备才能开始传送数据
总线判优控制可分为集中式和分布式:前者将控制逻辑集中在一处,如在CPU中,后者将控制逻辑分散在与总线连接的各个部件上
常见的集中控制优先权仲裁方式:
链式查询:BS:总线忙 BR:总线请求 BG:总线同意 :关键点:总线同意信号串行的从一个I/O接口送到下一个接口,如果BG到达的I/O接口有总线请求,BG信号就不再往下传,意味着该接口获得了总线的使用权,并建立BS总线忙信号,表示这个I/O接口占用了总线
离总线控制器近的具有最高的优先权,缺点:对电路故障很敏感,优先级别低的设备可能很难获得请求
优点:只需要很少几根线就可以实现总线控制
计数器定时查询:比链式查询多了一组设备地址线,少了一根设备同一线BG:总线控制器在接到由BR送来的总线请求信号后,在总线未被使用BS=0时,总线控制器中的计数器开始启动,0.1.2.3.4….,并通过设备地址线,想设备发送一组地址型号,匹配时,停止计数查询,可以修改计数器来实现优先排列
对电路故障不如链式查询敏感,但是增加了设备地址线,控制也复杂
独立请求方式:每一个I/O设备都有一对总线请求线BR和总线同意线BG,设备要使用总线时,边发出信号。总线控制器中有一个排队电路,确定优先级
优点:响应速度快,优先次序控制灵活
缺点:控制限数量多,总线控制复杂
链式查询需要的线数:2
计数器定时查询:log2n
独立请求方式:2n
总线通信控制:通信时间控制
众多部件共享总线,应采用分时方式来处理,以获得总线优先权的先后顺序来分时占用总线,也就是说,那个部件获得总线使用权,此刻由它传送,下一部件获得使用权,接着下一时刻传送
总线周期:完成一次总线操作的时间称为总线周期
申请分配阶段:由需要使用总线的主设备提出申请,经总线仲裁机构决定下一周期的总线使用权授予某一申请者
寻址阶段:取得了使用权的主模块经总线发出本次要访问的从模块地址,启动从模块
传数阶段:由数据总线交换数据
结束阶段:主模块的有关信息从总线上撤除,让出总线使用权
总线通信控制:主要解决通信双方如何知道传输开始和传输结束,以及通信双方如何协调
通信有四种方式:同步通信,异步通信,半同步通信,分离式通信
总线传输周期是连接在总线上的两个部件完成一次完整且可靠的信息传输时间,包括四个时钟周期:T1,T2,T3,T4
同步通信的优点是规定明确而统一,缺点是主从模块之间的配合属于强制性的同步,必须在限定时间内完成,但是对所有部件都采用统一标准,不够灵活
同步通信适用于总线长度短,各个部件存储时间比较一致的场合
同步通信的总线系统,总线传输周期越短,数据线的位数就越多
CPU频率的倒数==周期时间
总线宽度/8== B(字节)
总线数据传输率==总线宽度/传输周期的时间(n个周期)
异步通信:允许各模块速度不一致,没有统一的时钟标准,不要求所有部件严格的统一操作时间
异步通信是采用应答方式,又称握手方式,主模块发出请求信号Request时,一直等待从模块反馈回来的响应Acknowledge信号后,才开始通信
异步通信要求主从模块之间增加两条应答线,握手交互信号线(Handshaking)
异步通信的应答方式又分为不互锁,半互锁和全互锁三种
不互锁的异步通信:主模块发出请求信号后,不必等待接到从模块的回答信号,而是经过一段时间,确认从模块已收到请求信号后,便撤销主模块的请求信号;从模块在接到请求信号后,在条件允许时发出回答信号,并且经过一段时间,确认主模块已收到回答信号后,自动撤销回答信号;双方没有互锁关系,例如:CPU向主存写信息,CPU要先后给出地址信号,写命令,写入数据
半互锁方式:主模块有互锁,发出请求信号后,必须等待接到从模块的回答信号后在撤销请求信号,而从模块接到主模块的请求信号后,发出回答信号,但不必等待获知主模块的请求信号已经撤销,而是隔一段时间后自动撤销其回答信号,无互锁关系,一方存在互锁关系,而另一方不存在互锁关系,称为半互锁方式,例如,CPU访问共享存储器,CPU在发出请求后,必须接受到存储器未被占用的信号,才进行访存
全互锁方式:主模块发出请求信号,必须带从模块回答后在撤销其请求信号;从模块发出回答信号后,必须待获知主模块请求信号已撤销后,在撤销其回答信号,双方存在互锁关系,称为全互锁方式,例如,网络通信中,双方采用的就是全互锁方式
异步通信可用于并行传输或者串行传输。
异步串行通信:规定字符格式,1个起始位,5~8个数据位,1个奇偶校验位,2个终止位
异步串行通信的数据传送速率用波特率来衡量
波特率:单位时间内传送二进制数据的位数,bps(位/秒)
异步串行通信:由于异步串行通信的字符格式中包含若干附加位,如起始位,终止位,校验位,若只考虑有效位数,可用比特率(区别于波特率)来衡量异步串行通信的数据传输速率,即单位时间内传送二进制有效数据的位数,单位时间,有效数据的位数,单位bps
为了提高速度,将异步串行通信中的附加位去掉,就可以采用同步传送,在同步传送时,数据快开始出要用同步字符SYN来指示
同步串行通信速度高于异步串行通信速度
比特率==波特率*(有效数据位数占比)
半同步通信:既保留了同步通信的基本特点,比如所有的地址,命令,数据信号的发出时间都严格按照系统时钟的某个前沿开始,而接收方都采用系统时钟的后沿进行识别,同时又像异步通讯那样,允许不同速度的模块协调的工作,为此增设了一条WAIT响应信号线,采用插入时钟周期的方法来协调通信双方的配合问题
在同步通信中,T1发地址,T2发命令,T3传输数据,T4结束传输,如果模块工作速度慢,无法在T3提供数据,必须在T3来之前通知主模块,给出WAIT低电平,若主模块测得WAIT为低电平,就插入一个等待周期来协调通信,当等到检测WAIT位高电平时,下一个周一当作正常周期传送
半同步:可以等的通信
半同步通信适用于系统工作速率不高,但又包含了许多工作速度相差较大的各类设备的简单系统
,半同步通信控制方式比异步简单,且在系统的统一时钟控制下工作,可靠性高,同步结构简单,缺点是对于系统时钟的频率不能要求太高,所以整体速度还是不高
分离式通信:以上三种通信方式都是从主模块发出地址和读写命令开始,知道数据传输结束,在整个传输周期中,总线的控制权完全由主从模块占用,而在传输周期中,有一个周期是从模块准备数据,这段时间总线是完全空闲的,为了充分利用每一个瞬间,将整个传输周期分为两个子周期。先将所有信息
发送给B模块,然后将总线的控制权立马交给其他主模块,当从模块数据准备完毕,由B模块申请总线控制权,然后将所有信息都发到总线上去,总线中只有单方向信息流,每个模块都变成了主模块
特点:
各模块占用总线使用权都需要申请
分离式通信采用的是同步方式传送,在申请得到总线的使用权后,在限定时间内向总线发送信息,不用等待回答信号
各模块在准备数据时都不占用总线,总线可接受其他模块命令
总线在被占用时都在做有效工作,不存在空闲等待时间,从而实现总线在多个主从模块间进行信息交叉重叠并行时传送,大型机中很重要,普通微型计算机不采用这种复杂的控制方式
========================================================================================================
存储器
========================================================================================================
存储器是计算机中的记忆设备,用来存放程序和数据
CPU速度越来越高,但是存储设备存数和取数的速率跟不上CPU的速率,所以存储器制约计算机的发展
I/O与存储器直接存取的方式(DMA)
存储器的分类
1、按存储介质分类:
存储介质指的是能够寄存并区别“0” 和“1”两种代码的物质,存储介质主要有半导体器件,磁性材料,光盘
半导体存储器:存储元件由半导体组成的存储器称为半导体存储器,体积好,功耗低,超大规模集成电路,但是当不通电时,信息丢失
半导体存储器按材料的不同,分为双极型TTL半导体存储器,和MOS半导体存储器,前者具有高速的特点,后者具有高集成度,制造简单,成本低,所以MOS存储器被广泛使用
磁表面存储器:在金属或者塑料机体表面涂一层磁性材料作为记录介质,工作时磁层随載磁体高速运转,磁头在磁层进行读写操作,用带有矩形磁滞回线特性的材料作为磁表面物质,具有非易失性的特点
磁芯存储器:
光盘存储器:应用激光在记录介质(磁光材料)上进行读写操作
存储器按照存取方式分类
按照存取方式可以将存储器分为:随机存储器,只读存储器,顺序存取存储器,直接存取存储器
随机存储器(Random Access Memory,RAM):随机存储器RAM是一种可读/写存储器,其特点是存储器中的任何一个存储单元都可以随机存取,且存取时间与存储单元的物理位置无关,计算机系统中主存多采用这种随机存储器RAM,RAM又分为静态RAM(触发器原理寄存,SRAM)和动态RAM(电容充放电原理寄存,DRAM)
只读存储器(Read Only Memery,ROM):只读存储器是只能对其中的信息进行读取,不能写入的寄存器。通常用于放固定不变的程序,数据,汉字字库,或者操作系统的固化。RAM和ROM可共同作为主存的一部分
掩膜型只读存储器(Masked ROM,MROM)
只读存储器派生出编程只读存储器(Programmable ROM,PROM)
可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)
用电可擦除可编程只读存储器(Electrically Erasable Programmable ROM ,EEPROM)
闪速存储器(Flash Memory)具有用电可擦除可编程存储器(EEPROM)的特点,但是速度比其大很多
穿行访问存储器:如果对存储单元进行读写操作时,需要按照其物理位置先后顺序寻找地址,则称这种存储器为穿行访问存储器,不管信息在哪里,都需要从介质的开始段寻找,又称顺序存取存储器;还有一部分属于穿行访问的存储器,比如磁盘,首先指出存储器中某个小区域(磁道),然后顺序寻访,直到找到位置,前段是直接访问,后段是串行访问,称为直接存取存储器
按在计算机中的作用,分为主存储器,辅助存储器,缓冲存储器
主存储器,简称主存,主要特点是可以和CPU直接交换信息。
辅助存储器(简称辅村)是主存储器的后援存储器,用来存放暂时不用的程序和数据,不能和CPU直接交换信息
两者相比,主存速度快,容量小,每位价格高;
辅存速度慢,容量大,每位价格低,不能和CPU直接交换信息;
缓冲储存器,简称缓存,用于在两个速度不同的部件之间设置一个快速缓存,起到缓冲的作用;
缓存(Cache)
寄存器直接制作在CPU内,一个CPU可以有很多寄存器,寄存器中的数直接在CPU内部参与运算
寄存器的速度最高,位价最高,容量最小
主存用来存放将要参与运行的程序和数据,主存的速度比CPU慢很多,为了使主存和CPU之间进行更好的匹配,在主存和CPU之间插入了比主存速度快,容量小的缓存Cache
寄存器,Cache缓存,主存都是有不同的半导体材料制成的
现代计算机将缓存制作在CPU内
磁盘和磁带属于辅助存储器,用来存放暂时用不到的程序和数据,CPU不能直接访问辅存,辅存只能与主存交换信息,辅存速度比主存速度慢很多
存储系统层次结构可分为缓存-主存层次,和主存-辅存层次
缓存-主存层次主要解决CPU和主存速度不匹配的问题,因为缓存速度高于主存,所以将CPU近期用到的信息调入缓存,CPU可直接从缓存中调取信息
CPU可直接调取缓存和主存中的信息
主存-辅存层次主要解决存储系统的容量问题,当CPU需要辅存中的信息时,将信息调入主存,供CPU直接访问
现代计算机的存储系统:缓存,主存,辅存三级存储系统
虚拟存储器:程序员编程的地址范围与虚拟存储器相对应,称虚拟存储器的存储器的地址码为虚地址,或者逻辑地址,而把主存的实际地址称为物理地址或者实地址
主存储器:再根据MAR(地址寄存器)中的地址访问某个存储单元时,还需要经过地址译码,驱动等电路,才能访问到所需访问的单元
读出时,需要经过读出放大器,才能将被访问单元的存储字送到MDR
写入时,必须通过写入电路才能真正写入到所选中的单元中
现代计算机将驱动器,译码器和读写电路放在存储芯片中,将MAR,MDR放在CPU中
CPU的访存过程以及写入过程:
访存:CPU将地址放到MAR->经地址总线送到主存->地址译码器,驱动器->主存->放大器->数据总线->MDR->CPU决定将数据发往何处
写入:CPU将主存单元的地址经MAR送到地址总线->将数据放到MDR,数据总线->向主存写命令->将数据总线上的信息写入对应的主存单元中
位bit/8==字节B
主存中存储单元的空间位置,是由单元地址号来表示的,地址总线是用来指出存储单元地址号的,根据该地址可以读出或者写入一个存储字
不同机器的存储字长不一样,为了方便字符处理,将8位二进制数表示一个字节,计算机系统可以按字寻址,也可以按照字节寻址,
字地址用该字高位字节的地址来表示
有的机器,字长为16位,也就是两个字节 字-》字节-》位
24位地址线,寻找的不是24位二进制码,而是24位字节码,所以24位地址线,按字节寻址范围为16M,按字寻址范围为4M(4个字节组成一个字)
对于16位的机器,2个字节为一个字,所以,按字节寻址范围为16M,按字的寻址范围为8M
主存的技术指标:主存的技术指标主要是存储容量和存储速度
一个存储单元存储一个存储字,一个机器的字长就是存储字长,比如,某机器字长为32位,说的就是存储字长为32位
一个存储单元存储一个存储字
B,MB,KB都是指的是字节,1B==1字节
现在计算机多以字节数来表示存储容量
存储容量:主存能放进二进制代码的总位数。存储容量==存储单元个数*存储字长
主存容量也可以用字节数来表示:存储容量==存储单元个数*存储字长/8
某机主存的存储容量是256MB,则按照字节寻址的地址线位数为28位
存储速度:存储速度是由存储时间和存储周期来表示的
存取时间又称存储器的访问时间,(Memory Access Time),指的是启动一次存储器操作到完成该操作所需的全部时间,存储时间分为读出时间和写入时间,读出时间是指存储器从接受到地址开始,到产生有效输出的时间,写入时间指的是存储器从接受到地址开始,到将数据写入内存所需的全部时间
存取周期:(Memory Cycle Time)指的是存储器进行两次连续独立的存储器操作所需要的最短间隔时间,通常存储周期大于存取时间
存储器带宽:与存取周期密切相关的指标为存储器带宽,存储器带宽是指单位时间内存储器存取的信息量,可以用字节/秒,字/秒,位/秒 来表示
比如存储周期为500ns,每个存取周期可以访问16位,则带宽为16/500ns==32M位/秒
带宽是衡量数据传输率的重要指标
存储器的带宽决定了以存储器为中心的机器获得信息的传输速度,是改善机器瓶颈的关键因素
提高存储器带宽:
缩短存取周期,
增加存储字长是每个存取周期可以读写更多的二进制位数,
增加存储体
半导体存储芯片简介
半导体芯片采用超大规模集成电路制造工艺,在一个芯片内集成具有记忆功能的存储矩阵,译码驱动矩阵,读写电路等
译码驱动矩阵将地址总线送来的地址信号翻译成对应存储单元的选择信号,该信号在读写电路的配合下完成对被选中单元的读写操作
读写电路包括读出放大器,和写入电路,用来完成读写操作
存储芯片通过地址总线,数据总线和控制总线与外部连接
地址线是单向传输的,其位数与芯片容量有关
数据显示双向传输的(有的芯片采用成对出现的数据线分别作为专用的输入和输出)数据线的位数,与芯片容量有关
地址线和数据线的位数共同反应存储芯片的容量
地址线为10根,数据线为4根,则存储容量为2(10)*4==4K位,
2(地址线位数)*数据线根数==存储容量
控制线主要有读写控制线和片选线两种。
不同存储芯片的读写控制线和片选线可以不同
读写控制线决定芯片进行读写操作,片选线用来选择存储芯片。
半导体存储器使用许多芯片组成的,所以需要用片选信号来确定那个芯片被选中。
一个64K*8位的存储器可由32片16K*1位的存储芯片组成,但是每次读出一个存储字时,只需选中8片
半导体芯片的译码驱动方式
半导体存储芯片的译码驱动方式有两种:线选法和重合法
线选法:用一根字线/字选择线,直接选中一个存储单元的各位(如一个字节)。这种方式结构较简单,但是只适用于容量不大的存储芯片。当地址线为1111时,1111==15,则第15根字线被选中,对应图中的最后一行8位代码便可直接读出或者写入
地址线是2进制码,用来对应很多字线或者选择线,地址线是地址译码器之前的线,对应于地址译码器之后的字线或者选择线
重合法译码驱动方式:分为XY译码器,只要用64根选择线(XY方向各32根,便可以选择32*32矩阵中的任一位,当地址线全为0时,则X=0,Y=0那位就被选中
要构成1k*1字节的存储器,只需要用8片32*32芯片即可
随机存取存储器:
(Random Access Memory)
随机存取存储器按其存储信息的原理的不同,可分为静态RAM和动态RAM两大类
静态RAM(Static RAM ,SRAM)静态RAM基本单元电路
存储器中用于寄存0和1代码的电路称为存储器的基本单元电路,静态RAM基本单元电路是由6个MOS管组成的基本单元电路,
三态门:指逻辑门的输出端除有高低两种状态外,还有第三种状态——高阻态,高阻态相当于隔断状态,当A(三态门控制线)位高电平时,C->B导通,当A为低电平时,C->B不导通,此时为高阻状态
T1~T4是用4个MOS管构成的触发器基本电路,T5、T6是开关,T5、T6两个MOS管构成了一个行地址选择信号控制的行开关,另外的T7、T8受列选择信号控制的一个列开关,列开关不包含在存储器的基本单元电路中,而是为芯片中同一列的各个基本单元电路共有,T7、T8与位线A、A’连接
当A点位高电平,A‘点为低电平时,触发器的这种状态为存有1信号
当需要将存储单元中的1信号读出时,需要将T5、T6、T7、T8均导通,A高电平通过T6进入位线,通过T8进入读出放大器的一端,当读选择有效时,三态门将1信号读出
Static RAM在写入时,不论触发器原状态如何(原状态覆盖掉),只要将写入代码送到写入端,在写选择有效时(写三态门打开),经两个写放大器,使两端输出为相反电平,当行列地址选择有效时,使T5,T6、T7、T8导通,并将A点、A’点设置成完全相反的电平。这样,就把欲写入的信息写入到了基本控制单元(触发器A、A’端电平的一高一的表示两种1或者0信号)
如果想写入1,即D(IN)==1,经两个写放大器将位线A设置为高电平,位线A’设为反向低电平,结果使A点为高电平,A‘点为低电平,这样就写入了1信息
静态RAM芯片:64*64==2(12)==1K*4==4K存储器
图中,A9~A0为地址的输入端,I/O1~I/O4为数据的输入/输出端,CS为片选信号(低电平有效),WE为读写信号(低电平为写,高电平为读),Vcc为电源信号,GND为接地端
2114RAM芯片由64*64个基本单元电路组成(64*64个记忆单元),列I/O电路为读写电路,10根地址线分为行地址线A8~A3,和列地址线A0、A1、A2、A9,四根数据线为I/O1、I/O2、I/O3、I/O4,是受输入输出三态门控制的双向总线。当CS和WE均为低电平时,输入三态门打开,I/O1~I/O4上的数据即通过列I/O电路写入到指定地址单元中。当CS为低电平,WE为高电平(读出)时,输出三态门打开,列I/O电路的输出经片内总线输出至数据线I/O4~I/O1上。
2114RAM芯片内的存储矩阵结构中的每一个小方块均为一个由6个MOS管组成的基本单元电路,排列成64*64矩阵,64列对应着64个列选开关T7、T8。又将64列分为4组,每组中有16列,每一组的16列都与每一组的唯一一个读写电路相连,读写电路受WE和CS控制,4个读写电路与4根数据线I/O1~I/O4。行地址经译码后可选择某一行,列地址经译码后可以选择4组中各自的对应列,一次选择4个列;每次选好一个行和列后,就选定了4个存储器单元
当对某个基本单元电路进行读写操作时,必须被行列地址共同选中,例如,当A0~A9全为0时,第0行的0,16,32,48这四个基本单元电路被选中。若进行读操作,CS为低电平,WE为高电平,在I/O1~I/O4端便输出第0行的0,16,32,48这四个基本单元电路中的信息。若进行写操作,将写入信息送到I/O1~I/O4端口,并使CS为低电平、WE为低电平,这四个输入信息将分别写入第0行的0,16,32,48这四个基本单元电路中。
静态RAM读写时序
读周期时许(读出数据所需的各项操作的时间先后顺序):在整个读周期中,WE始终为高电平
读周期:t-RC为芯片进行两次连续读操作的最小时间间隔(t-RC为从地址有效到地址失效的时间,也就是读周期长度)
读时间:t-A表示从地址有效到数据稳定所需要的时间
读时间<读周期
t-CO是从片选有效到输出稳定的时间,可见只有当地址有效经t-A后,片选有效经t-CO后,数据才能稳定输出,必须两者兼备。
根据t-A和t-CO的值,便可知当地址有效后,经t—A–t-CO时间必须给出片选有效信号,否则信号不能出现在数据线上
从片选失效到输出高阻需要一段时间t-OTD,所以地址失效后,数据线上的有效数据有一段维持时间t-OTA,以保证所读的数据可靠
//
写周期t-WC是对芯片进行连续两次写操作的最小时间间隔,也就是写周期
写周期包括滞后时间t-AW、写入时间t-w、恢复时间t-WR
在有效数据出现之前,RAM的数据线上存在着前一时刻的数据D-OUT,故在地址线发生变化后,CS,WE均需滞后t-AW在有效,(等待数据线中的前一刻数据D-OUT消失),以避免将无效数据写入到RAM的错误。但是写允许WE失效后,地址必须保持一段时间,称为写恢复时间。此外,RAM数据线上的有效数据,(CPU送至RAM的写入数据)必须在CS、WE失效前的t-DW时刻出现,并延续一段时间t-DH,此刻地址线仍有效t-WR>t-DH,以保证数据可靠写入
*已经制成的RAM芯片的读写时序已经确定,所以,将它与CPU连接时,必须注意他们相互间的时许匹配关系,否则RAM将无法正常工作
无论是对存储器进行读操作还是写操作,在读周期和写周期内,地址线上的地址始终不变
动态RAM(Dynamic RAM,DRAM)
动态RAM的基本单元电路
常见的动态RAM基本单元电路有三管式和单管式两种,他们的共同特点是靠电容存储电荷的原理来寄存信息
DRAM的基本电路中的电容,如果有足够多的电荷就表示1,如果电容上无电荷表示存0
电容上的电荷一般只能维持1~2ms,因此即使电源不掉电,信息也会自动消失,为此,必须在2ms内对所有存储单元恢复一次初始状态,这个过程称为再生或者刷新
动态RAM与静态RAM相比,具有集成度更高,功耗更低的特点,所以DRAM(Dynamic Random Access Memory,DRAM)的应用更广
三管MOS组成的动态RAM基本单元电路
读出时,先对欲充电管T4置一个充电信号(在存储矩阵中,每一列共用一个T4管),使读数据线达到高电平VDD。然后由读选择线打开T2,若T1的极间电容Cg有足够多的电荷使T1导通,则因T2,T1导通接地,使读数据线降为零电平,读出0信息。所以,可以用读数据线区分存储单元中的信息是1还是0,只是与存储单元中的信息相反
即:Cg为高电平1,则T1接地,使得读数据线为低电平0,若Cg为低电平0,则T1不接地,使得读数据线为预充电的高电平1
(Cg有足够多的电荷,存的就是1,Cg没有电荷,存的就是0)
动态RAM的写入:将写信息放在写数据线上,由写选择线打开T3,这样,Cg便可以随着输入信息的不同而充放电,写入1,充电,写入0,放点
即:写选择线打开T3,Cg随着写数据线信息的不同而充放电,充电,写入1,放电,写入0
为了提高集成度,将三管动态RAM进行了简化,将T1去掉,将信息存在电容Cs上,将T2、T3合并成一个管T,便得到单管MOS动态RAM基本单元电路
读出时,字线上的高电平使T导通,如果Cs上为低电平,则数据线上无电流,读出0,如果Cs上为高电平,则数据线上有电流,读出1(一个电流被吸收了,另一个电流被憋过去了),读操作结束时,Cs的电荷已经释放完毕,所以是破坏性的读出,必须刷新
写入时,字线为高电平使得T导通,若数据线上为高电平,经T管对Cs充电,若数据线上为低电平,则Cs经T放电
动态RAM芯片举例
一个1K*1位的存储芯片,图中每一小方块代表有三个MOS管组成的三管动态RAM基本单元电路。他们排列成32*32的矩阵,每列都有一个刷新放大器用来形成再生信息和一个预充电管,芯片中有10根地址线,采用重合法选择基本单元电路
读选择线和写选择线都在行地址译码器中,行地址就是读写选择线
读数据线和写数据线在列地址译码器中,列地址就是读写数据线
读出时,先置以预充电信号,然后按行地址经译码器给出读选择信号,同时由列地址经列译码器给出列选择信号,只有在行列选择信号的共同作用下的基本单元电路才能将信息经读数据线送到读写控制电路,并从数据线D输出
写入时,在受行地址控制的行译码器给出的写选择信号下,选中芯片中的某一行,并在列地址的作用下,用列译码器的输出控制读写控制电路,只将数据线D的信息送到被选中列的写数据线上,信息就被写入到行列共同选中的基本单元电路中
单管动态RAM芯片
单管动态RAM芯片的结构示意图,是一个16K*1位的存储芯片,按理应有14根地址线,但是为了减少芯片封装的引脚数,地址线只有7根。因此,地址分两次传送,先送7位行地址保存到芯片内的行地址缓存器内,再送7位列地址保存到列地址缓存器内。芯片内有时序电路,受行地址选通RAS,列地址选通CAS,以及写允许信号WE控制
16K*1位的存储器芯片共有16K个单管MOS基本单元电路,排列成128*128的矩阵,图中的行线就是字线,列线就是数据线,128行分布在读放大器的左右两侧(左侧为0~63行,右侧为64~127行)。每根行选择线与128个MOS管的栅极相连,I/O缓冲器的一端接输出驱动器,一端接输入驱动器,可输入数据。
读出时,行列地址受RAS和CAS控制(控制分时输入),分两次分别存入行列地址缓存器。行地址经行译码后选中一行,使该行上的MOS管均导通,并分别将其电容Cs上的电荷反映到128个读放大器的一侧,读放大器的工作原理就像一个跷跷板,类似于一个触发器,其左右两侧电平相反。此外,列地址经列译码后选择一列,该列上的列地址选择管导通,就可以将读放大器右侧信号经读写线,I/O缓存器,输出至D-out端,读放大器左端的经过放大器放大后反相,原来为1,后来为0,读放大器右端的在经过放大器后,经过读写线、I/O缓冲器,与原来的信号同相
写入时,行列地址也要分别送到芯片的行列地址缓存器,经译码可选中某行列。输入信息Din通过数据输入器,经I/O缓冲器送至读/写线上,但只有被选中的列地址选择管导通,可将读写线上的信息送至该列的放大器的右侧,是放大器的右侧的信息与放大器的输入信息同相,放大器的左侧的信息与放大器的输入反相(输出的时候再次反相,所以结果正确),读放大器中的信息就可以写入到选中行的Cs中。
动态RAM时序
由于动态RAM的行列地址是分时传送的,所以分析动态RAM的时序,应注意RAS,CAS与地址的关系
1、先将RAS将行地址送入行地址缓存器,再由CAS将列地址送到列地址缓存器,因此CAS滞后于RAS的时间必须要超过其规定值
2、RAS、CAS的正负电平的宽度应大于其规定值,以保证芯片内部正常工作
3、行地址对RAS的下降沿以及列地址对CAS的下降沿应有足够的地址建立时间和地址持续时间,以确定行列地址均能准确写入芯片
===================================================================================================
读时许
读工作方式时,读工作周期是指动态RAM完成一次读所需要的最短时间T-crd。
写时序

                                                未看

===================================================================================================
动态RAM的刷新
DRAM刷新的过程实际上是现将原存信息读出,再由刷新放大器形成原信息并重新写入的再生过程
由于存储单元的访问是随机的,可能某些存储单元长期得不到访问,不进行存储器的读写操作,其存储单元内的原信息将会慢慢消失。因此,必须采用定时刷新的方法,它规定在规定的时间内,对动态RAM中的全部基本单元电路必做一次刷新,一般取2ms,这个时间称为刷新周期。
刷新是一行一行的,必须在刷新周期内,由专用的刷新电路来完成对基本单元电路的逐行刷新,才能保证动态RAM内的信息不丢失,通常有三种刷新方式。
1、集中刷新
集中刷新是在规定的一个刷新周期内,对全部存储单元集中一段时间进行刷新,此刻必须停止读写操作
1ms==1000us
集中刷新例子:对128*128矩阵的存储器芯片进行刷新时,如果存取周期为0.5us,刷新周期为2ms(4000个存取周期,刷新一次==存取一次,刷新时间一次存取的周期时间),对128行进行刷新共需要128*0.5us=64us,其余时间为2000us-64us=1936us用来读写信息。由于在这64us时间内不能进行读写操作,64us/2000us*100%=3.2%
2、分散刷新:
分散刷新是指对每行存储单元的刷新分散到每个存取周期内完成。其中,把机器的存取周期tc分成两段,前半段T-m用来读写或者维持信息,后半段用来刷新。如果读写周期为0.5us,则存取周期为1us。以128*128矩阵的存储芯片为例,刷新按行进行,但是不是连续进行,每128us就可以将存储芯片全部刷新一遍,比允许时间小的多,而且也不存在读写操作的死时间,但是存取周期长了,整个系统速度降低了
与集中刷新相比,每刷新一遍,真正用于刷新的时间是一样的
3、异步刷新
异步刷新是前两种方式的结合,既可以缩短死时间,又充分利用最大刷新间隔为2ms的特点。例如,对于存取周期为0.5us的128*128的存储芯片,可采取在2ms内对128行个刷新一遍,即每15.6us(2000us/128=15.6us)刷新一行,而每行刷新的时间仍然为0.5us。这样,刷新一行只停止一个存取周期,但对每行来说,刷新时间间隔仍为2ms,而死时间缩短为0.5us
如果将动态RAM的刷新安排在CPU对指令的译码阶段,由于这个阶段CPU不访问存储器,所以这种方案既克服了分散刷新需独占0.5us用于刷新,使存取周期加长且降低系统速度的缺点,又不会出现集中刷新的死区问题,从根本上提高了整机的工作效率
动态RAM和静态RAM的比较
动态RAM的应用比静态RAM的应用要多:
1、在同样大小的芯片中,动态RAM的集成度远高于静态RAM,如动态RAM的基本单元电路为一个MOS管,而静态RAM的基本单元电路可为4~6个MOS管
2、动态RAM行列地址按先后顺序输送,减少了芯片引脚,封装尺寸也减少
3、动态RAM的功耗比静态RAM小
4、动态RAM的价格比静态RAM的便宜,当采用同一档次的实现技术时,动态RAM的容量大约是静态RAM容量的4~8倍,静态RAM的存取周期比动态RAM的存取周期快8~16倍,但价格也贵8~16倍。
动态RAM容量在不断扩大,速度在不断提高,被广泛应用于计算机的主存
动态RAM的缺点
由于使用动态元件,所以动态RAM的速度比静态RAM低
动态RAM需要再生,所以需要配置再生电路,也需要消耗一部分功率,通常,容量不大的高速缓冲存储器大多用静态RAM实现
只读存储器(Read Only Memory,ROM) 随机存取存储器(Random Access Memory,RAM)
ROM的原始定义,一旦注入信息既不能改变,但是随着用户的需要,总希望能修改ROM中的原始信息,所以就出现了PROM,EPROM,EEPROM
PROM:可编程只读存储器
EPROM:可擦除可编程只读存储器
EEPROM:用电可擦除可编程只读存储器
对于半导体ROM而言,基本器件分为两种:MOS型和TTL型
1、掩模ROM
MOS型掩模ROM,采用重合法驱动,行、列地址线分别经行、列译码器,各有32根行列选择线。行选择线与列选择线的交叉处既可以有耦合元件MOS管,也可以没有。列选择线各控制一个列控制管,32个列控制管的输出端共连一个读放大器。当地址为全0时,第0行,第0列被选中,如果其交叉处有耦合MOS元件,因其导通而使列线输出为地电平,经读出放大器反相为高电平,输出1,当地址为32,0时,此行列的交叉处没有MOS管,经列线输出高电平,经读出放大器反相为低电平,所以,可以用行列交叉处是否有耦合元件MOS管,而区分原存1还是0。这种MOS管制成后不能改变原行列交叉处是否有MOS管,所以,用户无法改变原始状态
2、PROM 可编程只读存储器
由双极型电路和熔丝构成的基本单元电路。
在这个电路中,基极由行线控制,发射极与列线之间形成一条镍铬合金制成的熔丝,集电极接电源Vcc,熔丝断和未断可区别其所存的信息时1或者0
由基本单元电路构成的16*1位双极型镍镉熔丝式PROM芯片。用户在使用前,可按需要将信息存入行列交叉的耦合元件内。如果预存0,则置耦合元件一大电流,将熔丝烧掉。如果欲存1,则耦合处不置大电流,熔丝不断。当被选中时,熔丝断掉出将读出0,熔丝未断处将读出1。已熔断的熔丝是无法再恢复的,所以这种双极型镍镉熔丝式PROM只能实现一次编程,无法再修改
3、EPROM可擦除可编程只读存储器
EPROM是一种可擦除可编程只读存储器。它可以允许用户对所存信息作任意次的修改。
目前用的较多的EPROM是由浮动栅雪崩注入型MOS管构成,又称FAMOS型EPROM
图中所示的N型沟道浮动栅MOS电路,在漏端D加上正电压,便会形成一个浮动栅,阻止源S与漏D之间的导通,致使次MOS管处于0状态。如果对D端不加正电压,就不能形成浮动栅,此MOS管便可以正常导通,呈1状态,由此,用户可按不同需要对不同位置的MOS管D端施加正电压或者不施加电压,便制成了用户所需的ROM。一旦用户需要重新改变其状态,可以用紫外线照射,驱散浮动栅,再按需要将不同位置的MOS管D端重新置于正电压,有的出新状态的ROM,所以称之为EPROM
这类芯片的外引脚线除了地址线,数据线外,还有三个电源引出头,Vcc和Vpp。其中Vcc接+5V,Vpp平时接+5V,编程时接+25V,Vss为地。CS为片选端,读出时为低电平,编程写入时为高电平。PD/progr是功率下降/编程输入端,在读出时为低电平,当此端为高电平时,可以使EPROM功耗由525mw降至132mW,当需要编程时,此端需要加宽度为50~55ms,+5V的脉冲
EPROM的改写可以用两种方法,一种用紫外线照射,但擦除时间较长,而且不能对个别需要改写的单元进行单独擦除或者重写。另一种方法用电气方法将存储内容擦除,再重写。甚至在联机条件下,用字擦除或者局部擦写或者全部擦写,这种EPROM就是EEPROM
闪速存储器Flash Memory,又称快擦型存储器,它是在EPROM和EEPROM工艺基础上产生的一种新型的,具有性能价格比更好,可靠性更高的可擦写非易失性存储器。它既有EPROM的价格便宜,集成度高的优点,又有EEPROM电可擦除重写的特性。它具有整片擦除的特点,其擦除重写的速度快。一块1M位的闪速存储芯片的擦除,重写时间,小于5us,比一般标准的EEPROM快得多,已经具备了RAM的功能, 可与CPU直接连接。它还具有高速编程的特点,例如,采用快速脉冲编程算法对28F256闪速存储芯片每字节的编程时间仅需要100 us,此外,该器件具有存储器访问周期短,功耗低以及计算机接口简单等优点
在需要周期性的修改存储信息的应用场合,闪速存储区是一个极为理想的器件,因为它至少可以擦写/编程10000次,这足以满足用户的需要,闪速存储器Flash Memory 比较适合作为一种高密度非易失的数据采集和存储器件,在便携式计算机,工控系统,以及单片机系统中得到大量应用,近年来已将它用于微型计算机中存放输入输出驱动程序和参数。
非易失性,长期反复使用的大容量闪速存储器还可以代替硬盘,例如,在笔记本手掌型袖珍计算机中都大量采用闪速存储器做成固态硬盘代替磁盘,是计算机的平均无故障时间大大延长,功耗更低,体积更小,消除了机电式磁盘驱动器所造成的数据瓶颈

                                    存储器与CPU的连接

存储器容量的扩展
由于单片存储芯片的容量总是有限的,很难满足实际的需要,因此,必须将若干存储芯片连在一起才能组成足够容量的存储器,称为存储容量的扩展,通常有字扩展和位扩展
位扩展
位扩展是指增加存储字长,例如,2片1K*4位的芯片可组成1K*8位的存储器,例如将两片存储器组成一个字更长的存储器,地址线A0~A9,CS,WE都分别连在一起,其中的一片数据线作为高位D7~D4,另一片数据线作为低4危D3~D0.这样,便构成了一个1K*8位的存储器
16K*1位的存储芯片,存储字长为,1.16K*8,存储字长为8
字扩展
字扩展是指增加存储器字的数量。例如,用2片1K*8位的存储芯片可以组成一个2K*8位的存储器,即存储字数增加了一倍。
在此,用A10作为片选信号。由于存储芯片的片选输入端要求低电平有效,故当A10为低电平时,CS0有效,当A10为高电平时,反相后CS1有效,但是由于字长没有变,所以数据线的数量没有变(可以理解为1根线代表一个1或者0)
字、位扩展
字位扩展是指既增加存储器的数量,又增加存储字的字长。比如用8片1K*4位的芯片组成4K*8位的存储器。每两片构成一组1K*8位的存储器,4组便构成4K*8位的存储器。地址线A11,A10经片选译码器得到4个片选信号CS0,CS1,CS2,CS3,分别选择其中1K*8位的存储芯片。WE为读写控制信号。
存储器与CPU的连接时,特别要注意片与片之间的地址线,数据线和控制线的连接
1、地址线的连接
存储芯片的容量不同,其地址线数量也不同,CPU地址线数往往比存储芯片的地址线数量多。通常总是将CPU地址线的低位与存储芯片的地址线相连,CPU地址线的高位或在存储芯片的扩展时使用,或作为其他的用途,比如片选信号。例如,设CPU地址线为16位,A0~A15,可将CPU的低位地址A9~A0与存储芯片的地址A9~A0相连。
存储芯片与CPU的数据线的连接
存储芯片的数据线数量与CPU数据线数量也不相同,这时,必须对存储芯片扩位,使其数据位数与CPU的数据线数相等。
读/写命令线的连接(WE线的连接)
CPU读写命令线一般可以直接与存储芯片的读写控制端相连,通常高电平为读,低电平为写。有些CPU的读写命令线是分开的,此时CPU的读写命令线则应该与存储芯片的读允许命令线控制端和写允许命令线控制端直接相连
片选线的连接
片选线的连接时CPU与存储芯片正确工作的关键。存储器有许多存储芯片组成,哪一片被选中完全取决于该存储芯片的片选控制端CS是否能接受到来自CPU的片选有效信号。片选有效信号与CPU的访存控制信号MREQ(低电平有效)有关,因为只有当CPU要求访存时,才选择存储芯片。如果CPU访问I/O,则MERQ为高电平,表示不要求存储器工作。此外,片选有效信号还与地址有关,因为CPU的地址线往往多于存储芯片的地址线,所以那些未与存储芯片连上的高位地址必须和访存控制信号MREQ共同产生片选信号,通常要用到一些逻辑电路,如译码器及其他各种门电路,来产生片选有效信号。
合理选择存储芯片
合理选择存储芯片主要是指存储芯片的类型(RAM或者ROM)和数量的选择,通常选用ROM来存放系统程序,标准子程序和各类常数等。RAM则是为用户编程而设置的,此外,在考虑芯片数量时,要尽量使芯片连线简单方便
在实际应用CPU与存储芯片时,还会遇到两者时序的配合、速度、负载匹配等问题。
1+2+4+6=13=F
假设CPU有16根地址线,8根数据线,并用MREQ作为访存控制信号(低电平有效),用WR做为读写控制信号(低电平作为写,高电平作为读)。现有下列存储芯片:RAM和ROM、以及74138译码器以及各种门电路,画出CPU与存储器的连接图。:
1、主存地址空间分配
6000H~67FFH为系统程序区(H表示为16进制数)
6800H~6BFFH为用户程序区
2、合理选用上述存储芯片,说明各选用几片
3、详细画出存储芯片的片选逻辑图
解:第一步:将十六进制地址范围写成二进制地址码,并确定其总容量
0110 0000 0000 0000 系统程序区(2K*8位 )?????
0110 0111 1111 1111

0110 1000 0000 0000   用户程序区(1K*8位  )?????
0110 1011 1111 1111
第二步:根据地址范围的容量以及该范围在计算机系统中的作用,选择存储芯片
根据6000H~67FFH为系统程序区的范围,应选择1片2K*8位的ROM,正好满足2K*8位的系统程序区范围
根据6800H~6BFFH为用户程序区的范围,应选择2片1K*4位的RAM正好满足1K*8位的用户程序区要求
第三步:分配CPU的地址线。
将CPU的低11位地址A10~A0与2K*8位的ROM地址线相连,将CPU的低10位地址A9~A0与两片1K*4位地址线相连,剩下的高位地址与访存控制信号MREQ共同产生存储芯片的片选信号
第四步:片选信号的形成


                                        存储器的校验

在计算机运行过程中,由于种种原因致使数据在存储过程中可能出现差错,为了能及时发现错误并及时纠正错误,通常可将原数据配成汉明编码。
1、汉明码的组成
汉明码是Richard Hanming与1950年提出的,它具有一种纠错能力。
由编码纠错理论可知,任何一种编码是否具有检测能力和纠错能力,都与编码的最小距离有关。所谓编码最小距离,是指在一种编码系统中,任意两组合法代码之间的最少二进制位数的差异。
编码最小距离:在一种编码系统中,任意两组合法代码之间的最小二进制位数的差异。
根据纠错理论知:
L-1=D+C 且D>=C
其中L为编码最小距离
D为检测错误的位数
C为纠正错误的位数
检测错误的能力恒大于等于纠正错误的能力
编码最小距离L越大,则其检测错误的位数D和纠正错误的位数C越大,且检测能力恒大与等于纠正能力
例如:当编码最小距离L=3时,编码做多能检测两位,或者纠错两位,或者检测一位,纠错一位
所以,假如在信息编码中增加若干检测位,增大L,便可以提高检错D和纠错能力C。汉明码就是根据这一理论提出的具有一位纠错能力(C=1)的编码
设欲检测的二进制代码为n位,为了使其具有纠错能力,需增添k位检测位,组成n+k位的代码,为了能准确对错误定位以及指出代码没有错,新增添的检测位数k应满足2(k)>=n+k+1
由此关系可以求得不同代码长度n所需要的检测位的位数k
n=1 k==2
n=2~4 k=3
n=5~11 k=4
n=12~26 k=5
k的位数确定后,便可由他们所承担的检测任务设定他们在被传送代码中的位置和他们的取值
设n+k为代码自左至右依次编码为第1,2,3位,而将k位检测位记作Ci,分别安插在n+k为代码编号的第1,2,4,8 ……2(k-1)位上,这些检测位的设置是为了他们能分别承担第n+k位信息种不同数位所组成的小组的奇偶检测任务,使检测位和他所负责监测的小组中1的个数为基数或者偶数
具体分配如下:
C1 检测的小组中含有13579 11位
C2 检测的小组中含有2,3,6 7 10 11 位
C3 检测的小组中含有4 5 6 7 12 13 14 15 位
其余检测位的小组所包含的位也可以类推,这种小组的划分有如下特点:
每个小组g有一位且仅有一位为他所独占,即这个小组gi独占第2(i-1)位
每两个小组gi和gj共同占有一位是其他小组所没有的,即每两个小组gi和gj共同占有第2(i-1)+2(j-1)位
每三个小组gi、gj、gl共同占有第2(i-1)+2(j-1)+2(l-1)位
以此类推,便可确定每组所包含的各位
例如,欲传递信息为b4 b3 b2 b1 ,根据2(k)>=n+k+1,可求出配制成汉明吗序增添检测位k=3,且他们的位置的安排如下:
1 2 3 4 5 6 7
C1 C2 b4 C3 b3 b2 b1
如果按配偶原则来配置汉明吗,则C1应使1 3 5 7为的1 为偶数,C2应使2367为偶数,C3应该使4 5 6 7 位偶数
所以,C1应为3+5+7调整,C2应为3+6+7调整,C4应为4+5+6+7调整
设b4b3b2b1=0101
C1=b4+b3+b1=1+1+0====0
C2=b4+b2+b1====0+0+1==1
C3=b3+b2+b1====1+0+1==0
所以0101的汉明码应为0100101
汉明码的纠错过程
汉明码的检测过程实际上是对传送后的汉明吗形成新的检测位Pi,根据Pi的状态,便可直接指出错误的位置。Pi的状态是由原检测位Ci及其所在小组内1的个数确定的。如果按照配偶原则配置的汉明码,其传送后形成新的检测位Pi应为0,否则说明传送有错并且可以直接指出出错的位置。Pi的状态是由原检测位Ci及其所在的小组内1的个数确定的,如果按配偶原则配置的汉明码,其传送后形成新的检测位Pi(位置同Ci),由于Pi同Ci有对应关系(位置是对应的)所以Pi 可以由下式确定:
P1=C1+3+5+7(不同于Ci的Ci=3+5+7调整)
P2=C2+3+6+7
P4=C4+5+6+7
设已知传送的正确汉明码为0100101,如果传送后接受到的汉明码为0100101,其出错位可按下述步骤确定
令:
P1=0
P2=1
P3=1
P3P2P1==110==6,所以第六位出错,应该将第六位反相
为什么是第六位呢,因为比较C2与C3,只有6,7位是相同的,而7位的C1也相同,所以不是7,而是第六位
又如:如果收到按偶配置的汉明码为1100101,则经检测得:
P4=4+5+6+7==0
P2=2+3+6+7==0
P1=1+3+5+7==1
则P4P2P1==001,为第一位,由于第一位不是与传送的信息位,而是检测位,而检测位不参与运算,所以在一般情况下不予纠正
以上均以n==4为例,其实对任意不同n位的信息,均可按上述步骤配置汉明码,即先求出所需增加的检测位位数k,在确定Ci的位置,然后按照奇或者偶的原则来配置Ci即可,值得注意的是,按照奇和偶配置的Ci的值正好相反,而新的检测位Pi的取值与奇偶配置原则是相对应的(按偶取值,则Pi应该为0,按奇取值,则Pi应为1)
汉明码常常被用于纠错一位的场合,如果想要实现纠错两位,实用时还得再添加一位检测位
按奇偶配置原则配置某串数字的汉明码
1、n==数字个数,根据2(k)>=n+k+1求出k(需要添加的数字的个数)的值
2、列表,k为个数,分别将Ci放在1,2,4,8,16……的位置
3、Ci=对应C1,C2,C4,C8,C16等都有各自对应的字符矩阵,例如C1为1 3 5 7 9 11,那么C1就为除去1之外的对应的表中的数字相加
4、按照奇偶原则配置Ci的值,并且填入表中
5、将码提取出来
提高访存速度的措施
随着计算机应用领域的不断扩大,处理的信息越来越多,对存储器的工作速度和容量的要求也越来越高,此外,因CPU的功能不断增强,I/O设备数量不断增多,致使主存的存取速度已成为计算机系统的瓶颈。可见,提高访存速度也称为迫不及待的任务。为了解决此问题,除了寻找高速元件和才用层次结构以外,调整主存的结构也可以提高访存速度。
1、单体多字系统
由于程序和数据在存储体内是连续存放的,因此CPU访存取出的信息也是连续的,如果可以在一个存取周期内,从同一地址取出四条指令,然后在逐条将指令送至CPU执行,即每隔1/4存取周期,主存向CPU送一条指令,这样显然增大了存储器的带宽,提高了单体存储器的工作速度。(带宽:单位时间内存储器存取的信息量,如多少位/多少秒)
访问体制速度有限,但是却在一个地址里面放多个数据,而不是一个地址里面放一个数据
2、多体并行系统
多体并行系统就是采用多体模块组成的存储器,每个模块具有相同的容量和存取速度,各个模块都有各自独立的地址寄存器MAR,数据寄存器MDR,地址译码器,驱动电路,读/写控制电路,他们可以并行的工作,又可以交叉的工作
并行工作即同时访问N个模块,同时启动,同时读出,完全并行地工作(不过,同时读出的N个字在总线上需要分时传送)。图为适合于并行工作的高位交叉编址的多体存储器结构示意图,图中的程序因为按体内地址顺序存放(一个体存满后,在存入下一个体),所以有顺序存储之称。高位地址可以表示体号,地位地址为体内地址。按照这种遍址方式,只要合理调动,使不同的请求源同时访问不同的体,就可以实现并行工作。当一个体正与CPU交换信息时,另一个体可同时与外部设备进行直接存储器访问,实现两个体并行工作。这种遍址方式由于一个体内的地址是连续的,有利于存储器的扩充。
图是按低位交叉遍址的多体模块多体模块结构示意图。由于程序连续存放在相邻体中,故又有交叉存储之称。显然低位地址用来表示体号,高位地址为体内地址。这种遍址方式又称为模M遍址(其中M等于模块数),表列出了模交叉编织的地址号。一般模块树取2的方幂,使硬件电路比较简单,有的机器为了减少存储器冲突,采用质数个模块,我国银河机的M为31,其硬件实现比较复杂。
以上为高位交叉编址和低位交叉编址的多体模块结构
多体模块结构的存储器采用交叉遍址后,可以在不改变每个模块存取周期的前提下,提高存储器的带宽。
图示意了CPU交叉访问4个存储体的时间关系,负脉冲为启动每个体的工作信号。虽然对每个体而言,存取周期均未缩短,但由于CPU交叉访问各体,使4个存储体的读写过程重叠进行,最终在一个存取周期的时间内,存储器实际上向CPU提供了4个存储字。如果每个模块存储字长为32位,则在一个存取周期内(除第一个存取周期外),存储器向CPU提供了32*4=128位二进制代码,大大增加了存储器的带宽。
单体访存周期(单体访存周期:单个存储器的访问周期)
4个存储体交叉访问的时间关系
假设每个体的存储字长和数据总线的宽度一致,并假设低位交叉的存储器模块数为n,存取周期为T,总线传输周期为t,那么当采用流水线方式(如上图的4个存储器交叉访问的时间关系)存取时,应满足T=n*t。为了保证启动某体后,经nt时间再次启动该体时,它的上次存取操作已经完成,要求低位交叉存储器的模块数大于或者等于n,以4体低位交叉编址的存储器为例,采用流水线方式存取的示意图如下:
可见,
对于采用低位交叉的存储器,连续读取n个字所需的时间t为
t1=T+(n-1)*t 低位交叉,又叫交叉存储
如果采用高位交叉编址,则连续读取n个字所需的时间t2为
t2=n*T 高位交叉,又叫顺序存储
所以,采用低位交叉的存储器的读取速度较快。

设有四个模块组成的四体存储器结构,每个体的存储字长为32位,存取周期为200ns。假设数据总线宽度为32位,总线传输周期为50ns,试求顺序存储和交叉存储的存储器带宽。
顺序存储读出的信息量:32*4=128
顺序存储的存取时间:4*200ns=800ns
顺序存储的带宽:128/800ns=16*10(7)bps
交叉存储读出的信息量:32*4=128
交叉存储的存取时间:200ns+(4-1)*50ns=350ns
交叉存储的带宽:128/350ns=37*10(7)bps

多体模块(主存)不仅要与CPU交换信息,还要与辅存、I/O设备、乃至I/O设备处理机交换信息。因此,在某一时刻,决定主存究竟与哪个部件交换信息必须由存储器控制部件(简称存控)来承担。存控具有合理安排个部件请求访问的顺序以及控制主存读写操作的功能。
存控的基本结构框图:包括排队器、控制线路、节拍发生器、标记触发器等组成。
排队器
由于要求访存的请求源很多,而且访问都是随机的,这样有可能在同一时刻出现多个请求源请求访问同一个存储体。为了防止两个以上的请求源同时占用同一个存储体,并防止将代码错送到另一个请求源等错误发生,在存控内部需要设置一个排队器,由他来确定请求源的优先级别。
其优先级别的确定方法:1、对于容易发生代码丢失的请求源,应列为最高优先级,例如,外设信息最易丢失,故它的级别最高。
2、对于严重影响CPU工作的请求源,给予次高优先级,否则会导致CPU工作失常
例如:写数的优先级高于读数(若运算部件不能尽快送出已算出的结果,会严重影响后续指令的执行,因此,发生这种情况时,写数的优先级比读数、读指令都要高)。如果没有操作数参与运算,取出再多的指令也无济于事,所以读数的优先级又高于读指令。
存控标记触发器Cm
它用来接收排队器的输出信号,一旦响应某请求源的请求,Cm被置为1,以便启动节拍发生器工作
节拍发生器
用来产生固定节拍,与机器主脉冲同步,使控制线路按一定的时序发出信号
控制线路
由它将排队器给出的信号与节拍发生器提供的节拍信号配合,向存储器各部件发出各种控制信号,用以实现对总线及完成存储器的读写操作,并向请求源发出回答信号,表示存储器已响应了请求等。
高性能存储芯片
采用高性能存储芯片也是提高主存速度措施的措施之一。DRAM集成度高,价格便宜,广泛应用于主存。其发展速度很快,几乎每隔三年存储芯片就翻两番。为了进一步提高DRAM的性能,人们开发了许多对基本DRAM结构的增强功能,出现了SDRAM,RDRAM和CDRAM。
SDRAM(Synchronous DRAM,同步DRAM)
SDRAM与常用的异步DRAM不同,它与处理器的数据交换同步与系统的时钟信号,并且以处理器-存储总线的最高速度运行,而不需要插入等待状态。典型的DRAM中,处理器(CPU)将地址和控制信号送至存储器(RAM)后,需经过一段时间的延时,供DRAM执行各种内部操作(如输入地址,读出数据等),才能将数据从存储器中读出或者将数据写入到存储器中。此时,如果CPU的速度与DRAM匹配,那么这个延时不会影响CPU的工作速度。如果CPU的速度更高,那么在这段时间内,CPU只能等待,降低了CPU的执行速度。而SDRAM能在系统时钟的控制下进行数据的读出和写入,CPU给出的地址和控制信号,会被SDRAM锁存,直到到指定的时钟周期数后再响应。此时CPU可以执行其他任务,无需等待。例如,系统的时钟周期为10ns,存储器接到地址后需要的50ns读出数据。对于异步工作的DRAM,CPU要等待50ns获得数据,而对于同步工作的SDRAM而言,CPU只需要将地址放入到锁存器中,在存储器进行读操作期间去完成其他操作。当CPU计时到5个时钟周期后,便可获得从存储器读出的数据。
SDRAM还支持猝发性访问模式,即CPU发出一个地址就可以连续访问一个数据块(通常为32字节)。SDRAM芯片内还可以包含多个存储体,这些体可以轮流工作,提高访问速度。现在又出现了双数据速率的SDRAM,即DDR-SDRAM(Double Data Rate SDRAM,DDR-SDRAM),他是SDRAM的增强型版本,可以每周期两次向处理器发出数据。
RDRAM(Rambus DRAM)
由Rambus 开发的RDRAM采用专门的DRAM和高性能的芯片接口取代现有的存储器接口。它主要解决存储器带宽的问题,通过高速总线获得存储器请求(包括操作时所需的地址、操作类型和字节数),总线最多可寻址320块RDRAM,传输率可达1.6GBps。它不像传统的DRAM采用RAS(行地址选通)、CAS(列地址选通)和WE(读写信号)信号来控制,而是采用异步的面向块的传输协议传送地址信息和数据信息。一个RDRAM芯片就像一个存储系统,通过一种新的互联电路RamLink,将各个RDRAM芯片连接成一个环,数据通信在主存控制器的控制下进行,数据交换以包为单位。
带Cache的DRAM(CDRAM,带Cache的DRAM)
带Cache的DRAM是在通常的DRAM芯片内有集成了一个小的SRAM(静态RAM,Static RAM),又称增强型的DRAM(EDRAM)。
由图中可见,地址引脚线只有11根(A10~A0),而1M*4位的存储芯片对应20位地址,此20位地址需分时送入到芯片内部。首先在行选通信号的作用下,高11位地址经地址引脚线输入,分别保存在行地址锁存器中和最后读出行地址锁存器(最后读出行地址锁存器,Cache SRAM)中,在DRAM的2048行中,此指定行地址的全部数据512*4位被读到SRAM中暂存。然后在列选通信号作用下,低9位地址经地址引脚线输入,保存到列地址锁存器中。在读命令有效时,512个4位组的SRAM中某一4位组被这个列地址选中,经数据线D3~D0从芯片输出
行输入->行地址锁存器/最后读出行地址锁存器->列选通,列输入->列地址锁存器->读命令->选中列地址->数据线输出
下一次读取时,输入的行地址立即与最后读出行锁存器的内容进行11位比较。如果比较相符,说明该数据在SRAM中,在由输出列地址选择某一4位组输出;如果比较不相符,这需要驱动DRAM阵列更新SRAM和最后读出行地址锁存器中的内容,并送出指定的4位组。
由此可见,以SRAM保存一行内容的方法,当对连续高11位地址相同(属于同一行地址)的数据进行读取时,只需要连续变动9位列地址就可使相应的4位组连续读出,这被称为猝发式读取,对成块读取十分有利。
从图中可以看出,芯片内的数据输出路径(由SRAM到I/O)与数据输入路径(由I/O到读出放大器和列写选择)是分开的,这就允许在写操作完成的同时启动启动统一行的读操作。此外,在SRAM读出期间可同时对DRAM阵列进行刷新操作
高速缓冲存储器
在多体并行存储系统中,由于I/O设备向主存请求的级别高于CPU访存,这就出现了CPU等待I/O设备访存的现象,致使CPU空等一段时间,甚至可能等待几个主存周期,从而降低了CPU的工作效率。为了避免CPU于I/O设备争抢访存,可在CPU与主存之间加一级缓存,这样,主存可将CPU需要的信息提前送至缓存,一旦主存在与I/O设备交换时,CPU可以直接在缓存中读取需要的信息,不必空等而影响效率。
从另一角度看,主存速度的提供始终跟不上CPU的发展。据统计,CPU的速度平均每年改进60%,而组成主存的动态RAM速度平均每年只改进7%,结果是CPU和动态RAM之间的速度裂隙每年增大50%,例如,100MHz的Pentium处理器平均每10ns就执行一条执行,而动态RAM的典型访问时间为60ns~120ns,这也希望由高速缓存Cache来解决主存与CPU速度的不匹配问题
Cache的出现,使CPU可以不直接访问主存,而与高速Cache交换信息。那么,这是否可能呢?通过大量典型程序的分析,发现CPU从主存取指令或取数据,在一定时间内,只是对主存局部地址区域的访问。这是由于指令和数据在主存内部是连续存放的,并且有些指令和数据往往会多次调用(如子程序、循环程序、和一些常数),即指令和数据在主存的地址分布不是随机的,而是相对的簇聚,使得CPU在执行程序时,访存具有相对的局部性,这就称为程序访问的局部性原理。根据这一原理,很容易设想,只要将CPU近期要用到的程序和数据提起从主存送到Cache,那么就可以做到CPU在一定时间内只访问Cache。一般Cache采用高速的SRAM(高速静态地址寄存器)制作,其价格比主存贵,但是因为其容量远小于主存,因此能很好的解决速度和成本的矛盾。
Cache的工作原理
图为Cache-主存 存储空间的基本结构示意图
主存由2(n)个可编址的字组成,每个字有唯一的n位地址。为了与Cache映射,将主存与缓存都分成若干块,每块内又包含若干个字,并使他们的块大小相同(即块内的字数相同)。这就将主存的地址分成两段:高m位表示主存的块地址,低b位表示块内地址,则2(m)=M表示主存的块数。同样,缓存的地址也分成两段:高c位表示缓存的块号,低b位表示块内地址,则2(c)=C表示缓存块数,且C远小于M。主存与缓存地址中都用b表示其块内字数,即B=2(b)反映了块的大小,称B为块长。
任意时刻都有一些主存块数在缓存块中。CPU欲存取主存某字时,有两种可能:一种是所需要的字已经在缓存中,即可以直接访问Cache(CPU与Cache之间通常一次传送一个字);另一种是所需的字不在Cache内,此时需将该字所在的主存整个字块一次调入Cache中(Cache与主存之间是字块传送)。如果主存块已经掉入缓存块,则称该主存块与缓存块建立了对应的关系。
上述第一种情况位CPU访问Cache命中,第二种情况为CPU访问Cache不命中。由于缓存的块数C远小于主存的块数M,因此,一个缓存块不能唯一的,永久的只对应一个主存块,所以每个缓存块需要设一个标记(参见图)用来表示当前存放的是哪里一主存块,该标记的内容相当于主存块的编号。CPU读信息时,要将主存地址的高m位(或者m位中的一部分)与缓存块的标记进行比较,以判断所读的信息是否已在缓存中。
Cache的容量与块长是影响Cache效率的重要因素,通常将命中率来衡量Cache的效率。命中率是指CPU要访问的信息已在Cache内的比率。
在一个程序执行期间,设Nc为访问Cache的总命中次数,Nm为访问主存的总次数,则命中率h为h=Nc/(Nc+Nm)
命中率=访问缓存次数/总访问速度
设tc为命中的Cache访问时间,tm为未命中是的主存访问时间,1-h表示未命中率,则Cache-主存系统的平均访问时间ta为Ta=Tc*h+(1-h)*Tm
平均访问时间=缓存访问时间缓存的命中率+主存的访问时间主存的命中率(也就是平均访问时间==缓存和主存的访问时间的加权和)
当然,以较小的硬件代价使Cache-主存系统的平均访问时间Ta越接近Tc(访问缓存的时间)越好。用e表示访问效率,则有e=Tc/Ta*100%=Tc/(h*Tc)+(1-h)*Tm)*100% 效率==单次访问缓存的时间/平均访问时间
可见,为提高访问效率,命中率h越接近1越好。
假设CPU执行某段程序时,共访问Cache命中2000次,访问主存50次。已知Cahe的存取周期为50ns,主存的存取周期为200ns。求Cache-主存系统的命中率、效率和平均访问时间。
1、Cache的命中率为 2000/(2000+50)
2、效率=50ns/(50*0.97+200*0.03)=91.7%
3、平均访问时间:单次缓存访问时间缓存命中率+单词主存访问时间主存命中率==平均访问时间
50ns*0.97+200ns*0.03=54.5ns
一般而言,Cache容量越大,其CPU的命中率就越高。当然容量也没必要太大,太大会增加成本,而且当Cache容量达到一定值时,命中率已经不因容量的增大而有明显的提高。因此,Cache容量是总成本价与命中率的折中值。例如,80386的主存最大容量为4GB,与其配套的Cache容量为16KB或者32KB,其命中率可达95%以上
块长与命中率之间的关系更为复杂的,它取决于个程序的局部特性。当块由小到大增长时,起初会因局部性原理使命中率有所提高。
局部性原理:在被访问的字附近,近期也可能被访问,因此,增大块长,可将更多有用字存入缓存,提高命中率。可是,倘若继续增大块长,命中率很可能下降,这是因为所装入缓存的有用数据反而少于被替换掉的有用数据。由于块长的增大,导致缓存中的块数的减少,而新装入的块要覆盖旧块,很可能出现少数块刚刚装入就被覆盖,因此命中率反而下降。再者,块增大后,追加上的字距离已被访问的字更远,所以近期被访问的可能性更小。块长的最优值是很难确定的,一般每块取4至8个可编址单位(字或字节)较好,也可取一个主存周期所能调出主存的信息长度。例如,CRAY-1的主存是16体交叉,每个体为单字宽,其存放指令的Cache块长为16个字。又如,IBM 370/168机的主存是4体交叉,每个体宽为64位(8个字节),其Cache块长为32个字节。(4*8)
Cache的基本结构
Cache的基本结构原理框图如图:
它主要由Cache存储体、主存-Cache地址映射变换机构、Cache替换机构几大模块组成。
1、Cache存储体
Cache存储体以块为单位与主存交换信息,为加速Cache与主存之间的调动,主存大多采用多体结构,且Cache访存(访问主存)的优先级最高。
2、地址映射变换机构
地址映射变化机构是将CPU送来的主存地址转换为Cache地址。由于主存和Cache的块大小相同,块内地址都是相对于块的起始地址的偏移量(即低位地址相同),因此地址变换主要是主存的块号(高位地址)与Cache块号之间的转换。而地址变换又与主存地址以什么样的函数关系映射到Cache中(称为地址映射)有关。
如果转化后的Cache块已经与CPU欲访问的主存块建立了对应关系,即已经命中,则CPU可以直接访问Cache存储体。如果如果转化后的Cache块与CPU欲访存的主存块未建立对应关系,即不命中,此刻CPU在访问主存时,不仅将该字从主存中取出,同时将他所在的主存块一并调入Cache内,也是由于Cache原来处于未被装满的状态。反之,倘若Cache原来已被装满,即已无法将主存块调入Cache时,就得采用替换策略。
3、替换机构
当Cache内容已满,无法接受来自主存块的信息时,就由Cache内的替换机构按照一定的替换算法来确定从Cache内移出那个块返回主存,而把新的主存块调入Cache。有关替换算法见后几节
4、Cache的读写操作
读操作的过程可用流程图来表示:判断是不是命中,每命中的话就从主存中取,如果没有命中的话同时判断Cache是不是已经满,慢的话,执行替换算法,不满的话,将主存中的字块也调入Cache
读操作的过程:当CPU发出主存地址后,首先判断该存储字是否在Cache中,若命中,直接访问Cache,若未命中,一方面要访问主存,将该字传送给CPU,与此同时,要将该字所在的主存块装入Cache,如果此时Cache已经装满,就要执行替换算法,腾出空位才能将新的主存块调入
写操作比较复杂,因为对Cache块内写入的信息,必须与被映射的主存块内的信息完全一致。当程序运行过程中需对某个单元进行写操作时,会出现如何使Cache与主存内容保持一致的问题。目前采用以下几种方法:
1、写直达法(Write-through),又称存直达法(Store-through),即写操作时数据既写入Cache又写入主存。它能随时保证主存和Cache的数据始终一致,但是增加了访存次数。
2、写回法(Write-back),又称拷回法(Copy-back),即写操作时只把数据写入Cache而不写入主存,但当Cache数据被替换出去时才写回主存。可见写回法Cache中的数据会与主存中的不一致。为了识别Cache中的数据是否与主存一致,Cache中的每一块要增设一个标志位,该位有两个状态:“清”(表示未修改过,和主存一致)和“浊”(表示修改过,与主存不一致)。在Cache替换时,“清”的Cache块不必写回主存,因为此时主存中相应块的内容与Cache的块是一致的。在写Cache时,要将该标志位设置为“浊”,替换时此Cache块要写回主存,同时要使标志位为“清”。
写回法和写直达法各有特色。在写直达法中,由于Cache中的数据始终和主存保持一致,在读操作Cache失效时,只需选择一个替换的块(主存块)调入Cache,被替换的块(Cache块)不必写回内存。可见读操作不涉及对主存的写操作。(在Cache中没有读到需要的信息,只需要将主存中的一个字块调入Cache,因此而被替换的块不必写回内存,所以写直达方法的读操作,不论是否在Cache中读到了信息,都不涉及到对主存的写操作),因此这种方法更新策略比较容易实现。但是在写操作时,既要写入Cache又要写入主存,因此写直达法的“写”操作时间就是访问主存的时间。
在写回法中,写操作时只写入Cache,所以,“写”操作时间就是访问Cache的时间,因此速度快。这种方法对主存的写操作只发生在块替换时,而且对Cache中的一个数据块的多吃些操作只需一次写入内存,因此可减少主存的写操作次数。但是在读操作Cache失效时要发生数据替换,引起被替换的块写回主存的操作,增加了Cache的复杂性。
以上的写回法????????????
对于有多个处理器的系统,各自都有独立的Cache,且都共享互存,这样又出现了新问题,即当一个缓存中的数据被修改时,不仅主存中相对应的字无效,连同其他缓存中相对应的字也无效(当然恰好其他缓存也有相应的字)。即使通过写直达法改变了主存的相应字,而其他缓存中数据依然无效。显然,解决系统中Cache一致性的问题很重要。当今研究Cache一致性的问题非常活跃
4、Cache的改进
Cache刚出现时,典型系统只有一个缓存,近年来普遍采用多个Cache。其含义有两方面:一是增加Cache的级数,二是将统一的Cache变成分立的Cache。
1、单一缓存和两级缓存
所谓单一缓存,是指在CPU和主存之间只设一个缓存。随着集成电路逻辑密度的提高,又把这个缓存直接与CPU制作在同一个芯片内,故又称为片内缓存(片载缓存)。片内缓存可以提高外部总线的利用率,因为将Cache制作在芯片内,CPU直接访问Cache不必占用芯片外的总线(系统总线),而且片内缓存与CPU之间的数据通路很短,大大提高了存取速度,外部总线又可更多的支持I/O设备和主存之间的信息传输,增强了系统的整体效率。例如,Intel 80486 CPU芯片内就含有8KB的片的缓存。
可是,由于片内缓存在芯片内,其容量不可能很大,这就可能导致CPU欲访问的信息不在缓存内,势必通过系统总线访问主存,访问次数多了,整机速度就会下降。如果在主存与片内缓存之间再加一级缓存,称为片外缓存,由比主存动态RAM和ROM存取速度更快的静态RAM组成。而且不使用系统总线作为片外缓存与CPU之间的传送路径,使用一个独立的数据路径,以减轻系统总线的负担。那么,从片外缓存调入片内缓存的速度就能提高,而CPU占用系统总线的时间也就大大下降,征集工作速度有明显的改进。这种由片外缓存和片内缓存组成的Cache称为两级缓存,并称为片内缓存为第一季,片外缓存为第二级。随着芯片集成度的提高,已有一些处理器将第二级Cache结合到处理器芯片上,改善了性能。
2、统一缓存和分立缓存
统一缓存是指指令和数据都存放在同一缓存内的Cache;分立缓存是指指令和数据分别存放在两个缓存中,一个称为指令Cache,另一个称为数据Cache。
两种缓存的选用主要考虑如下两个因素。
其一,与主存的结构有关,如果计算机的主存是统一的(指令、数据存储在统一主存内),则相应的Cache采用统一缓存;如果主存采用指令数据分开的方案,则相应的Cache采用分立缓存。
其二,它与机器对指令执行的控制方式有关。当采用超前控制或者流水线控制方式时,一般都采用分立缓存。
所谓超前控制,是指在当前指令执行过程尚未结束时就提前将下一条准备执行的指令取出,称为超前取指或者指令预取。
所谓流水线控制,实质上是多条指令同时执行,又可视为指令流水。当然,要实现同时执行多条指令,机器的的指令译码电路和功能部件也需要多个。
超前控制和流水线控制特别强调指令的预取和指令的并行执行,因此,这类机器必须将指令Cache和数据Cache分开,否则可能出现取指和执行过程对统一缓存的争用。如果此刻采用统一缓存,则在执行部件向缓存发出取数请求时,一旦指令预取机构也向缓存发出取指请求,那么统一缓存只能先满足执行部件要求,将数据送到执行部件,而让取指请求暂时等待,显然达不到预取指令的目的,从而影响指令流水的实现。可见,这类机器将两种缓存分立尤为重要。
Pentium 4处理器框图
图中有两级共3个Cache,其中一级Cache分为L1指令Cache和L1数据Cache,另外还有一个二级L2Cache。
L2的Cache的位数=L1指令Cache的位数+L1数据Cache的位数
powerPC 620处理器:分为两个指令Cache和数据Cache,两个Cache连接在总线上,两个Cache的位数和等于总线的位数。
图中也有两个Cache。数据Cache通过存/取单元支持整数和浮点操作;指令Cache为只读存储器(指令Cache为某种类型的ROM,数据Cache为某种类型的RAM),指令Cache支持指令单元。执行部件是3个可并行操作的整数ALU和一个浮点运算部件(有独立的寄存器和乘、加、除部件)。
Cache-主存之间的地址映射
由主存地址映射到Cache地址称为地址映射。地址映射方式很多,有直接映射(固定的映射关系),全相联映射(灵活性很大的映射关系)、组相联映射(上述两种映射的折中)
图中为直接映射方式中主存MM与缓存Cache中字块的关系
图中每个主存块只与一个缓存块相对应,映射关系为i=j mod C 或者i=j mod 2(C)
其中,i为缓存块号,j为主存块号,C为缓存块数。映射结果表明每个缓存块对应若干个主存块。
这种方式的优点是实现简单,只需利用主存地址的某些位直接判断,即可确定所需字块是否在缓存中。由图可知,主存地址高m位被分成两部分:低c位是指Cache的字块地址,高t位(t=m-c)是指主存字块标记,他被记录在建立了对应关系的缓存块的标记位中。当缓存接到CPU送来的主存地址后,主需根据中间c位字段(假设位00001)找到Cache字块1,然后根据字块1的标记是否与主存地址的高t位相符来判断,若符合且有效位为1(有效位用来识别Cache存储块中的数据是否有效,因为有时Cache中的数据是无效的,例如,在初始时刻Cache已经是空的,其中的内容是无意义的),表示该Cache块已和主存的某块建立了对应关系(即已命中),则可根据b位地址从Cache中取得信息;若不符合,或有效位为0(即不命中),则从主存读入新的字块来代替旧的字块,同时将信息送往CPU,并修改Cache标记(Cache本身应该和很多主存中的块相对应,但是某一时刻Cache中的内容本身只能对应于一个,所以Cache中的标记位就显示了Cache里面到底是哪个,如果主存中说他和Cache中的字块1相对应,再查找Cache字块1,如果Cache字块1里面存的确实是主存中的字块,那么就是命中,就可以根据b位字块内的地址来从Cache中读取信息);如果Cache字块标记中的主存字块地址不是此主存,或者Cache字块的有效位位0//表示数据无效,不论数据是什么,则表示没有命中,Cache从主存中读入该主存字块的信息来代替旧的字块,并且同时,将主存字块中的信息送往CPU,如果原来有效位为0,还得将有效位信息变为1;
2、全相联映射
全相联映射允许主存中每一个字块映射到Cache中的任意一块位置上,如图,这种映射方式可以从已被占满的Cache中替换出任意旧字块。显然,这种方式灵活,命中率也更高,缩小了块冲突率。与直接映射相比,它的主存字块标记从位为增加到t+c位(因为主存字块可以对应于任意Cache中的字块,所以主存字块中需要存储所有Cache字块的信息,但是也是t+c位),这就是Cache标记的位素增多,而且访问Cache时主存字块标记需要和Cache的全部“标记”位进行比较,才能判断出所访问主存地址的内容是否已经在Cache中,这种比较通常采用“按内容寻址“的相联存储器来完成。
全相联映射中,主存地址的低位b为字块内地址,主存地址的高位m=t+c为主存字块标记
总之,全相联映射的方式所需要的逻辑电路很多,成本较高,实际的Cache还要采用各种措施来减少地址的比较次数
3、组相联映射
组相联映射是对直接映射和全相联映射的一种折中,它把Cache分成Q组,每组有R块,并有以下关系:
i=j mod Q
其中,i为缓存的组号,j为主存的块号,Q为Cache被分成的组数。某一主存块按模Q(//模数就是指个数) 将其映射到缓存的第i组内。
如图:
组相联映射的主存地址各段与直接映射相比,还是有区别的。图中Cache字块地址字段由C位(C位==2(C)个)变为组地址字段q位(q位==2(q)个)
且q==c-r,其中2(c)表示Cache的总块数,2(q)表示Cache的分组个数,2(r)表示组内包含的块数。主存字块标记字段由t位变为s=t+r位。为了便于理解,假设c=5,q=4,则r=c-q=1.其实际含义为:Cache共有2(c)=32个字块。共分为2(q)==16组,组内有2块的组相联映射又称为二路组相联。
根据上述假设条件,组相联映射的含义是:主存的某一字块可以按模16映射到Cache某组的任意字块中。即主存的第0,16,32……字块可以映射到Cache第0组2个字块中的任意字块;主存的第15,31,47可以映射到Cache第15组中的任意字块(主存中的第0、1、2、3……15分别与Cache的第0,1,2……15对应,主存的第16……30分别于Cache的第0……15对应。也就是说,先一一对应,然后让从主存中开始新的一轮,再次一一对应。显然,主存的第j块会映射到Cache的第i组内,两者之间一一对应,属直接映射关系;另一方面,主存中的第j块可以映射到Cache中第i组内的任何一块,这又体现出全联映射关系。可见,组相联映射的性能及其复杂性介于直接映射和全相联映射两者之间,当r=0时是直接映射方式,当r=c时是全联映射方式。例:假设主存容量位512KB,Cache容量为4KB,每个字块为16个字,每个字32位。
在主存中,有8192块,Cache中,有64块
在直接映射方式下,由于Cache有64块,所以主存中第5,64+5,2*64+5块对应于Cache的第5块。
在????????????????????
120页第一个例题没有弄明白
主存地址字段中各段的位数:也就是问的是主存地址分段情况:主存字块标记多少位,缓存字块标记多少位,字块内地址多少位

假设主存容量为512K*16位,Cache容量为4096*16位,块长为4个16位的字,访存地址为字地址。
1、在直接映射方式下,设计主存的地址格式

?????????????????????

假设Cache的工作速度是主存的5倍,且Cache被访问命中的概率为95%,则采用Cache后,存储器性能提高多少?
设主存的存取周期为5t,Cache的存取周期为t,则平均存取周期为5t*5%+t*95%=1.2t 5t/1.2t=3.17倍
设某机主存容量为16MB,Cache的容量为8KB。每字块有8个字,每个字32位。设计一个四路路相联映射的Cache组织
1、画出主存地址字段中各段的位数:主存地址分段情况
2、设Cache初态为空,CPU依次从主存第0,1,2,……99号单元读出100个字。主存一次读出一个字,并重复此次序读10次,问命中率是多少?
3、若

字块,字,位,什么算是命中???????????????

替换策略:当新的主存块需要调入Cache并且Cache的可用空间又被占满时,需要替换掉Cache的数据,这就产生了替换策略(算法)问题。
在直接映射的Cache中,由于某个主存块只与一个Cache字块有映射关系,因此替换策略很简单。而在组相联和全相联映射的Cache中,主存块可以写入Cache中的若干位置,这就有一个选择替换掉那一个Cache字块的问题,即所谓的替换算法问题。理想的替换方法是把未来很少用到的或者很久才用到的数据块替换出来,但实际上很难做到。常用的算法有先进先出算法,近期最少使用算法和随机法。
1、先进先出算法(First-In-First-Out,FIFO)算法
FIFO算法选择最早调入Cache的字块进行替换,它不需要记录个字块的使用情况,比较容易实现,开销小,但是没有根据访存的局部性原理,故不能提高Cache的命中率。因为最早调入的信息可能以后还要用到,或者经常用到,如循环程序;
2、近期最少使用(Least Recently Used,LRU近期最少使用)算法
LRU算法比较好的利用访存局部性原理,替换出近期用的最少的字块。它需要随时记录Cache中个字块的使用情况,以便确定哪个字块是近期最少使用的字块。它实际是一种推测的方法,比较复杂,一般采用简化的方法,只记录每个块最近一次使用的时间。LRU算法的平均命中率比FIFO的高。
3、随机法
随机法是随机的确定被替换的块,比较简单,可采用一个随机数产生器产生一个随机的被替换的块,但他也没有根据访存的局部性原理,故不能提高Cache的命中率
总而言之:替换策略有先进先出法,近期最少使用法,随机法
辅助存储器
概述:辅助存储器的特点:辅助存储器作为主存的后援设备又称为外部存储器,简称外存,它与主存一起组成了存储器系统的主存-辅存层次。与主存相比,辅存具有容量大,速度慢,价格低,可脱机保存信息等特点,属于“非易失性”存储器。而主存具有速度快,成本高,容量小等特点,而且大多由半导体芯片构成,所存信息无法永久保存,属于“易失性”存储器。
目前,广泛用于计算机系统的辅助存储器有硬磁盘,软磁盘,磁带,光盘等,前三种属于磁表面存储器。
磁表面存储器是在不同形状(如盘状,带状)的载体上涂有磁性材料层,工作时,靠载磁体高速运动,由磁头在磁层上进行读/写操作,信息被记录在磁层上,这些信息的轨迹就是磁道。磁盘的磁道是一个个同心圆,如图,磁带的磁道是沿磁带长度方向的直线,如图。
磁盘中的磁道,磁带中的磁道
2、磁表面存储器的主要技术指标
1、记录密度
记录密度通常是指单位长度内所存储的二进制信息量。磁盘存储器用道密度和位密度表示;磁带存储器则用位密度表示。磁盘沿半径方向单位长度的磁道数为道密度,单位是tpi(Track Per Inch,tpi道每英寸)或(tpm Track Per M 道每毫米)。为了避免干扰,磁道和磁道之间需保持一定距离,相邻两条磁道中心线之间的距离称为道距,因此道密度Dt等于道距P的倒数,即:
Dt=1/P;
单位长度磁道能记录二进制信息的位数,称为位密度或线密度,单位是(bpi,位密度/线密度,Bits Per Inch,位每英寸)或bpm(位每毫米)。
磁带存储器主要用位密度来衡量,常用的磁带有800bpi、1600bpi、6250bpi等。
对于磁盘,位密度Db可按下式计算:
Db=Ft/(3.14*Dmin) 即:最内圈的位密度=每道总位数/最内圈磁道周长
其中,Ft为每道总位数,Dmin为同心圆中的最小直径
在磁盘各磁道上所记录的信息量是相同的,而位密度不同,一般泛指磁盘位密度时,是指最内圈磁道上的位密度(最大位密度)
2、存储容量
存储容量是指外存所能存储的二进制信息总数量,一般以位或者字节为单位。以磁盘存储器为例,存储容量可按下列计算:
C=n*k*s
其中,C为存储总容量,n为存放信息的盘面数,k为每个盘面的磁道数,s为每条磁道上记录的二进制代码数。
磁盘有格式化容量和非格式化容量两个指标。非格式化容量是磁盘表面可以利用的磁化单元总数。格式化容量是指按照某种特定的记录格式所能存储的信息总量,即用户可以使用的容量,它一般为非格式化容量的60%~70%。
3、平均寻址时间
由存取方式分类可知,磁盘采取直接存取方式,寻址时间分为两个部分,其一是磁头寻找目标磁道的找道时间Ts,其二是找到磁道后,磁头等待欲读写的磁道区旋转到磁头下方所需要的等待时间Tw。由于从最外圈磁道找到最里圈磁道和寻找相邻磁道所需要的时间是不等的,而且磁头等待不同区段所花的时间也不等,因此,取其平均值。称为平均寻址时间Ta,它是平均找到时间Tsa和平均等待时间Twa之和:
Ta=Tsa+Twa=(Tsmax+Tsmin)/2+(Twmax+Twmin)/2
平均寻址时间是磁盘存储器的一个重要指标。硬磁盘的平均寻址时间比软磁盘的平均寻址时间短,所以硬磁盘存储器比软磁盘存储器速度快。
磁带存储器采用顺序存取方式,磁头不懂,磁带移动,不需要寻找磁道,但要考虑磁头寻找记录区段的等待时间,所以磁带寻址时间是指磁带空转到磁头应访问的记录区段所在位置的时间。
数据传输率
数据传输率Dr是指单位时间内磁表面存储器向主机传送数据的位数或者字节数,它与记录密度Db和记录介质的运动速度V有关:Dr=Db*V
数据传输率=单位长度记录的信息量*介质单位时间运动的长度
此外,辅存和主机的接口逻辑应有足够块的传送速度,用来完成接受/发送信息,以便主机与辅存之间正确无误的传送
5、误码率
误码率是衡量磁表面存储器出错概率的参数,它等于从辅存读出时,出错信息位数和读出信息的总位数之比。为了减少出错率,磁表面存储器通常采用循环冗余码来发现并纠正错误
磁记录原理和记录方式
1、磁记录原理
磁表面存储器通过磁头和记录介质的相对运动来完成读/写操作
写入过程如图:写入时,记录介质在磁头下方均匀通过,根据写入代码的要求,对写入线圈输入一定方向和大小的电流,使磁头导磁体磁化,产生一定方向和强度的磁场。由于磁头与磁层表面间距非常小,磁力线直接穿透磁层表面,将对应磁头下方的微小区域磁化(简称磁化单元)。可以根据写入驱动电流的不同方向,使磁层表面被磁化的级性不同,以区别记录0或1.
读出时,记录介质在磁头下方匀速通过,磁头相对于一个个被读出的磁化单元做切割磁力线的运动,从而在磁头读线圈中产生感应电势e,且e=-n*(dQ/dt),n为读出线圈匝数,其方向正好和磁通的变化方向相反。由于原来磁化单元的剩磁通Q的方向不同,感应电势方向也不同,便可读出1或者0两种不同信息。
2、磁表面存储器的记录方式
磁记录方式又称为编码方式,它是按某种规律将一串二进制信息变换成磁表面相应的磁化状态。磁记录方式对记录密度和可靠性都有很大影响,常用的记录方式有六种。
图中波形既代表了磁头线圈中的写入电流波形,也代表磁层相应位置所记录的理想的磁通变化状态
1、归零制(RZ,Return-to-Zero)
归零制记录1时,通以正向脉冲电流,记录0时,通以负向脉冲电流。这样使其在磁表面形成两个不同机性的磁饱和状态,分别表示1和0.由于两位信息之间驱动电流归零,故称为归零制记录方式。这种方式在写入信息时很难覆盖原来的磁化区域,所以为了重新写入信息,在写入前,必须先抹去原存信息。这种记录方式原理简单,实施方便,但是由于两个脉冲之间有一段间隔没有电流,相应的该段磁介质未被磁化,即该段空白,故记录密度不高,目前很少使用
2、不归零制(NRZ,Not-Return-to-Zero)
不归零制记录信息时,磁头线圈始终有驱动电流,不是正向,就是反向,不存在无电流状态。这样,磁表面层不是正向被磁化,就是反向被磁化。当连续记录1或0时,其写电流方向不变,只有当相邻两信息代码不同时,写电流才改变方向,故称为“见变就翻”得不归零制
3、见1就翻的不归零制(NRZ1,Not Return to Zero 1,见1就翻的不归零制)
见1就翻的不归零在记录信息时,磁头线圈也始终有电流。但只有在记录1时电流改变方向,使磁层磁化方向发生翻转;记录0时,电流方向保持不变,使磁层的磁化方向也维持原来的状态,因此称为“见1就翻”得不归零制
4、调相制(PM,Phrase Modulation,调相制)
调相制又称为相位编码(Phrase Encoding,PE 调相制/相位编码),PM调相制==PE相位编码。其特点是记录1或0的相位相反。如:记录0时,写电流由负变正,记录1时,写电流由正变负(也可以反向定义,只要相反即可),而且电流变化出现在一位信息记录时间的中间时刻,它以相位差位180的磁化翻转方向表示1和0.因此,但连续记录相同信息时,在每两个相同信息的交界处,电流方向都要变化一次;若相邻信息不同,这两个信息为的交界处电流方向维持不变。调相制在磁带存储器中应用的较多。
5、调频制(FM,Frequency Modulation,调频制)
调频制的记录规则是:以驱动电流变化的频率不同来区别记录1还是0。当记录0时,在一位信息的记录时间内电流保持不变;当记录1时,在一位信息记录时间的中间时刻,使电流改变一次方向。而且无论记录0还是1,在相邻信息的交界处,线圈电流均变化一次。因此,写1时,在位单元的起始和中间位置都有磁通翻转;在写0时,仅在位单元起始位置有翻转。显然,记录1的磁翻转频率为记录0的两倍,故又称倍频制。调频制记录方式被广泛应用在硬磁盘和软磁盘中。
6、改进型调频制(MFM,Modified Frequency Modulation,改进型调频制)
这种记录方式基本上同调频制,即记录0时,在位记录时间内电流不变;记录1时,在位记录时间的中间时刻电流发生一次变化。两者不同之处在于,改进型调频制只有当连续记录两个或者两个以上的0时,才在美味的起始处改变一次电流,不必在每个位起始处都改变电流方向。由于这一特点,在写入同样数据序列时,MFM比FM磁翻转次数少,在相同长度的磁层上可记录的信息量将会增加,从而提高了磁记录的密度。FM制记录一位二进制代码最多是两次磁翻转,MFM制最多只要一次翻转,记录密度提高了一倍,故又称为倍密度记录方式。倍密度软磁盘即采用MFM记录方式
此外还有一种二次改进的调频制(M2FM,二次改进的调频制),它是在MFM基础上改进的,其记录规则是:但连续记录0时,仅在第1个位起始处改变电流方向,以后的为交界处电流方向不变。
3、评价记录方式的主要指标
评价一种记录方式的优劣标准主要反映在编码效率和自同步能力等方面。
1、编码效率
编码效率是指位密度与磁化翻转密度的比值(总数有多少位/磁化翻转了多少位),可用记录一位信息的最大磁化翻转次数来表示。例如,FM,PM记录方式中,记录一位信息最大磁化翻转次数为2,因此编码效率为50%;而MFM,NRZ,NRZ1三种记录方式的编码效率为100%,因为他们记录一位信息磁化翻转最多一次。
2、自同步能力
自同步能力是指从单个磁道读出的脉冲序列中所提取同步时钟脉冲的难易程度。从磁表面存储器的读出可知,为了将数据信息分离出来,必须有时钟基准信号,称为同步信号。同步信号可以从专门设置用来记录同步信号的磁道中取得,这种方法称为外同步,如NRZ1制。图画出了NRZ1制驱动电流、记录磁通、感应电势、同步脉冲、读出代码等几种波形的理想对应关系(图中未反映磁通变化的滞后现象)。读出时将读线圈获得的感应信号放大(负波还要方向)、整形,这样,对于每个记录的1都会得到一个正脉冲,再将它们与同步脉冲进行“与”逻辑判断,即可读出代码波形。
对于高密度的记录系统,可直接从磁盘中提取同步信号,这种方法称为自同步
自同步能力可用最小磁化翻转间隔和最大磁化翻转间隔之比R来衡量。R越大,自同步能力也越强。例如,NRZ和NRZ1方式在连续记录0时,磁层都不发生磁化翻转,而NRZ方式在连续记录1时,磁层也不发生磁化旋转,因此,NRZ和NRZ1都没有自同步能力(最小磁化翻转间隔为1,最大磁化翻转间隔为无穷大,所以R==0,也就是没有自同步能力)。而PM(调相制)、FM(调频制)MFM(改进后的调频制)记录方式均有自同步能力(最大磁化间隔不是无限大的,总是有限大的,即R有限,不会趋向于无穷小)FM记录方式的最大磁化翻转间隔是T(T是一位信息的记录时间),最小磁化翻转间隔是T/2。所以,R=0.5
影像记录方式的优劣因素还有很多,如读分辨力,信息独立性(即某一位信息读出时出现误码而不影响后续其他信息位的正确性)、频带宽度、抗干扰能力以及实现电路的复杂性等。
除上述介绍的6种记录方式外,还有成组编码记录方式,如GCR编码,它广泛用于磁带存储器,游程长度受限码(RLL码)是近年发展起来的用于高密度磁盘上的一种记录方式。
硬磁盘存储器
硬磁盘存储器是计算机系统中最主要的外存设备。第一个商品化的硬磁盘是由美国IBM公司于1956年研制的。50多年来,无论在结构还是在性能方面,硬盘存储器都有了很大的发展和改进
1、硬磁盘存储器类型
硬磁盘存储器的盘片是由硬质铝合金材料制成的,其表面涂有一层可被磁化的硬磁特性材料.按磁头的工作方式可分为固定磁头 磁盘存储器和移动磁头 磁盘存储器;按磁盘是否具有可换性又可分为可换盘磁盘存储器和固定盘磁盘存储器。
固定磁头 磁盘存储器,其磁头位置固定不动,磁盘上的每一个磁道都对应一个磁头,如图,盘片也不可以更换。其特点是省去了磁头沿盘片径向运动所需寻找磁道的时间,存取速度快,只要磁头进入工作状态即可以进行读写操作
移动磁头的磁盘存储器在存取数据时,磁头在盘面上径向运动,这类存储器可以由一个盘片组成,也可以由多个盘片装在一个同心主轴上,每个记录面各有一个磁头
移动磁头多盘片磁盘:图中含有6个盘片,除了上下两外侧为保护面外,共有10个盘面可作为记录面,并对应10个磁头,有的磁盘组最外两侧盘面可以作为记录面,并分别与一个磁头对应。所有这些磁头连成一体,固定在一个支架上可以移动,任何时刻各磁头都位于距圆心相等距离的磁道上,这组磁道称为一个柱面。目前,这类结构的硬磁盘存储器应用最为广泛。最典型的就是温切斯特磁盘。
可换盘磁盘存储器是指盘片可以脱机保存。这种磁盘可以在互为兼容的磁盘存储器之间交换数据,便于扩大存储容量。盘片可以只换单片,如在4片盒式磁盘存储器中,3片磁盘固定,有一片可以更换。也可以将整个磁盘组(如6片、11片、12片换下)。
固定盘磁盘存储器是指磁盘不能从驱动器中取下,更换时需要把整个头盘(//磁头磁盘组合体)组合体一起更换。
温切斯特磁盘是一种可移动磁头固定盘片的磁盘存储器,简称温盘。它是目前用的最广,最具有代表性的硬磁盘存储器。它与1973年首先应用在IBM 3340
硬磁盘存储器中。其特点是采用密封组合方式,将磁头、盘片、驱动部件以及读写电路等制成一个不能随意拆卸的整体,称为头盘组合体。因此,它的防尘性能好,可靠性高,对环境要求不高。过去有些普通的硬磁盘存储器要求在超净环境中工作,只能用在特殊条件的大中型计算机系统中。
硬磁盘存储器的结构
硬磁盘存储器有磁盘驱动器、磁盘控制器和盘片三大部分组成
磁盘驱动器:磁盘驱动器是主机外的一个独立装置,又称磁盘机。大型磁盘驱动器要占用一个或者几个机柜,温盘只是一个比砖还小的小盒子。驱动器主要包括主轴、定位驱动及数据控制等3部分。图中示意了磁盘驱动器的主轴系统和定位驱动系统。图中主轴上装有6片磁盘,主轴受传动机构控制,可使磁盘组作高速旋转运动。磁盘租共有10个有效记录面,没一个面对应一个磁头。10个磁头分装在读写臂上,连成一体,固定在小车上,犹如一把梳子。在音圈电机带动下,小车可以平行移动,带着磁头作盘的径向运动,以便找到目标磁道。磁头还具备浮动的特性,即当盘面作高速旋转时,依靠盘面形成高速的气流将磁头微微托起,使磁头和盘面不直接接触形成微小的气隙。
整个驱动定位系统是一个带有速度和位置反馈的闭环调节自控系统。由位置检测电路测得磁头的即时位置,并与磁盘控制器送来的目标磁道位置进行比较,找出位差;再根据磁头即时平移的速度求出磁头正确运动的方向和速度,经放大送回给线性音圈电机,以改变小车的移动方向和速度,由此直到找到目标磁道为止。
数据控制不分主要完成数据转换以及读写控制操作。在写操作时,首先接受头选址信号,用以确定道地址和扇段地址。再根据写命令和写数据选定的磁记录方式,并将其转化为按一定变化规律的驱动电流注入磁头的写线圈中。按前述的工作原理,便可以将数据写入指定的磁道上。读操作时,首先也要接收头选址信号,然后通过读放大器以及译码电路将数据脉冲分离出来。
磁盘控制器
磁盘控制器通常制作成一块电路板,插在主机总线插槽中。其作用是接受由主机发来的命令,将它转化成磁盘驱动器的控制命令,实现主机和驱动器之间的数据格式转换和数据传送,并控制驱动器的读写。可见,磁盘控制器是主机和磁盘控制器之间的接口。其内部又包含两个接口,一个是对主机的接口,称为系统级接口,它通过系统总线和主机交换信息;另一个是对硬盘设备的接口,称为设备级接口,又称为设备控制器,他接受主机的命令以控制设备的各种操作。一个磁盘控制器可以控制一台或者几台磁盘驱动器。图中是磁盘控制器接口的示意图。
磁盘控制器与主机之间的界面比较清晰,只与主机的系统总线打交道,即数据的发送或接收都是通过总线来完成的。磁盘存储器属于快速外部设备,它与主机交换信息通常采用直接存储器访问(DMA,Direct Memory Access)的控制方式,图中所示的SCSI(Small Computer System Interface)标准接口即可与系统总线相联。
磁盘控制器与主机之间的界面比较清晰,只与主机的系统总线打交道,即数据的发送或接收都是通过总线来完成的。磁盘存储器属于快速外部设备,它与主机交换信息通常采用直接存储器访问(DMA,Direct Memory Access)的控制方式,图中所示的SCSI标准接口即可与系统总线相连。
磁盘控制器与驱动器的界面
可设在图中的A处,则驱动器只完成读写和放大,如图ST506接口就属于这种类型。
如果将界面设在B处,则将数据分离电路和编码、解码电路划入驱动器内,磁盘控制器仅完成串/并转化,格式控制和DMA控制等逻辑功能,如SMD和ESDI等接口就属于这种类型。
如果界面设在C处,这磁盘控制器的功能全部转入到设备之中,主机和设备之间便可采用标准通用接口,如SCSI接口。现在的发展趋势是后两种,增强了设备的功能,使设备相对独立,图中为采用了SCSI接口的系统结构示意图,其接口信号线如图所示。
3、盘片
盘片是存储信息的载体,随着计算机系统的不断小型化,硬盘也在朝着小体积和大容量的方向发展。十几年来商品化的硬盘盘面的记录密度以增长达10倍以上
硬盘的主要指标:硬盘直径,驱动器容量,数据传输率/MBps,平均存取时间/ms
3、硬磁盘存储器的发展动向
1、半导体盘
半导体盘是用半导体材料制成的盘,它既没有盘,也没有其他运动部件,他是以半导体芯片为核心,加上接口电路和其他控制电路,在功能上模拟硬盘,即按硬盘的工作方式来存取数据。如EEPROM(用电可擦除可编程只读存储器),它可以用电信号改写,断电是原存信息不丢失,因此它就可以做成半导体盘,其存取速度比硬盘快得多,大约在0.1ms一下。
Flash Memory是在EPROM和EEPROM基础上产生的一种新型的、具有性能价格比和可靠性更高的可擦写、非易失性的存储器。大容量的Flash Memory既能长期反复使用,又不丢失信息,因此它可以用来代替磁盘。
2、提高磁盘记录密度
为了提高磁盘记录密度,采用以下技术
1、采用高密度记录磁头
2、采用先进的信息处理技术,克服由高密度带来的读出信号减弱和信号干扰比下降的缺点。
3、降低磁头浮动高度和采用高性能磁头浮动块
4、改进磁头伺服跟踪技术
5、采用高性能介质和基板的磁盘
6、改进编码方式
3、提高磁盘的数据传输率和缩短平均存取时间
为实现磁盘高速化,可以采用以下措施
1、提高主轴转速,从过去的2400rmp、3600rmp提高到4400rmp等
2、采用超高速缓冲存储器Cache芯片作为读写操作的控制电路。
4、采用磁盘阵列RAID(RAID,Redundant Array of Independant Disks,磁盘阵列)
尽管磁盘存储器的速度有了很大的提高,但与处理器CPU相比,差距仍然很大。这种状态使磁盘构成了计算机系统功能提高的瓶颈。于是又出现了磁盘阵列RAID(Redundant Array of Disks)。它的基本原理是将并行处理技术引入到磁盘系统。使用多台小型温盘构成同步化的磁盘阵列,将数据展开分散在多台温盘上,而这些盘又可以像一台盘那样操作,使数据传输时间为单台盘的1/n(n为并行驱动器个数)。有关RAID内容,可在计算机体系结构中学习。
硬磁盘的磁道记录格式
盘面的信息串行排列在磁道上,以字节为单位,若干相关的字节组成记录块,一系列的记录快有构成一个记录、一批相关的记录构成了文件。为了便于寻址,数据块在盘面上的分布遵循一定规律,称为磁道记录格式(数据块在盘面上的分布规律)。
常见的有定长记录格式和不定长记录格式
1、定长记录格式
一个具有n个盘片的磁盘组,可将其n个面上同一半径的磁道看成一个圆柱面,这些磁道存储的信息成为柱面信息。
在移动磁头组合盘中,磁头定位机构一次定位的磁道集合正好是一个柱面。信息的交换通常在圆柱面上进行,柱面个数正好等于磁道数,故柱面号就是磁道号,而磁头号就是盘面号。
盘面又分为若干扇区、每条磁道被分割成若干扇段、数据在盘片上的布局如图。扇段是扇盘寻址的最小单位。在定长记录格式中,当台号确定后,扇盘寻址定位首先确定柱面,再选定磁头,最后找到扇段。因此寻址用的磁盘地址应由台号、磁道号、盘面号、扇段号等字段组成,可将扇段号用扇区号代替。
CDC 等磁盘都采用定长记录格式。ISOT-1370型磁盘的磁道记录格式如图。
ISOT盘共有12个扇区,每个扇段内只记录一个数据块,每个扇段开始有扇区标志盘读出一个扇标脉冲,标志一个扇段的开始,0扇区标志处再增加一个磁道标志,指明是起始扇区。
每个扇段的头部是空白段,起到隧道清楚的作用。序标段以某种约定代码作为数据块的引导。数据段可写入512B,如果不满512B,该扇段余下部分为空白,如果超过512B,则可占用几个扇段。
检验字段写一个校验字,常用循环冗余码(CRC)检验,尾空白段为全0或空白区以示数据结束
这种记录格式简单,可按磁道号(柱面号),盘面号、扇段号进行直接寻址,但是记录区的利用率不高
例题:
假设磁盘存储器共有6个盘片,嘴歪两侧盘片不能记录,每面有204条磁道,每条磁道有12条扇段,每个扇段有512B,磁盘机以7200rpm速度旋转,平均定位时间为8ms。
1、计算该磁盘存储器的存储容量
10*204*12*512B
2、计算该磁盘存储器的平均寻址时间
7200/60=120rps
(1/120)*0.5=4ms
平均寻址时间==平均寻道时间(平均定位时间)+平均等待时间(找到正确扇区的时间)
平均寻址时间=8ms+4.16ms=12.16ms
例:一个磁盘组共有11片,每片有203道,数据传输率为983040Bps,磁盘组转速为3600rpm。假设每个记录块有1024B,且系统可挂16台这样的磁盘机,计算该磁盘存储器的总容量并设计磁盘地址格式
每一磁道容量=数据传输率/磁盘组转速=983040Bps/60rps=16384B
扇区数=16384B/1024B=16
总容量=11*2*203*16384B
地址格式:台号=4,磁道号=8,盘面号=5(因为有20个盘面,而不是11个盘面),扇段号=4
对于一个由6个盘面组成的磁盘存储器,若某个文件长度超过一个磁道,应该将它记录在一个存储面上还是同一个柱面上?
应该记录在同一个柱面上,不需要重现找道,寻址时间减少,读写数据速度快
2、不定长记录格式
在实践应用中,信息常以文件的形式存入磁盘。若文件长度不是定长记录块的整数倍时,往往造成记录块的浪费。不定长记录格式可根据需要来决定记录快的长度。例如,IBM2311 2314等磁盘驱动器采用不定长记录格式,图中为2311盘不定长度磁道记录格式的示意图
磁道格式:ID(起始标志),G1 间隙 ,HA 磁道地址块 ,R0 磁道标识块 ,R1 数据块 ,
数据块:标志F,柱面号C,磁头号C,块号 R,键长 KL,数据长度 DL,校验 C,数据D,校验 C
ID是起始标志,又称索引标志,表示磁道的起点。
间隙G1是一段空白区,占36~72个字节长度,其作用是是连续的磁道分成不同的区,以利于磁盘控制器与磁盘机之间的同步和定位。
磁道地址块HA又成为标示地址或者专用地址,占7个字节,用来表明4部分的状况:磁道是否完好,柱面逻辑地址号,磁头逻辑地址号,校验码
间隙G2占18~38个字节长度。
R0是磁道标识块,用来说明本磁道的状况,不作为用户数据区。
间隙G3包含一个以专用字符标示的地址标志,指明后面都为数据记录快。
数据记录块R1由计数区、关键字区、数据区三段组成,这三段都有循环校验码
一般要求一个记录限于一个磁道内,若设有专门的磁道溢出手段,则允许继续记录到同一柱面的另一磁道内
数据区长度不定,实际长度由计数区的DL(数据长度,Data Length,DL)给定,通常为1~64KB。
从主存调出数据时,常常带有奇偶校验位,在写入磁盘时,则由磁盘控制器删去奇偶校验位,并在数据区结束时加上循环校验位。
当从磁盘读出数据时,需进行一次校验操作,并恢复原来的奇偶校验位。
可见,在磁盘数据区中,数据是串行的,字节之间没有间隙,字节后面没有校验位
软磁盘存储器
软磁盘存储器与硬磁盘存储器的存储原理和记录方式是相同的,但是在结构上有较大的差别:
硬盘转速高,存取速度快;
软盘转速低,存取速度慢。
硬盘有固定磁头,固定盘,盘组等结构。
软盘都是活动头,可换盘片结构
硬盘是靠浮动磁头读写,磁头不接触磁片
软盘磁头直接接触盘片进行读写
硬盘系统级硬盘片价格比较贵,大部分盘片不能互换,
软盘价格便宜,盘片保存方便,使用灵活,具有互换性。
硬盘对环境要求苛刻,要求采用超净措施
软盘对环境的要求不苛刻
所以软盘在微小计算机系统中获得了广泛的应用
与硬磁盘相同,软磁盘盘面也分为若干个扇区,每条磁道上的扇段数是相同的,记录同样多的信息。
靠里的磁道的位密度较高,软盘区段的划分一般采用软分段,由软件写上的标志来实现

软盘按照记录密度分,分为单密度和双密度两种。前者使用FM记录方式,后者采用MFM记录方式
综上所述,软盘分为单面单密度,双面单密度,单面双密度,双面双密度
软磁盘的记录格式
软磁盘存储器采用软分段格式,软分段格式有IBM格式和非IBM格式两种。IBM格式被国际标准化组织(ISO)确定为国际标准。下面以IBM 3740软盘为例,介绍其软分段格式。
软分段的磁道由首部、扇区部和尾部3部分组成。
当磁盘驱动器检查到索引孔时,标志磁道的起始位已经找到。
首部是一段空隙,是为了避免由于不同软盘驱动器的索引检测器和磁头机械尺寸误差引起读写错误而设置的。
尾部是依次设置在首部和各扇区后剩下的间隙,起到转速变化缓冲的作用

                                        磁带存储器

磁带存储器也属于磁表面存储器
磁带的记录格式:
磁带上的信息可以以文件形式存储,也可以按数据块存储。磁带可以在数据块之间启停,进行数据传输。按数据块存储的磁带互换性更好。
磁带机和主机之间进行信息传送的最小单位是数据块或者称为记录块(Block),记录块的长度可以是固定的,也可以是变化的,有操作系统决定。
记录块之间有空白间隙,作为磁头停靠的地方,并保证磁带机停止或者启动有足够的惯性缓冲。
记录块尾部有几行特殊的标记,表示数据块结束,接着便是校验区。
磁带机的数据格式:BOT 起始间隔 数据块标志 数据 记录尾标志 校验码 块间间隙
磁带信息的校验属于多重校验,由奇偶校验、循环冗余校验和纵向冗余校验共同完成。以9道磁道磁带为例,横向可以并排记录9位二进制信息(成为一行),其中8位是数据磁道,存储一个字节,另一位是这一字节的奇偶校验位,称为横向奇偶校验码。
在每一个数据块内,沿纵向(走带方向)每一磁道还配有CRC校验码。
对每一磁道上的信息(包括CRC在内),又有一个纵向奇偶校验码。
纠错的原理使用循环冗余吗的规律和专门线路,指出出错的磁道(CRC可发现一个磁道上的多个错误码),然后用横向校验码检测每一行是否有错,纵横交错后就可指出哪行哪道有错,如果有错就立即纠正
循环冗余校验码
磁表面存储器由于磁介质表面的缺陷,尘埃等原因,致使出现多个错误码。循环冗余校验(Cycle Redundant Check,CRC循环冗余校验)码可以发现并纠正信息在存储或传送过程中连续出现的多位错误代码。因此,CRC校验码在磁介质存储器和计算机之间通信方面得到广泛应用。
CRC码是基于模2运算而建立编码规律的校验码。
模2运算的特点是不考虑进位和借位的运算,其规律如下:
1、模2加和模2减的结果是相等的(不进位的加减)
0+1=1 0-1=1 0+0=0 1+0=1 1+1=0
2、模2乘是按模2和求部分积之和:正常的乘法,1的话相同,0的话全为0,相加的时候用模2加
3、模2除是按模2减求部分余数。每求一位商应使部分余数减少1位。上商的原则是:当部分余数的首位为1,上商1,当部分余数的首位为0,上商0,此时的余数就是最后余数
1、CRC码的编码方法
设待编的信息码组为Dn-1Dn-2 D0 共n位,他可用多项式M(x)表示:
M(x)=Dn-1*Xn-1+Dn-2*Xn-2+ D1*X1+D0*X0
将信息码组左移k位,得到M(x)*Xk,即成n+k位信息码
空出的K位用来拼接k位校验位
G(x)为k+1位,或者说,G(x)-1==k位的值
CRC码就是用多项式M(x)*Xk除以生成多项式G(x)
设所得余数为R(x),商为Q(x),则有
M(x)*Xk=Q(x)*G(x)+R(x)
M(x)*X(k)/G(x)==Q(x)+R(x)/G(x)
CRC码为M(x)*X(k)+R(x)
将余数拼接在左移了k位后的信息为后面,就构成了这个有效信息的CRC码,
这个CRC码用多项式表示为M(x)*Xk+R(x)=Q(x)*G(x)+R(x)+R(X)=Q(x)*G(x)
因此,所得的CRC码是一个可被生成多项式G(x)除尽的数码
如果CRC码在传输过程中不出错,其余数必为0;
如果传输过程中出错,则余数不为0,再由该余数指出哪一位出错,就可以纠正
例:已知有效信息位1100,试用生成多项式G(x)=1011将其编成CRC码。
G(x)为4位 k+1=4 即k=3
有效信息M(x)=1100=X3+X2
G(x)=1011=X3+X1+1
将有效信息左移3位 再被G(x)模2除
M(x)=1100 000
1100000/1011=1110+010/1011
所以CRC码为1100010
总的信息位为7位,有效信息位为4位,所以上述1100010码(CRC码)又称(7,4)码,这里的(7,4)码就是码制,还可以有(7,3)码和(7,6)码等
2、CRC码的译码和纠错
将收到的循环校验码用约定的生成多项式G(x)去除,如果不错,则余数应该为0,如果某一位出错,则余数不为0.不同的出错位其余数也不同
表中为对应G(x)=1011的出错模式
对应G(x)=1011的(7,4)循环的出错模式
可以证明,更换不同的待检测码,余数和出错位的对应关系不变,只与码制和生成多项式有关。
表中给出的关系只对应G(x)=1011的(7,4)码,对于其他码制或者选用其它的生成多项式,出错模式将发生变化
如果循环码有一位出错,被G(x)模2除将得到一个不为0的余数。如果对余数补上0继续除下去,将发现各次所得的余数将按出错模式表循环。
例如,第7位出错,其余数为001,补上0继续除下去,将发现各次所得余数反复循环,这就是循环码的名字的由来。
这个特点正好用来纠错,即当出现不为0的余数后,一方面对余数补0继续做模2除,另一方面将被检测的校验码循环左移?????
由表可知,当出现余数为101是,出错伟业一道N1位置。
可通过异或门将其纠正后在下一次移位时送回到N7。这样当已满一个循环【对(7,4)码共移动7次】后,将得到一个纠正后的码字
值得指出的是
并不是任何一个k+1位的多项式都可以作为生成多项式,从简撮合纠错要求出发,生成多项式应满足以下要求
1、任何一位发生错误,都应是余数不为0
2、不同位发生错误应是余数不同
3、对余数继续作模2除,应该是余数循环
达到上述要求的数学关系比较复杂

光盘存储器

                                            第五章 输入输出系统

接口模块阶段
这个阶段CPU和I/O设备可以并行的工作,但是在主机与I/O设备交换信息时,CPU要中断现行程序,即CPU和I/O设备之间还不能做到绝对的并行工作
为了进一步提高CPU的工作效率,又出现了直接存储器存取(Direct Memory Access ,DMA)技术,其特点是I/O设备与主存之间直接交换信息,使CPU在I/O设备与主存交换信息时能继续完成自身的工作,所以资源利用率得到了进一步的提高
具有通道的阶段
在大众计算机系统中,采用I/O通道的方式进行数据交换
通道是用来负责管理I/O设备以及实现主存与I/O设备之间交换信息的部件,可以视为一种具有特殊功能的处理器。通道有专用的通道指令,能独立的执行用通道指令所编写的输入输出程序,但是不是一个完全独立的处理器。他依据CPU的I/O指令进行启动,停止或者改变工作状态,是从属于CPU的一个专用处理器。依赖通道管理的I/O设备在与主机交换信息时,CPU不直接参与管理,故提高了CPU资源的利用率
具有I/O处理机的阶段
I/O处理机又称为外围处理机,他基本独立于主机工作,即可完成I/O通道要完成的I/O控制,又可完成码制的变换,格式处理,数据块检索,纠错等操作。具有I/O处理机的输入输出
输入输出系统的组成
输入输出系统由I/O软件和I/O硬件两部分组成
1、I/O软件
输入输出系统软件的主要任务:
1、将用户编写的程序或者数据输入主机
2、将运算结果输送给用户
3、实现输入输出系统与主机工作的协调
在采用接口模块方式是,应用机器指令系统中的I/O指令以及系统软件中的管理程序就可以使I/O设备与主机协调工作
在采用通道管理方式时,除了机器指令中的I/O指令外,还必须有通道指令以及相应的操作系统,及时都采用操作系统,不同机器的操作系统的复杂程度差异也很大
1、I/O指令:I/O指令是机器指令的一类,其指令格式与其他指令集有相似之处,又有所不同。
I/O指令可以和其他机器指令的子长相等,但他还应该能反映CPU与I/O设备交换信息的各种特点:
他必须反映出对多台I/O设备的选择,
对不同设备应做哪些具体操作
I/O指令的一般格式:操作码+命令码+设备码
操作码字段可作为I/O指令与其他指令(如访存指令、算逻指令、控制指令等)的判别代码;
命令码体现I/O设备的具体操作
设备码是多台I/O设备的选择码
I/O指令的命令码一般可表述以下几种情况
将数据从I/O设备输入主机:例如,将某台设备接口电路的数据缓冲寄存器中的数据读入CPU的某个寄存器(如累加器ACC)
将数据从主机输送到I/O设备。例如:将CPU的某个寄存器内的数据输送到设备接口电路的缓冲寄存器中
状态测试:利用命令码检测各个I/O设备所处的状态是忙“busy”还是准备就绪“Ready”。以便决定下一步是否可进入主机与I/O设备交换信息的阶段
形成某些(具体的)操作命令。不同的I/O设备与主机在交换信息时,需要完成不同的操作。例如:磁带机需要正转反转,磁盘驱动器需要读扇区写上去找磁道扫描记录标识符。
磁盘机和磁带机都是存储系统的一部分,但是本章也将他们看成I/O设备
2、通道指令
通道指令是对具有通道的I/O系统专门设置的命令,作用如下:
指明参与传送的数据在主存中的首地址
指明需要传送的字节数
指明所传送数据的末地址
知名所选设备的设备码
知名完成某种操作的命令码
这类指令的为数一般比较长,如IBM 370机的通道指令为64位
通道指令又称为通道控制字(Channel Control Word,CCW),他是通道用于执行I/O操作的指令,可以由管理程序存放在主存的任何地方,有通道从主存中取出并执行。通道程序即由通道指令组成,他完成某种外围设备与主存之间传送信息的操作。例如,将磁带纪录区的部分内容送到指定的主存缓冲区内。
通道指令是通道自身的指令,用来执行I/O操作,如读,写,磁带走带及磁盘找道等。而I/O指令是CPU指令系统中的一部分,是CPU用来控制输入输出操作的指令,由CPU译码后执行。在具有通道结构的计算机中,I/O指令不实现I/O数据传送,主要完成启停I/O设备,查询通道和I/O设备的状态及控制通道所做的其他操作。
具有通道指令的计算机,一旦CPU执行了启动I/O设备的指令,就有通道来代替CPU对I/O设备的管理
2、I/O硬件
输入输出系统的硬件组成是多种多样的,在带有接口的I/O系统中,一般包括接口模块以及I/O设备两大部分。图中的接口电路实际上包括许多数据传送通路和有关数据,还包括控制信号通路及相应的逻辑电路
图中为具有通道的I/O系统的示意图
一个通道可以和一个以上的设备控制器相连,一个设备控制器又可以控制若干台同一类型的设备。
IBM 360 可以有8个通道,一个通道可以连8各设备控制器,一个控制器可以连8个设备,也就是一个主机可以连384个设备,但是由于设备利用率和通道的频带影响,主机带不动这么多设备
I/O设备与主机的联系方式:
1、I/O设备编址方式
通常将I/O设备码看成地址码,对I/O地址码的编址可以采用两种方式:统一编址或者不统一编址。统一编址就是将I/O地址看作是存储器的一部分。例如,在64K存储器中,划出8K地址作为I/O设备的地址,凡是在这8K范围内的访问,就是对I/O设备的访问,所用的指令与访存指令相似。
不统一编址就是指I/O地址和存储器的地址是分开的,所有对I/O设备的访问必须用专用的I/O指令。
统一编址占用了存储空间,减少了主存容量,但不需要专用的I/O指令。
不统一编址由于不占用主存空间,故不影响主存容量,但是需要设I/O专用指令
当设备通过接口与主机相连时,CPU可以通过接口地址来访问I/O设备
设备寻址
由于每台设备都赋予一个设备号,因此,当要启动某一设备时,可由I/O指令的设备码字段直接指出该设备的设备号。通过接口电路中的设备选择电路,便可以选中要交换信息的设备
传送方式
并行传送:在同一瞬间,n为信息可以同时从CPU输送至I/O设备,或由I/O设备输入到CPU,这种传送方式称为并行传送。其特点是传送速度较快,但是要求的数据线多。例如:16位信息并行传送需要16根数据线
串行传送:在同一瞬间只传送一位信息,这种传送方式称为串行传送。其特点是传送速度较慢,但他只需要一根数据线和一根地址线。当I/O设备与主机距离较远时,采用串行传送更合理,例如远距离数据通信
不同的传送方式需要不同的接口电路,如并行传送接口、串行传送接口、串并联用的传送接口
联络方式
不论是串行传送还是并行传送,I/O设备与主机之间必须相互了解彼此当时所处的状态,如是否可以传送,传送是否已经结束等。这就是I/O设备与主机之间的联络问题。按I/O设备工作的速度不同,可分为三中联络方式
1、立即响应方式
对于一些工作速度十分缓慢的I/O设备,如指示灯的亮与灭、开关的通货这段,当他们与CPU发生联系时,通常都以使其处于某种等待状态,因此,只要CPU的I/O指令一到,他们便立即响应,这种设备无需特殊联络信号,称为立即响应方式
2、异步工作采用应答信号联络
当I/O设备与主机工作速度不匹配时,通常采用异步工作方式。这种方式在交换信息前,I/O设备与CPU各自完成自身的任务,一旦出现联络信号,彼此才准备交换信息。
图中为并行传送的异步联络方式
CPU《=》I/O接口–Ready–><—-Strobe–I/O设备
当CPU将数据输送到I/O接口,接口立即向I/O设备发出一个Ready信号,告诉I/O设备可以从接口内取出数据。I/O接口设备受到Ready信号后,通常便立即从接口中取出数据,接着便向接口回发一个Strobe信号,并让接口转告CPU,接口中的数据已经送出,CPU还可继续向此接口发送数据
如果I/O设备需要向CPU传送数据,则先由I/O设备向I/O接口发送数据,并向接口发Strobe信号,表明数据已送出。接口在接到联络信号后便通知CPU可以取数,一旦数据被取走,接口变相设备发送Ready的信号,通知I/O设备,数据已经被取走,上可以继续送数据,这种一应一答的房还是称为异步联络
途中示意了串行传送的异步联络方式
I/O设备与CPU双方设定了一组特殊标记,用起始和终止来建立联系。图中的9.09ms的低电平标识起始,又用2*9.09ms的高电平来表示终止
3、同步工作采用同步时标联络
同步工作要求I/O设备与CPU的工作速度完全同步。例如,在数据采集过程中,如果外部数据以2400bps的速度传送至接口,则CPU也要以1/2400s的速度来接受每一位数,这种联络之间还必须配有专用电路,用以产生同步时标来控制同步工作。
4、I/O设备与主机的连接方式
I/O设备与主机的连接方式通常有两种:辐射式和总线式。
采用辐射式连接方式时,要求每台I/O设备都有一套控制线路和一组信号线,因此所用的器件和连线较多,对I/O设备的增减都比较困难,这种连接方式大多出现在计算机发展的初级阶段
图中为总线连接方式,通过一组总线(包括数据线,控制线,地址线),将所有I/O设备与主机连接。这种连接方式是大多数现代计算机采用的方式

I/O设备与主机信息传送的控制方式
I/O设备与主机交换信息时,共有5种控制方式:程序查询方式、程序中断方式、直接存储器存取方式(DDA,Direct Data Access),I/O通道方式,I/O处理机方式。
程序查询方式(CPU为中心,串行)
程序查询方式是由CPU通过程序不断地查询I/O设备是否已做好准备,从而控制I/O设备与主机交换信息。
采用这种方式实现主机与I/O设备交换信息,要求I/O接口内置一个能反映I/O设备是否准备就绪的状态标记,CPU通过对此标记的检测,可得知I/O设备的准备情况。
图中所示为CPU从某一I/O设备读数据块至主存的查询方式流程。当现行程序需启动I/O设备工作时,即将此程序流程插入到运行的程序中(插队),由图中可知,CPU启动I/O设备后便开始对I/O设备的状态进行查询。若查得I/O设备为准备就绪,就继续查询;若查得I/O设备准备就绪,就将数据从I/O接口送至CPU,再有CPU送至主存,这样一个字一个字的传送,直至这个数据块的数据全部传送结束,又重新回到原现行程序
从这个程序可见,只要已启动I/O设备,CPU便不断查询I/O设备的准备情况,从而终止了源程序的执行。CPU在反复查询过程中,犹如原地踏步,另一方面,I/O设备准备就绪后,CPU要一个字一个字从I/O设备取出,经CPU送至主存,此刻CPU和I/O设备处于串行工作状态,CPU的工作效率不高
程序中断方式:倘若CPU再启动I/O设备后,不查询设备是否已经准备就绪,继续执行自身程序,只是当I/O设备准备就绪并向CPU发出中断请求后才予以响应,这将大大提高CPU的工作效率
CPU在启动了I/O设备后仍继续执行原程序,在第K条指令执行结束后,CPU响应了I/O设备的请求,中断了现行程序,转至中断服务程序,待处理完后又返回道源程序断点处,继续从第K+1条指令往下执行。由于这种方式是源程序中断了运行,所以称为程序中断方式。
图中示意了采用程序中断方式从I/O设备读数据到主存的程序流程
CPU向I/O设备发送度指令后,仍在处理其他的事情,当I/O设备向CPU发送请求后,CPU才从I/O接口读一个字经CPU送至主存(通过执行中断服务程序来完成)。如果I/O设备的一批数据还没有传送结束,CPU再次启动I/O设备,命令I/O设备在做准备,一旦又接收到I/O设备中断请求,CPU重复上述中断服务过程,这样循环直到全部数据传送完毕
程序中断方式在I/O设备进行准备时,不必时刻查询I/O设备的准备情况,不出现踏步现象,即CPU执行程序与I/O设备的准备工作是同步进行的,这种方式和CPU与I/O设备试穿性工作的程序查询方式相比,CPU的资源得到了充分的利用。
采用程序中断方式,CPU和I/O接口不仅在硬件方面d需要增加相应的电路,而且在软件方面还必须编制中断服务程序。
DMA(Direct Memory Access)工作方式
虽然程序中断方式消除了程序查询方式的踏步现象,提高了CPU资源的利用率,但是CPU在响应中断请求后,必须停止现行程序而转入中断服务程序,并且为了完成I/O设备与主存交换信息,还不得不占用CPU内部的一些寄存器,同样是对CPU资源的消耗。如果I/O设备能直接与主存交换信息而不占用CPU,那么CPU的资源利用率可以得到提高,I/O设备与驻村之间交换信息,就是直接存储器存取方式
在DMA方式中,主存与I/O设备之间有一条数据通路,主存与I/O设备交换信息时,无需调用中断服务程序。如果出现DMA和CPU同时访问主存,CPU总是将总线占有权让给DMA,通常把DMA的这种占有称为窃取或者挪用。窃取的时间一般为一个存取周期,所以又把DMA占用的存取周期称为窃取周期或者挪用周期,而且,在DMA窃取周期中,CPU尚能苟继续做内部操作。所以,与程序查询方式和程序中断方式相比,DMA进一步提高了CPU的利用率
I/O设备
中央处理器(CPU)和主存(MM)构成了主机。除了主机以外的大部分硬件设备都可以称为I/O设备或者外部设备,简称外设
I/O设备通常包括:设备控制器和机电部件,不包括I/O接口
I/O设备可分为三类:人机交互设备、计算机信息的存储设备、机机通信设备
输入设备:完成输入程序,输入数据和操作命令
采用硬件确认哪个键被按下的方法称为编码键盘法,他由硬件电路形成对应被按键的唯一编码信息。
以8*8键盘为例,说明硬件编码键盘法是如何通过对应键盘扫描来识别对应的ASCII码的
键盘分为:编码键盘和非编码键盘(非编码键盘采用简单的硬件和软件来完成,速度比较慢)、
触摸屏:电阻式,电容式,表面超声波式,扫描红外线式,压感式
计算机的显示器大多采用光栅扫描。
输出设备:显示设备,以可见光的形式传递和处理信息的设备成为显示设备。
显示设备按照显示器件划分:可分为阴极射线管(Cathode Ray Tube,CRT阴极射线管显示器)、液晶显示器(Liquid Crystal Display,LCD液晶显示器)、等离子显示器(Plasma Display ,PD等离子显示器)
按照显示内容可分为:字符显示器,图形显示器,图像显示器
按照显示其功能分为普通显示器和显示终端
CRT(阴极射线管显示器)按照扫描方式的不同,分为光栅扫描和随机扫描
按照分辨率的不同,分为高分辨率和低分辨率
CRT是目前应用的最广泛的显示器件既可以做自负显示器,图形显示器,和图像显示器
CRT是漏斗形的电真空原件:有电子枪,荧光屏以及偏转装置组成
电子枪包括灯丝、阴极、控制极、第一阳极(加速阳极)、第二阳极(聚焦极),第三阳极。当灯丝加热后,阴极受热而发射电子,电子的发射量和发射速度受控制极控制,电子经加速聚焦形成电子束,在第三阳极形成的均匀空间电场作用下,使电子束高速射到荧光屏上,荧光屏上的荧光粉受电子束的轰击产生亮点,其亮度取决于电子束的轰击速度,电子书的电流强度和荧光粉的发光效率。点在输在偏转系统控制下,可在荧光屏上的不同位置产生光点,有这些光点可以组成各种所需的字符、图形和图像。
彩色CRT的原理与单色CRT的原理相似,只是对彩色CRT而言,通常由3个电子枪发射的电子束,经定色机构,分别触发红蓝绿三种颜色的荧光粉发光,按三基色叠加原理形成彩色图像
CRT荧光屏尺寸大小是按屏幕对角线长表示的
CRT的两个重要指标是分辨率和灰度,
分辨率:显示屏幕显示的像素点数。灰度等级:显示像素点相对亮暗的级差,在彩色显示其中还表现为色彩的差别
电子束必须在图像变化前不断对正屏幕进行重复扫描,这个过程称为刷新,每秒刷新的次数称为刷新频率,显示设备中,通常每秒刷新50帧(Frame)图像
为了不断的刷新,必须把瞬时图像保存在存储器中,这种存储器成为刷新存储器,又称为帧存储器或者视频存储器(VRAM,Video Random Access Memory,视频随机存取存储器)。刷新存储器的容量由图像分辨率和灰度等级决定。分辨率越高,灰度等级越高,需要的刷新存储器的容量就越大。
刷新存储器的存取周期必须和刷新频率相匹配
计算机的显示器大多采用光栅扫描的方式。
光栅扫描:电子束在荧光屏上按某种轨迹运动,光栅扫描是从上到下顺序扫描。可分为逐行扫描和隔行扫描两种。
一般CRT都采用隔行扫描,把一帧图像分为奇数场和偶数场,一阵图像需要扫描625行,奇数行和偶数行各扫描312次
扫描顺序是先扫描偶数场,后扫描奇数场,交替进行,每秒显示50场
字符显示器
字符显示器是计算机中最基本的输出设备,字符显示器通常由CRT控制器和CRT显示器组成
字符显示器包括:CRT控制器,CRT,显示存储器CRAM,字符发生器ROM
显示存储器(刷新存储器)(VRAM,Video Random Access Memory)
显示存储器存放于现实字符的ASCII码,其容量与显示屏能显示的字符个数有关。如显示屏上能显示80列*25行=2000个字符,则显示存储器的容量应该为2000*8(字符编码7位,闪烁1位),每个字符所在存储单元的地址和字符在荧光屏上的位置一一对应,即显示存储器单元的地址顺序与平面上每行从左到右,按行从上到下的显示器位置相对应
字符发生器:
由于荧光屏上的字符由光电组成,而显示存储器中存放的是ASCII码,因此,必须有一个部件能将每个ASCII码转变成一组光电矩阵信息。具有这种变换功能的部件称为字符发生器,它实质是一个ROM
CRT控制器
CRT控制器通常都做成专用芯片
图像压缩:图像从像素存储的方式经过图像变化,量化和高效编码等处理,转换成特殊形式的编码,从而大大降低计算及所需存储和实时传送的数据量
接口:接口可以看作是两个系统或两个部件之间的交界部分,他既可以是两种硬件设备之间的连接电路,也可以是两个软件之间的共同逻辑边界。
主机与I/O设备之间设置接口的原因:
1、一台机器有多台I/O,有各自的设备号,通过接口可以实现I/O设备的选择
2、I/O设备种类多,速度不一,与CPU之间相差很大,通过接口可以实现数据缓冲,达到速度匹配
3、有些I/O设备可能串行传送设备,而CPU一般为并行传送,通过接口可以实现数据串-并格式的转换
4、I/O设备的输入输出电平可能与CPU的输入输出电平不同,通过接口可以实现电平的转换
5、CPU启动I/O设备工作,要向I/O设备发出各种控制信号,通过接口可以传送控制命令
6、I/O设备需要将其工作状态(如忙,就绪,错误,中断请求)等及时向CPU报告,通过接口可以监视设备的工作状态,并且保存状态信息,以供CPU查询
接口(Interface)与端口(Port)是两个不同的概念。
端口是接口电路中的一些寄存器,这些寄存器分别用来存放数据信息,控制信息,和状态信息,相应的端口分别称为数据端口,控制端口和状态端口。若干个端口加上相应的逻辑控制才能组成接口。CPU通过输入指令,从端口读入信息,通过输出指令,将信息写入到端口中。
总线连接方式的I/O接口电路
图中为总线结构的计算机,每一台I/O设备都是通过I/O接口挂到系统总线上的。图中的I/O总线包括数据线、设备选择线、命令线、状态线
1、数据线
数据线是I/O设备与主机之间的数据代码的传送线。其根数一般等于存储字长的位数或者字符的位数,数据线通常是双向的,也可以是单向的。
如果采用单项数据总线,则必须用两组才能实现数据的输入输出功能,用双向的只需要一组就可以
2、设备选择线
设备选择线是用来传送设备码的,它的根数取决于I/O指令中设备码的位数。如果把设备码看成是地址号,那么设备选择线又可以称为地址线。
设备选择线可以有一组,也可以有多组,其中的一组用于主机向I/O设备发送设备码,另一组用于I/O设备箱主机发送设备码。当然设备选择线也可以采用一组双向总线代替单项总线代替两组单项总线。
命令线
命令线主要用于传输CPU向设备发出的各种命令信号,比如启动,清除、屏蔽、读、写等。他是一组单项总线,其根数与命令信号多少有关。
状态线
状态线是将I/O设备的状态相助及报告的信号线。比如,设备是否准备就绪,是否向CPU发出中断请求等,状态线也是单向总线
现代计算机中大多采用三态逻辑电路来构成总线
2、接口的功能和组成
选址功能:
由于I/O总线与所有设备的接口电路相连,但是CPU究竟选择那台设备,还得通过设备选择线上的设备码来确定。该设备码送至所有设备的接口,因此,要求每个接口都必须具有选址功能,既当设备选择线上的设备码于本设备吗相符是,应发出设备选中信号SEL,这种功能可通过接口内的设备选择电路来实现
接口的设备选择电路,他们具体线路可以不同,他们分别可以识别出自身的设备码,一旦某接口设备选择电路有输出时,他便可以控制这个设备通过命令线,数据线,状态线与主机交换信息
传送命令的功能
当CPU向I/O设备发出命令时,要求I/O设备能做出响应,如果I/O接口不具备传送命令信息的功能,那么设备将无法响应,所以通常在I/O接口中设有存放命令的命令寄存器以及命令译码器。
命令寄存器用来存放I/O指令中的命令码,他受设备选中信号的控制。命令线和所有接口电路的命令寄存器相连,只有被选中设备的SEL信号有效,命令寄存器才可以接受命令线上的命令码
传送数据的功能
既然接口处与主机与I/O设备之间,因此数据必须通过接口才能实现主机与I/O设备之间的传送。这就要求接口中具有数据通路,完成数据传送。这种数据通路还应具备缓冲功能,既能够将数据暂存在接口内。接口中通常设有数据缓冲寄存器(DBR,Data Buffer Register),它用来暂存I/O设备与主机准备交换的信息,与I/O总线中的数据显示相连的。
每个接口中的数据缓冲寄存器的位数可以各不相同。这取决于各类I/O设备不同的需要。
例如,键盘接口DBR为8位,因为ASCII码为7位+奇偶校验位一位
磁盘外设的DBR通常与存储字长相等,而且还要求具有串-并转换能力,既可将从磁盘中串行读出的数据并行送到主存,又可以将主存中并行读出的数据串行送入磁盘
反应I/O设备工作状态的功能
为了使CPU能及时了解各I/O设备的工作状态,接口内还必须设置反应设备工作状态的触发器。
例如,用完成触发器D和工作触发器B来表示设备所处的状态
由于现代计算机系统大多采用中断技术,因此接口电路中还一般设有中断请求触发器INTR,当其为1时,表示此I/O设备向CPU发出中断请求。接口内还设有屏蔽触发器MASK,他与中断请求触发器配合使用,完成设备的屏蔽功能
所有的状态标记触发器都与I/O总线中的状态线相连。此外,不同的I/O设备的接口电路中还可根据需要增设一些其他状态标志触发器。比如“出错触发器”,或者配置一些奇偶校验电路,循环校验码等。随着大规模集成电路的发展,目前大多数I/O设备所共用的电路都制作在一个芯片内,作为通用接口芯片,另外一些I/O设备的专用电路,制作在I/O设备的设备控制器中
接口类型
按数据传送方式分类:有并行接口和串行接口两类。并行接口是将一个字节(或者一个字)的所有位同时传送,串行接口是在设备与接口间一位一位的传送,由于接口与主机之间是按照字节或者字并行传送,因此对于串行接口而言,其内部必须设有串-并转换装置
按功能选择的灵活性分类:可编程几口和不可编程接口:可编程接口的功能及工作方式可以通过程序来改变或者选择,不可编程接口不能有程序来改变其功能
3、按通用性分类分为通用接口和专用借口:通用接口可以供多种I/O设备使用,专用借口是为某类外设或者某种用途专门设计的
按照数据传送的控制方式分类,有程序型接口和DMA接口。
程序型接口用于连接速度较慢的I/O设备,现代计算机一般都采用程序中断方式实现主机与接口之间信息的交换,所以都配有这种端口(程序型接口)
DMA接口(Direct Memory Acess,DMA 直接存储器存取)
DMA接口用于连接高速I/O设备
程序查询方式
当I/O设备较多时,CPU需要按照各个I/O设备在系统中的优先级别进行逐级查询,其流程图。图中设备的优先顺序按照1~N将序排列
为了正确完成这种查询,通常要执行如下三条指令
1、测试指令,用来查询I/O设备是否准备就绪
2、传送指令,当I/O设备已经准备就绪时,执行传送指令
3、转移指令,当I/O设备未准备就绪时,执行转移指令,转移到测试指令,继续测试I/O设备的状态
1、由于这种方式在传送时要占用CPU中的寄存器,所以首先要将寄存器中的内容保护起来
2、由于传送往往是一批数据,所以首先需要设置I/O设备与主机交换数据的技术值
3、设置欲传送数据在主存缓冲中的首地址
4、CPU启动I/O设备
5、将I/O接口中的设备状态标志取至CPU并测试I/O设备是否准备就绪。如果未准备就绪,则等待直到就绪。当准备就绪时,就可以实现传送。
对于输入而言,准备就绪就是接口电路中的数据缓冲寄存已装满欲传送的数据,称为输入缓冲满,CPU可以取走数据
对于输出而言,准备就绪意味着接口电路中的数据已被取走,称为输出缓冲空,这样CPU可以再次将数据送到接口,设备可以再次从接口接收数据
6、CPU执行I/O指令,CPU执行I/O指令,或从I/O接口的数据缓冲寄存器中读出一个数据,或将一个数据写入I/O接口的数据缓冲寄存器内,同时将接口中的状态标志复位
7、修改主存地址
8、修改计数器的值:如果原计数器的值为原码,则依次减1
如果原计数器为负数的补码,则依次加一
9、判断计数值。如果计数器的值不为0,表示一批数据还没有传送玩,重新启动外设继续传送
如果计数器为0,则表示一批数据已经传送完毕
10、结束I/O传送,继续执行现行程序
程序查询方式的接口电路
图中设备选择电路用于识别本设备的地址,当地址线上的设备号与本设备号相符时,SEL有效,可以就收命令
数据缓冲寄存器用于存放欲传送的数据
D是完成触发器
B是工作触发器
1、当CPU通过I/O指令启动输入设备时,指令的设备码字段通过地址线送到设备选择电路
2、若该接口的设备码与地址线上的代码吻合,其输出SEL有效
3、I/O指令的启动命令经过与非门将工作触发器B置1,将完成触发器D置0
4、由B触发器启动设备工作
5、输入设备将数据送到数据缓冲寄存器
6、有设备发出工作结束信号,将D置1,B置0,表示外设准备就绪
7、D触发器以准备就绪状态通知CPU,表示数据缓冲满
8、CPU执行输入指令,将数据缓冲寄存器中的数据送至CPU的通用寄存器,再存入贮存相关单元
在程序查询方式的输入输出系统中,每一次查询操作需要100个时钟周期,CPU的时钟频率为50MHz,现有鼠标和硬盘,CPU美妙对鼠标30词查询,硬盘以32位字长为单位传输数据,即每32位被CPU查询一次,传输率为2MBps。求CPU对这两个设备查询所花费的时间
鼠标:每秒:30*100/50*10(6)
硬盘:(2MB/4B)*100/50M=50*2(10)/50*10(6)
中断的概念
计算机在执行程序的过程中,当出现异常情况或者特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或者特殊请求的处理,处理结束后再返回到现行程序的间断处,继续执行源程序,这就是中断
将实现这种功能所需要的软硬件技术统称为中断技术
I/O中断的产生:如果在设备准备的同时,CPU不做无谓的等待,而继续执行现行程序,只有当I/O设备准备就绪向CPU提出请求后,再暂时中断CPU现行程序转入I/O服务程序,这边产生了I/O中断
图为打印机引起I/O中断时,CPU与打印机并行工作的时间示意图
中断的应用:突然掉电,启动备用电源保存重要信息;
实时控制领域要求CPU及时响应外来信号的请求
为了提高整体效率,应对突发事件,实现实时控制
为了处理I/O中断,在I/O接口电路中必须配置相关的硬件电路
1、中断请求触发器和终端屏蔽触发器
每台外部设备都必须配置一个中断请求触发器INTR,当其为1,表示此设备向CPU提出中断请求
但是设备需提出中断请求时,其设备本身必须已经准备就绪,即接口内的完成触发器D的状态必须为1
CPU当多个中断源同时提出请求时,只能接受一个中断源的请求,不允许低级别的中断请求中断重在执行的终端服务程序,这样,在I/O接口需要设置一个屏蔽触发器MASK,当其为1时,封锁其中断源的请求,所以,中断请求触发器和终端屏蔽触发器是成对出现的
仅当设备准备就绪(D=1)且该设备为被屏蔽(MASK=0)时,CPU的终端查询信号才可将中断请求触发器置1(INTR=1)
排队器
就I/O中断而言,速度越高的I/O设备,优先级越高,如果CPU不及时响应高速I/O的请求,其信息可能就会丢失
设备有限权的处理可以采用硬件方法,也可以使用软件方法。
硬件实现方法很多,可在CPU内部设置一个统一的排队器,对所有中断源进行排队,也可以在接口电路内分别设置各个设备的排队器
图中为设置自各个接口电路中的排队器,又称链式排队器
每个接口处有一个反向器和一个与非门,他们之间犹如链条串联在一起,所以称为链式排队器。
该电路中级别最高的中断源为INTR1,其次是2,3……
不论是哪个中断源发出中断请求,排队器输出端INTR只有一个高电平
各个中断源均无中断请求时,都为高电平,当有一个有中断请求时, 就将以后的中断请求屏蔽
中断向量地址形成部件(设备编码器)
CPU一旦响应了I/O中断,就要暂停现行程序,转去执行该设备的中断服务程序。不同的设备有不同的终端服务程序。每个服务程序都有一个入口地址,CPU必须找到这个入口地址
入口地址的寻找可以用硬件的方法或者软件的方法来完成,
这里介绍硬件向量法寻找服务程序的入口地址
硬件向量法:通过向量地址来寻找设备的中断服务程序入口的地址,而且向量地址是硬件电路产生的
中断向量地址不见得输入是来自排队器的输入,它的输出是中断向量(二进制代码表示),其位数与计算机可以处理的中断源的个数有关,寄一个中断源对应一个响亮地址
中断向量地址形成部件实质是一个编码器
通过向量地址寻找入口地址
入口地址:比如打印机服务程序的地址
程序中断方式接口电路的基本组成,就是:程序查询方式电路+排队器+设备编码器
设备编码器连在数据总线上
I/O中断处理过程
CPU响应I/O设备提出中断请求的条件是必须满足CPU中的允许中断触发器EINT为1.该触发器可用开中断指令位,也可用关中断指令位或硬件自动使其复位
I/O设备准备就绪的时间(D=1)是随机的,而CPU是在统一的时刻(每条指令执行阶段结束前)想接口发送中断查询信号,以获得I/O的中断请求。因此,CPU响应中断的时间一定是在每条指令执行阶段的结束时刻。
I/O中断的处理过程:
简单归纳为:中断请求->中断判优->中断响应->中断服务->中断返回
中断服务程序的流程
不同设备的服务程序是不相同的,可是他们的服务流程是类似的,一般中断服务的流程分为四大部分:保护现场->中断服务->恢复现场->中断返回
保护现场:保护现场有两个含义,一个是保护程序的断点,另一个是保存通用寄存器和状态寄存器的内容。
保护程序断点由中断隐指令完成
保存通用寄存器和状态寄存器中的内容由中断服务程序完成。可在中断服务的起始部分安排若干条存数指令,将寄存器中的内容存执存储器中保存,或者用进栈指令(PUSH)将各寄存器的内容推入堆栈保存,即将程序中断时的现场保存起来。
中断服务(设备服务)
这是中断服务程序的主体部分。对于不同的中断请求源,其中断服务的操作内容是不同的。例如:打印机要求CPU将需要打印的一行字符代码,通过接口送到打印机的缓冲存储器中,以供打印机打印
恢复现场
这是中断服务程序的结尾部分,要求在推出服务程序之前,将原程序中断时的现场恢复到原来的寄存器中。通常可用取数指令或者出栈指令(POP),将保存在存储器(或者堆栈)中的信息送到原来的寄存器中。
中段返回
中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到原程序的断点处,以便继续执行原程序
计算机在处理中断的过程中,有可能出现新的中断请求,此时如果CPU暂停现行的中断服务程序,转去处理新的中断请求,这种现象称为中断嵌套,或者多重中断。
如果CPU在执行中断服务程序时,对新的中断请求不予理睬,这种中断称为单重中断。
两种处理方式的区别在于开中断的时间不一样
CPU一旦响应了某中断源的中断请求后,便由硬件线路自动关中断,即中断允许触发器EINT被置为0,以确保该终端服务程序的顺利执行。因此如果不用开中断指令将EINT置为1,则意味着CPU不能在相应其他任何一个中断源的请求。对于单重中断,开中断指令设置在最后的中断返回之前,意味着在整个终端服务处理过程中,不能再响应其他中断源的请求。对于多重中断,开中断指令提前至保护现场之后,意味着托幼级别更高的中断源提出请求(这是实现多重中断的必要条件),CPU也可以响应,也就是再次中断现行的服务程序,转至新的中断服务程序,这是单重中断与多重中断的主要区别。
程序中断方式克服了程序查询中的CPU踏步现象,实现了CPU与I/O的并行操作,提高了CPU的利用率。
但是。CPU在处理中断服务程序时仍需要暂停源程序的正常运行,尤其是高速I/O设备或者辅助存储器频繁的交换信息时,需要不断地打断CPU执行主程序而执行中断服务程序
使CPU效率更高的DMA控制方式
(DMA,Direct Memory Access)
DMA方式的特点
DMA方式中,由于主存和DMA接口之间有一条数据通路,因此主存和I/O设备交换信息时,不通过CPU,也不需要CPU暂停现行程序为设备服务,省去了保护现场和恢复现场,因此工作速度比程序中断方式要高。
DMA这一特点适合于高速I/O设备与主存或者辅存之间进行信息交换,因为高速I/O设备每次申请与主机交换信息时,都要等待CPU做出中断响应后在进行,有很可能因此是数据丢失
如果出现I/O设备通过DMA接口与CPU同时访问主存,则CPU必须将总线占有权让给DMA接口使用,即DMA采用周期窃取方式占用一个存取周期
在DMA方式中,由于DMA和CPU共享主存,这就有可能出现两者争用主存的冲突,为了有效的使用主存,通常DMA和主存交换信息采用如下几种方法:
1、停止CPU访问主存
当外设要求传送一批数据时,由DMA接口向CPU发一个停止信号,要求CPU放弃地址线、数据线、控制线的使用权。DMA接口获得总线的控制权后,开始进行数据传送,在数据传送结束后,DMA接口通知CPU可以使用主存,并且将总线控制权交回给CPU。
优点:控制简单,适用于数据传输率很高的I/O设备实现承租数据的传送。
缺点:在DMA接口访问主存时,CPU基本处于不工作的状态或者保持原状态。
即使I/O设备高速运行,两个数据之间的准备间隔时间也大于一个存取周期。所以,CPU对贮存的利用率并没有得到充分的发挥
例如:软盘读一个8位二进制数大约需要32us,二半导体存储器的存取周期远小于1us,可见在软盘准备数据的时间内,主存储于空闲状态,而CPU又不能访问主存。所以,在DMA接口中,一般设有一个小容量存储器,使I/O设备先于小容量存储器交换数据,然后小容量存储器与驻村交换数据,这便可以减少DMA传送数据时占用总线的时间,即可减少CPU的暂停工作时间
2、周期挪用(周期窃取)
在这种方法中,每当I/O设备发出DMA请求时,I/O设备便挪用或者窃取总线占用权的一个或几个主存周期,而DMA不请求时,CPU仍继续访问主存
I/O设备请求DMA会遇到三种情况:
1、CPU不需要访问主存,所以I/O设备与CPU不发生冲突
2、I/O设备请求DMA传送时,CPU已经正在访问主存,此时必须待存取周期结束,CPU才能将总线使用权让出
3、I/O设备要求访问主存时,CPU也要求访问主存,这就出现了访问冲突。此时,I/O访存优先于CPU访存,这时I/O要窃取一两个存取周期,使CPU在执行访问主存指令过程中插入了DMA请求,并挪用了一两个存取周期,使CPU延缓了一两个存取周期在访问主存。(CPU一直在运作,所以CPU访问主存是应该的,所以称为I/O周期窃取)
优点:与CPU暂停访问主存的方式相比,这种方式及实现了I/O传送,有较好的发挥了主存与CPU的效率,是一种广泛采用的方法。
缺点:I/O设备每挪用一个主存周期都要申请总线控制权、建立总线控制权、归还总线控制权。所以,尽管传送一个字对主存而言只占用一个存取周期,但是对于DMA接口而言,实际上要占2~5个存取周期(有效使用一个,申请和归还要两三个)。所以,周期挪用的方法比较适合于I/O设备的读写周期大于主存周期的情况(有效周期长一点,这样可以减少申请和归还周期的损耗)
3、DMA与CPU交替访问
这种方法适合于CPU的工作周期比主存周期长的情况。例如,CPU的工作周期分为1.2us,主存的存取周期小于0.6us。呢么可以将一个CPU周期分为C1,和C2两个分周期,其中C1专供DMA访问(这段时间CPU不访问主存),C2专供DMA访存
这种方式不需要总线使用权的申请、建立、归还过程,总线使用权是通过C1和C2分别控制的。CPU与DMA接口各自有独立的访存地址寄存器、数据寄存器、读写信号。实际上总线变成了在C1,C2控制下的多路转换器,器总线控制权的转子几乎不需要什么时间,具有很高的DMA传送速率。在这种工作方式下,CPU既不停止主程序的运行也不进入等待状态,即完成了DMA的数据传送。逻辑电路比较复杂
DMA接口的功能和组成
DMA接口的功能
利用DMA方式传送数据时,数据的传输过程完全由DMA接口电路控制,所以DMA接口又有DMA控制器之称。
接口功能:
1、向CPU申请DMA传送
2、在CPU允许DMA工作时,处理总线控制权的移交,避免因进入DMA工作而影响CPU正常活动或者引起总线竞争
3、在DMA期间管理系统总线,控制数据传送
4、确定数据传送的起始地址和数据长度,修正数据传输过程中的数据地址和数据长度
5、在数据块传送结束时,给出DMA操作完成的信号
DMA接口的基本组成
1、主存地址寄存器(AR,Adress Register主存地址寄存器)
AR用于存放主存中需要交换数据的地址。在DMA传送数据之前,必须通过程序将数据在主存中的首地址送到主存地址寄存器AR。在DMA传送过程中,没交换一次数据,将地址寄存器中的内容(主存中的地址)+1,直到一批数据传送完毕为止。
2、字计数器(WC,Word Counter,字计数器)
WC用于记录传送数据的总字数,通常以交换字数的补码值欲置。在DMA传送过程中,没传送一个字,字计数器加一,直到计数器为0,即最高位产生进位时,表示该批数据传送完毕(若交换字数以原码值欲置,则每传送一个字,字计数器减1,直到计数器为0,表示该批数据传送结束)。于是DMA接口通过中断机构向CPU发出中断请求信号
3、数据缓冲寄存器(BR,Buffer Register 数据缓冲寄存器)
BR用于暂存每次传送的数据。通常DMA接口与主存之间采用字传送,而DMA与设备之间可能是字节或位传送。因此DMA接口中还可能包括有装配或拆卸字信息的硬件逻辑,比如数据移位缓冲寄存器、字节寄存器
4、DMA控制逻辑
DMA控制逻辑负责管理DMA的传送过程,由控制电路、时序电路、以及命令状态控制寄存器等组成,每当准备好一个数据字,就向DMA接口提出申请(DREQ),DMA控制逻辑便向CPU请求DMA服务,发出总线使用权的请求信号(HRQ)。待收到CPU发出的响应信号HLDA后,DMA控制逻辑便开始负责管理DMA传送的全过程,包括对主存地址寄存器(AR+1)和字数寄存器(WC)的修改,识别总线地址,指定传送类型(输入或者输出)以及通知设备已经被授予一个DMA周期(DACK)
5、中断机构
当字计数器溢出(全0)时,表示一批数据交换完毕,由溢出信号通过中断机构向CPU提出中断请求,请求CPU做DMA操作后处理,必须注意,这里的中断与I/O中断的技术相同,但是中断的目的不同,前面是为了数据的输入和输出,这里是为了报告一批数据传送结束。他们是I/O系统中的不同的中断事件
6、设备地址寄存器(DAR,Device Adress Register 设备地址寄存器)
DAR存放I/O设备的设备码或表示设备信息存储区的寻址信息,如此盘数据所在的区号,盘面号和柱面号。具体内容取决于设备的数据格式和地址的编址方式
DMA的工作过程
DMA的数据传送分为预处理、数据传送、和后处理3各阶段。
1、预处理
在DMA接口开始工作之前,CPU必须给他设置如下信息
给DMA 控制逻辑 指明数据传送方向时输入(写入主存)还是输出(读出主存)
给DMA 设备地址寄存器 送入设备号,并启动设备
向DMA 主存地址寄存器 中送入交换数据的主存起始地址
对 字计数器 赋予交换数据的个数
上述工作由CPU执行几条输入输出指令完成,即程序的初始化阶段。
初始化完成后CPU继续执行原来的程序
当I/O设备准备好发送的数据(输入)或者I/O设备已经将接受的数据(输出)处理完毕,设备便通过DMA接口向CPU提出占用总线的申请,如果有多个DMA同时申请,就按照轻重缓急由硬件排队判优逻辑决定优先。
待I/O设备得到主存总线的控制权后,数据的传送便有DMA接口进行管理
2、数据传送
以数据输入为例(数据传送阶段)
1、当设备准备好一个字时,发出选通信号,将该字读到DMA的数据缓冲寄存器(BR)中,表示数据缓冲寄存器(BR)满
2、设备向DMA控制逻辑电路发送DREQ
3、DMA向CPU申请总线控制权(HRQ)
4、CPU返回HLDA信号,表示允许将总线控制权交给DMA接口
5、将DMA主存地址寄存器(AR)中的主存地址送到地址总线,并命令MM写
6、通知设备被授予一个DMA周期(DACK),并为交换下一个字准备
7、将DMA数据缓冲寄存器的内容送到数据总线
8、主存将数据总线上的内容写到地址总线指定的存储单元中
9、修改主存地址和字计数值
10、判断数据块是否传送结束;如未结束,继续传送;如已结束,(字计数器溢出)则向CPU申请程序中断,标志数据块传送结束
以数据输出为例
1、当DMA数据缓冲寄存器已经将输出数据送至I/O设备后,表示数据缓冲寄存器已孔
2、设备向DMA发送请求(DREQ)
3、DMA向CPU发送HRQ申请总线使用权
4、CPU发挥信号HLDA,将总线控制权交给DMA接口
5、DMA主存地址寄存器中的地址信息送到地址总线
6、通知设备已被授予一个DMA周期(DACK),并为交换下一个字准备
7、主存将相应的数据通过数据总线送到DMA的数据缓冲寄存器BR
8、将DMA数据缓冲寄存器中的内容送到输出设备,如果如果为字符设备,需要将其拆成字符输出
9、修改主存地址和字计数值
10、判断数据块是否已经传送完毕,如果未完毕,继续传送,如果已经传送完毕,则向CPU申请中断
3、后处理
DMA的中断请求得到响应后,CPU会停止原程序的执行,转而去执行中断服务程序,做一些DMA的结束工作。
包括校验送入主存的数据是否正确
决定是否用DMA传送其他数据块
如果继续传送,要对DMA接口进行初始化
如果不需要,停止外设
测试在传送过程中是否发生错误,如果出错,转到错误诊断以及处理错误程序
一个DMA借口可以采用周期窃取方式将字符传送到存储器,它支持的最大批量为400字节。如果存取周期为100ns,每处理一次中断需要5us,现有的字符设备的传输率为9600bps。假设字符之间的传输是无间隙的,如果忽略预处理所需要的时间,试问采用DMA方法因数据传输需占用处理器多少时间?如果完全采用中断方式,需要占用处理器多少时间?
DMA方法:9600b==1200Bps
存取周期为100ns=0.1us
1200*0.1+1200/400*5us=135us
中断方法:9600bps=1200Bps
1200*5us=6000us
假设硬盘采用DMA方式与主机交换信息,其传输速率为2Mps,而且DMA的预处理需要1000个时钟周期,DMA完成传送后处理中断需要500个时钟周期。如果平均传输的数据长度为4Kb,试问在硬盘工作时50MHz的处理器需要多少时间比率进行DMA辅助操作?
4Kb/2MB=0.002s
(1000+500)/0.002s=75000
75000/(50*10(6))=1.5%
DMA接口与系统的连接方式有两种
一种是具有公共请求显得DMA请求方式,若干个DMA接口通过一条公用的DMA请求线向CPU申请总线控制权。CPU发出响应信号,用链式查询方式通过DMA接口,首先选中的设备获得总线控制权,即可占用总线与主存转送信息
另外一种是独立的DMA请求方式,每个DMA接口各有一对独立的DMA请求线和DMA响应线,他由CPU的优先级判别机构决定先响应哪个请求,并在响应线上发出相应信号,获得响应信号的DMA接口便可控制总线与主存传送数据
与程序中断方式相比,DMA方式有如下特点
1、从数据传送看,程序中断方式靠程序传送,DMA方式靠硬件传送
2、从CPU响应时间看,程序中断方式是在一条指令执行结束时响应,而DMA方式可在指令周期内的任意存取周期结束时响应
3、程序中断方式有处理异常事件的能力,DMA方式没有者总能力,DMA方式主要用于大批量数据的传送,如硬盘存取,图像处理,高速数据采集,可提高数据吞吐量
4、程序中断方式需要中断现行程序,故需要保护现场
DMA方式不中断线性程序,不需要保护现场
5、DMA的优先级比程序中断的优先级高
DMA接口类型
现代集成电路制造技术已经将DMA接口制成芯片,通常有选择型和多路型DMA接口
选择型DMA接口
选择性DMA的主要特点:物理上可以连接多个设备,但是逻辑上只能连接一个设备,即在某一段时间内,DMA接口只能为一个设备服务,关键是在预处理时将所选设备的设备号送入设备地址寄存器。
试用性:选择型DMA特别适用于数据传输率很高的设备
多路型DMA接口
多路型DMA借口不仅在物理上可以连接多个设备,而且在逻辑上也允许连接多个设备同时工作,各个设备采用字节交叉的方式通过DMA接口进行数据传送。
在多路型DMA接口中,为每一个与它连接的设备都设置了一套寄存器,分别存放各自的传送参数。
多路型接口分为:链式多路型DMA接口 和 独立请求多路型DMA接口
区别在于使用链式的DMA请求线,还是各个设备有独立的DMA请求线
ASCII码(American Standard Code Information Interchange,美国信息交换标准码)
七位二进制码,共有128中字符,其中包括32个通用控制字符,10个十进制数码,52个英文大写和小写字母,34个专用符号
除了32个控制字符不打印外,其余的96个字符全部可以打印
ASCII由b7b6b5b4b3b2b1着7个2进制位组成,书写上可以用两位16进制数表示
为了提高信息传输的可靠性,通常增加一位b8作为校验位,这样一个字符就可以用8位二进制代码表示
用ASCII码可方便的表示十进制数串。十进制数串在计算机中有两种表示形式:压缩性和非压缩性
非压缩型:分为前分隔式和后嵌入式
非压缩行的十进制数每一个字符占一个字节
前分隔式符号占一个字节,放在数字位之前,用2B表示正号,用2D表示负号,每个十进制位均用对应的ASCII码表示
后嵌入式非圧缩型的符号位不占一个字节,而是将符号嵌入到最低一位数字中:如果是负数,就将最低位十进制数的ASCII码加上40H;如果是正数则不变
最低位字节即表示数值,又表示符号
用非压缩型表示的十进制数进行算术运算很不方便,因为每个字节占8位,只有其低4位的值才表示数值,高四位的值在算术运算时无数值意义,这种表示主要用于非数值运算的有关领域中
压缩型
如果采用一个字节存放两个十进制的数位,就成了压缩型的十进制数。这种方式比非压缩性节约了存储空间,又便于完成十进制数的算术运算。压缩型十进制数的每个数位可用ASCII码的低4位表示,或者用BCD码表示
BCD码
(BCD,Binary Coded Decimal 二-十编码),用四位二进制代码表示一位十进制数。最常见的BCD码为8421码,又称NBCD(Natural Binary Coded Decimal)。
由于8421码每位的权与二进制数完全相同,而4位二进制代码共有16中组合吗,所以1010~1111这六种代码是无效的。

============================================================================================================
第七章 指令系统
============================================================================================================
机器语言是由一条条语句构成的,每一条语句又能准确的表达某种语意。
比如:命令机器做某种操作,之处参与操作的数据或其他信息在什么地方。
计算机就是连续的执行每一条机器语句而实现全自动工作的。
将一条机器语言的语句成为机器指令,将全部机器指令的集合成为机器的指令系统
机器的指令系统反映了机器的功能
指令是由操作码和地址码两部分组成的
指令:操作码字段,地址码字段
操作码:操作码用来指明该指令要完成的操作,如加法,减法,等。通常,操作码反映了机器的操作种类,也就是机器允许的指令条数
如操作码为7位,则该机器最多包含128条指令
操作码的长度可以是固定的,也可以是变化的。前者将操作码集中放在指令字的一个字段内,这种格式便于硬件设计,指令译码时间短,广泛用于子长较长的、大中型计算机和超级小型计算机以及RISC中
例如IBM370 操作码长度为8位
对于操作码长度不固定的指令,其操作码分散在指令字的不同字段中。这种格式可有效的压缩操作码的平均长度,在字长较短的微型计算机广泛采用。操作码的长度是可变的。
操作码长度不固定会增加指令译码和分析的难度,使控制器的设计复杂。
通常采用扩展操作码技术,式操作码的长度随地指数的减少而增加,不同地指数的指令可以具有长度的操作码,从而在满足需要的前提下,有效缩短指令字长

????????????
在设计操作码不固定的指令系统是,应尽量考虑安排指令使用频度高的指令占用短的操作吗,对使用频度低的指令可占用较长的操作码,这样可以缩短常用指令的译码时间。

地址码:地址码用来指出该指令的源操作数的地址,结果地址,下一条指令的地址。
这里的地址可以是主存地址,也可以是寄存器地址,也可以是I/O地址
1、四地址指令
这种指令的地址字段有4个
格式:OP A1 A2 A3 A4
其中,OP为操作码,A1为第一操作数地址,A2为第二操作数地址,A3为结果地址,A4为下一条指令的地址
该指令完成(A1)OP(A2)->A3的操作。这种指令直观易懂,后续指令地址可以任意填写,可直接寻址的地址范围与地址字段的位数有关。
如果指令字长为32位,操作码占8位,四个地址字段各占6位,则指令操作数的直接寻址范围为2(6)位。如果地址字段均指示主存地址,则完成一条四地址指令,共需访问4次存储器(取指令一次,去两个操作数两次,存放结果一次)
因为程序中大多数指令时按顺序执行和存放的,而程序计数器PC(Program Counter)既能存放当前与执行指令的地址,又有计数功能,因此它能自动形成下一条指令的地址。这样,指令字中的第四地址字段A,便可省去,即得三地址指令。
2、三地址指令
三地址指令只有三个地址,其格式如下:OP A1 A2 A3
它可完成(A1)OP(A2)->A3的操作,后续指令的地址隐含在程序计数器PC中。
如果指令字长不变,设OP为8位,其余三个地址各占8位,所以三地址指令操作数的直接寻址范围可达2(8)=256,同理,如果地址字段均为主存地址,则完成一条三地址指令也需要访问4次存储器
机器在运行过程中,没有必要将每次运算结果都存入主存,中间结果可以暂时存放在CPU的寄存器(如ACC)中,这样有可省去一个地址字段A3,从而得出二地址指令
3、二地址指令
操作数:操作的对象叫做操作数
1K=2(10)
二指令地址中只含有两个地址字段,格式:OP A1 A2
它可完成(A1)OP(A2)=A1的操作,即A1字段及代表源操作数的地址,又代表存放本次运算结果的地址。有的机器也可以表示(A1)OP(A2)=A2的操作,此时A2除了代表原操作的地址外,还代表中间结果的存放地址。这种情况完成一条指令仍需要访问四次主存。如果是其完成(A1)OP(A2)=ACC
此时他完成一条指令只需要三次访存,它的含义是中间结果暂存于累加器ACC中,在不改变指令字长和操作码位数的前提下(默认指令字长和默认操作码位数)前提下,二地址指令操作数的直接寻址范围为2(12)=4K
如果讲两个操作书中的一个操作数的地址隐含在运算器的ACC中,则指令字中只需给出一个地址码,构成一地址指令。
4、一地址指令
一地址指令的地址码字段只有一个。
OP A1
它可完成(ACC)OP(A1)=ACC,ACC既可以存放参与运算的操作数,又存放运算的中间结果,这样,完成一条一地址指令需要两次访存。在指令字长仍为32位,操作码位数仍为8位时,一地址指令操作数的直接寻址范围为2(24)=16M
在指令系统中,还有一种指令可以不设地址字段,即所谓的零地址指令
5、零地址指令
零地址指令在指令字中无地址码,例如,空操作(NOP,Nothing Operation空操作)、停机(HLT,Halt)这类指令只有操作码。子程序返回(RET,return,子程序返回),中断返回(IRET,Interrupt Return,中断返回)这类指令没有地址码,其操作数的地址隐含在堆栈指针SP(Stack Pointer)中。
通过上述介绍可见,用一些硬件资源,比如(PC,ACC)承担指令字中需要指明的地址码,可在不改变指令字长的前提下,扩大指令操作数的直接寻址范围。此外,用PC,ACC等硬件代替指令字中的某些地址字段,还可以缩短指令字长,并减少访存次数。究竟采用什么样的地址格式,需要从机器性能出发综合考虑
地址字段也可以用来表示寄存器。当CPU中含有多个通用寄存器时,对每一个寄存器赋予一个编号,便可以指明原操作数书和结果存放在哪个寄存器中。地址字段表示寄存器时,也可以有一地址,二地址,三地址之分。他们的共同点是,在指令的执行阶段都不必访问存储器,直接访问寄存器,是机器的运行速度得到提高
指令字长
指令字长取决于操作码的长度,操作数地址的长度和操作数地址的个数。不同机器的指令字长不一样。
早期的计算机的指令字长、机器字长、和存储字长相等。因此访问某个存储单元,便可以取出一条完整的指令或者一个完整的数据。这种机器的指令字长是固定的,控制方式比较简单
随着计算机的发展,存储容量的加大,要求处理的数据类型越来越多,计算机的指令字长也发生了很大的变化。一台机器的指令系统可以采用位数不相同的指令,即指令字长是可变的。比如单字长指令,多字长指令。控制这类指令的电路比较复杂,而且多字长指令要多次访问存储器才能取出一条完整的指令,因此CPU速度下降。为了提高指令的运行速度和节省存储空间,通常尽可能把常用的指令(如数据传送指令、算逻指令等)设计成单字长或者短字长格式的指令。
比如:IBM 370 指令字长可变,可以是16位(半个字),32位(一个字),48位(一字半)
通常指令字长取8的整数倍
操作数类型和操作类型
操作数类型:常见的有地址、数字、字符、逻辑数据
1、地址:地址实际上也可看作一种数据,很多情况下要计算操作数的地址,这时,地址可被认为是一个无符号的整数
2、数字:计算机中常见的数字由定点数、浮点数、十进制数
3、字符:文本或者字符串也是一种常见的数据类型。由于计算机在处理信息过程中不能以简单的字符形式存储和传送。因此普遍采用ASCII码,也可以采用EBCDIC(Extended Binary Coded Decimal Interchange Code、EBCDIC,扩展BCD交换码)来进行字符编码
4、逻辑数据:计算机有事做算术运算,有事做逻辑运算,此时n个0和1的组合不是被看做算术数字,而是被看作逻辑数
数据在存储器中的存放方式
通常计算机中的数据存放在存储器或者寄存器中,而寄存器的位数便可以反映机器字长。一般机器字长可取字节的1、2、4、8倍,这样便于字符处理。在大中型计算机中的字长为32位或者64位
在微型计算机中,字长从4位,发展到64位都有
由于不同机器数据字长不同,每台机器处理的数据字长也不统一,例如奔腾处理器可以处理8位(字节),16位(字),32位(双字),64位(四字)
因此,为了便于硬件实现,通常要求多 字节 的数据在存储器中的存放方式能满足“边界对准”的要求
图中所示的存储器的存储字长为32位,可按字节(8位)、半字(16位)、字(32位)、双字(64位)访问。在对准边界的32位字长的计算机中,半字地址是2的整数倍,字地址是4的整数倍,双字地址是8的整数倍(字节)。当所存数据不能满足此要求是,可填充一个或者多个空白字节,而字节的次序有两种,低字节为低地址,或者高字节为低地址
在数据不对准边界的计算机中,数据(例如一个字,可能在两个存储单元中),此时需要访问两次存储器,并对高低直接的位置进行调整后,才能取得一个字
????????????????
1字节=1B=8位
字长=字的二进制位数,字长总是8的整数倍,字长跟机器有关,16位字长的计算机,字的长度位16位二进制位数,一次可以处理2(16)以内的数据,
字可分为若干字节,一个字节为8位二进制数,这个是固定的
字本身也可以说有多少位
????????????????
操作类型
不同的机器,操作类型也是不同的,但是所有的机器都有以下几种通用的操作
1、数据传送
数据传送包括寄存器与寄存器,寄存器与存储单元,存储单元与存储单元之间的传送。比如,从远到目的之间的传送、对存储器的读(LOAD)和写(STORE)、交换源和目的的内容、置1,清零,进栈、出栈等
2、算数逻辑操作
这类操作可实现算术运算(加、减、乘、除、增1、减1、取负数即求补)和逻辑运算(与、或、非、异或⊕)。对于低档机而言,一般算术运算只支持最基本的二进制加减、比较、求补等,高档机还能支持浮点运算和二进制运算
异或⊕:A⊕B,如果AB相同,为0,AB不同为1
有些机器还具有位操作功能,如位测试(测试指定位的值)、位清除(清除指定位)、位求反(对指定位求反)等
3、移位
移位可分为算数移位和逻辑移位,算术移位和逻辑移位可分别实现对有符号数和无符号数乘以2(n)(左移)或整除以2(n)(右移)的运算。并且移位操作所需时间远比乘除操作执行时间短,所以,移位操作经常被用来代替简单的乘法和除法运算
4、转移
在多数情况下,计算机是按顺序执行程序的每条指令的,但是有时需要改变这种顺序,此刻可以采用转移指令来完成。转移指令按其转移特征可分为无条件转移,条件转移,跳转,过程调用与返回,陷阱(Trap)等几种
1、无条件转移
无条件转移不受任何条件约束,可直接把程序转移到下一条须执行指令的地址
例如:“JMP x”其功能是将指令地址无条件转移到指令地址 x
2、条件转移
条件转移是根据当前指令的执行结果来决定是否需要转移。若条件满足,则转移,若条件不满足,则继续按顺序执行。
一般机器都能提供一些条件码,这些条件码是某些操作的结果。
例如:零标志位(Z),结果为0,则Z=1
负标志位(N),结果为负,则N=1
溢出标志位(V),结果有溢出,则V=1
进位标志位(C),最高位有进位,则C=1
奇偶标志位(P),结果称偶数,则P=1
例如:指令“BRO x”表示如果结果(有符号数)溢出(V=1),则指令跳转至x
指令“BRC y”表示如果最高位有进位(C=1),则指令跳转至y
还有一种条件转移指令,SKP(Skip),他暗示下一条指令将被跳过,从而隐含了转移地址是SKP后第的二条指令。
例如:200
205 SKP DZ
206
207
这里SKP DZ表示若设备的完成触发器D为0,则执行完205条指令后,立刻跳至207条指令,在顺序执行
调用与返回
在编写程序时,有些具有特定功能的程序会被反复使用。为了避免重复编写,可将这些程序段设定为独立子程序,当需要执行某子程序时,只需要用子程序调用指令即可。此外,计算机系统还提供了通用子程序,如申请资源,读写文件,控制外设等。需要时刻有用户直接调用,不必重新编写
调用指令包括过程调用、系统调用、子程序调用。他可实现从一个程序转移到另一个程序的操作。
调用指令(CALL)一般与返回指令(RETURN)配合使用。CALL用于从当前的程序位置转至子程序的入口;
RERURN用于子程序执行完后重新返回到原程序的断点。
图中示意了调用CALL和返回RETURN指令在程序中执行的流程
图中示意了主程序和子程序在主存中所占空间。子程序末尾的RETURN可以使CPU返回调用点
1、子程序可以被多处调用
2、子程序调用可出现在子程序中,即允许子程序嵌套
3、每一个CALL指令都对应一条RETURN指令
由于可以在多处调用子程序,所以,CPU必须记住返回地址,使子程序能够准确返回。范湖地址可以存放在以下三处:
1、寄存器内:机器内用专门的寄存器,专门用来存放返回地址
2、子程序的入口地址内
3、栈顶内:现代计算机都设有堆栈,执行RETURN指令后,便可以自动从栈顶内取出应返回的地址
4、陷阱(Trap)与陷阱指令
陷阱其实是一种意外事故的中断。例如,机器在运行过程中,可能会出现电源电压不稳定,存储器校验出差错、输入输出设备出现了故障、用户使用了未被定义的指令、除数出现0,运算结果溢出以及特权指令等种种意外事件,致使计算机不能正常工作。此刻必须采取措施,否则将影响整个系统的正常运行。因此,一旦出现意外故障,计算机就发出陷阱信号,暂停当前程序的执行,转入故障处理程序进行相应的故障处理
计算机的陷阱指令一般不提供给用户直接使用,而作为隐指令(即指令系统中不提供的指令),再出现意外故障时,由CPU自动产生并执行。
也有的机器设置供用户使用的陷阱指令或“访管”指令,利用他完成系统调用和程序请求。
例如:IBM PC 的软中断INT TYPE ,其实就是直接提供给用户使用的陷阱指令,用来完成系统的调用
5、输入输出
对于I/O单独编址的计算机而言,通常设有输入输出指令,他完成从外设中的寄存器读入一个数据到CPU的寄存器内,或将数据从CPU的寄存器输出到外设的寄存器中
6、其他
其他包括等待指令、停机指令、空操作指令、开中断指令、关中断指令、置条件码指令等。
为了适应计算机的信息管理、数据处理以及办公自动化等领域的应用,用的计算机还设有非数值处理指令。如字符串传送、字符串比较、字符串查询以及字符串转换等
在多用户、多任务的计算机系统中,还有特权指令,这类指令只能用于操作系统或其他系统软件,用户不能使用
在有些大型或者巨型机中,还设有响亮指令,可以对整个向量或者矩阵进行求和、求积运算。在多处理器系统中还有专门的多处理机指令
寻址方式
寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法,他与硬件结构紧密相关,而且直接影响指令格式和指令功能
寻址方式分为指令寻址和数据寻址
指令寻址
指令寻址比较简单,分为顺序寻址和跳跃寻址两种。
顺序寻址可通过程序计数器PC加1,自动形成下一条指令的地址;
跳跃寻址可通过转移类指令实现。例如3号地址指令为 “JMP 7”,所以执行完3号指令后无条件的将7地址送往PC,接着又顺序的执行第8,9条指令。
数据寻址
数据寻址的方式种类较多,在指令字中必须设一字段来指明属于哪一种寻址方式。指令的地址码字段通常都不代表操作数的真实地址,把它称为形式地址。记作A。操作数的真实地址称为有效地址,记作EA,它是由寻址方式和形式地址来共同确定的。由此可得指令的格式
一种一地址指令的格式: 操作码 寻址特征 形式地址A
为了便于分析研究各类寻址方式,假设指令字长、存储字长、机器字长都相同
1、立即寻址
立即寻址的特点是操作数的本身设在指令字内,即形式地址A不是操作数的地址,而是操作数本身,又称为立即数。数据是采用不码的形式存放的,寻址特征中的#表示立即寻址特征标记
可见:它的优点在于只要取出指令,便可以立即获得操作数,这种指令在执行阶段不必再访问存储器。显然A的位数限制了这类指令所能表达的立即数的范围
2、直接寻址
直接寻址的特点是,指令字中的形式地址A就是操作数的真实地址EA,即EA=A
它的优点是寻找操作数比较简单,也不需要专门计算操作数的地址,在指令执行阶段对主存只访问一次。
它的缺点在于A的位数限制了操作数的寻址范围,
而且必须修改A的值,才能修改操作数的地址
3、隐含寻址
隐含寻址是指指令字中不明显地给出操作数的地址,其操作数的地址隐含在操作码或者某个寄存器中。例如,一地址格式的加法指令只给出一个操作数的地址,另一个操作数隐含在累加器ACC中,这样累加器ACC就成了另外一个数的地址。
又如IBM PC 中的乘法指令,被乘数隐含在寄存器AX或者寄存器内,可见寄存器就是被乘数的地址。
又如字符串传送指令MOVS,其源操作数的地址隐含在SI寄存器中,目的操作数的地址隐含在DI寄存器中。由于隐含寻址在指令字中少了一个地址,所以,这种寻址方式的指令有利于缩短指令字长
4、间接寻址
倘若指令字中的形式地址不直接指出操作数的地址,而是指出操作数有效地址的地址。(也就是二级寻址)也就是说,有效地址是由形式地址间接提供的,即为间接寻址,即EA=(A)
图中为一次间接寻址,即A地址单元的内容EA是操作数的有效地址;
另一图为两次间接寻址,即A地址单元的内容A1还不是有效地址,而是由A1所指单元的内容EA才是有效地址。
这种寻址方式与直接寻址方式相比,扩大了操作数的寻址范围,因为A的位数通常小于指令字长,而存储器长可以和指令字长相等。如果设指令字长和存储字长均为16位,A为8位,显然直接寻址范围为2(8),一次间接寻址的寻址范围可达2(16)。当多次间接寻址时,可用存储字的首位来标志间接寻址是否结束。当存储器的首位为1时,表明还需要继续访存寻址,当存储器首位为0时,表明该存储子即为EA。由此可见,存储字首位不能作为EA的组成部分,因此,间接寻址的寻址范围为2(15)
间接寻址第二个优点在于他便与编制程序,例如,有间接寻址可以很方便的完成子程序返回,图中示意了用于子程序返回的间接寻址(简称“间址”)
图中两次调用子程序,只要在调用前先将返回地址存入子程序最末条指令的形式地址A(JMP @ A)的存储单元内,便可以准确返回源程序的断点。
例如:第一次调用前,使【A】=81,第二次调用,使【A】=202,这样,当地一次子程序执行到最末条指令“JMP @ A”,便可以无条件转至81号单元。
间接寻址的缺点在于指令的执行阶段需要访存两次(转到子程序一次。丛子程序转到主程序一次)或者多次(多次间接寻址),致使指令执行时间延长)
5、寄存器寻址
在寄存器寻址的指令字中,地址码字段直接指出了寄存器的编号,即EA=R,其操作数在由R所指的寄存器内。由于操作数不在主存中,所以寄存器寻址在指令执行阶段无需访存,减少了执行时间。由于地址字段只需指明寄存器编号(计算机中寄存器数量有限),所以指令字较短,节省了存储空间,因此寄存器寻址在计算机中得到广泛应用。
6、寄存器间接寻址
图中指令字形式地址的内容是操作数所在主存单元的地址号(寄存器中存放的是有效数据的地址),即有效地址EA=(R),与寄存器寻址相比,指令的执行阶段还需要访问主存。因为有效地址不是存放在存储单元中,而是存放在寄存器中,所以称其为寄存器间接寻址,他比间接寻址少访问一次主存
7、基址寻址
基址寻址需要设有基址寄存器BR(Base Register,BR基址寄存器),其操作数的有效地址EA等于指令字中的形式地址与基址寄存器中的内容(成为基地址)相加,即EA=A+(BR);
图中示意了基址寻址过程,基址寄存器可以采用隐式的和显示的两种。隐式的,是在计算机内专门设有一个基址寄存器BR(专用基址寄存器),使用是用户不必明显指出该基址寄存器,只需要由指令的寻址特征位反映出基址寻址即可。显式是在一组通用寄存器里,由用户明确指出哪个寄存器用作基址寄存器,存放基地址。例如,IBM 370中设有16个通用寄存器,用户可以任意选中某个寄存器作为基址寄存器。
隐式基址寻址,和显式基址寻址
基址寄存器可以扩大操作数的寻址范围,因为基址寄存器的位数可以大于形式地址A的位数。当主存容量较大时,若采用直接寻址,因受A的位数的限制,不能对主存中所有单元进行访问。但是采用基址寻址便可以实现对主存空间的更大范围的寻访。例如,将主存空间分为若干段,每段的首地址存于基址寄存器中,段内的位移量有指令字中的形式地址A指出,这样操作数的有效地址就等于基址寄存器内容与段内位移量之和,只要对基址寄存器的内容作修改,就可以访问主存的任一单元。
基址寻址在多道程序中极为有用,有话可以不必考虑自己的程序存于主存中的那一空间区域,完全可由操作系统或管理程序根据主存的使用状况,赋予基址寄存器内的一个初始值(即基地址),便可将用户程序的逻辑地址转化为主存的物理地址(实际地址),把用户程序安置于主存的某一空间区域。例如,对于一个具有多个寄存器的机器来说,用户只需要指出哪一个寄存器作为基址寄存器即可,至于这个基址寄存器应赋予的值,完全由操作系统或管理程序根据主存空间状况确定,在程序执行过程中,用户不知道自己的程序在主存的那一空间,用户也不可以修改基址寄存器的内容,以确保系统安全可靠的运行
变址寻址
变址寻址与基址寻址极为相似。其有效地址EA等于指令字中的形式地址与变址寄存器IX的内容相加的和,即EA=A+(IX)
显然只要变址寄存器位数足够,也可以扩大操作数的寻址范围
变址寻址与基址寻址的过程极为相似
由于两者的应用场合不同,因此从本质来认识,他们之间的区别较大
基址寻址用于为程序或者数据分配存储空间,故基址寄存器的内容通常由操作系统来确定,在程序的执行过程中:
基址寄存器中的内容是不可变的,而指令字中的A是可变的(基址寄存器中的只为起始地址,A中的值为位移)。
在变址寻址过程中,变址寄存器的内容是由用户设定的,在程序执行过程中其值可变,而指令字中的A是不可变的(A中的值为起始地址,寄存器中的值为位移量)
变址寻址主要用于处理数组问题,在数组处理过程中,可设定A维数组的首地址,不断改变变址寄存器IX的内容,便可以很容易的形成数组中任意数据的地址,特别适合编制循环程序。
例如:某数组存放在以D为首地址的主存一段空间内,求这N个数的平均值
如果用变址寻址,保持指令“ADD X,D”不变,便可以一次完成N个数的相加。
该程序仅用了8条指令,并且随着N的增加,指令数不变,指令所占的存储空间大大减少,有的机器的变址寻址具有自动变址的功能,即每存取一个数据,根据数据长度(即所占的字节数),编制寄存器能自动增量或减量,以便形成下一数据的地址。
变址寻址还可以与其他寻址方式结合使用。例如,变址寻址可与基址寻址共同使用,此时有效地址EA等于指令字中的形式地址EA=A+(BR)+(IX)
变址寻址可还与间接选址合用,形成先变址后间址或者先间址后变址等寻址方式
相对寻址
相对寻址的有效地址是将程序计数器PC的内容(即当前指令的地址)与指令字中的地址A相加而成的,即EA=A+(PC)
图中示意了相对寻址的过程,由图可知,操作数的位置与当前指令的位置有一段距离
相对寻址常被用于转移类指令(跳转到……),转移后的目标地址与当前指令有一段距离,称为相对位移量,他由指令字的形式地址A给出,故A又称位移量。位移量A可正可负,通常用补码来表示。倘若位移量为8位,则指令的寻址范围为(PC)+127~(PC)-128之间
相对寻址的最大特点是转移地址不固定,他可以随PC值的变化而变,因此,无论程序在主存的那个区域,都可以正确运行,对于编写浮动程序特别有利。
例如(BNE M :不相等则跳转到M)(BEN M这条指令存于M+3)单元内
显然,随程序首地址改变,M也改变。如果采用相对寻址,将“BNE M”改写为“BNE * -3”(为相对寻址特征),就可以使该程序浮动至任意地址空间都可以正常运行。因为从第M+3条指令转至M条指令,其相对位移量为-3,所以执行第M+3条指令“BNE -3”时,其有效地址为
EA=PC+(-3)=M+3+(-3)PC的值就是该条寻址指令所在的地址
EA=(“BNE * -3”这条指令的地址)+(-3)
直接指向了转移后的有效地址
相对寻址也可与间接寻址配合使用
设相对寻址的转移指令占3个字节,第一个字节为操作码,第二三个字节为相对位移量(补码表示),而且数据在存储器中采用以低字节地址为首地址的存放方式。每当CPU从存储器中取出一个字节时,即自动完成(PC)+1->PC
1、如果PC当前值为240(十进制),要求转移到290(十进制),则转移指令的第二三字节的机器代码是什么?
2、如果PC当前值为240(十进制),要求转移到200(十进制),则转移指令的第二三字节的机器码是什么?
???????????????????????
堆栈寻址
如果1个字为32位,则1个字==4字节
如果1个字为16位,则1个字==2字节
堆栈寻址要求计算机中设有堆栈。堆栈即可用寄存器组(称为硬堆栈)来实现,也可以用主存的一部分空间做堆栈(软堆栈)。对战的运行方式为先进后出或者先进先出两种,先进后出型堆栈的操作数只能从一个口进行读或者写。
以软堆栈为例,可用堆栈指针(SP,Stack Point)指出栈顶地址,也可以用CPU中一个或者两个寄存器作为SP。操作数只能从栈顶指示的存储单元存或者取。
可见堆栈寻址也可视为一种隐含寻址(间接寻址),其操作数的地址总被隐含在SP中。
堆栈寻址的本质也可视为间接寻址,因为SP可是为寄存器,他存放着操作数的有效地址。
进栈PUSH A,出栈POP A
由于SP始终指示着栈顶地址,所以不论是执行进栈(PUSH)还是出栈(POP),SP的内容都需要发生变化。如果栈底的地址值大于栈顶地址,则每次进栈(SP)-变化值->SP; 每次出栈(SP)+变化值->SP;
变化值的取值与主存编码方式有关。若按字编址,则变化值==1,如果按自己编址,则需要根据存储字长是几个字节才能确定变化值,如果字长为16,则变化值为2
例:一条双字长直接寻址的子程序调用指令,其第一个字未操作码和寻址特征,第二个字位地址码5000H。假设PC当前值为2000H,SP的内容为0100H,栈顶内容为2746H,存储器按字节编址,而且进栈操作是先执行(SP)-变化值->SP,后存入数据。试回答下列几种情况下,PC,SP以及栈顶内容各为多少?
1、CALL指令被读取前
2、CALL指令执行后
3、子程序返回后
1、读取前:2000H,SP 0100H,栈顶内容2746H
2、执行后:PC 5000H,SP 00FEH ,栈顶内容 2004H
3、返回后:PC 2004H,SP 0100H, 栈顶内容 2746H
机器字长为32位,也就是按字节编址的话,CALL指令=4个字节
??????????????????汇编语言??????????????????????
采用汇编语言,用户只有知道机器的寻址方式,才能正确编程,否则程序无法正常运行
设计指令格式时应考虑的各种因素
1、操作类型:指令数以及操作的难易程度
2、数据类型:确定哪些数据类型可以参与操作
3、指令格式:指令字长、操作码位数、地址码位数、地址个数、寻址方式类型、以及指令字长和操作码位数是否可变
4、寻址方式:指令和操作数具体有那些寻址方式
5、寄存器个数:寄存器的多少直接影响机器的执行时间
指令格式举例
PDP-8
指令字长统一为12位,CPU内设一个通用寄存器,即累加器ACC,其主存被划分为若干个容量相等的存储空间(每个相同的空间被称为1页)。该记的指令格式可分为三大类)
访存类指令属于一地址指令。0~2位为操作码(只定义了000~101六种基本操作);3、4两位为寻址特征位,其中3位表示是否间接寻址,4位表示是当前页面(PC指示的页面)还是0页面;5~11位为地址码
为了扩大操作种类,对应操作码111又配置了辅助操作码,构成了寄存器类指令,这类指令主要对ACC进行各种操作,如清A,对A取反、对A移位、对A加1、根据A的结果是否跳转等
辅助操作码的每一位都有一个明确的操作
第三类指令是I/O类,用0~2位为110作标志,其具体操作内容由9~11位反应,3~8位表示设备号,总共可选64种设备
PDP-8指令格式支持间接寻址、变址寻址、相对寻址。加上操作码扩展技术,共有35条指令。
PDP-11
PDP-11机器字长为16位,CPU内设8个16为通用寄存器,其中两个通用寄存器有特殊作用,一个用作堆栈指针SP,一个用作程序计数器PC。
PDP-11指令字长有16位、32位、48位三种,采用操作码扩展技术,是操作码位数不固定,指令字的地址格式有零地址、一地址、二地址等共有13类指令格式
OP-CODE操作码
图中b为一地址格式,其中6位目的地址码中的3位为寻址特征位,另外三位表示8个寄存器中的任意一个
cde均为二地址格式指令
例如:OP-源地址-目的地址 操作数来源 寄存器-寄存器型
OP-目的地址-存储器地址 操作数来源 寄存器-存储器型
OP-源地址-目的地址-存储器地址1-存储器地址2 操作数来源 存储器-存储器型
PDP-11指令系统和寻址方式比较复杂,既增加了硬件的价格,又增加了编程的复杂度,但是好处是能变出非常高效的程序
IBM-360
IBM 360属于系列机,所谓系列机,就是指其基本指令系统相同,基本体系结构相同的一系列计算机。IBM370是完全向上兼容的。
IBM 360 是32位机器,按字节寻址,并可支持多种数据类型,如字节,半子,字、双字、压缩十进制数,字符串等。在CPU中有16个32位通用寄存器(用户可以选定任意一个寄存器作为基址寄存器BR或变址寄存器IX(IX,Index Register变址寄存器,适合做循环数组的),4个双精度(64位)浮点寄存器。指令字长有16位、32位,48位三种
图中共有五种指令格式,他们的操作码数均为8位。
RR格式是寄存器-寄存器格式,两个操作数均在寄存器中,完成(R1)OP(R2)->R1的操作
RX是二地址格式的寄存器-存储器型指令,一个操作数在寄存器中,另一个操作数在存储器中,完成(R1)OP M[(X)+(B)+D]->R1的操作
RS格式是三地址格式的寄存器-存储器型指令,完成(R3) OP M[(B)+D]->R1操作
SI格式中的I为立即数,他完成:立即数->M[(B)+D]的操作。
SS格式是存储器-存储器型指令,两个操作数均在在存储器,这类指令用于十进制运算和字符串处理,数据长度字段L可以定义为一个长度或者两个长度,它完成M[(B1)+D1] OP M[(B2)+D2]->M[(B1)+D1] 的操作
Intel 8086系列机
Intel 8086系列微型计算机的指令长为1~6个字节,即不定字长。
例如,零地址格式的空操作指令NOP只占一个字节
一地址格式的CALL指令可以是3字节(段内调用)或者5字节(段间调用)
二地址格式中的两个操作数既可以是寄存器-寄存器型,寄存器-存储器型,也可以是寄存器-立即数,或者存储器-立即数型,他们所站的字节数分别为2、2~4,2~3,3~6个字节
指令格式设计举例
设某机配有基址寄存器和变址寄存器,采用一地址格式的指令系统,允许直接和间接寻址,且指令字长、机器字长和存储字长均为16位。
1、如果采用单字长指令,共能完成105种操作,则指令可直接寻址的范围是多少?一次间接寻址的寻址范围是多少?
在单子长指令中,根据能完成105种操作,取操作码7位。因为允许直接和间接寻址,且有基址寄存器和变址寄存器,故取2位寻址特征位。
指令格式:OP=7+M=2+A=7
其中。OP为操作码,可完成105种操作,M为寻址特征,可反映4种(直接,间接,基址寻址、变址寻址)寻址方式,
可直接寻址范围为2(7)=128,一次间接寻址的寻址范围为2(16)(因为机器的存储字长为16)
2、如果存储字长不变,可采用什么方法直接访问容量为16MB的主存?
容量为16MB,因为机器字长为16,所以要求直接寻址范围为1MB=2(23)=2(7+16)
所以,可采用双字长指令,OP=7,M=2,形式地址为AD1//AD2,共2(7+16)=2(23),即可访问主存中的任意位置。
例:某模型机共有64种操作,操作码位数固定,且具有以下特点
1、采用一地址或二地址格式
2、采用寄存器寻址、直接寻址和相对寻址(位移量为-128~+127)三种寻址方式
3、有16个通用寄存器,算术运算和逻辑运算的操作数均在寄存器中,结果也在寄存器中
4、取数/存数指令在通用寄存器和存储器之间传送数据
5、存储器容量为1MB,按字节编址
要求设计算逻指令,取数/存数指令和相对转移指令的格式,并简述理由
1、算逻指令
因为:有16个通用寄存器,算术运算和逻辑运算的操作数均在寄存器中,结果也在寄存器中
所以,OP=7,M=2,A1=4,A2=4(因为2(4)=16,对应着16个通用寄存器
2、取数/存数指令
因为:取数/存数指令在通用寄存器和存储器之间传送数据
所以:存储器容量为1MB,按字节(8位)编址,所以直接寻址范围为2(20)=2(4+16)
OP=7,M=2,R1=4,A1+A2=20
3、相对转移指令
因为:相对寻址(位移量为-128~+127),也就是说寻址范围为129*2=256
所以:OP=6,M=2,A=(16-6-2)=8
16MB==16M个字节
16M字==16MB*(每个字多少个字节)
即B==字节!=字
例:设某机共能完成110种操作,CPU有8个通用寄存器(16位),主存容量为4M字,采用寄存器-存储器型指令
1、于是指令可直接访问主存的任意地址,指令字长应取多少位?划出指令格式
欲使指令可直接访问4M字存储器的任意单元,采用寄存器-存储器型指令,该机指令应包括22位地址码,3位寄存器编号和7位操作码,即指令字长为22+3+7=32位
OP=7,R=3,A=22
2、若在上述涉及的指令字中设置一寻址特征位X,且X=1表示某个寄存器做基址寄存器,划出指令格式,试问基址寻址可否访问主存的任意单元?如果不能,提出一种方案,使其可访问主存的任意位置
OP=7,R=3,X=1,Rb=3,A=18
由于通用寄存器仅16位,形式地址位16位,不足以覆盖4M地址空间,可以将Rb寄存器的内容左移6位,低位补零,形成22位基地址,然后与形式地址相加,所得的有效地址即可访问4M字存储单元的任意单元
3、如果主存容量扩大到4G字,且存储字长等与指令字长,则在不改变上述硬件结构的前提下,可采用什么方法使指令可访问存储器的任意位置?
如果将主存容量扩大到4G字,且存储字长等与指令字长,则在不改变上述硬件结构的前提下,采用一次间接寻址(32位)即可访问存储器中的任意单元,因为间接寻址后得到的有效地址为32位,2(32)=4G
RISC技术
RISC即精简指令系统计算机(Reduced Instruction Set Computer),与其对应的是CISC(Complex Instruction Set Computer)复杂指令系统计算机
RISC的主要特征
在提高性能方面,RISC还采取了很多有效措施,做有效的方法就是减少指令的执行周期数
计算机执行程序所需要的时间P:
P=I*C*T
其中,I是高级语言程序编译后在机器上运行的机器指令数
C未执行每条机器指令所需的平均机器周期
T是每个机器周期的执行时间
RISC机的指令格式比较简单,寻址方式也比较少,如RISC II的指令格式有两种:短立即数格式和长立即数格式。指令字长固定为32位,指令字中每个字段都有固定位置
短立即数格式指令主要用于算逻运算,其中第31位~25位为操作码;两个操作数一个在rs1中,另一个操作数的来源由指令的第13位决定。当其为0时,第二个操作数在寄存器rs2中,当其为1时,第二个操作数为13位的立即数imm13.运算结果存放在DEST所指示的寄存器rd中(共32个)。指令字中的第24位S用来表示是否需要根据运算结果置状态位,S=1表示置状态位。RISC II机有4个状态位,即零标志位Z、负标志位N、溢出标志位V、进位标志位C。
指令中的DEST字段在条件转移指令中用第22~第19位作为转移条件,第23位无用。
对于图中所示的短立即数指令格式,其imm13即为相对转移位移量。
长立即数指令格式主要用于相对转移指令,此时19位的立即数imm19指出转移指令的相对位移量,与13位相比,可扩大相对于PC的转移距离
3、寻址方式
RISC II指令系统有两种访存寻址方式。一种是变址寻址,另一种是相对寻址,还可以用组合寻址方式产生其它寻址方式。若变址寄存器内容为0(因为该机约定寄存器R0内容恒为0,所以只要指定R0作为变址寄存器即可实现),则成为直接寻址方式,如果另位移量为0,则成为寄存器间接寻址方式
对于LOAD指令,可根据计算所得的有效地址,从存储器中读取数据并送入到DEST字段中指示的目的寄存器中。如短立即数指令的有效地址为:(rs1)+(rs2),或者为(rs1)+imm13
对于STORE指令,是将DEST字段指示的源寄存器中的数据取出并存入存储器中,有效地址的计算与LOAD指令相同
RISC指令系统的扩充
从实用角度出发,商品化的RISC机,因用途不同还可扩充一些指令,例如:
1、浮点指令:用于科学计算的RISC机,为了提高机器速度而增设浮点指令
2、特权指令:为了便于操作系统管理机器,防止用户破坏机器的运行环境而特设特权指令
3、读后置数指令,完成读-修改-写,用于寄存器与存储单元交换数据
4、一些简单的专用指令。例如,某些指令用的较多,实现起来又比较复杂,如果用子程序来实现,占用较多的时间,者可考虑设置一条指令来缩短子程序的执行时间。有些机器用乘法步指令来加快乘法运算的执行速度
RISC机的主要特点
1、选取使用频度较高的一些简单组合以及一些很有用但又不复杂的指令,让复杂指令的功能有频度高的简单指令的组合来实现。
2、指令长度固定,指令格式种类少,寻址方式种类少
3、只有取数/存数(LOAD/STORE)指令访问存储器,其余指令的操作都在寄存器内完成。
4、CPU中有多个通用寄存器
5、采用流水线技术、大部分指令在一个时钟周期内完成。采用超标量和超流水线技术,可是每条指令的平均执行时间小于一个时钟周期
6、控制器采用组合逻辑控制,不用微程序控制
7、采用优化的编译程序
商品化的RISC机通常不会是纯RISC机,故上述这些特点不是所有RISC机全部具备的
相比之下,CISC的指令系统复杂庞大,各种指令使用频度相差很大,指令字长不固定,指令格式多,寻址方式多
可以访存的指令不受限制
CPU中设有专用寄存器
绝大多数指令需要多个时钟周期方可执行完毕,采用微程序控制器,难以用优化编译生成高效的目标代码
RISC与CISC的比较
与CISC相比,RISC机的主要优点可归纳如下:
1、充分利用VLSI芯片的面积
CISC记得控制器大多采用微程序控制,其控制存储器在CPU芯片内所占的面积为50%以上。而RISC机控制器采用组合逻辑控制,其硬布线逻辑只占CPU芯片面积的10%左右,可见它可将空出的面积供其它功能部件使用,例如用于增加大量的通用寄存器(Sun微系统公司的SPARC有100多的通用寄存器),或将存储管理不见也集成到CPU芯片内。以上两种芯片的及成都分别小于10万个和20万个晶体管
随着半导体工艺技术的提高,集成度可达100万至几百万个晶体管,此时无论时CISC还是RISC都将多个功能部件集成在一个芯片内。但此时RISC已占领了市场,尤其是在工作站领域占有明显的优势
2、提高计算机运行速度
RISC机能提高运算速度,主要反映在以下五个方面:
1、RISC记得指令数、寻址方式和指令格式种类较少,而且指令的编码很有规律,因此RISC的指令译码比CISC的指令译码快。
2、RISC机内通用寄存器多,较少了访存速度,可加快运行速度
3、RISC及采用寄存器窗口重叠技术,程序嵌套是不必将寄存器内容保存到存储器中,所以有提高了执行速度。
4、RISC机采用组合逻辑控制,比采用微程序逻辑控制的CISC机的延迟小,缩短了CPU的周期
5、RISC机选用精简指令系统,适合于流水线工作,大多数指令在一个时钟周期内完成
3、便与设计,可降低成本,提高可靠性
RISC机指令系统简单,故机器设计周期短
RISC机逻辑简单,设计出错可能性小,有错时也容易发现,可靠性高
4、有效支持高级语言程序
RISC机靠优化编译来更有效地支持高级程序语言。由于RISC指令少,寻址方式少,使编译程序容易选择更加有效的指令和寻址方式,而且由于RISC机的通用寄存器多,可尽量安排寄存器的操作,使编译程序的代码优化效率提高。例如,IBM研究人员发现,IBM 801 (RISC)机产生的代码大小是IBMS(CISC)的90%
有些RISC急采用寄存器串口重叠技术,使过程间的参数传送加快,且不必保存与恢复现场,能直接支持调用子程序和过程的高级程序语言。
此外,从指令系统兼容性看,CISC大多能实现软件兼容,即高档机包含了低档机的全部指令,并可加以扩充。但是RISC机简化了指令系统,指令数量少,格式也不同于老机器,因此大多数RISC机不能与老机器兼容
CPU的结构和功能
CPU实际包括运算器和控制器两大部分
对于冯诺依曼结构的计算机而言,一旦程序进入存储器后,就可由计算机自动完成取指令和执行指令的任务,控制器就是专用于完成此项工作的,他负责协调并控制计算机各部件执行程序的指令序列,其基本功能是取指令,分析指令和执行指令
1、取指令
控制器必须具备能自动的从存储器中取出指令的功能。为此,要求控制器能自动形成指令的地址,并发出取指令的命令,将对应此地址的指令去到控制器中。第一条指令的地址可以人为设定,也可以有系统设定
2、分析指令
分析指令包括两部分的内容:其一,分析此指令要完成什么操作,即控制器需要发出什么操作命令;其二、分析参与这次操作的操作数地址,即操作数的有效地址
3、执行指令
执行指令就是根据分析指令产生的操作指令和操作数地址的要求,形成操作控制信号序列(不同指令有不同的操作控制信号序列),通过对运算器、存储器以及I/O设备的操作,执行每条指令
此外,控制器还必须能控制程序的输入和运算结果的输出(即控制主机与I/O设备交换信息)以及对总线的管理,甚至能处理机器运行过程中出现的异常情况(如掉电)和特殊请求(如打印机请求打印一行字符),及处理中断的能力
总之,CPU必须具有控制程序的顺序执行(称指令控制)、产生完成每条指令所需的控制命令(称为操作控制)、对各种操作加一时间上的控制(称为时间控制)、对数据进行算术运算和逻辑运算(数据加工)以及处理中断等功能。
CPU结构框图
根据CPU的功能不难设想,要取指令,必须有一个寄存器专用于存放当前指令的地址;
要分析指令,必须有存放当前指令的寄存器和对指令操作码进行译码的部件
要执行指令,必须有一个能发出各种操作命令序列的控制部件CU
要完成算术运算和逻辑运算,必须有存放操作数的寄存器和实现算逻运算的部件ALU;
为了处理异常情况和特殊请求,还必须有中断系统。
可见,CPU可由四大部分组成
CPU==ALU+寄存器+中断系统+CU(控制器)
CPU的寄存器
最上层的寄存器速度最快,容量最小,价格最贵,他们通常设在CPU内部
CPU中的寄存器大致可分为两类:一类属于用户可见的寄存器,用户可对这里寄存器进行编程,以及通过优化使CPU因使用这类寄存器而减少对主存的访问次数;
另一类属于控制和状态寄存器,用户不可以对这类寄存器编程,他们被控制部件使用,以控制CPU的操作,也可以被带有特权的操作系统程序使用,从而控制程序的执行;
1、用户可见寄存器
通常CPU执行机器语言访问的寄存器位用户可见的寄存器,按其特征又可分为以下几类:
1、通用寄存器
通用寄存器可由程序设计者指定许多功能,可用于存放操作数,也可作为满足某种寻址方式所需的寄存器。
例如:基址寻址寄存器所需的基址寄存器BR、变址寄存器所需的变址寄存器和堆栈寻址所需的栈指针,都可以用通用寄存器代替。
寄存器间接寻址时还可以用通用寄存器存放有效地址的地址
当然,也有一些机器用专用寄存器作为基址寄存器、变址寄存器或栈指针,这样,再设计指令格式时只需要将这类专用寄存器隐含在操作码中,而不必占用指令字中的位。
图中所示的就是用专用寄存器作为基址寄存器,另一图使用通用寄存器作为基址寄存器,所以指令之中必须有R字段指出寄存器编号(通用寄存器编号)(如果是专用寄存器的话,就是很少的那么几个专用寄存器,所以一说就知道了,可以隐含在操作码中,不需要指出寄存器编号)。
图中所示的IBM 360 指令格式中,由于用通用寄存器作为变址寄存器IX和基址寄存器BR,所以在指令字中设有X和B字段,分别指出作为变址寄存器和基址寄存器的通用寄存器编号。
2、数据寄存器
数据寄存器用于存放操作数,其位数应满足多数数据类型的数值范围,有些机器允许使用两个连续的寄存器存放双倍字长的值。还有些机器的数据寄存器只能用于保存数据,不能用于操作数地址的计算。
3、地址寄存器
地址寄存器用于存放地址,其本身可以具有通用性,也可以用于特殊的寻址方式,如用于基址寻址的段指针(存放基地址)、用于变址寻址的变址寄存器、用于堆栈寻址的栈指针。地址寄存器的位数必须足够长,以满足更大的地址范围
4、条件码寄存器
这类寄存器中存放条件码,他们对于用户来说是透明的。条件码是CPU根据运算结果由硬件设置的位,例如:算术运算会产生正负零或者溢出等结果。
条件码可被测试,作为分支运算的依据。
此外,有些条件码也可被设置,例如,对于最高位进位标志C,可用指令对它进行置位和复位。
讲条件码放到一个或多个寄存器中,就构成了条件码寄存器。
在调用子程序之前,必须将所有的用户可见寄存器的内容保存起来,这种保存可由CPU自动完成,也可以有程序员编程保存,视不同机器进行不同处理
2、控制和状态寄存器
CPU中还有一类寄存器用于控制CPU的操作或者运算。在一些机器里,大部分这类寄存器对用户是透明的。如以下四种寄存器在指令执行过程中起重要的作用。
1、MAR(主存地址寄存器,Memory Adress Register,MAR):存储器地址寄存器,用于存放将被访问的存储单元的地址
2、MDR:(MDR,Memory Data Register)存储器数据寄存器,用于存放欲存入存储器内的数据或者最近从存储器中读出的数据
3、PC:程序计数器,存放现行指令的地址,通常具有计数功能。当遇到转移类指令时,PC值可被修改
4、IR:(Instruction Register,IR)指令寄存器,存放当前欲执行的指令
通过这四个寄存器(MAR,MDR,PC,IR),CPU与主存可交换信息。例如:将现行指令地址从PC送至MAR,启动存储器作读操作,存储器就可将指定地址单元内的指令读至MDR,再由MDR送至IR
在CPU内部必须给ALU提供数据,因此ALU必须可直接访问MDR和用户可见寄存器,ALU的外围还可以有另一些寄存器,这届寄存器用于ALU的输入和输出以及用于和MDR机用户可见寄存器交换数据
在CPU的控制和状态寄存器中,还有用来存放程序状态字PSW的寄存器(Program Status Word,PSW程序状态字),该寄存器用来保存条件码和其他状态信息。在具有中断系统的机器中还有中断标记寄存器。
举例:不同计算机的CPU中,寄存器组织是不一样的,图1有16个16位的通用寄存器,这些寄存器可存放地址,数据,也可以作为变址寄存器,其中有两个寄存器被用作栈指针,寄存器可被用作8位和32位的运算。
Z8000中有5个与程序状态有关的寄存器,一个用于存放状态标记,两个用作程序计数器,两个用于存放偏移量,确定一个地址需要两个寄存器
Intel 8086采用不同的寄存器组织,尽管某些寄存器可以通用,但他的每个寄存器大多是专用的。它有4个16位的数据寄存器,即AX(累加器),BX(基址寄存器),CX(计数寄存器)和DX(数据寄存器),也可以兼做8个8位的寄存器(AH,AL,BH,BL,CH,CL,DH,DL),另外,还有两个16位的指针(栈指针SP和基址指针BP)和两个变址寄存器(源变址寄存器SI和目的变址寄存器DI)。在一些指令中,寄存器是隐式使用的,如乘法指令总是用累加器。8086还有4个段地址寄存器,(代码段CS,数据段DS,堆栈段SS,和附加段ES)以及指令指针IP(相当于IP)和状态标志寄存器F。
MC68000的寄存器组织介于Zilog和Intel微处理器之间,它将32位寄存器分为8个数据寄存器和9个地址寄存器。数据寄存器主要用于数据计算,当需要变址时,也可做变址寄存器使用。寄存器允许8位、16位和32位的数据计算,这由操作码确定。地址寄存器存放32位地址,其中两个也可用作对栈指针,分别供用户和操作系统使用。针对当前执行的模式,这两个寄存器在某个时刻只能用一个。此外,MC68000还有一个32位的程序计数器PC,和一个16位的状态寄存器。
与Zilog的设计者类似,Motorola设计的寄存器组织也不含专用寄存器。至于到底什么形式的寄存器组织最好,目前尚没有一致的观点名主要有设计者根据需要决定
计算机的设计者们,为了给在早期计算机上编写的程序提供向上兼容性,在新计算机的设计上经常保留元设计的寄存器组织形式。图中为Zilog80000和Intel80386的用户可见寄存器组织,他们分别是Z8000和8086的扩展,他们都采用了32位寄存器,但又分别保存了原来的一些特点啊,由于受这种限制,因此32位处理器在寄存器组织的设计上只有有限的灵活性。
控制单元和中断系统。
控制单元(CU,Control Unit控制单元)是提供完成计算机全部指令操作的微操作命令序列部件。现代计算机中位操作命令序列的形成方法有两种:一种是组合逻辑设计方法,为硬连线逻辑,另一种是微程序设计方法,为存储逻辑。
中断系统主要用于处理计算机的各种中断。
指令周期
指令周期的基本概念
CPU每取出并执行一条指令所需的全部时间称为指令周期,也即CPU完成一条指令的时间。图中的取指阶段完成取指令和分析指令的操作,又称取值周期
执行阶段完成执行指令的操作,又称执行周期。在大多数情况下,CPU就是按取值-执行-在取值-在执行的顺序自动工作的。
由于各种指令操作功能不同,因此各种指令的指令周期是不相同的。例如,无条件转移指令“JMP X”,在执行阶段不需要访问主存,而且操作简单,完全可以在取值阶段的后期将转移地址X送至PC,已达到转移的目的。这样,JMP X指令的指令周期就是取值周期。又如一地址格式的加法指令“ADD X”,在执行阶段首先要从X所指示的存储单元中取出操作数,然后和ACC的内容相加,结果存于ACC,故这种指令的指令周期在取值和执行阶段各访问一次存储器,其指令周期就包括两个存取周期。再如乘法指令,其执行阶段所要完成的操作比加法指令多得多,故它的执行周期超过了加法指令。
乘法指令的执行周期比较法指令的执行周期长
无条件转移指令的取值周期等于指令周期
此外,当遇到间接寻址的指令时,由于指令字中止给出操作数有效地址的地址,因此,为了取出操作数,需先访问一次存储器,取出有效地址,然后再访问存储器,取出操作数。这样,间接寻址的指令周期就包括了取值周期,间址周期和执行周期三个阶段。其中间址周期用于操作数的有效地址,因此间址周期介于取值周期和执行周期之间
当CPU采用中断方式实现主机与I/O设备交换信息时,CPU在每条指令的执行阶段结束前,都要发中断查询信号,以检测是否有某个I/O设备提出中断请求。如果有请求,CPU则要进入中断响应阶段,又称中断周期。在此阶段,CPU必须将程序断点保存到存储器中。这样,一个完整的指令周期应包括取址、间址、执行和中断四个子周期。由于间址周期和中断周期不一定包含在每个指令周期内,所以用菱形判断。
总之,上述四个周期都有CPU访存操作,只是访问的目的不同。
取值周期是为了取指令
间址周期是为了取有效地址
执行周期是为了去操作数(当指令为访存指令时)
中断周期是为了保存程序断点
这4个周期可称为CPU的工作周期
为了区别他们,在CPU内可设置4个标志触发器。
图中所示的FE、IND、EX、INT分别对应取址、间址、执行、和中断4个周期,并以1状态表示有效,他们分别由1->FE,1->IND,1->EX,1->INT这4个信号控制。
设置CPU工作周期标志触发器对设计控制单元十分有利。例如,在取址阶段,只要设置取值周期标志FE为1,由他控制取值阶段的各个操作,便获得对任何一条指令的取值序列。又如,在间址寻址时,间址次数可由间址周期标志触发器IND确定,当他的状态为0时,标志间接寻址结束,再如,对于一些执行周期不访存的指令,同样可以用他们的操作码与取值周期标志触发器状态相“与&”,作为相应微操作的控制条件。
指令周期的数据流
为了便于分析指令周期中的数据流,假设CPU中有存储器地址寄存器MAR,存储器数据寄存器MDR,程序计数器PC和指令寄存器IR
1、取值周期的数据流
PC中存放现行指令的地址,将改地址送到MAR并送至地址总线,然后由控制部件CU通过控制总线向存储器发读命令,使对应的MAR所指存储器单元的内容经数据总线送至MDR,在送至IR,并且CU控制PC内容加1,形成下一条指令的地址
2、间址周期的数据流
间址周期的数据流如图所示。一旦取值周期结束,CU便检查IR指令寄存器中的内容,以确定其是否有间址操作,如果需要间址操作,则MDR中形式地址的右N位(记作Ad(MDR))将被送到MAR,又送到数据总线,此后CU向存储器发送读命令,以获取有效地址并将有效数据存至MDR。
3、执行周期的数据流
由于不同的指令在执行周期的操作不同,因此执行周期的数据流是多种多样的,可能涉及到CPU内部寄存器件的数据传送,对存储器或者I/O进行读写操作或者对ALU的操作,因此,无法用统一的数据流图表示
4、中断周期的数据流
CPU进入中断周期后要完成一系列操作。其中PC当前的内容必须保存起来,以待执行完中断服务程序后可以准确返回该程序的间断处。
图中由CU将用于保存程序断点的存储器特殊地址(存放地当前PC地址的存储器的地址)(入栈指针的内容)送往MAR,然后送到数据总线,然后送到存储器,然后由CU向存储器发出写命令,并将PC的内容(程序断点的地址)送到MDR(此时将地址信息当做数据送到MDR),最终使程序断点经数据总线存入存储器。此外,CU还需将中断服务程序的入口地址送至PC,为下一个指令周期的取值周期做好准备
整个流程:地址的地址:CU->MAR->DB->MM
控制信息:CU->CB->MM
地址:PC->MDR->数据总线->MM
中断程序入口地址:CU->PC
指令流水
有前面各章的介绍可知,为了提高访存速度,
一方面要提高存储芯片的性能,
另一方面可以从体系结构上,如采用多体、Cache等分级存储措施来提高存储器的性能/价格比。
为了提高主机与I/O设备交换信息的速度,
可以采用DMA方式,
也可以采用多总线结构,将速度不一的I/O分别挂到不同贷款的总线上,已解决总线的瓶颈问题。
为了提高运算速度,
可以采用高速芯片和快速进位链,
以及改进算法等措施
为了进一步提高处理机的速度
通常可以从
提高器件的性能和
改进系统结构,
开发系统的并行性两方面入手
1、提高器件的性能
提高器件性能一直是提高整机性能的重要途径,计算机的发展史就是按期间把计算机分为电子管、晶体管、集成电路和大规模集成电路4带。器件的每一次更新换代都是计算机的软硬件技术和计算机的性能获得突破性的进展。特别是大规模集成电路的发展,由于其集成度高,体积小,功耗低,可靠性高,价格便宜等特点,使人们可以采取更复杂的系统构造出性能更好、工作更可靠、价格更低的计算机。但是由于半导体器件的集成度越来越接近于物理极限,使器件速度的提高越来越慢。
2、改进系统的结构,开发系统的并行性
所谓并行,包含同时性和并发性两个方面。前者是指两个或者多个事件在同一时刻发生,后者是指两个或多个时间在同一时间段发生。也就是说,在同一时刻或同一时间段内完成两种或两种以上性质相同或不同的功能,只要在时间上互相重叠,就存在并行性
并行性体现在不同等级上。通常分为4个级别:
作业级或程序级、
任务级或进程级
指令之间级
和指令内部级。
前两级为粗粒度:作业级或程序级、任务级或进程级,又称过程级
后两级为细粒度:指令之间级+指令内部级 又称指令级
粗粒度并行性(Coarse-grained Paralelism)一般用算法(软件)实现,细粒度并行性(Fine-grained Parallelism)一般用硬件实现
从计算机体系上看,粗粒度并行是在多个处理机上分别运行多个进程,由多台处理机合作完成一个程序,
细粒度并行是指在处理机的操作级和指令集上的并行性,
其中指令的流水作业就是一项重要技术
这里只讨论有关指令流水的一些主要问题,其他的有关粗粒度并行和粗粒度并行技术将在计算机体系结构中讲述
指令流水原理:
指令流水类似于工厂的装配线,装配线利用了产品在装配的不同阶段其装配过程不同这一特点,是不同产品处在不同的装配段上,即每个装配段同时对不同产品进行加工,这样可以大大提高装配效率。将这种装配生产线的思想用到指令的执行上,就引出了指令流水的概念
从上面的分析可知,完成一条指令实际上也可分为许多阶段。为了简单起见,把指令的处理过程分为取指令和执行指令两个阶段,在不采用流水技术的计算机里,取指令和执行指令是周而复始重复出现,各条指令按顺序串行执行的
图中取指令的操作可由指令部件完成,执行指令的操作可由执行部件完成。
进一步分析发现,这种顺序执行虽然简单,但是执行中各部件的利用率不高,如指令部件工作时,执行部件基本空闲,而执行部件工作时,指令部件基本空闲。如果指令执行阶段不访问主存,则完全可以利用这段时间取下一条指令,这样就使取下一条指令的操作和执行当前指令的操作同时进行
两条指令的重叠,即指令的二级流水
由指令部件取出一条指令,并将它暂存起来,如果执行部件空闲,就将暂存的指令传给执行部件执行。与此同时,指令部件又可取出下一条指令并暂存起来,这称为指令的预取。显然,这种工作方式能加速指令的执行。如果取值和执行阶段在时间上完全重叠,相当于将指令周期减半。然而进一步分析流水线,就会发现存在两个原因使得执行效率加倍是不可能的
1、指令的执行时间一般大于取值时间,因此,取址阶段可能要等待一段时间,也就是存放在指令部件缓冲区的指令还不能立即传给执行部件,缓冲区不能空出。
2、当遇到条件转移指令时,下一条指令是不可知的,因为必须要等到执行阶段结束后,才能知道条件是否成立,从而决定下一条指令的地址,造成了时间损失
通常为了减少时间损失,采用猜测法,即当条件转移指令从取址阶段进入执行阶段时,指令部件仍按顺序与取下一条指令。这样,如果条件不成立,转移没有发生,则没有时间损失。如果条件成立,则所取得指令必须丢掉,并再取新的指令。
尽管这些因素降低了两极流水线的潜在效率,但是还是可以获得一定程度的加速。为了进一步提高处理速度,可将指令的处理过程分解为更细的几个阶段
1、取址(FI):从存储器中取出一条指令并暂时存入指令部件的缓冲区
2、指令译码(DI):确定操作性质和操作数地址的形成方式
3、计算操作数地址(CO):计算操作数的有效地址,设计寄存器间接寻址,间接寻址、变址、基址、相对寻址等各种地址计算方式
4、取操作数(FO):从存储器中取操作数(若操作数在寄存器中,则不需要此阶段)
5、执行指令(EI):执行指令所需的操作,并将结果存于目的位置(寄存器中)。
6、写操作数(WO):将结果存入存储器
为了说明方便起见,假设上述各段的时间都是相等的(即每段都为一个事件单元),于是可得到图示的指令六级流水时序。在这个流水线中,处理器有6个操作部件,同时对6条指令进行加工,加快了程序的执行速度
图中9条指令如果不采用流水线技术,最终出结果需要54个时间单元,采用六级流水只需要14个时间单元就可以得出最后结果,大大提高了处理器速度。当然,图中假设每条指令都经过流水线的6各阶段,但事实并不总这样。
例如,取指令并不需要WO阶段。
此外,这里还假设不存在存储器访问冲突,所有阶段均并行执行。如FI、FO、和WO阶段都涉及存储器访问,如果出现冲突就无法并行进行。图中示意了所有这些访问都可以同时进行,但是多数存储系统做不到这点,从而影响了流水线的性能。
还有一些其他因素也会影响流水线性能,例如。6个阶段时间不等或遇到转移指令,都会出现讨论的二级流水出现的问题。
影像流水线性能的因素
要是流水线具有良好的性能,必须设法使流水线能顺畅流通,即必须做到充分流水,不发生断流。但通常由于在流水过程中会出现三种相关,是流水不断流实现起来很困难,这三种相关是结构相关,数据相关,和控制相关
结构相关是当多条指令进入流水线后,硬件资源满足不了指令重叠执行的要求时产生的,
数据相关是指令在流水线中重叠执行时,当后继指令需要用到前面指令的执行结果时发生的
控制相关是当流水线遇到分支指令和其它改变PC值的指令时引起的。
为了方便讨论起见,假设流水线由5段组成,他们分别是取指令(IF),指令译码/读寄存器(ID)、执行/访存有效地址计算(EX)、存储器访问(MEM)、结果写回寄存器(WB)
不同类型指令在各流水段的操作是不同的,表中列出了ALU类指令、访存类(取数、存数)指令和转移类指令在各流水段中所进行的操作
取指令–指令译码–执行指令–存储器访问–结果写回
下面分析上述三种相关对流水线工作的影响
1、结构相关
结构相关是当指令在重叠执行过程中,不同指令争用同一功能部件产生资源冲突时产生的,固又有资源相关之称。
通常,大多数机器都是将指令和数据保存在同一存储器中,且只有一个访问口,如果在某个时钟周期内,流水线既要完成某条指令对操作数的存取器访问操作,又要完成另一条指令的取址操作,这就会发生访存冲突。在第4个时钟周期,第i条指令(LOAD)的MEM段和第i+3条指令的IF段发生了访存冲突。解决冲突的方法可以让流水线在完成前一条指令对数据的存储器访问时,暂停(一个时钟周期)取后一条指令的操作。当然,如果第i条指令不是LOAD指令,在MEM段不访存,也就不会发生访存冲突
解决访存冲突的另一个方法是设置两个独立的存储器分别存放操作数和指令,以免取指令和取操作数同时进行时相互冲突,使取某条指令和取另一条指令指令的操作数实现时间上的重叠。还可以采用指令预取技术,例如,在CPU(8086)中设置指令队列,将指令预先取到指令队列中排队。指令预取技术的实现基于访存周期很短的情况,例如,在执行指令阶段,取数时间很短,因此在执行指令时,主存会有空闲,此时,只要指令队列空出,就可以取下一条指令,并放至空缺的指令队列中,从而保证在执行第K条指令的同时对第K+1条指令进行译码,实现“执行K”与分析“K+1”的重叠
2、数据相关
数据相关是流水线中的各条指令因重叠操作,可能改变对操作数的读写访问顺序,从而导致了数据相关冲突。例如,流水线要执行以下两条指令:
ADD R1,R2,R3 ;(R2)+(R3)->R1
SUB R4,R1,R5 ; (R1)-(R5)->R4
这里第二条SUB指令中R1的内容必须是第一条ADD指令的执行结果。课间正常的读写顺序是现由ADD指令写入R1,再由SUB指令来读R1。在非流水线时,这种先写后读的顺序是自然维持的。但在流水线操作时,由于重叠操作,试读写的先后顺序发生了变化,
由表可见,在第5个时钟周期,ADD指令方可将运算结果写入R1,但后继SUB指令在第三个时钟周期就要从R1中读数,使先写后读的顺序改变为先读后写,发生了先写后读的数据冲突。如果不采取相应的措施,按表中的读写顺序,就会使操作出错。解决这种数据相关的方法可以采用后退法,即遇到数据相关时,就停顿后继指令的运行,直至前面指令的结果已经生成。
例如:流水线要执行下列指令序列
ADD R1,R2,R3 ;(R2)+(R3)->R1;
SUB R4,R1,R5 ; (R1)-(R5)->R4
其中,第一条ADD指令将向R1寄存器写入操作结果,后继的4条指令都要使用R1中的值作为一个源操作数,显然,这时就出现了前述的RAW数据相关。
RAW 为Read And Write
表中列出了未对数据相关进行特殊处理的流水线,表中ADD指令在WB段才将计算结果写入寄存器R1中,但SUB指令在其ID段就要从寄存器R1中读取该计算结果。同样,AND指令、OR指令,也要受到这种相关关系的影响。对于XOR指令,由于其ID段(第6个时钟周期)在ADD指令的WB(第五个时钟周期)之后,因此可以正常操作
如果采用后推法,即将相关指令延迟到所需操作数被写回到寄存器后再执行的方式,就可以解决这种数据相关冲突,其流水线如表,需要是流水线停顿3个时钟周期
另一种解决办法是采用定向技术,又称为旁路技术或相关专用通路技术。其主要思想是不必待某条指令的执行结果送回到寄存器后,在从寄存器中取出该结果,作为下一条指令的源操作数,而是直接将执行结果送到其他指令所需要的地方。上述5条指令序列中,实际要写入R1的ADD指令在EX段末尾已经形成,如果设置专用通路技术,将此时产生的结果直接送往需要的SUB,AND,OR指令的EX段,就可以使流水线不发生停顿。显然,此时要对3条指令进行定向传送操作。图示了带有旁路技术的ALU执行部件。图中有两个暂存器,当AND指令将进入EX段时,ADD指令的执行结果已存入暂存器2,SUB指令的执行结果已存入暂存器1,而暂存器2的内容(存放送往R1的结果)可通过旁路通道,经多路开关送到ALU中。这里的定向传送仅发生在ALU内部。
根据指令间对同一寄存器读和写操作的先后次序关系,数据相关冲突可分为写后读相关(RAW,Read After Write先写后读相关)、先读后写相关(WAR相关,)和写后写相关(WAW)。例如,有i和j两条指令,i指令在前,j指令在后,则三种不同类型的数据相关含义如下。
1、写后读相关:指令j试图在指令i写入寄存器前就读出该寄存器的内容,这样,指令j就会错误的读出该寄存器旧的内容
2、读后写相关:指令j试图在指令i读出寄存器之前就写入寄存器
(记忆方法:读后写相关,按照正常不出错应该是先读后写,但是试图先写入,后读出
3、写后写相关:指令j试图在指令i写入寄存器之前就写入该寄存器,这样,两次写的先后顺序就会颠倒,就会错误的使由指令i写入的支撑位寄存器中的内容
上述三种数据相关在按序流动的流水线中,只可能出现RAW相关。在非按序流动的流水线中,由于允许后进入流水线的指令超过先进入流水线的指令而先流出流水线,则极可能发生RAW相关,还可能发生WAR和WAW相关。
3、控制相关
控制相关主要是由转移指令引起的。统计表明,转移指令约占总指令的1/4左右,比起数据相关来,他会使流水线丧失更多的性能。当转移发生时,将使流水线的连续流动受到破坏。当执行转移指令时,根据是否发生转移,他可能将程序计数器PC内容改变成转移目标地址,也可能只是将PC加上一个增量,指向下一条指令的地址。图中示意了条件转移的效果。这里使用了和图中相同的程序,并假设指令3是一条条件转移指令,即指令3必须等待指令2的结果出来后才能决定下一条指令是4还是15,由于结果无法预测,此流水线继续与取指令4,并向前推进。当最后结果满足条件时,发现4567条指令所做的操作全部报废。在第8个事件单元,指令15进入流水线。在时间单元9~12之间没有指令完成,这就是由于不能预测转移条件而带来的性能损失。图中的因为转移条件不成立,未发生转移,得到了较好的流水线性能。
为了解决控制相关,可以采用尽早判别转移条件是否发生,尽早生成转移目标地址;
预取转移成功或不成功两个控制流方向上的目标指令;
加快和提前形成条件码
提高转移方向的猜准率等方法
流水线性能
流水线性能通常用吞吐率,加速比,和效率3项指标来衡量
1、吞吐率(Throughput Rate)
在指令集流水线中,吞吐率是指单位时间内流水线所完成指令或输出结果的数量。
吞吐率又有最大吞吐率和实际吞吐率之分。
最大吞吐率是指流水线在连续流动达到稳定状态时(如图中第6~9个时间单元,流水线中各段都处于工作状态)后获得的吞吐率。对于m段的指令流水线而言,若各段的时间均为 t,则最大吞吐率为 T=1/t
流水线仅在连续流动时才可达到最大吞吐率。实际上由于流水线在开始时有一段建立时间(第一条指令输入后到其完成的时间),结束时有一段排空时间(最后一条指令输入后到其完成的时间),以及由于各种相关因素使流水线无法连续流动,因此,实际吞吐率总是小于最大吞吐率
实际吞吐率是指流水线完成n条指令的实际吞吐率。对于m段的指令流水线,若各段的时间均为 t,连续处理n条指令,除第一条指令需m*t外,其余(n-1)条指令,每隔t就有一个结果输出,即总共需要m*t+(n-1)*t时间,所以实际吞吐率为(指令个数/指令执行总时间)T=n/(m*t+(n-1)*t)=Tpmax/(1+(m-1)/n)
所以在n远大于m时,T实际约等于Tmax
即在执行指令的条数n远大于指令段数m时,实际吞吐率约等于最大吞吐率
图中所以的六级流水线(m=6)中,设每段时间为t,其最大吞吐率为1/t,完成9条指令(n=9)的实际吞吐率为9/(6*t+(9-1)*t)
加速比(Speedup Ratio)
流水线的加速比是指m段流水线的速度与等功能的非流水线的速度之比的倒数。比如流水线各段时间均为t,则完成n条指令在m段流水线上共需要T=m*t+(n-1)*t时间,而在等效的非流水线上所需的时间为T=n*m*t,所以加速比Sp为Sp=n*m*t/(m*t+(n-1)*t)=n*m/(m+n-1)=m/(1+(m-1)/n)
可以看出,在(指令条数)n远大于m(指令段数)时,Sp接近于m(指令级数),即当流水线各段时间相等时,其最大加速比等于流水线的段数
3、效率(Efficiency)
效率是指流水线中各功能段的利用率。由于流水线有建立时间和排空时间,因此各功能段的设备不可能一直处于工作状态,总有一段空闲时间。
图中是4段流水线(m=4)的时空图,各段时间相等,均为t。图中m*n*t(m条指令的横向时间之和)是流水线中各段处于工作时间的时空区,而流水线中各段总的时空区是m*t+(n-1)*t。通常用流水线各段处于工作时间之和与流水线中各段总的时空区之比来衡量流水线的效率。用公式表示为
E=(m*(n*t))/m*(m*t+(n-1)*t)=n/(m+n-1)=Sp/m=Tp*t
E(效率)=Sp/m(加速比/级数)=Tp*t(实际吞吐率*执行每个指令的时间t)
Again
1、吞吐率(Throughput Rate)
吞吐率==指令完成速度
在指令集流水线中,吞吐率是指单位时间内流水线所完成指令或输出结果的数量,吞吐率:完成指令的速度=指令完成量/完成时间
吞吐率又有最大吞吐率和实际吞吐率之分
最大吞吐率是指流水线在连续流动达到稳定状态后所获得的吞吐率(最大吞吐率==完成指令的最大速度)。对于m段的指令流水线而言,若各段的时间均为t,则最大吞吐率为Tpmax=1/t,最大吞吐率与指令级数m无关
流水线仅在连续流动时才可达到最大吞吐率。实际上由于流水线在开始时有一段建立时间(第一条指令输入到其完成的时间),结束时有一段排空时间(最后一条指令输入后到期完成的时间),以及由于各种相关因素是流水线无法连续流动,因此,实际吞吐率总是小雨最大吞吐率。
实际吞吐率是指流水线完成n条指令的实际速度。对于m段的指令流水线,若各段的时间均为t,连续处理n条指令,除第一条指令需要m*t外,其余(n-1)条指令,每隔t就有一个结果输出。即总共需要m*t+(n-1)t时间,所以实际吞吐率为Tp=n/(m*t+(n-1)*t)=1/t(1+(m-1)/n)=Tpmax/(1+(m-1)/n)
仅当n远大于m时,才会有实际吞吐率接近于最大吞吐率
图中所示的六级流水线中(每条指令分为6段),设每段时间为t,其最大吞吐率为1/t,完成9条指令的实际吞吐率为9/(6t+(9-1)*t)
2、加速比(Sqeedup Ratio)
流水线的加速比是指m段流水线的速度与等功能的非流水线的速度之比(等于非流水线的执行时间/流水线的执行时间)
如果流水线的各段时间均为t,则完成n条指令在m段流水线上共需要T=m*t+(n-1)*t,而在非流水线上共需要m*n*t时间,所以加速比Sp为
Sp=流水线速度/非流水线速度=非流水线时间/流水线时间

方案一 :当初放弃了地质,考计算机,第一年没考上,第二年考上了,考了三次研:17,18.12,19。9, 21.6毕业
方案二 :现在没有放弃地质,等地质毕业了在考计算机,考专硕:17.9,19.6,19。12,20.9 22.6毕业,某软件工程毕业生,一年工作经验
方案三 :现在没有放弃地质,等地质毕业了直接工作:17.9 19.6毕业 22.6三年工作经验
Sp=n*m*t/(m*t+(n-1)*t)=n*m/(m+n-1)=m/(1+(m-1)/n)
可以看出,在指令条数远大于流水线段数的情况下,流水线的加速比等于流水线的段数
3、效率(Efficiency)
效率是指流水线中各功能段的利用率。由于流水线有建立的时间和排空时间,因此各功能段的设备不可能一直处于工作状态,总有一段空闲时间。
图中为4段流水线的时空图,各段时间相等,均为t。图中m*n*t是流水线各段处于工作时间的时空区,而流水线中各段总的时空区为(m*t+(n-1)*t)*m
通常用流水线各段处于工作时间的时空区与流水线中各段总的时空区之比来衡量流水线的效率
E=m*n*t/m*(m+n-1)*t=n/(m+n-1)=Sq/m=Tp*t
效率==加速比/流水线级数==吞吐率*t
假设指令流水线分取址(IF)、译码(ID)、执行(EX)、回写(WR)4个过程段,共有10条指令连续输入此流水线
1、画出指令流水线周期
指令周期包括IF、ID、EX、WR这四个子过程,图中为指令周期流程图
入口->IF->ID->EX->WR
2、画出非流水线时空图
非流水线时空图如图。假设一个时间单位为一个时钟周期,则每隔4个时钟周期才有一个输出结果
3、画出流水线时空图
流水线时空图如图所示。图中可见,第一条指令出结果需要4个时钟周期,当流水线满载时,以后每个时钟周期可以出一个结果,即执行完一条指令
4、假设时钟周期为100ns,求流水线的实际吞吐率
Tp=10/(4*100ns+(10-1)*100ns)
5、求该流水处理器的加速比
Sp=100ns*10*4/(4*100ns+9*100ns)==40/13=3.08
流水线中的多发技术
流水线技术使计算机系统结构产生了重大变革,为了进一步发展,除了采用好的指令调度算法、重新组织指令执行顺序、降低相关带来的干扰以及优化编译外,还可以开发流水线中的多发技术,设法在一个时钟周期(机器主频的倒数)内,产生更多条指令的结果。常见的多发技术有超标量基数、超流水线技术和超长指令字技术。假设处理一条指令分4个阶段:取址(FI)、译码(ID)、执行(EX)和回写(WR)。图中为三种多发技术与普通四级流水线的比较,其中图为普通四级流水线,一个时钟周期出一个结果
1、超标量技术
超标量(Super Scalar)技术如图。它是指在每个时钟周期内可同时并发多条独立指令,即以并行操作方式将两条或者两条以上(图中为3条)指令编译并执行
要实现超标量技术,要求处理机中配置多个功能部件和指令译码电路,以及多个寄存器端口和总线,以便能实现同时执行多个操作,此外还要编译程序决定哪几条指令可以并行执行
例如:下面两个程序段:
左边程序段中的3条指令是相互独立的,不存在数据相关,可实现指令集并行。右边程序段中的3条指令存在数据相关,不能并行执行。超标量计算机不能重新安排指令的执行顺序,但是可以通过编译优化技术,在高级语言翻译成机器语言时精心安排,把能并行执行的指令搭配起来,挖掘更多的指令并行性。
2、超流水线技术
超流水线(Super Pipe Lining)技术是将一些流水线寄存器插入到流水线段中,好比将流水线再分段,如图,图中将一个时间周期又分成3段,使超流水线的处理器周期比普通流水线的处理器周期短,这样,在原来的时钟周期内,功能部件被使用3次,使流水线以3倍于原来时钟频率的速度运行。与超标量计算机一样,硬件不能调整指令的执行顺序,靠编译程序解决优化问题
3、超长指令字技术
超长指令字技术(VLIW,Very Long Instruction Word超长指令字技术)和超标量技术都是采用多条指令在多个处理器部件中并行处理的体系结构,在一个时钟周期内能留出多条指令。但是超标量的指令来自同一标准的指令流,VLIW则是由编译程序在编译时挖掘出指令间潜在的并行性后,把多条能并行操作的指令组合成一条具有多个操作码字段的超长指令(指令字长可达几百位),由这条超长指令控制VLIW机中多个独立工作的功能部件,有每一个操作码字段控制一个功能部件,相当于同时执行多条指令。如图,VLIW较超标量具有更高的并行处理能力,但对优化编译器的要求更高,对Cache的容量要求更大
流水线结构
1、指令流水线结构
指令流水线是将指令的整个过程用流水线进行分段处理,典型的指令执行过程分为“取指令-指令译码-形成地址-取操作数-执行指令-回写结果-修改指令指针”这几个阶段,与此相对应的指令流水线结构由图所示的几个部件组成。
取指令部件–指令译码部件–地址形成部件–取操作数部件–操作执行部件–回写结果部件–修改指令指针部件
指令流水线对机器性能的改善程度取决于把处理过程分解成多少个相等的时间段数。如上述共分成7段,若每一段需要一个时钟周期,则当不采用流水技术时,需要7个时钟周期出一个结果。采用流水线后,假设流水线不出现断流(如遇到转移指令),则除第一条指令需要7个时钟周期出结果外,以后所有的指令都是一个时钟周期出一个结果。因此,在理想的情况下(流水线不断流),该流水线的速度越提高到7倍。
2、运算流水线
上述讨论的指令流水线是指令级的流水技术,实际上流水技术还可用于部件级。例如,浮点加法运算,可以分成“对阶”,“尾数加”以及“规格化”3段,每一段都有一个专门的逻辑电路完成操作,并将其结果保存在锁存器中,作为下一段的输入。如图,当对阶完成后,将结果存入锁存器,便又可进入下一条指令的对阶运算。
副电价运算操作流水线:对阶功能部件->锁存器->尾数加部件->锁存器->规格化部件->锁存器
若执行浮点乘运算也按浮点加运算那样分段,即分成阶码运算、尾数乘和结果规格化三级流水线,就不够合理,因为尾数乘所需的时间比阶码运算和规格化操作长得多,而且尾数乘可以和阶码运算同时进行,因此,尾数乘本身就可以用流水线。
由图中可见,流水线相邻两段在执行不同的操作,因此在相邻两段之间必须设置锁存器或寄存器,以保证在一个时钟周期内流水线的输入信号不变。这一指导思想也适用于指令流水。此外,只有当流水线各段工作饱满时,才能发挥最大作用。上例中如果浮点运算没有足够的数据来源,那么流水线中的某些段甚至全部段都处于空闲状态,使流水线的作用没有充分发挥。因此具体是否采用流水线技术以及在计算机的那一部分才用流水线技术需要根据情况而定。
中断系统
第5章已经介绍了有关中断的一些概念,特别对I/O中断作了较详细的讨论。实际上I/O中断只是CPU众多中断中的一种,引起中断的因素有很多,为了处理各种中断,CPU内常设有处理中断的机构—中断系统,以解决各种终端的共性问题。本节进一步分析中断系统的功能,以便更深入的了解中断系统在CPU中的作用和地位
概述
从前面分析可知,采用中断方式实现主机与I/O交换信息可使CPU和I/O并行工作,提高CPU的效率,其实,计算机在运行过程中,除了会遇到I/O中断外,还有许多意外事件发生,如电源突然掉电,机器硬件突然出现故障,人们在机器运行过程中想随机抽查计算的中间结果,实现人际联系等。此外,在实时处理系统中,必须及时处理某个事件或现象,例如,在过程控制系统中,当突然出现温度过高、电压过大等情况时,必须及时将这些信息送至计算机,由计算机暂时中断现行程序,转去执行中断服务程序,以解决这种异常情况。再如,计算机实现多道程序运行时,可以通过分配给每道程序一个固定时间片,利用时钟定时发中断进行程序切换。再多处理机系统中,各处理器之间的信息交流和任务切换也可以通过中断来实现。总之,为了提高计算机的效率,为了处理一些异常情况以及实施控制、多道程序和多处理机的需要,提出了中断的概念
1、引起中断的各种因素
引起中断的因素很多,大致可分为以下几类:
1、人为设置的中断
这种中断一般称为自愿中断,因为它是在程序中人为设置的,故一旦机器执行这种人为中断,便自愿停止现行程序而转入中断处理
解题程序->转管指令->管理程序->转管指令->继续执行原来的程序
图中的转管指令可能是转至从I/O设备调入一批信息到主存的管理程序,也可能是转至将一批数据送往打印机打印的管理程序。显然,当用户程序执行了转管指令后,便中断现行程序,转入管理程序,这种转移是完全自愿的。
IBM PC(Intel 8086)的INT TYPE指令类似于这种自愿中断,他完成系统调用。TYPE决定了系统调用的类型
2、程序性事故
如定点溢出,浮点溢出,操作码不能识别,除法中出现非法等,这些都属于由程序设计不周而引起的中断
3、硬件故障
硬件故障类型很多,如插件接触不良,通风不良,磁表面损坏,电源掉电等,这些都属于硬件设备故障
4、I/O设备
I/O设备被启动以后,一旦准备就绪,便向CPU发出中断请求。每个I/O设备都能发中断请求,因此这种中断与计算机所配置的I/O设备多少有关
5、外部事件
用户通过键盘来中断现行程序属于外部事件中断
上述各种中断除了自愿中断是认为的外,大多数都是随机的。通常将能引起中断的各个因素成为中断源。中断源可分为两大类:一类为不可屏蔽中断,这类中断CPU不能禁止响应,如电源掉电;另一类为可屏蔽中断,对可屏蔽中断源的请求,CPU可根据该中断源是否被屏蔽来确定是否给与响应。若未屏蔽则能响应;若已屏蔽,则CPU不能响应
2、中断系统需解决的问题
1、各中断源如何向CPU提出中断请求
2、当多个中断源同时提出中断请求时,中断系统如何确定优先响应那个中断源的请求。
3、CPU在什么条件、什么时候、以什么方式来响应中断
4、CPU响应中断后如何保护现场
5、CPU响应中断后,如何停止原程序的执行而转入中断服务程序的入口地址
6、中断处理结束后,CPU如何恢复现场,如何返回到原程序的间断处
7、在中断处理过程中又出现了新的中断请求,CPU该如何处理
要解决以上7个问题,只有在中断系统中配置相应的硬件和软件,才能完成中断处理任务
中断请求标记和中断判优逻辑
1、中断请求标记
为了判断是哪个中断源提出请求,在中断系统中必须设置中断请求标记触发器,简称中断请求触发器,记作INTR。当其状态为1时,表示中断源有请求。这种触发器可集中设在CPU内,组成一个中断请求标记寄存器,如图所示
图中的各个数字分别对应掉电、过热、主存读写校验错、阶上溢、非法除法……打印机输出等中断请求触发器,其中任意一个触发器为1,就表明对应的中断源提出了中断请求。显然,中断请求触发器越多,说明计算机处理中断的能力越强。
有一点需要说明,尽管中断请求标记寄存器是由个中断请求触发器组成的,但这些触发器即可以集中在CPU的中断系统内,也可以分散到各个中断源中。在图所示的程序中断方式接口电路中,INTR就是分散在各个接口电路内的中断请求触发器。
2、中断判优逻辑
任何一个中断系统,在任意时刻,只能响应一个中断源的请求。但许多中断源提出的请求都是随机的,当某一时刻有多个中断源提出中断请求时,中断系统必须按其优先顺序予以响应,这称为中断判优。各中断源的优先顺序是根据该中断源若得不到及时响应,知识及其工作出错的严重程度而定的。例如:电源掉电对计算机工作影响程度最大,优先等级为最高。又如:定点溢出对机器正常工作的影响也很大,若不及时响应,将使计算机一切运行均无效,故其优先等级也较高。对于I/O设备,则可按其速度高低安排优先等级,速度高的设备优先级比速度低的设备高。
中断判优可用硬件实现,也可用软件实现。
1、硬件排队
硬件排队又分为两种。一种为链式排队器,对应中断请求触发器分散在各个接口电路中的情况,每个接口电路都设有一个非门和一个与非门,犹如链条一样串接起来。另一种排队器设在CPU内,如图,图中假设其优先顺序按1、2、3、4由高向低排列。这样,当最高优先级的中断源有请求时,INTR=1,就可以封住比他级别低的中断源的请求
2、软件排队
软件排队是通过编写查询程序实现的,其程序框图如图,程序按中断源的优先等级,从高到低逐级查询各中断源是否有中断请求,这样就可以保证CPU首先响应级别高的中断源的请求
中断服务程序入口地址的寻找
由于不同的中断源对应不同的中断服务程序,故准确的找到服务程序的入口地址是中断处理的核心问题。通常有两种方法可以寻找到入口地址:硬件向量法和软件查询法
1、硬件向量法
硬件向量法就是利用硬件产生向量地址,再由向量地址找到中断服务程序的入口地址。向量地址由中断向量地址形成部件产生,这个电路可分散设置在各个接口电路中(图中的设备编码器),也可以设置在CPU内(由向量地址形成部件产生中断向量)。
由向量地址寻找中断服务程序的入口地址通常采用两种办法。一种如图所示,在向量地址内存放一条无条件转移指令,CPU向量中断时,只要将向量地址(如12H)送至PC,执行这条指令,便可无条件转向打印服务程序的入口地址200。另一种是设置向量地址表,如图所示。该表设置在存储器内,存储单元的地址为向量地址,存储单元的内容为入口地址,例如,图中的12H,13H,14H为向量地址,200、300、400为入口地址,只要访问向量地址所指示的存储单元,便可获得入口地址。
硬件向量法寻找入口地址速度快,在现代计算机中被普遍采用
2、软件查询法
用软件寻找中断服务程序入口地址的方法称为软件查询法,其框图如图所示,当某中断源有中断请求时,接着安排一条转移指令,直接指向此中断源的中断服务程序入口地址,机器便能自动进入中断处理。至于各中断源对应的入口地址,则由程序员或者系统事先确定,这种方法不涉及硬设备,但是查询时间长。计算机可具备软硬件两种方法寻找入口地址,是用户更方便,灵活。
中断响应
1、响应中断的条件
由第5章可知,CPU响应I/O中断的条件是允许中断触发器必须为1,这一结论同样适合于其他中断源。在终端系统中有一个允许中断触发器EINT,他可被开中断指令置1,也可被关中断指令置0.当允许中断触发器为1时,意味着CPU允许响应中断源的请求;当其为0时,意味着CPU禁止响应中断。故当EINT(Enable Interrupt)=1,且有中断请求(即中断请求标记触发器INTR=1,Interrupt request,INTR中断请求标记触发器==中断请求)时,CPU可以响应中断。
2、响应中断的时间
与响应I/O中断一样,CPU总是在指令执行周期结束后,响应任何中断源的请求。在指令执行周期结束后,若有中断,CPU则进入中断周期;若无中断,则进入下一条指令的取值周期
之所以CPU在指令的执行周期后进入中断周期,是因为CPU在执行周期的结束时刻统一向所有中断源发中断查询信号,只有此时,CPU才能获知哪个中断源有请求。如图所示,图中INTR是各个中断源的中断请求触发器,触发器的数据端来自各中断源,当他们有请求时,数据端为1,而且只有当CPU发出的中断查询信号输入到触发器的时钟端时,才能将INTR置1。CPU在统一的时间发出中断查询信号
在某些计算机中,有些指令执行时间很长,若CPU的查询信号一律安排在执行周期结束时刻,有可能因CPU发现中断请求过迟而出差错。为此,可在指令执行的过程中设置若干个查询断点,CPU在每个查询断点时刻均发中断查询信号,以便发现有中断请求便可及时响应。
3、中断隐指令
CPU响应中断后,即进入中断周期。在中断周期内,CPU要自动完成一系列操作,具体如下:
1、保护程序断点
保护程序断点就是要将当前程序计数器PC的内容(程序断点)保存到存储器中。他可以存在存储器的特定单元内,也可以存入堆栈。
2、寻找中断服务程序的入口地址
由于中断周期结束后进入下一条指令(即中断服务程序的第一条指令)的取值周期,因此在中断周期内必须设法找到中断服务程序的入口地址。由于入口地址有两种方法获得,因此在中断周期内也有两种方法寻找入口地址。
其一,在中断周期内,将向量地址送至PC(对应硬件向量法),使CPU执行下一条无条件转移指令,转至中断服务程序的入口地址。
其二,在中断周期内,将图中的软件查询入口地址的程序(又称中断识别程序)首地址送至PC,使CPU执行中断识别程序,找到入口地址(对应软件查询法)
3、关中断
CPU进入中断周期,意味着CPU响应了某个中断源的请求,为了确保CPU响应后所需做的一系列操作不至于有收到新的中断请求的干扰,在中断周期内必须自动关中断(关中断允许),以禁止CPU再次响应新的中断请求。图中为自动关中断的示意图。图中允许中断触发器EINT和中断标记触发器INT可选用标准的R-S触发器。当进入中断周期时,INT状态为1,触发器源端输出有一个正跳变(1),经反相后产生一个负跳变,使EINT置0,即关中断。
上述保护断点、寻找入口地址和关中断这些操作都是在中断周期内由一条中断隐指令完成的。所谓中断隐指令,即在机器指令系统中没有的指令,他是CPU在中断周期内由硬件自动完成的一条指令。
保护现场和恢复现场
保护现场应该保护程序断点和保护CPU内部各寄存器内容的现场两个方面。程序断点的现场由中断隐指令完成,各寄存器内的现场可在中断服务程序中由用户(或者系统)用机器指令编程实现。
恢复现场是指在中断返回前,必须将寄存器内的内容恢复到中断处理前的状态,这部分的工作也有中断服务程序来完成。
中断屏蔽技术
中断屏蔽技术主要用于多重中断
1、多重中断的概念
当CPU正在执行某个中断服务程序时,另一个中断源又提出了新的中断请求,而CPU又响应了这个新的请求,暂时停止正在运行的服务程序,转去执行新的服务程序,这成为多重中断,又称为中断嵌套。如果CPU对新的请求不予响应,待执行完当前的服务程序后再响应,即为单重中断。
中断系统若要具有处理多重中断的功能,必须具备各项条件
2、实现多重中断的条件
1、提前设置开中断指令
由上述分析可知,CPU进入中断周期后,由中断隐指令自动将EINT置0,即关中断,这就意味CPU在执行中断服务程序中禁止响应新的中断请求。CPU若想再次响应新的中断请求,必须开中断。这一任务通常由中断服务程序中的开中断指令实现。由于开中断指令的位置不同,决定了CPU能否实现多重中断。由图中可见,多重中断开中断指令的位置前于单重中断,从而保证了多重中断允许出现中断嵌套
2、优先级别高的中断源有权中断优先级别低的中断源
在满足1的前提下,只有优先级别更高的中断源请求才可以中断比其级别低的中断服务程序,反之则不然。例如,有A、B、C、D,4个中断源,其优先级按A、B、C、D由高向低次序排列
在CPU执行主程序期间,同时出现了B和C的中断请求,由于B级别高于C,所以首先执行B的服务程序。当B级服务程序执行完返回主程序后,由于C请求未撤销,所以CPU有再去执行C级的中断服务程序。若此时在出现D请求,因为D级别低于C,故CPU不响应,当C级中断服务程序执行完返回主程序后在执行D级的服务程序。若此时又出现了A请求,因A级别高于D,故CPU暂停对D级中断服务程序的执行,转去执行A级中断服务程序,等A级中断服务程序执行完后,再去执行D级中断服务程序。上述的中断处理示意图
为了保证级别低的中断源不干扰级别高的中断源的中断处理过程,保证上述2的实施,可采用屏蔽技术
3、屏蔽技术
1、屏蔽触发器与屏蔽字
图中示出了程序中断接口电路中完成触发器D、中断请求触发器INTR(Interrupt Register),和屏蔽触发器MASK三者之间的关系。当该中断源被屏蔽时(MASK=1),此时即使D=1,中断查询信号到来时刻只能将INTR置0,CPU接收不到该中断源的中断请求,即它被屏蔽。若该中断源未被屏蔽(MASK=0),当设备工作已完成时(D=1),中断查询信号则将INTR置1,表示该中断源向CPU发出中断请求,该信号送至排队器进行优先级判断。
如果排队器集中设在CPU内,加上屏蔽条件,就可组成具有屏蔽功能的排队器,如图
显然,对应每个中断请求触发器INTR就有一个屏蔽触发器MASK,将所有屏蔽触发器MASK组合在一起,便构成一个屏蔽寄存器,屏蔽寄存器的内容称为屏蔽字。屏蔽字与中断源的优先级别是一一对应的。表为中断优先级与屏蔽字的关系。
表是对应16个中断源的屏蔽字,每个屏蔽字由左向右排序为第1、2、3,共16位。不难发现,没个中断源对应的屏蔽字是不同的。1级中断源的屏蔽字是16个1,2级中断源的屏蔽字是从第2位开始共15个1,16级中断源的屏蔽字只有在第16位为1,其余各位均为0
在中断服务程序中设置适当的屏蔽字,能起到对优先级别不同的中断源的屏蔽作用。例如:1级中断源的请求已被CPU响应,若在其中断服务程序中(通常在开中断指令前),设置一个全1的屏蔽字,便可保证在执行1级中断服务程序 过程 中,CPU不再响应任何一个中断源(包括本级在内)的中断请求,即此刻不能实现多重中断。如果在4级中断源的服务程序中设置一个屏蔽字0001111……,由于第1~3级中断源可以中断4级中断源的中断服务程序,实现多重中断
2、屏蔽技术可改变优先等级
严格的说,优先级包括响应优先级和处理优先级。响应优先级是指CPU响应各中断请求的优先次序,这种次序往往是硬件线路已设置好的,不便于改动。处理优先级是指CPU实际对各中断请求的处理优先次序。如果不采用屏蔽技术,响应的优先次序就是处理的优先次序。
采用了屏蔽技术后,可以改变CPU处理各中断源的优先等级,从而改变CPU执行程序的轨迹。例如,A、B、C、D这四个中断源的优先级别可按A->B->C->D降序排列,根据这一次序,CPU执行程序的轨迹如图所示。当4个中断源同时提出请求时,处理次序与响应次序一致。
在不改变CPU响应中断的次序下,通过改变屏蔽字可以改变CPU处理中断的次序。例如,将上述4个中断源的处理次序改为A->D->C->B,则每个中断源所对应的屏蔽字发生了变化。表中的屏蔽字对应A->B->C->D的响应顺序,新屏蔽字对应A->D->C->B的处理顺序。
在同样中断请求的情况下,CPU执行程序的轨迹发生了变化,如图,CPU在运行程序的过程中,若A、B、C、D4个中断源同时提出请求,按照中断级别的高低,CPU首先响应并处理A中断源的请求,由于A的屏蔽字是1111,屏蔽了所有的中断源,故A程序可以全部执行完,然后回到主程序。由于BCD的中断请求还未响应,而B的响应优先级高于其他,所以CPU响应B的请求,进入B的中断服务程序。在B的服务程序中,由于设置了新的屏蔽字0100,即A、C、D可打断B,而A程序已执行完,C的响应优先级又高于D,于是CPU响应C,进入C的服务程序。在C的服务程序中,由于设置了新的屏蔽字0110,即A、D可打断C,由于A程序已执行完,于是CPU响应D,执行D的服务程序,D执行完后,然后回到C程序,C执行完后,回到B程序,B程序做完后,回到主程序
采用了屏蔽技术后,在中断服务程序中需要设置新的屏蔽字,流程如图。与第五章所示的中断服务程序相比,增加了置屏蔽字与恢复屏蔽字两部分内容。而且为了在恢复现场过程中又出现新的中断,在恢复现场前又增加了关中断,恢复屏蔽字之后,必须再次开中断
设某机有4个中断源,其硬件排队优先次序按1-2-3-4降序排列,各中断源的服务程序中所对应的屏蔽字如表:
一、给出上述4个中断源的中断处理顺序:3142
二、若4个中断源同时有中断请求,划出CPU执行程序的轨迹
同时请求,因为硬件排序的优先次序为1234,所以CPU先响应1的请求,执行1的服务程序。由于在该服务程序中设置了屏蔽字1101,所以开中断指令后转去执行3的服务程序,且3(1111)的服务程序执行结束后返回1的服务程序。1的服务程序结束后,CPU还有2,4两个中断源未响应。由于2的响应优先级高于4,故CPU先响应2的请求,执行2的服务程序,在2的服务程序中由于设置了屏蔽字0100,意味着134可以将2的程序中断。而1、3的请求已经处理结束,因此在开中断指令后转去执行4的服务程序,结束后又回到2的服务程序的断点处,继续执行2的服务程序,知道该程序执行结束。
3、屏蔽技术的其他作用
屏蔽技术还能给程序控制带来更大的灵活性。例如,在浮点运算中,当程序员估计到执行某段程序时可能出现“阶上溢”,但是又不希望因阶上溢而使机器停机,为此可设一屏蔽字,使对应阶上溢的屏蔽位为1,这样,即使出现阶上溢,机器也不停机
4、多重中断的断点保护
多重中断时,每次中断出现的断点都必须保存起来,如图出现了3次中断,有三个断点k+1,l+1,m+1需要保存。中断系统对断点的保存都是在中断周期内由中断隐指令实现的,对用户是透明的
断点可以保存在堆栈中,由于堆栈先进后出的特点,因此图中的k+1先进栈,接着是l+1进栈,最后是m+1进栈。出栈时,按相反顺序便可准确返回到程序间断处
断电保存也可保存在特定的存储单元内,例如约定一律将程序断点存至主存的0号地址单元内。由于保存断点是由中断隐指令自动完成的,因此3次中断的断点都将存入0地址单元,这势必造成前两次存入的断点k+1和l+1被冲掉。为此,在中断服务程序中的开中断指令前,必须先将0地址单元的内容转存至其他地址单元中,才能真正保存每一个断点。画出将程序断点保存到0号地址单元的多重中断服务程序流程
控制单元的功能
本章结合指令周期的4个阶段,着重分析控制单元为完成不同指令所发出的各种操作命令–这些命令控制计算机的所有部件有次序地完成相应的操作,已达到执行程序的目的—旨在使读者进一步理解指令周期、机器周期、时钟周期(节拍)、和控制信号的关系,进一步体会控制单元在机器运行中所起到的核心作用,为下一章设计控制单元打好基础
微操作命令的分析
控制单元具有发出各种微操作命令(即控制信号)序列的功能。概括地说,计算机的功能就是执行程序,在执行程序的过程中,控制单元要发出各种微操作命令,而且不同的指令对应不同的命令。进一步分析发现,完成不同指令的过程中,有些操作是相同或者相似的,,如取址指令、取操作数指令以及进入中断周期由中断隐指令完成的一系列操作。为了更清晰起见,下面按指令周期的4个阶段进一步分析其对应的微操作命令。
取址周期
为了便于讨论,假设CPU内有4个寄存器,如图,MAR与地址总线相连,存放与访问的存储单元地址;MDR与数据总线相连,存放于吸入存储前期的信息或最近欲从存储器读出的信息
PC存放现行指令的地址,有计数功能
IR存放现行指令
取指令的过程可归纳为以下几个操作:
1、现行指令地址送至存储器地址寄存器,PC->MAR
2、向主存发送读命令,启动主存作读操作,记作1->R
3、将MAR(通过地址总线)所指的主存单元中的内容(指令)经数据总线读至MDR内,记作M(MAR)->MDR
4、将MDR的内容送至IR,记作MDR->IR
5、指令的操作码送至CU译码,记作OP(IR)->CU
6、形成下一条指令的地址,记作(PC)+1->PC
间址周期
间址周期完成取操作数有效地址的任务,具体操作如下:
1、将指令的地址码部分(形式地址)送至存储器地址寄存器,记作Ad(IR)->MAR
2、向主存发送读命令,启动主存作读操作,记作1->R
3、将MAR(通过地址总线)所指的主存单元中的内容(有效地址)经数据总线读至MDR内,记作M(MAR)->MDR
4、将有效地址送至指令寄存器的地址字段,记作MDR->Ad(IR)。此操作在有些机器中可省略
执行周期
不同指令执行周期的微操作是不同的,下面分别讨论非访存指令,访存指令和转移类指令的微操作
一、非访存指令
这类指令在执行周期不访问存储器
1、清除累加器指令CLA(Clear Accumulator)
该指令在执行阶段只完成清除累加器操作,记作0->ACC(Accumulator)
2、累加器取反指令COM
该指令在执行阶段只完成累加器内容取反,结果送至累加器的操作,记作ACC->ACC
3、算术右移一位指令SHR
该指令在执行阶段只完成累加器内容算数右移一位的操作,记作L(ACC)->R(ACC)
ACC0->ACC0 (ACC的符号位不变)
4、循环左移一位指令CSL
该指令在执行阶段只完成累加器循环左移一位的操作,记作R(ACC)->L(ACC)
5、停机指令STP
计算机中有一个运行标志触发器G,当G=1时,表示机器运行,G=0时,表示机器停机
STP指令在执行阶段只需将运行标志触发器G置0,记作0->G
二、访存指令
这类指令在执行阶段都需要访问存储器。为简单起见,这里只考虑直接寻址的情况,不考虑其他寻址方式
1、加法指令ADD X
该指令在执行阶段需要完成累加器内容与对应于主存X地址单元的内容相加,X为主存的某地址单元。结果送累加器的操作,具体如下:
1、将指令的地址码部分送至存储器地址寄存器,记作Ad(IR)->MAR
2、向主存发读命令,启动主存作读操作
3、将MAR(通过地址总线)所指的主存单元中的内容(操作数)经数据总线读至MDR内,记作M(MAR)->MDR
4、给ALU发送加命令,将ACC的内容和MDR的内容相加,结果存于ACC,记作(ACC)+(MDR)->ACC
当然,也有的加法指令指定两个寄存器的内容相加,如“ADD AX,BX”,该指令在执行阶段无需访存,只需完成(AX)+(BX)->AX的操作
2、存数指令STA X
该指令在执行阶段需将累加器ACC的内容存于主存的X地址单元中,具体操作如下
1、将指令的地址码部分送至存储器地址寄存器,记作Ad(IR)->MAR
2、向主存发写命令,启动主存作写操作,记作1->W
3、将累加器内容送至MDR,记作ACC->MDR
4、将MDR的内容(通过数据总线)写入到MAR(通过地址总线)所指的主存单元中,记作MDR->M(MAR)
3、取数指令LDA X
该指令在执行阶段需要将主存X地址单元的内容取置累加器ACC中,具体操作如下:
1、将指令的地址码部分送至存储器地址寄存器,记作Ad(IR)->MAR
2、向主存发读命令,启动主存作读操作,记作1->R
3、将MAR(通过地址总线)所指的主存单元中的内容(操作数)经数据总线读至MDR内,记作M(MAR)->MDR
4、将MDR的内容送至ACC,记作MDR->ACC
三、转移类指令
这类指令在执行阶段也不访问存储器
1、无条件转移指令JMP X
该指令在执行阶段完成将指令的地址码部分X送至PC的操作,记作Ad(IR)->PC
2、条件转移(负则转)指令BAN X
该指令根据上一条指令运行的结果决定下一条指令的地址,若结果为负(累加器最高位为1),即A0=1),则指令的地址码送至PC,否则程序按原顺序执行。由于在取址阶段已完成了(PC)+1->PC,所以当累加器结果不为负(即A=0)时,就按取址阶段形成的PC执行,记作A0*Ad(IR)+A0*(PC)->PC
由此可见,不同指令在执行阶段所完成的操作时不同的。如果将访存指令分为直接访存和间接访存两种,则上述三类指令的指令周期如图:
非访存指令周期:取值周期+执行周期
直接访存指令周期:取值周期+执行周期
转移指令周期:取值周期+执行周期
间接访存指令周期:取值周期+间址周期+执行周期
间接转移指令周期:取值周期+间址周期+执行周期
中断周期
在执行周期结束时刻,CPU要查询是否有请求中断的事件发生,如果有则进入中断周期
在中断周期,由中断隐指令自动完成保护断点、寻找中断服务程序入口地址以及硬件关中断的操作。假设程序断点存至主存的0地址单元,且采用硬件向量法寻找入口地址,则在中断周期需完成如下操作。
1、将特定地址0送至存储器的地址寄存器,记作0->MAR
2、向主存发写命令,启动存储器作写操作,记作1—>W
3、将PC的内容(程序断点)送至MDR,记作PC->MDR
4、将MDR的内容(程序断点)通过数据总线写入到MAR(通过地址总线)所指示的主存单元(0地址单元),记作MDR->M(MAR)
5、将向量地址形成部件的输出送至PC,记作向量地址->PC,为下一条指令的取值周期做准备
6、关中断,将允许中断触发器清零,记作0->EINT(该操作可直接由硬件线路完成)
如果程序断点存入堆栈,而且进栈操作是先修改栈指针,后存入数据,只需将上述1改为(SP)-1->SP,且SP->MAR
上述所有操作都是在控制单元发出的控制信号(即微操作命令)控制下完成的
控制单元的功能
1、控制单元的外特征
输入信号:
1、时钟
上述各种操作有以下两点应特别注意
1、完成每个操作都需占用一定的时间
2、各个操作是有先后顺序的。例如:存储器读操作要用到MAR中的地址,故PC->MAR应先于M(MAR)->MDR
为了使控制单元按一定的先后顺序、一定的节奏发出各个控制信号,控制单元必须受时钟控制,即每一个时钟脉冲使控制单元发送一个操作命令,或发送一组需要同时执行的操作命令。
2、指令寄存器
现行指令的操作码决定了不同指令在执行周期需要完成不同的操作,故指令的操作码字段是控制单元的输入信号,它与时钟配合可产生不同的控制信号
3、标志
控制单元有时需依赖CPU当前所处的状态(如ALU操作的结果)来产生控制信号,如BAN指令,控制单元要根据上条指令的结果是否为负而产生不同的控制信号。因此,“标志”也是控制单元的输入信号。
4、来自系统总线(控制总线)的控制信号
例如,中断请求、DMA请求
2、输出信号
1、CPU内的控制信号
主要用于CPU内的寄存器之间的传送和控制ALU实现不同的操作
2、送至系统总线的信号
例如:命令主存或I/O读写、中断响应等
控制信号举例
控制单元的主要功能就是能发出各种不同的控制信号。下面以间接寻址的加法指令“ADD @X”为例,进一步理解控制信号在完成一条指令的过程中所起的作用
1、不采用CPU内部总线的方式
图中示意了未采用CPU内部总线方式的数据通路和控制信号的关系。图中未画出每个寄存器的输入或输出控制门的具体逻辑电路,但是标出了控制这些门电路的控制信号C,考虑到从存储器中取出的指令或有效地址都先送到MDR再送到IR,故这里省略了IR送至MAR的数据通路,凡事需要从IR送到MAR的操作均可由MDR送到MAR代替。
1、取址周期
1、控制信号C0有效,打开PC送往MAR的控制门 PC-MAR-总线-MM-MDR-IR-CU
2、控制信号C1有效,打开MAR送往地址总线的输出门。
3、通过控制总线向主存发读命令
4、C2有效,打开数据总线送至MDR的输入门
5、C3有效,打开MDR和IR之间的控制门,至此指令送至IR。
6、C4有效,打开指令操作码送至CU的输入门。CU在操作码和时钟的控制下,可产生各种控制信号。
7、使PC内容加1
二、间址周期
1、C5有效,打开MDR和MAR之间的控制门,将有效地址送至MAR MDR-MAR-总线-MM-MDR-IR
2、C1有效,打开MAR送往地址总线的输出门
3、通过控制总线向主存发读命令
4、C2有效,打开数据总线送至MDR的输入门,至此,有效地址存入MDR
5、C3有效,打开MDR和IR之间的控制门,将有效地址送至IR的地址码字段
3、执行周期
1、C5有效,打开MDR和MAR之间的控制门,将有效地址送至MAR
2、C1有效,打开MAR送往地址总线的输出门
3、通过控制总线向主存发读命令
4、C2有效,打开数据总线送至MDR的输出门,至此,操作数存入MDR
5、C6、C7同时有效,打开AC和MDR通往ALU的控制门
6、通过CPU内部控制总线对ALU发送ADD的控制信号,完成AC的内容和MDR的内容相加
7、C8有效,打开ALU通往AC的控制门,至此将求和结果存入AC
图中C9和C10分别是PC的输出和输入的控制信号,C11和C12分别是控制AC的输出和输入的控制信号
2、采用CPU内部总线的方式
图中示意了采用
=============================================================================================================
多级时序系统
1、机器周期
机器周期可看作是所有指令执行过程中的一个基准时间,机器周期取决于指令的功能及器件的速度。确定机器周期时,通常要分析机器指令的执行步骤以及每一步所需要的时间。例如:取数,存数指令能反映存储器的速度及其与 CPU的配合情况;加法指令能反映ALU的速度;条件转移指令因为要根据上一条指令的执行结果,经测试后才能决定是否转移,所需的时间较长。总之,通过对机器指令执行步骤的分析,会找到一个基准时间,在这个基准时间内,所有指令的操作都能结束。若以这个基准时间定为机器周期,显然不是最合理的。因为只有已完成最复杂指令功能所需的时间(最长时间)为基准,才能保证所有指令在此时间内完成全部操作,这对简单指令来说,显然是一种浪费
进一步分析发现,机器内的各种操作大致可归属为对CPU内部的操作和对主存的操作两大类。由于CPU内部的操作速度较快,CPU访存的操作时间较长,因此通常以访问一次存储器的时间定为基准时间较为合理,这个记住时间就是机器周期。又由于无论执行什么指令,都需要访问存储器取出指令,因此在存储器长等于指令字长的前提下,取指周期也可以看作机器周期
2、时钟周期(节拍、状态)
在一个机器周期内可以完成若干个微操作,每个未操作都需要一定的时间,可用时钟信号来控制产生每一个微操作命令。时钟就好比计算机的心脏,只要接通电源,计算机内就会产生时钟信号。,时钟信号可由机器主振电路(如晶体振荡器)发出的脉冲信号经整形(或倍频、分频)后产生,时钟信号的频率即为CPU主频。用时钟信号控制节拍发生器,就可以产生节拍。每个节拍的宽度正好对应一个时钟周期。在每个节拍内机器可完成一个或几个需要同时执行的操作,节拍是控制计算机操作的最小时间单位。一个机器周期可分为若干个时间周期(节拍)
图中反映了机器周期,时钟周期,和节拍的关系,图中一个机器周期内有4个节拍T0,T1,T2,T3
3、多级时序系统
图中反映了指令周期、机器周期、节拍和时钟周期的关系(一个指令包括三个阶段:每个阶段对应一个机器周期,每个机器周期包括几个节拍)
机器周期有的是定长机器周期,有的是不定长机器周期,区别在于一个时间周期内的节拍数是否一样
可见,一个指令周期包含若干个机器周期,一个机器周期包括若干个时间周期(节拍),每个指令周期内的机器周期数可以相等,可以不相等。
其中,图中为定长的机器周期,每个机器周期内包含四个节拍(4个T),图中为不定长的机器周期,每个机器周期包含的节拍书可以为4个,也可以为3个,后者适合于操作比较简单的指令,他可跳过某些时钟周期(如T3),从而缩短指令周期。
机器周期、节拍(状态)组成了多级时序系统
一般来说,CPU的主频越快,机器的运行速度也越快。在机器周期所含时钟周期数相同前提下,两机平均指令执行速度之比等于两机主频之比。
例如,CPU的主频为8MHz,其平均指令执行速度为0.8MIPS。若想得到平均指令执行速度为0.4MIPS的机器,则只需要用主频为4MHz的CPU即可
实际上机器的速度不仅与主频有关,还与机器周期中所含的时钟周期数以及指令周期中所含的机器周期数有关。同样主频的机器,由于机器周期所含时钟周期数不同,运行速度也不同。机器周期所含时钟周期数少的机器,速度更快。
设某计算机的CPU主频为8MHz,每个机器周期平均含有2个时钟周期,每条指令的指令周期平均有2.5个机器周期,试问机器的平均指令执行速度为多少MIPS?由此可以得出什么结论?
主频为8MHz==时钟周期为1/8=0.125us
一个指令的时间==0.125us * 2.5 *2=0.625us
平均指令执行速度为1/0.625us=1.6MIPS
机器的运行速度不完全取决于主频
此外,机器的运行速度还和其他很多因素有关,如主存的运行速度,机器是否配有Cache,总线的数据传输率、硬盘的运行速度、以及机器是否采用流水技术等。机器速度还可以用MIPS(Million Instruction (执行每百万条指令数每秒)和CPI(执行一条指令所需的时间周期数)(Cost Per Instruction)来衡量
控制方式
控制单元控制一条指令执行的过程实质上是一次执行一个确定的微操作序列的过程。由于不同指令所对应的微操作数及其复杂程度不同,因此每条指令和每个微操作所需的执行时间也不相同。通常将如何形成控制不同微操作序列所采用的时序控制方式称为CU的控制方式。CU,Control Unit控制单元
常见的控制方式有同步控制、异步控制、联合控制与人工控制这几种
1、同步控制方式
同步控制方式是指,任何一条指令或指令中的任何一个微操作的执行都是事先确定的,并且受同一基准时标的时序信号所控制的方式
图中就是一种典型的同步控制方式,每个机器周期都包含4个节拍。如果机器内的存储器存取周期不统一,那么只有把最长的存取周期作为机器周期,才能采用同步控制,否则取指令和取数时间不同,无法用统一的基准。又如有些不访存的指令,执行周期的微操作较少,无需4个节拍。因此,为了提高CPU的效率,在同步控制中又有三种方案。
1、采用定长的机器周期
这种方案的特点是:不论指令所对应的微操作序列有多长,也不管微操作的简繁,一律以最长的操作序列和最繁的微操作作为标准,采取完全统一的、具有相同时间间隔和相同数目的节拍作为机器周期来运行各种不同的指令。显然,这种方案对于微操作序列较短的指令来说,会造成时间上的浪费
2、采用不定长的机器周期
采用这种方案时,每个机器周期内的节拍数可以不等。这种控制方式可以解决微操作执行时间不统一的问题。通常把大多数微操作安排在一个较短的机器周期内完成,对于某些复杂的微操作,采用延长机器周期或增加节拍的办法来解决。
3、采用中央控制和局部控制相结合的方法
这种方案将机器的大部分指令安排在统一的、较短的机器周期内完成,成为中央控制。而将少数操作复杂的指令中的某些操作(如乘除法和浮点运算)采用局部控制方式来完成
图中所示为中央控制和局部控制的时序关系
在设计局部控制电路时需要注意两点:其一,使局部控制的每一个节拍T的宽度与中央控制的节拍宽度相同;其二,将局部控制节拍作为中央控制中机器节拍的延续,插入到中央控制的执行周期内,使机器以同样的节奏工作,保证了局部控制和中央控制的同步。T的多少可根据情况而定,对于乘法,当操作数位数固定后,T的个数也就确定了。而对于浮点运算的对阶操作,由于移位次数不是一个固定值,因此T的个数不能事先确定
以乘法指令为例,第一个机器周期采用中央控制的节拍控制取指令操作,接着仍用中央控制的T0、T1、T2节拍去完成操作数从存储器中取出并送至寄存器的操作,然后转局部控制,用局部控制节拍T完成重复加和移位的操作
2、异步控制方式
异步控制方式不存在基准时标信号,没有固定的周期节拍和严格的时钟同步,执行每条指令和每个操作需要多少时间就占用多少时间。这种方式微操作的时序有专门的应答线路控制,即当CU发出执行某一微操作的控制信号后,等待执行部件完成了该操作后发回“回答”(或“结束”)信号,再开始新的微操作,使CPU没有空闲状态,但因需要采用各种应答电路,故其结构比同步控制方式复杂。
3、联合控制方式
同步控制和异步控制相结合就是联合控制方式。这种方式对各种不同指令的微操作实行大部分统一,小部分区别对待的方法。例如:对每条指令都有取指令操作,采用同步方式控制;对那些时间难以确定的微操作,如I/O操作,则采用异步控制,以执行部件送回的回答信号作为本次微操作的结束
4、人工控制方式
人工控制是为了调机和软件开发的需要,在机器面板或内部设置一些开关或按键,来达到人工控制的目的
1、Reset(复位)键
按下Reset键,使计算机处于初始状态。当机器出现死锁状态或者无法继续运行时,可按此键,若在机器运行时按此键,将会破话机器内某些状态而引起错误,因此要慎用。有些微型计算机未设此键,当机器死锁时,可采用停电后再加电的办法来重新启动计算机
2、连续或单条执行转换开关
由于调机的需要,有时需要观察执行完一条指令后的机器状态,有时有需要观察连续运行程序后的结果,设置连续或单条执行转换开关,能为用户提供这两种选择。
3、符合停机开关
有些计算机还配有停机开关,这组开关指示存储器的位置,当程序运行到与开关指示的地址相符时,机器便停止运行,称为符合停机
多级时序系统实例分析
为了加深对本章内容的理解,下面以Intel 8085为例,通过对一条I/O写操作指令运行过程的分析,使读者进一步认识多级时序系统与控制单元发出的控制信号的关系
1、Intel 8085的组成
图中是Intel 8085的组成框图,其内部有3个16位寄存器,即SP、PC、和增减地址锁存器IDAL(Increase And Decrease Adress Latch增减地址锁存器),11个8位寄存器,即B、C、D、E、H、L、IR、AC(累加寄存器,简称累加器,Accumulator Register)暂存器TR(Temporary Register 暂存器)以及地址缓冲寄存器ABR(ABR ,Adress Buffer Register 地址缓冲寄存器)和地址数据缓冲寄存器(ADBR,Adress And Data Buffer Register 地址数据缓冲寄存器),以及一个5位的状态标志寄存器FR(Flag Register 标志寄存器,FR)。ALU能实现8位算术运算和逻辑运算。控制单元的具体组成将在第10章讲述,图中的定时和控制(CU)能对外发出各种控制信号。
8085内还有中断控制和I/O控制,内部数据总线为8位。图中未标出8085片内的控制信号。
DMA直接存储器存取:Direct Memory Access
Intel 8085的外部信号
8085芯片引脚图如图。共有40根引脚,外部信号分为以下几类
1、地址和数据信号
1、A10~A8(出):16位地址的高8位
2、AD7~AD0(入/出):16位地址的低8位或者8位数据,他们共用相同的引脚
3、SID(入)(Serial Input Data ):串行输入
4、SOD(出)(Serial Output Data):串行输出
2、定时和控制信号
1、CLK(出)(Clock时钟):系统时钟,每周其代表一个T状态
2、X1,X2(入):来自外部晶体或其它设备,以驱动内部的时钟发生器
3、ALE(出):地址暂存能使信号,在机器周期的第一个时钟周期产生,使外围芯片保存地址
4、S0,S1(出):用于标识读/写操作是否会发生
5、IO/M(出):使I/O接口或存储器读/写操作使能
6、RD:表示被选中的存储器或者I/O接口将所读出的数据送至数据总线上
7、WR:表示数据总线上的数据将写入被选中的存储器或者I/O接口中
3、存储器和I/O的初始化信号
1、HOLD:请求CPU放弃系统总线的控制和使用,总线将用于DMA操作
2、HLDA(出):总线响应信号,表示总线可以被外部占用
3、Ready:用于CPU与较慢的存储器或者设备同步。当某一设备准备就绪后,向CPU发Ready信号,此时CPU可进行输入或者输出
4、与中断有关的信号
1、TRAP:重新启动中断(RST7.5 RST6.0,RST 5.5,Reset)
2、INTR(INTerrupt Request):中断请求信号
3、INTA(INTerrupt Acknowledgement):中断响应信号
5、CPU初始化
1、Reset in:PC清0,假设CPU从0地址开始执行
2、Reset out:对CPU的置0作出响应,该信号能重置系统的剩余部分
6、电源和地
1、Vcc:+5V电源
2、Vss:地
3、机器周期和节拍与控制信号的关系
8085的一条指令可分成1~5个机器周期,每个机器周期内又包含3~5个节拍,每个节拍持续一个时间周期。在每个节拍内,CPU根据控制信号执行一个或者一组同步的微操作同步的微操作。下面分析一条输出指令,其功能是将AC的内容写入到所选择的设备中,执行该指令的时序图如图:
由图可见,该指令的指令周期包含3个机器周期M1,M2,M3,每个机器周期内所包含的节拍数不同。该指令字长为16位,由于数据线只有8位,所以要分两次将指令取至CPU内。第一个机器周期取指令的操作码,第二个机器周期取被选设备的地址,第三个机器周期把AC的内容通过数据总线写入到被选中的设备中。
具体时序如下:
1、第一个机器周期M1:存储器读、取指令操作码
1、T1状态,IO/M低电平,表示存储器操作。CPU将PC的高8位送至地址总线A15~A8,PC的低8位送至地址/数据总线AD7~AD0,并由ALE的下降沿激活存储器保存地址。
2、T2状态,RD有效,表示存储器读操作,存储器将指定地址的内容送至数据总线AD7~AD0,CPU等待数据线上的数据稳定。

3、T3状态,当数据线上的数据稳定后,CPU接收数据,此数据为该指令的第一字节操作码
4、T4状态,CPU进入译码阶段,在T4最后时刻ALE高失效
在T2或T3状态可安排(PC)+1->PC操作,图中未标出此控制信号
取指令操作码:PC-MM-CPU-译码
2、第二个机器周期M2:存储器读,取被选设备的地址
1、T1状态,同M1的T1状态操作
2、T2状态,同M1的T2状态
3、T3状态,当数据线上的数据稳定后,CPU接收数据,此数据为被选设备的地址
同样可以在T2或T3时刻完成(PC)+1->PC的操作。这个机器周期内设有指令译码,因此T4省略。在T3的最后时刻ALE失效
取设备地址:PC-MM-CPU接收设备地址
3、第三个机器周期M3:I/O写
1、T1状态,IO/M高电平,表示I/O操作,CPU将I/O地址送至A15~A8和AD7~AD0,并由ALE下降沿激活I/O保存地址
2、T2状态,WR(低)有效,表示I/O写操作,AC的内容AD7~AD0数据总线送至被选中的设备中
可见,控制单元的每一个控制信号都是在指定机器周期内的指定T时刻发出的,反映了多级时序系统与控制信号之间的关系。
=============================================================================================================
控制单元的设计
本章以10条机器指令为例,介绍控制单元的两种设计方法,旨在使读者初步掌握设计控制单元的思路,为今后设计计算机大侠初步的基础
组合逻辑设计
组合逻辑控制单元框图
图中控制单元的外特征,其中指令的操作码是决定控制单元发出不同控制信号的关键。为了简化控制单元的逻辑,将存放在IR的n位操作码经过一个译码电路产生2(n)个输出,这样,每对应一种操作码便有一个输出送至CU,当然,若指令的操作码长度可变,指令译码线路将更复杂
控制单元的时钟输入实际上是一种脉冲序列,其频率即为机器的主频,她使CU能按一定的节拍T发出各种控制信号。节拍的宽度应满足数据信息通过数据总线从源到目的所需要的时间。以时钟为计数脉冲,通过一个计数器,又称节拍发生器,便可以产生一个与时钟周期等宽的节拍序列。如果将指令译码和节拍发生器从CU中分离出来,便可得简化的控制单元框图。
带译码和节拍输入的控制单元框图
微操作的节拍安排
假设机器采用同步控制,每个机器周期包含三个节拍,而且CPU内部结构如图所示,其中MAR和MDR分别直接和地址总线和数据总线相连,并假设IR的地址码部分与MAR之间有通路。
安排微操作节拍时应注意以下三点:
1、有些微操作的次序是不容改变的,故安排微操作节拍时必须注意微操作的先后顺序。
2、凡是被控制对象不同的微操作,若能在一个节拍内执行,应尽可能安排在同一个节拍内,以节省时间
3、如果有些微操作所占的时间不长,应该将他们安排在一个节拍内完成,并且允许这些微操作有先后顺序。
按上述三条原则,以10条指令为例,其微操作的节拍安排如下
1、取指周期微操作的节拍安排
根据原则2,T0节拍可安排两个微操作:PC->MAR,1->R
分局原则2,T1街拍客安排M(MAR)->MDR和(PC)+1->PC两个微操作
T2节拍可安排MDR->IR,考虑到指令译码时间较短,根据原则3,可将指令译码OP(IR)->ID也安排在T2
节拍内
实际上(PC)+1->PC操作也可安排在T2节拍内,因一旦PC->MAR后,PC的内容就可以修改
2、间址周期微操作的节拍安排
T0 Ad(IR)->MAR,1->R
T1 M(MAR)->MDR
T2 MDR->Ad(IR)
3、执行周期微操作的节拍安排
1、非访存指令
1、清除累加器指令CLA
该指令在执行周期只有一个微操作,按同步控制的原则,此操作可安排在T0~T2的任意节拍内,其余节拍空,例如:
T0
T1
T2 0->AC
2、累加器取反指令 COM
同理,累加器取反操作可安排在T0~T2的任意节拍内,即:
T0
T1
T2 AC->AC
3)算术右移一位指令 SHR
T0
T1
T2 L(AC)-R(AC),AC0-AC0
4)循环左移一位指令CSL
T0
T1
T2 R(AC)-L(AC),AC0-AC0
5)停机指令 STP
T0
T1
T3 0-G
(2)访存指令
1)加法指令 ADD X
T0 Ad(IR)-MAR,1-R
T1 M(MAR)-MDR
T2 (AC)+(MDR)-AC(该操作实际包括 (AC)-ALU,(MDR)-ALU,ALU-AC)
2)存数指令STA X
T0 Ad(IR)-MAR,1-W
T1 AC-MDR
T2 MDR-M(MAR)
取数指令
LDA X
T0 Ad(IR)-MAR,1-R
T1 M(MAR)-MDR
T2 MDR-AC
转移类指令
1)无条件转移指令 JMP X
T0
T1
T2 Ad(IR)-PC
2)有条件转移指令(负则转)指令BAN X
T0
T1
T2 A0*Ad(IR)+A0(PC)-PC
4、中断周期微操作的节拍安排
在执行周期的最后时刻,CPU要向所有中断源发中断查询信号,若检测到某个中断源有请求,并且未被屏蔽又被排队选中,则在允许中断的条件下,CPU进入中断周期,此时CPU由中断隐指令完成下列操作(假设程序断点存入主存0号地址单元内)
T0 0->MAR 1-W
T1 PC-MDR
T2 MDR-M(MAR),向量地址-PC
此外,由图可知,CPU进入中断周期,由硬件置0允许中断触发器EINT,即关中断
设CPU中各部件及其相互连接关系如图所示,其中W是写控制标志,R是读控制标志,R1和R2是暂存器
1)假设要求在取指周期由ALU完成(PC)+1->PC的操作(即ALU可以对他的一个源操作数完成加1的运算)。要求以最少的节拍写出取指周期全部微操作命令以及节拍安排
2)写出指令“ADD # @”(#是立即寻址特征,隐含的操作数在ACC中)在执行阶段所需的微操作命令以及节拍安排。
1)由于(PC)+1—PC需由ALU完成,因此PC的值可作为ALU的一个源操作数,靠控制ALU作+1运算得到(PC)+1,结果送到与ALU输出端相连的R2,然后再送至PC
此题的关键是要考虑总线冲突的问题,故取址周期的微操作命令及节拍安排如下
T0 PC–Bus–MAR ;PC通过地址总线送至MAR
T1 M(MAR)–MDR,(PC)–BUS–ALU–R ;PC通过总线送ALU完成(PC)+1–R
T2 MDR–BUS–IR,OP(IR)–微操作命令形成部件; MDR通过总线送IR
T3 R2–BUS–PC ;R通过总线送PC
2)立即寻址的加法指令执行周期的微操作命令及节拍安排如下
T0 Ad(IR)–BUS–R1 ;立即数–R1
T1 (ACC)+(R1)–ALU—R2 ACC通过总线送ALU
T2 R2–BUS–ACC
设CPU内部结构如图,且PC有自动加1的功能。此外还有BCDEHL6各寄存器,他们各自的输入端和输出端与内部总线BUS相连,并分别受控制信号控制。要求写出完成下列指令组合逻辑控制单元所发出的微操作命令及节拍安排
1)ADD B,C
完成“ADD B C”指令所需的微操作命令及节拍安排如下
取指周期:
T0 PC–BUS–MAR ,1–R
T1 M(MAR)–MDR,(PC)+1–PC
T2 MDR–BUS–IR ,OP(IR)–微操作命令形成部件
执行周期:
T0 C–BUS–R1
T1(B)+(R1)–ALU–R2 ;B通过总线送ALU
T2 R2–BUS–B
2)完成“SUB E,@H”指令所需的微操作命令及节拍安排如下
取指周期
T0 PC–Bus–MAR,1-R
T1 M(MAR)–MDR,(PC)+1–PC
T2 MDR–BUS–IR,OP(IR)–微操作命令形成部件
间址周期
T0 H–BUS-MAR,1–R
T1 M(MAR)–MDR
执行周期
T0 MDR–BUS–R1
T1 (E)-(R)–ALU–R2
T2 R2–BUS–E
3)完成“STA @mem”指令所需的微操作命令以及节拍安排
取指周期
T0 PC–BUS–MAR,1–R
T1 M(MAR)–MDR,(PC)+1–PC
T2 MDR–BUS–IR,OP(IR)–微操作命令形成部件
间址周期
T0 Ad(IR)–BUS–MAR,1–R
T1 M(MAR)–MDR
执行周期
T0 MDR–Bus–MAR,1–W
T1 ACC–BUS–MDR
T2 MDR–M(MAR)
????????????????????????????????????????????????????????????????
设寄存器均为16位,实现补码Booth算法的运算其框图如图,其中寄存器A,X最高2位A0、A1和X0,
组合逻辑设计步骤
组合逻辑设计控制单元时,首先根据上述10条指令微操作的节拍安排,列出微操作命令的操作时间表,然后写出每一个微操作命令(控制信号)的逻辑表达式,最后根据逻辑表达式划出相应的组合逻辑电路图。
1、列出微操作命令的操作时间表
表中列出了上述10条机器指令微操作命令的操作时间表。表中FE、IND和EX为CPU工作周期标志T0~T2为节拍,I为间址标志,在取指周期的T2时刻,若测得I=1,则IND触发器置1,标志进入间址周期,若I=0,则EX触发器置1,标志进入执行周期。
同理,在间址周期的T2时刻,若测得IND=0(表示一次间接寻址),则EX触发器置1,进入执行周期;若测得IND=1(表示多次间接寻址),则继续间接寻址。
在执行周期的T2时刻,CPU要向所有中断源发中断查询信号,若检测到有中断请求并且满足响应条件,则INT触发器置1,标志进入中断周期。表中未列出INT触发器置1的操作和中断周期的操作,表中第一行对应10条指令的操作码,代表不同的指令。若某指令由表中所列的微操所命令,其对应的空格内为1;
2、写出微操作命令的最简逻辑表达式
总览表中可列出每一个微操作命令的初始逻辑表达式,经化简、整理便可获得能用现成电路实现的微操作命令逻辑表达式。
例如:
当然,再设计逻辑图时要考虑门的扇入系数(门电路允许的输入端的数量)和逻辑级数,如果采用现成芯片,还需选择芯片型号
采用组合逻辑设计方法设计控制单元,思路清晰,简单明了,但因为每一个微操作命令都对应一个逻辑电路,因此一旦设计完毕便会发现,这种控制单元的线路结构十分复杂,也不规范,又如一棵大树,到处都是不规整的树杈,而且指令系统功能越全,微操作命令就越多,线路也越复杂,调试就更困难。为了克服这些缺点,可采用微程序设计方案。
但是,随着RISC的出现,组合逻辑设计仍然是设计计算机的一种重要方法
微程序设计
微程序设计思想的产生
微程序设计思想是英国剑桥大学教授首先提出的,为了克服组合逻辑控制单元线路庞杂的缺点,他大胆设想采用与存储程序相类似的方法,来解决微操作命令序列的形成。将一条机器指令编写成一个微程序,每一个微程序包含若干条微指令,每一条微指令对应一个或者几个微操作命令。然后把这些微程序存到一个控制存储器中,用寻找用户程序机器指令的方法来寻找每个微程序中的微指令。由于这些微指令是以二进制代码形式表示的,每位代表一个控制信号(若该位为1,表示该控制信号有效,若该位为0,表示此控制信号无效),因此,逐条执行每一条微指令,也就相应完成了一条机器指令的全部操作。可见,微程序控制单元的核心部件是一个控制存储器。由于执行一条机器指令必须多次访问控制存储器,以取出多条微指令来控制执行各个微操作,因此要求控制存储器的速度较高。微程序的设计省去了组合逻辑设计过程中对逻辑表达式的化简步骤,无须考虑逻辑门级数和门的扇入系数,使设计更简便,而且由于控制信号是以二进制代码形式出现的,因此只要修改微指令的代码,就可改变操作内容,便与调试,修改甚至增删机器指令,利于机器仿真
微程序控制单元框图以及工作原理
1、机器指令对应的微程序
采用微程序设计方法设计控制单元的过程就是编写没一条机器指令的微程序,他是按执行每条机器指令所需的操作命令的先后顺序而编写的,因此,一条机器指令对应一个微程序,如图所示,图中每一条机器指令都与一个以操作性质命名的微程序对应。
由于任何一条机器指令的取指令操作是相同的,因此将取指令操作的命令统一编成一个微程序,这个微程序只负责将指令从主存单元中取出送至指令寄存器中,如图,所示的取值周期微程序。此外,如果指令是间接寻址,其操作也是可以预测的,也可先编出对应间址周期的微程序。当出现中断时,中断隐指令所需完成的操作可由一个对应中断周期的微程序控制完成。这样,控制存储器中的微程序个数应为机器指令数再加上对应取指,间接寻址和中断周期的3个微程序。
2、微程序控制单元的基本框图
图中示意了微程序控制单元的基本组成
图中点划线框內为微程序控制单元,与图中相比,他们都有相同的输入,如指令寄存器、各种标志和时钟,输出也是输出至CPU内部或系统总线的控制信号。
点画线框内的控制存储器(简称存控)是微程序控制单元的核心部件,用来存放全部微程序;CMAR(Control Memory Adress Register)是存控地址寄存器,用来存放欲读出的微指令地址;CMDR(Control Memory Data Register)是控存数据寄存器,用来存放从控存中读出的微指令
顺序逻辑是用来控制为指令序列的,具体就是控制形成下一条微指令的地址,其输入与微指令形成部件(与指令寄存器相连),微指令的下地址字段以及外来的标志有关。有关微指令序列地址的形成将在后面介绍
微指令的基本格式如图,共分为两个字段,一个为操作控制字段,该字段发出各种控制信号,另一个为顺序控制字段,他可指出下条微指令的地址(简称下地址),以控制微指令序列的执行顺序。
3、工作原理
假设有一个用户程序如下所示,它存于以2000H为首地址的主存空间内。
LDA X
ADD Y
STA Z
STP
下面结合图1和图2,分析运行上述程序时微程序控制单元的工作原理
首先将用户程序的首地址送至PC,然后进入取指阶段
1、取指阶段
1)将取指周期微程序首地址M->CMAR
2)取微指令
将对应存控M地址单元中的第一条微指令读到控存数据寄存器中,记作CM(CMAR)–CMDR
3)产生微操作命令
第一条微指令的操作控制字段中为1的各位发出控制信号
由此可见,对微程序控制单元的存控而言,内部信息一单按所涉及的微程序被灌注后,在机器运行过程中,只需具有读出的性能即可,所以可以采用ROM。此外,在微程序的执行过程中,关键问题是如何由微指令的操作控制字段形成微操作命令,以及如何形成下一条微指令的地址。这是微程序设计必须解决的问题,他们与微指令的编码方式和微地址的形成方式有关。
微指令的编码方式
微指令的编码方式又称微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。
1、直接编码(直接控制)
在微指令的操作控制字段中,每一位代表一个微操作命令,这种编码方式即为直接编码方式。上面所述的用控制字段中的某位为1表示控制信号有效(如打开某个门),以及某位为0表示控制信号无效(如打不开某个门)就是直接控制方式。如图:这种方式含义清晰,而且只要微指令从存控中读出,即刻可由控制字段发出命令,速度快。但是由于机器中微操作命令甚多,可能使微指令操作控制字段甚多,可能使微指令操作控制字段达几百位,造成控存容量极大。
2、字段直接编码方式
这种方式就是将微指令的操作控制字段分成若干段,将一组互斥的微操作命令放在一个字段内,通过对这个字段译码,便可对应每一个微命令,这种方式因铐子端直接译码发出命令,所以又有显式编码之称。
采用字段直接编码方法可用较少的二进制信息表示较多的微操作命令信号。例如:3位二进制代码译码后可表示7个互斥的微命令,留出一种状态表示不发微命令,与直接编码用7位表示7个微命令相比,减少了4位,缩短了微指令的长度。但是由于增加了译码电路,使微程序的执行速度稍微减慢。至于操作控制字段应分几段,与需要并行发出的微命令个数有关,若需并行发出8个微命令,就可分8段。每段的长度可以不等,与具体要求互斥的微命令个数有关,若需要并行发出8个微命令,就可以分为8段。每段长度可以不等,与具体要求互斥的微命令个数有关,若某类操作要求互斥的微命令仅有6个,则字段只需安排3位即可
3、字段间编码方式
这种方式一个字段的某些微命令还需要有另一个字段中的某些微命令来解释,图中字段1译码的某些输入受字段2译码输出的控制,由于不是靠字段直接译码发出微命令,所以称为字段间接译码,又称隐式编码
这种方法虽然可以进一步缩短指令字长,但因削弱了微指令的并行控制能力,因此通常用作字段直接编码法的一种辅助手段。
4、混合编码
这种方法是把直接编码和字段编码(包括直接和间接)混合使用,以便能综合考虑微指令的字长,灵活性和执行微程序速度方面的要求。
5、其他
微指令中还可设置常数字段用来提供常数、计数器初值等。常数字段还可以和某些解释位配合,如解释位为0,表示该字段提供常数,解释位为1,则表示该字段提供某些命令,使微指令更灵活
此外,微指令还可以用类似机器指令操作码的方式编码
例:某机的微指令格式中,共有8个控制字段,每个字段可分别激活5、8、3、16、7、25、4种控制信号。分别采用直接编码和字段直接编码方式设计微指令的操作控制字段,并说明两种方式的操作控制字段各取几位
1、直接编码:
微指令的操作控制字段的总位数等于控制信号数
5+8+3+16+7+25+4=69
2、采用字段直接编码方式,需要的控制位少,根据题目给出10个控制字段及各段可激活的控制信号数,再加上每个控制字段至少要留一个码字表示不激活任何一条控制线,即微指令的8个控制字段分别需要给出6、9、4、17、8、26、5种状态,对应3、4、2、5、1……,所以微指令的操作控制字段的总位数为3+4+2+5……=26位

  • 12
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery的链式操作是通过在每个方法中返回对象本身来实现的。具体来说,每个jQuery方法都会在处理完它自己的逻辑后,通过`return this`返回当前的jQuery对象。这样,我们就可以在一个方法调用后继续在同一个对象上调用其他方法,形成链式操作。这种设计可以让我们在代码中更加简洁和优雅地操作DOM元素。 举个例子,假设我们有一个元素的选择器为`$('#demo')`,我们可以通过链式操作来依次修改它的样式、属性、内容和事件处理函数。比如: ```javascript $('#demo') .css({ height: '50px', border: '1px solid #000', 'background-color': 'red' }) .attr('class', 'demo') .html('add demo text') .on('click', function() { console.log('clicked'); }); ``` 在这个例子中,我们先使用`css`方法修改了元素的样式,然后使用`attr`方法修改了它的class属性,接着使用`html`方法修改了它的内容,最后使用`on`方法给它添加了点击事件处理函数。通过链式操作,我们可以一行代码完成多个操作,使代码更加简洁清晰。 总结来说,jQuery的链式操作通过在每个方法中返回对象本身,允许我们在同一个对象上连续调用多个方法,以实现代码的简洁和可读性的提升。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [jQuery链式操作如何实现以及为什么要用链式操作](https://download.csdn.net/download/weixin_38665944/13661357)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [链模式-jquery链式调用的原理与实现](https://blog.csdn.net/HRM2454/article/details/106084813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值