计算机组成原理
高级语言一般是先翻译成汇编,然后汇编翻译成二进制执行。
翻译程序
将高级语言翻译成机器语言程序的软件成为翻译程序。翻译程序有两种:一种是编译程序,另一种是解释程序。java是编译和解释并存。c语言这种是编译程序。
编译是一次编译完执行,代码不变更就不需要重新编译。翻译是逐句翻译然后执行。每次执行都需要重新翻译。为什么要这样搞
固件
将软件永恒的存与只读存储器中。
计算机硬件组成
输入设备、输出设备、存储器、控制器和运算器。
cpu=运算器+控制器
现在简化为:cpu、io设备和主存储器。cpu和主存储器可以成为主机,io设备可以称为外设。
主存储器
程序计数器主要是记录指令存储地址的,+1就是下一个指令的地址。
反复使用某个指令或者某个数据的时候只需要把地址调出来就行了,没必要在存储中再复制一份。
为了实现按地址访问的方式,需要两个寄存器,memory address register和memery data address register简称MAR和MDR。
MAR存储器地址寄存器 ;MDR存储器数据寄存器。
系统总线
总线概念
总线是连接多个部件的信息传输线,是各部件共享的传输介质。当多个部件同时与总线相连时,如果出现两个或者两个以上部件同时向总线发送信息,会导致信号冲突,传输无效。因此,在某一时刻,只允许有一个部件向总线发送信息,而多个部件可以同时从主线接收相同的信息。
总线连接
计算机各部件连到一组公共信息传输线上。
分散连接
计算机五大部件的各部件之间使用单独的连连线。‘
总线复用
一条信号线上分时传送两种信号。
总线判优控制
主设备想要与另一个设备进行通信的时候,首选由主设备发出总线请求信号,若多个主设备同时要使用总线的时候,这时候就有一个优先级问题。
优先级算法主要有以下三种:
1.链式查询。离总线控制部件最近的设备有最高的优先级。特点:只需要很少几根线就能按一定优先级次序实现总线控制,并且很容易扩充设备。但是,对电路故障很敏感,并且优先级低的设备可能个很难获得请求。因为这个优先级是固定的,没有衰老算法去升级优先级。
2.计数器定时查询。有一个数字从0开始一直在增加,当请求占用总线的设备地址与计数值一致的时候就获得到了总线的使用权,此时终止计数。这种方式一旦优先级被固定就变不了了。这个数字也可以从上一次计数的终止点开始,这时候设备使用总线的优先级相等,计数的初始值可以设置,这样就能调整优先级。这种方式对电路故障不如链式查询敏感,但是增加了控制线(设备地址)数,控制比较复杂。
3.独立请求方式。设备需要使用总线的时候,发出请求信号。总线控制部件把这些信号放入队列里,然后在队列里控制优先级。特点:响应速度快,优先级控制灵活简单,但是控制线数量多,总线控制更复杂。
总线通信机制
总线通信采用分时处理。在获得总线使用权的先后顺序分别占用总线,即哪一个部件获得使用权,此刻就由它传送,下一个部件获得使用权,接着下一个时刻传送。这样一个接一个轮流交替传送。
总线通信方式
1.同步通信。很简单
2.异步通信。主模块发送请求信号时,一直等待从模块返回回来响应信号后才开始通信。
异步通信分为三种类型:
1.不互锁方式。主模块发送请求后不等待从模块的响应,等待一段时间,确认从模块已经收到请求信号后,便撤销请求信号。从模块接到请求信号后,在条件允许的情况下发出回答信号,并经过一段时间确认主模块已经收到回答信号后,主从撤销信达信号。通信双方无互锁关系。
2.半互锁方式。主模块发出请求后必须等到从模块的回答信号后再撤销请求,这一段有互锁。从模块接到信号后发出回答信号,并经过一段时间确认主模块已经收到回答信号后,主从撤销信达信号,这一段没有互锁。
3.全互锁方式。主模块发出请求后必须等到从模块的回答信号后再撤销请求.从模块发出回答信号必须获知到主模块请求信号已撤销后再撤销回答信号。有点类似网络的握手。
3.半同步通信。整体速度不太行。
4.分离式通信。一般普通电脑用不到,主要是大型计算机会用到。
存储器
动态刷新ram
由于存储单元被访问是随机的,有可能某些存储但愿长期得不到访问,不进行存储器的读/写操作,里面的信息会慢慢小时,所以一般2秒对动态ram的全部基本单元电路做一次刷新。
刷新通常有三种方式:
1.集中刷新。停止读写,然后刷新。
2.分散刷新。把刷新的操作分散到每个存取周期内完成,存取周期分一般时间用来读写,另一半时间用来刷新。这样搞的缺点就是存取周期边长,整个系统速度变低。
3.异步刷新。刷新一行只停止一个时钟周期,是最好的方式。
cache与主存缓存一致性策略
1.写直达法。写的时候cache和主存都写一下。缺点是增加了访问内存的次数。
2.写回法。写数据的时候只写cache,当cache中的数据被替换掉的时候才写入主存。这种主存和cache会有数据不一致的问题。解决方法是加一个标志位,表示cache是否和主存中的数据一致。在cache替换时,有变更的数据写入主存,同事修改标志位的状态。cache和主存一致的数据则不做任何操作。这种缺点就是复杂一点。
cache替换策略
1.先进先出FIFO
2.近期最少使用LRU,实现比较复杂,但是缓存命中率最高。
3.随机法
DMA数据交换方式:
1.停止cpu访问主存,跟红绿灯似的。
2.周期窃取。最好的方式,时间片段小。
3.DMA与cpu交替访问。 适合cpu工作周期比主存存取周期长的情况。
指令寻址
分为顺序寻址和跳跃寻址。
顺序寻址是程序计数器加1,自动形成下一个指令地址。跳过寻址通过转移类指令实现。
指令周期
cpu取出并执行一条指令所需的全部时间。
指令流水
一次多取几个指令然后一块儿执行。取指令和执行指令是两个不同的部件完成的,因此时间上还可以重叠。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f2mleJgg-1649052186650)(C:\Users\pxm\AppData\Roaming\Typora\typora-user-images\image-20220320163401777.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CYZJziCJ-1649052186652)(C:\Users\pxm\AppData\Roaming\Typora\typora-user-images\image-20220326100224265.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-njxQsssG-1649052186653)(C:\Users\pxm\AppData\Roaming\Typora\typora-user-images\image-20220326100851629.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O1uYgPDL-1649052186655)(C:\Users\pxm\AppData\Roaming\Typora\typora-user-images\image-20220326101627848.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uAK1SWsH-1649052186656)(C:\Users\pxm\AppData\Roaming\Typora\typora-user-images\image-20220326102210730.png)]
cache更新策略
写直达法
写操作时既写入cache又写入主存。缺点是增加了访存次数。
写回法
仅当cache有变更的时候才写主存。需要加一个标志位,标志cache和主存是否一致。有变更先标记浊,待主存更新完后更新标志位清。缺点是增加了cache的复杂性。
替换策略
fifo、随机、lru近期最少使用
指令寻址
顺序寻址和跳跃寻址。顺序寻址就和数组一样,跳跃寻址依赖转移指令。