计算机原理组成篇 (1):https://developer.aliyun.com/article/1387181?spm=a2c6h.13148508.setting.18.38f44f0eLpw0gy
主存-辅存层次
原理:局部性原理实现:主存之外增加辅助存储器(磁盘、SD卡、U盘等) 目的:解决主存容量不足的问题
你有20G游戏,但是只有8G主存,根据局部性原理,把游戏当前需要的数据放在主存里,不需要的放在辅存里
主存储器
就是内存
- RAM(随机存取存储器:Random Access Memory
- RAM通过电容存储数据,必须隔一段时间刷新一次
- 如果掉电,那么一段时间后将丢失所有数据
32位系统,()2(32)=4GB
64位系统,()2(64)=()2(34)GB
辅助存储器
磁盘
- 表面是可磁化的硬磁特性材料
- 移动磁头径向运动读取磁道信息
磁盘调度算法
我们举下面的例子,看看磁道是怎么移动的。
先来先服务算法
按顺序访问进程的磁道读写需求
1->4->2->3->1->5
最短寻道时间优先
与磁头当前位置有关优先访问离磁头最近的磁道
4->5->3->2->1->1
4->3->2->1->1->5
扫描算法(电梯算法)
每次只往一个方向移动到达一个方向需要服务的尽头再反方向移动
4->3->2->1->1->5
循环扫描算法
只能往一个方向读取
4->5->1->1->2->3
计算机的高速缓存
工作原理
先介绍以下概念:
字:是指存放在一个存储单元中的二进制代码组合
字块:存储在连续的存储单元中而被看作是一个单元的一组字
一个字有32位
一个字块共B个字
主存共M个字块
�∗�=主存总字数
�∗�∗32=主存总容量(bits)
字的地址包含两个部分
前m位指定字块的地址
后b位指定字在字块中的地址
将主存对比缓存,我们发现:
- 存储的逻辑结构类似
- 缓存的容量较小
- 缓存的速度更快
- 缓存就是主存某些字块的复制
一个字有32位
一个字块共B个字
缓存共C个字块
CPU与缓存的关系:
- CPU需要的数据在缓存里
- CPU需要的数据不在缓存里
不在缓存的数据需要去主存拿
如何衡量CPU在缓存取成功的几率呢?
就有了命中率
访问主存次数:Nm
访问Cache次数:Nc
命中率ℎ=��/��+��
工作原理:
- 命中率是衡量缓存的重要性能指标
- 理论上CPU每次都能从高速缓存取数据的时候,命中率为1
除了命中率,还有访问效率
针对命中率和访问效率,为了他们更高,所以需要性能良好的缓存替换策略
高速缓存替换策略
当高速缓存里没有数据,就需要从主存载入所需数据
随机算法
随机选取
先进先出算法(FIFO)
把高速缓存看做是一个先进先出的队列
优先替换最先进入队列的字块
最不经常使用算法(LFU)
优先淘汰最不经常使用的字块
需要额外的空间记录字块的使用频率
使用频率?访问一次就加1
最近最少使用算法(LRU)
优先淘汰一段时间内没有使用的字块
有多种实现方法,一般使用双向链表
把当前访问节点置于链表前面(保证链表头部节点是最近使用的)
计算机的指令系统
机器指令的形式
组成部分:操作码和地址码
|操作码字段|地址码字段|
操作码
- 操作码指明指令所要完成的操作
- 操作码的位数反映了机器的操作种类
地址码
- 地址码直接给出操作数或者操作数的地址(指定数据的地址,使得cpu可以运算)
- 分三地址指令、二地址指令和一地址指令
三地址指令
addr3通常是存储addr1和addr2的运算结果的
(addr1) OP (addr2) -> addr3
二地址指令
(addr1) OP (addr2) -> (addr1)或(addr2)
结果存储addr1或addr2
一地址指令
(addr1)OP->(addr1) 自己对自己操作
(addr1)OP(ACC) -> (addr1) 自增行为
零地址指令
- 在机器指令中无地址码
- 空操作、停机操作、中断返回操作等
机器指令的操作类型
数据传输
- 寄存器之间、寄存器与存储单元、存储单元之间传送
- 数据读写、交换地址数据、清零置一等操作
算术逻辑操作
- 操作数之间的加减乘除运算
- 操作数的与或非等逻辑位运算
移位操作
- 数据左移(乘2)、数据右移(除2)
- 完成数据在算术逻辑单元的必要操作
控制指令
等待指令、停机指令、空操作指令、中断指令等
机器指令的寻址方式
指令寻址
顺序寻址、跳跃寻址
顺序寻址:正常执行,从101开始
跳跃寻址:到105这又跳跃到102
数据寻址
立即寻址
- 指令直接获得操作数
- 无需访问存储器
比如说这个6直接放在操作数里
直接寻址
- 直接给出操作数在主存的地址
- 寻找操作数简单,无需计算数据地址
间接寻址
指令地址码给出的是操作数地址的地址
需要访问一次或多次主存来获取操作数
计算机的控制器
控制器是协调和控制计算机运行的。
程序计数器
- 程序计数器用来存储下一条指令的地址
- 循环从程序计数器中拿出指令
- 当指令被拿出时,指向下一条指令
时序发生器
- 电气工程领域,用于发送时序脉冲
- CPU依据不同的时序脉冲有节奏的进行工作
指令译码器
- 指令译码器是控制器的主要部件之一
- 计算机指令由操作码和地址码组成
- 翻译操作码对应的操作以及控制传输地址码对应的数据
指令寄存器
- 指令寄存器也是控制器的主要部件之一
- 从主存或高速缓存取计算机指令
主存地址寄存器
保存当前CPU正要访问的内存单元的地址
使用地址总线与主存进行通信。
主存数据寄存器
保存当前CPU正要读或写的主存数据
使用数据总线与主存进行通信。
通用寄存器
- 用于暂时存放或传送数据或指令
- 可保存ALU的运算中间结果
- 容量比一-般专用寄存器要大
计算机的运算器
运算器是用来进行数据运算加工的
数据缓冲器
- 分为输入缓冲和输出缓冲
- 输入缓冲暂时存放外设送过来的数据
- 输出缓冲暂时存放送往外设的数据
ALU
- ALU: 算术逻辑单元,是运算器的主要组成
- 常见的位运算(左右移、与或非等)
- 算术运算(加减乘除等)
注:A,B是输入,F是输出,K是n个控制器
状态字寄存器
- 存放运算状态(条件码、进位、溢出、结果正负等)
- 存放运算控制信息(调试跟踪标记位、允许中断位等)
通用寄存器
- 用于暂时存放或传送数据或指令
- 可保存ALU的运算 中间结果
- 容量比一般专用寄存器要大
计算机指令的执行过程
指令执行过程
取指令和分析指令,是CPU在工作,执行指令是运算器在工作,这说明运算器和控制器不能同时工作,导致CPU的综合利用率并不高
CPU的流水线设计
- 类似工厂的装配线
- 工厂的装配线使得多个产品可以同时被加工
- 在同一个时刻,不同产品均位于不同的加工阶段