计算机组成原理——笔记(基于王道资料+自己理解)
硬件:四代计算机:电子管->晶体管->中小规模集成电路->超大规模集成电路
(摩尔定律-18月数量与性能均增加一倍)
软件:机器语言(面向机器)->汇编语言(面向机器)->高级语言(面向问题)
机器语言:计算机唯一可以直接执行的语言;汇编语言:需要通过汇编程序将汇编语言源程序翻译(分为2种,编译(全部翻译成目标程序)和解释程序(一一翻译执行))为机器语言,汇编语言用助记符编写,是机器语言的符号表示;高级程序:由编译程序编译成汇编再转为机器语言;或由高级语言程序翻译成机器语言
(C语言:源程序.c 由C编译器编译成汇编源程序,由汇编程序翻译成目标程序,再由链接程序将目标程序转为可执行程序)。
按指令与数据流:
硬件系统与软件系统共同组成一个完整的计算机系统。
硬件:有形的物理设备;软件:在硬件上运行的程序和相关的数据及文档
冯·洛依曼机:以运算器为中心,特点是“存储程序”(按地址访问并顺序执行指令)——将指令以代码的形式先输入到计算机主存储器中,按其在存储器中的首地址执行程序的第一条指令,再按程序的规定顺序执行其他指令,直至结束。(控制流驱动的工作方式)
现代计算机:以存储器为中心,I/O直接与存储器相连。基本工作方式:数据流驱动
存储器、运算器、控制器和输入、输出设备(冯·洛依曼和现代在功能部件的组成上是一致,现代计算机将运算器和控制器集成到CPU中,CPU和主存储器统称为主机,其他硬件如I/O设备统称为外部设备)
运算器:计算机的执行部件,用于对数据进行加工处理,完成算术和逻辑运算。
核心是算术逻辑单元ALU,还包括暂存寄存器、累加寄存器ACC、通用寄存器组(可编程制定功能,其位数取决于机器字长,便于操作控制)(如乘商寄存器MQ、操作数寄存器X、变址寄存器IX、基址寄存器BR等)、程序状态字寄存器PSW(表示程序和机器运行状态,可编程)、移位器和计数器CT等组成。
控制器:计算机的指挥单元,用于控制各部件自动协调的进行工作。
核心是控制单元CU(包括指令译码器、时序系统、微操作信号发生器等),还包括程序计数器PC(用于指出下一条指令在主存中的地址,取完地址后自加,可编程)和指令寄存器IR(用于保存当前正在执行的指令)、存储器地址寄存器MAR(用于存放所要访问的主存单元地址)和存储器数据寄存器MDR(用于存放向主存中写入或读出的数据)等。
工作原理:根据指令操作码、指令的执行步骤(微命令序列)和条件信号来形成当前计算机各部件要用到的控制信号。
PC的位数取决于存储器地址的位数,即存储器容量;IR的位数取决于指令字长;MAR的位数与PC一样,取决于存储器地址的位数;MDR的位数为存储字长。
例:64位机,主存为4G*64位,4G=2^32,故PC的位数=MAR=32,MDR的位数=64;当按字编址,1字长=64bit=8B,此为存储字长;因为主存为4G*64->4G*64/8B=4G=2^32;
其他的寄存器(通用)位数都和MDR(机器字长)相等——便于操作控制。
补:各字长具体含义:
机器字长:CPU一次能处理二进制数据的位数,是CPU内部数据通道的宽度
存储字长:存储器中一个存储单元(存储地址)所存储的二进制位数(MDR)
指令字长:计算机指令字的位数,是存储字长的整数K倍(取指周期=K*机器周期)
数据字长:计算机数据存储所占用的位数,即数据总线一次并行传输的位数
主存储器:CPU可直接访问的存储器,是程序运行时的存储位置,由多个存储单元(对应存储字长)组成(存储容量=存储个数*存储字长(4G*64位,即32GB)),主存可与Cache(高速缓冲存储器,位于CPU与主存之间)、辅存交换数据,构成储存系统层次结构(CPU内部寄存器->Cache->主存->辅存)
例:一计算机每秒执行20M条指令,每条指令平均访存1.5次,主存与Cache之间每次交换数据块16B,Cache命中率99%(CPU需要的数据在Cache中的概率),则每秒访问主存的次数是20M*1.5*(1-99%)=300K,此时带宽(主存与Cache)是16B*300K/s=4.8MB/s;主存与辅存之间每次交换数据页4KB,缺页率0.0005%,则每秒访问辅存的次数是300K*0.0005%=1.5;若存储器总线带宽32位=辅存的数据缓存器位数,缓存每次要接收数据就发送一次请求(DMA),则平均每秒发送的DMA的次数是1.5*4KB/32=1.5K=1536;如果采用每1/4个存储周期启动一种存储,每个存储存储周期为50ns,则主存提供的最大带宽为4*32/50ns=320MB/s
辅存:只能通过主存与CPU交换信息,如磁盘存储器、光盘、硬盘等(外部设备)
磁盘:含有若干纪录面(用磁头数表示),每面若干磁道(由柱面数表示),每条磁条
若干扇区(用扇区数表示,又称块,是磁盘读写的最小单位)
例:一磁盘7200转/分,平均寻道时间(磁头找到磁道的时间)为8ms,每个磁道1k个扇区,则访问一个扇区的平均存取时间为:存取时间=寻道时间(8ms)+延时时间(磁头确定扇区的时间,一般平均延时时间为旋转半周的时间,7200转/分=7200/60=120转/s
1/120即旋转一周的时间,0.5*1/120=4.17ms)+传输时间(传输数据所花费的时间,即磁头扫过一个扇区的时间,每个块所需时间为1/120 /1000=0.01ms)=8+4.17+0.01=12.18ms
软件按功能分为系统软件和应用软件
统包括:DBMS和数据库等)、网络软件系统、标准库程序、服务性程序等
指令:又称机器指令,是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。指令是一组有意义的二进制数据串,一般分为操作码和地址码。
操作码:指出该指令执行的操作和对应功能
地址码:给出被操作的信息(指令或数据)的地址
补:各周期具体含义:
时钟周期:即CPU的主频,是CPU操作最基本的单位
机器周期:CPU完成一个基本操作(例取指令)所花费的时间,由多个时钟周期组成
指令周期:从取出指令到分析到执行完成指令的全部时间,由多个机器周期组成
存储周期:是存储器进行两次独立的存储器操作(读或写)所需的最小间隔时间
总线周期:CPU通过总线对外部进行一次访问所需的时间
析:指令字长、周期与存储字长、周期;机器字长、周期关系:
指令字长=存储字长——>取值周期(不是指令周期)=机器周期
指令字长取决于操作码的长度、操作数的长度和操作数地址的个数(实质上指令字长操作码长度+地址长度(地址长度=操作数个数*操作数地址长度)),与机器字长无关
例:某计算器内部数据通路如下图,确定指令ADD (R1),R0(将R0中的数据与R1中的内容所对应的地址中的数据相加并送入R1的内容所对应的地址中)在每个时钟周期下从取指到执行的每个步骤并解释其具体的功能:
第一部分:取指令:在PC(程序计数器)中找到这一次的指令对应地址,将其发送到MAR(存储器地址寄存器)中,并将PC的内容自加1,MAR的内容(指令地址)发送到MDR(存储器数据寄存器)中向主存中读取对应的指令后并发送到IR(指令寄存器)中
第二部分:分析指令:从主存中所读取的数据是指令(CPU通过在不同阶段取出数据的不同来区分指令和数据,取指周期取出指令,执行周期取出数据),进行对应的操作
(详细来说,在取值周期后存在的是间址周期,就是将指令所需的数据所对应的地址送到MAR中并取出;在执行周期后还有中断周期,用于处理中断请求(只能在执行完成后))
第三部分:执行指令:ADD (R1),R0 一个操作数在存储器中(R1),一个在寄存器R0中,而执行完成后的结果保存在(R1),即对应的存储器(主存)中。再来分析上图所谓的数据通路(数据在功能部件之间传送的路径,用于实现CPU内部运算器与寄存器以及寄存器之间的数据交换),ADD需要用到ALU功能部件,两个输入,一个来自寄存器A,一个来自数据总线,而这总线与MDR、MAR相连;一个输出到寄存器AC中。
故指令执行过程:1.先将R1对应的数据地址(R1)送入MAR(地址寄存器)中,MAR将由该地址在内存中所存的数据送入MDR(数据寄存器)中,MDR将数据送给A,一端输入便完成了;另一端,看图,对应R0可直接与总线相连,故可直接执行ADD指令:(A)+(R0),而结果送入AC中;再将AC对应数据在主存中的地址送入MDR,而MDR将地址送入MAR中进行存放。(M(X)表示对应寄存器X对主存读写操作)
时钟 |
功能(”()”表示对应的数据地址) |
有效控制信号(暂时不用理解) |
C1(取) |
(PC)->MAR |
PCout, MARin |
C2(取) |
M(MAR)->MDR; (PC)+1->PC |
MemR, MDRinE, PC+1 |
C3(取) |
(MDR)->IR |
MDRout, IRin |
C4(译码) |
指令译码 |
无 |
C5(执行) |
(R1)->MAR |
R1out, MARin |
C6(执行) |
M(MAR)->MDR |
MemR, MDRinE |
C7(执行) |
(MDR)->A |
MDRout, Ain |
C8(执行) |
(R0)+(A)->AC |
R0out, Add, ACin |
C9(执行) |
(AC)->MDR |
ACout, MDRin |
C10(执行) |
(MDR)->M(MAR) |
MDRoutE, MemW |
例:取数指令(将指令地址码指示的存储单元中的操作数取出送至运算器的ACC):
取指令:PC->MAR->Mem->MDR->IR((PC)+1->PC)
分析指令:OP(IR)->CU
执行指令:Ad(IR)->MAR->Mem->MDR->ACC
指计算机进行一次整数运算(定点整数运算)所能处理的二进制数据的位数,字长越长,数的表示范围越大,计算机的精度越高,字长通常为字节的整数倍
指数据总线一次所能并行传输信息的位数(即数据字长)(指的是外部数据总线的宽度,不是CPU内部的数据总线宽度(内部宽度一般等于机器字长))
指主存储器所能存储信息的最大容量,单位一般为字节,可用字数(存储器的个数)*字长(存储字长)来表示(MAR的位数对应存储器的个数,MDR的位数对应存储字长)
响应时间:指从用户向计算机发送一个请求到计算机做出响应并获得对应结果的所有时间,通常包括CPU时间(运行程序的时间)+等待时间(磁盘访问、存储器访问、I/O操作等所需时间)
MIPS:每秒执行多少百万条指令=主频(MHz)/CPI
CPU执行时间=CPU时钟周期数/主频=(指令条数*CPI)/主频
例:一计算机主频1.2GHz,指令A的CPI为2,占总指令的50%,B的CPI为3,占20%,C的CPI为4,占10%,D的CPI为5,占20%,则MIPS=主频/CPI,主频为1.2GHz=1200MHz,平均一条指令的CPI=2*50%+3*20%+4*0.1+5*0.2=3,故MIPS=400