核心:计算
五大功能部件:输入设备,运算器,存储器,控制器,输出设备。运作方式?
- 存储器:外存(磁盘存储器),内存优缺点?
容量大,断电后依然可以保存数据,无法直接从其中取数据用,必须把数据调入内存后才能使用,访问速度慢;
访问速度快,可以hi结合运算器交换信息,一般只存储正在运行的程序和待处理的数据,但是容量小,断电后无法保存数据
- 内存存储单元的访问?
地址->MAR(存储器地址寄存器,用于寻址)->译码电路->存储单元->MDR(存储器数据寄存器,位数等于存储字长)
- 冯诺依曼计算机
- 存储程序工作方式
将程序所含的指令和数据放入主存储器,一旦程序被启动执行,计算机会取指令和执行。(执行过程:取指,译码,计算下条指令,取操作数并执行,将结果送回寄存器)
- 从源程序到可执行文件
翻译程序三类:汇编程序,解释程序如python(逐条翻译成机器指令并执行),编译程序(将高级语言翻译成汇编or机器语言)
.c->.i->.s->.o->.out
数制与编码
- 进制转换
除基取余法,乘基取整法
- 真值vs机器数
0表示正数,1表示负数
- 定点数vs浮点数
计算机中只能表示0和1,机器内部没有小数点,只是人为约定了小数点,约定小数点在寄存器最右边一位数的后买你。定点数式小数点在固定位置,而浮点数不是;对于一个定点数,形式为 1为符号位加3位数值位(4位寄存器)
引出的原码概念
用机器数的最高位表示符号,其余各位表示数的绝对值
- 补码
真值7:0111
+1
真值-8:1000
第一位是-2^k,上面例子就是-2^3
- 反码
符号位不变,数值为按位取反,在数轴上,正数与负数关于原点对称(毕竟本来符号位就是反的)
但是浪费了0一种状态
- 原码到补码转换
负数:符号位不变数位按位取反,末位加一,补码到原码逆向即可
正数:都一样
- 移码
x+2^n(对于n+1位机器数),比如4位机器数
使用移码好处,单调性与真值一致,适合比大小
- 无符号数
一个编码所有二进制都用来表示数值而没有符号位时,如用无符号int进项地址运算
思考:机器数本身是没有意义的,取决于编码方式?
程序执行的过程
ISA指令集体系结构:抽象视图
计算机组成(实际硬件实现)是计算机计算机体系结构(ISA)的具体实现
寄存器:用来存放一个单位的数据的存储单位,位于CPU中,但是访问速度快于访问CPU外的存储器
时钟:绝大多数数字电路都带有一个时钟,用以生成来内需的间隔固定的电脉冲流。用来计时确定计算机内所有时间的顺序
- RISC和CISC的区别?
RISC:精简指令集计算机,用少量的指令完成简单操作,提高了程序设计的难度,复杂操作需要哟个多个指令复合,比如ARM处理其
CISC:复杂指令集计算机,使用大量的指令,减少了程序设计的难度,但是使CPU和控制单元电路更复杂,比如Intel奔腾系列CPU
- 乱序执行的好处?
并发,CPU使用多核,改变指令的执行顺序提高计算机的速度
- 最大游程-状态图?
判断和前一个数字是否相同,如果相同则在同一个序列中,如果不同就不再同一个序列中,默认状态不在同一个序列,遇到相同的改为同一序列,再切回默认
存储系统
存储器映射只是概念上的,展示了信息在存储器中的存放位置,存储器中的每个位置要么保存指令,要么保存数据元素
处理器将一个放在地址总线上的地址以及以以一个,用于选择读操作或写操作的控制信号发送给存储器,写/读周期中,数据总线上的数据写入存储器/供CPU读取
寄存器传输语言(RTL):更加容易定义计算机内发生的操作
存储程序计数器:程序计数器指向指令,CPU从程序计数器所指的存储单元中读出指令,修改程序计数器,只想下一条指令,指令解码,执行指令
- 执行一条指令至少需要几次访存?
两次,一次是读指,一次是读出数据
- 指令格式
ADD,P,Q,R ;100110101110
ADD取操作数 10取操作数表中取指令,数据从内存中取值,放在加法器中
- 两地址取指和单地址取指
两地址取指会破坏它的一个操作数(替换),如 mov a,b,在实际计算机中,不允许一条指令使用两个存储地址(指内存,这也说明了为什么要使用寄存器),所以规定一个是存储器地址(内存),另一个是寄存器地址;单地址指令,operation address,指令中只提供了一个操作数地址,而指令却需要至少两个地址,处理器使用一个不需要显示地址的第二操作数,第二个操作数来自CPU内一个叫累加器的寄存器,如实现P=Q+R,LOAD (accumaltor),ADD R (),STORE (accumalator) P
- 一个对于计算机的分类方式,按指令处理数据的方式
存储器-存储器型(一般不用,我觉得应该是速度比较慢,寄存器访问最快),寄存器-存储器(要么被写回存储器,要么被写回寄存器),寄存器-寄存器(LOAD,STORE)
- 存储层次
寄存器(处理器的工作数据)->cache(缓存常用数据的快速存储器)->DRAM(动态随机访问存储器,易失性,村昂正在执行的程序的主存)->硬盘,速度由快到慢,容量由小到大
Cache高速缓存,cache访问时间比主存短,因为cache保存着经常使用的数据,与CPU的地址总线和数据总线相连,优先从cache中发送数据,而不会取主存中取数据
一级缓存,二级缓存,三级缓存
- 总线的好处与缺点?(BUS)
只有一条高速数据通路,一条就可以将所有单元连接在一起;但是每次只有唯一一个设备能与其他设备通信,不得不去竞争总线的控制权,仲裁——多个设备竞争同一资源。
宽度:并行数据通路(一次并行能传送多少数据)
带宽:传输速率
延迟
- 多总线系统
提高性能,不然若要添加一个新单元,必须在新单元与它所连接的每个单元之间增加一条新连接
指令集体系结构
以下基于ARM(处理器)->RISC结构,相比于Intel->CISC更加精简
CPU的寄存器:1.高速暂存寄存器,用于保存地址
2.PC,程序计数器,记录了要执行的下一条指令的地址;MAR,存储器地址寄存器,保存了读或写操作正在访问的存储单元的地址;MBR,存储器数据寄存器,保存了刚从存储器种读出的数据,或将要写入存储器的数据;IR,指令寄存器,存放最近从存储器种取出的指令,也就是当前正在执行的指令
3种指令格式:
LDR r1 1234 把地址为1234的存储单元中的数据读到寄存器r1中
STR r2 2000 把寄存器r2的值写入地址为2000的存储单元
Operation :ADD r1,r2,r3
- 如何读取并执行LDR r1,1234
FETCH [MAR]<-[PC] ;把PC的值复制到存储器地址寄存器,表示正在访问的
[PC]<-+=4 ;PC指向下一条指令
[MBR]<-[[MAR]] ;读出MAR中的指令,保存到MBR中,
[IR]<-[MBR]
LDR [MAR]<-[IR(address)] ;读出IR种的操作数地址
[MBR]<-[[MAR]] ;操作数读到MBR
[r1]<-[MBR]
- 为什么每次取指后PC必须加4
32位微处理器使用32位指令和32位字数据(比如在64位上PC就要加8?)
扩展处理器:常量处理
LDR r1,1234 ;这里的1234是指位234的存储单元的内容
LDR r1,#1234 ;这里的1234是指立即操作数,立即数是一个在运算中可以直接使用的数
- 扩展处理器:流控制
非顺序执行的能力,转移到特定位置的分支和跳转指令,例子:if……else…….
SUBS r,r5,#1
BEQ onZero ;如果r5为0则跳到onZero处执行
notZero ADD r1,r2,r3
- 条件吗寄存器CCR
保存了ALU中用于测试的条件(如0,正,负),当ALU执行一个操作时,更新CCR的零位,借位位,负位,溢出位
如果CCR测试位为false,则处理器从[PC]+4处取出下一条指令,CCR的测试位为true,则PC从IR的操作数字段载入新地址并跳转
Z(结果是否为0),N(二进制形式是否为负),C(产生进位位),V(溢出)
- 如何使用条件分支指令BEQ address来实现高级语言结构?
BEQ指令选出CCR中的一位进行测试(Z,N,C,V)如果被测试位1,则PC载入一个新地址,否则不变
- ISA的组成
寄存器集,寻址方式,指令格式
寄存器对于提高计算机性能和实际指令集设计是很有必要的
Op-code+control bits+destination register+source register1+source register2
假设某计算机操作码8位,使用3位可以访问r0-r7中一个,就能用8+3+3+3=17位实现指令ADD P=Q+R
寻址方式:1)立即数寻址:如操作数P=Q+5,5就是立即数,它没有被保存在存储单元或寄存器中,而是指令的组成部分,ARM处理器使用前缀#指定立即从操作数
2)直接寻址:绝对寻址,把操作数地址用作指令中的一部分,如ADD P,Q,R表示将存储单元Q的内容与存储单元R的内容相加,并保存在存储单元P中
3)间接寻址:寄存器间接寻址,获得一个操作数需要三次访问,度至零,读含有操作数地址的寄存器,以及最后读出实际的操作数,反右操作数地址的寄存器乘坐指针寄存器,LOAD型计算机(如ARM),使用这种寻址方式访问存储器操作数
以下是ARM,Intel 32和Freescale的汇编语言
LDR r1,[r2]
MOV ax,[bx]
MOVE (A5),D2 A5->D2
- 为什么计算机不支持存储器-存储器型寻址方式?
存储单位占用空间大,所需地址位数多,访问速度慢
- 操作码与指令
三地址计算机
双地址计算机
单地址计算机
零地址计算机:栈计算机,单操作数运算作用于栈顶,双操作数首先从栈顶取出两个元素,运算后入栈
存储器
- 分类
存取方式:RAM,ROM SAM,DAM
断电后是否保存:易失性(RAM),非易失性(ROM,磁盘,磁带,光盘)
读出方式:破坏性读出,非~
- 性能指标
存储单元
编址和寻址。为了区别存储体中的存储单元,必须将它们统一编号,存储单元的编号称为地址
存取时间,存取周期(访问时间,恢复时间)
主存储器
- DRAM的工作原理
打开开关,给电容充电,完成写入;当充满电时打开开关,电流留出,信号放大器检测1还是0,电被释放,所以是破坏性读出,需要恢复电荷,过程叫做再生
- 半导体存储芯片
译码驱动电路,存储矩阵,读/写电路
- 译码驱动方式
单译码法
线选法:通过n个地址引脚定义一个大小为2^n的地址空间,缺点时译码后输出端的线数量过多,故值适用于容量小的静态存储器
重合法:适合大容量的动态存储器
双译码法
DRAM行列地址复用,行缓冲,位平面
- DRAM的刷新
为什么会有刷新?
电容会漏电,所以DRAM的单个存储单元必须市场刷新,否则会因漏电发生数据丢失
分类:
集中刷新 后128个读写周期集中用于刷新,读写操作期间不受刷新操作的影响,速度比较快,但是存在死去,即在集中刷新的128个读写周期内,CPU长时间不能访问存储器
分散刷新 不存在死区,但是因为刷新过于频繁,严重影响了习用的速度,不适合应用于高速存储器
异步刷新 集中刷新和分散刷新的结合,更加常用,避免CPU连续等待时间过久
attention:刷新以行为单位,逐行顺序地恢复数据,再生仅恢复被读出地那个单元的数据