【学习笔记】【计算机组成原理】定点数与浮点数的运算;LRU算法实现;cache命中;流水线冲突、冲刷;

前言

在这里插入图片描述

一、计算机组成原理-背景

1、计算机的发展简史

在这里插入图片描述

2、计算机的分类

摩尔定理难以实现,开始多核发展;
在这里插入图片描述
在这里插入图片描述

提出去"IOE" ,使得阿里替数据库换成了:分布式的mysql 集群,

  1. 解决数据库扩展问题;
  2. 用普通的服务器,代替大型机;

3、计算机的体系结构

在这里插入图片描述
运算器与控制器的冲突:冯诺依曼瓶颈
在这里插入图片描述
在这里插入图片描述
这里的存储器是围绕CPU 的高速存储器。
在这里插入图片描述

4、计算机的层次与编程语言

程序解释、解析:高级语言被解释器解释成机器语言来执行,像python 需要Python解释器去执行.py文件;其不生成新的低级程序,由解析器对高级语言解析然后执行。

程序翻译:生成新的低级程序。(由编译器直接生成)C /C++编译成汇编再到机器码。

java的编译结果是被jvm“解释执行”的,算是翻译+解释。因为“编译”其本质就是“把一个相对高级的语言转换为另一个相对低级的语言。

所以嵌入式用c语言,因为高级语言还需要解释成为低级语言。且c语言效率高,可以访问硬件,移植性好。

在这里插入图片描述

也就分为了:翻译型编程语言、解释型编程语言;
在这里插入图片描述

5、计算机的计算单位

容量 :bit btye MB TM PB EB;
速度 Mbps HZ ;

6、计算机的字符与编码集

ASCII 码 ->7位 128个

Extended ASCII 码 ->8位 256个

字符编码集国际化:

GB2312: 7000+个字符;不符合国际标准;

GBK:兼容GB2312;支持国际ISO 标准;21003个汉字,支持全部中日韩汉字。

Unicode:(统一码、万国码、单一码)定义了世界通用符号集,UTF -* 实现了编码;

UTF-8以字节为单位对Unicode进行编码。

  • UTF-8是这样做的:
  1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;
  2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。

https://www.zhihu.com/question/23374078

二、计算机组成原理-组成

1、计算机总线设计

1.1、分类

USB
PCI
ISA
Thunderbolt
都是为了解决不同设备间通信问题。

分类:片内总线、系统总线;

系统总线:分为数据、地址、控制总线;

  1. 数据总线:位数与CPU 位数相同;
  2. 地址总线:位数与存储单元有关;
  3. 控制总线:监视不同组件间状态;

1.2、总线仲裁

为了仲裁不同设备使用总线的优先顺序的设备。
为了解决总线使用权的冲突问题。

方法:链式查询、计时器定时查询、独立请求;

  1. 链式查询 :电路复杂度低、仲裁方式简单;优先级低的设备难以获得总线使用权、对电路故障敏感。
  2. 计时器定时查询 :通过定时给每个设备发送,每个设备能在这个时间段占用总线。
  3. 独立请求 :响应速度快、优先级可变;设备连接多、总线控制复杂。

2、计算机输入输出

字符输入设备、图像输入设备、图像输出设备

2.1、通用接口设计

读取数据、发送数据、连接、启动等

数据线、状态线、命令线、设备选择线、

2.2、CPU与IO通信方法

程序中断、DMA;
程序中断:

  1. 外围IO就绪后,向CPU发出中断信号;
  2. CPU有专门电路相应中断信号;
  3. 暂停处理->恢复现场

提供了一种低俗设备通知CPU的一种异步方式,使得CPU在高速运转同时兼顾低俗设备响应;但是频繁打断CPU,降低了效率;

DMA:

  1. DMA 直接连接主存于IO设备
  2. DMA工作时不需要CPU参与
    在这里插入图片描述

3、计算机存储器

3.1、分类与局部性原理

按照存取方式分类:RAM、ROM

按照层次结构分为:缓存、主存、辅存;

在这里插入图片描述

cpu和主存之间增加一层cache(速度快、容量小)以匹配贮存速度不足的问题;

 引出:局部性原理;

因为局部性原理:缓存、主存层次才得以生效。

局部性原理:cpu访问存储器时,无论存取指令还是数据,
所访问的存储单元都趋于聚集在一个较小的连续区域中。

主存之外增加辅存,以解决主存容量不足的问题;

同样因为局部性原理:主存、辅存层次才得以生效。

就像将游戏中8G的数据读到内存中来处理。

3.2、主存与辅存

主存:
在这里插入图片描述

32位系统:数据、地址总线是32位,最大内存2^32 = 4GB
64位系统:数据、地址总线是64位,最大内存2^64 = 2^34 GB

辅存:
先来先服务算法(按顺序)、最短寻道时间优先(按磁头距离)、扫描算法(电梯算法:往一个方向直到头再反向)、循环扫描算法(只往一个方向,到尾,就回到头继续)

3.3、高速缓存 与 cache 命中率

字:存储在一个存储单元中的二进制代码组合。(32位、64位、半字)
字块:存储在连续存储单元中,被看作是一个单元的一组字。
在这里插入图片描述
CPU需要的数据不在缓存中,就需要去主存拿,就很慢。

cpu从缓存取数据的成功率:命中率;

在这里插入图片描述
高速缓存替换策略:

缓存中没有CPU需要的数据,要从主存中取数据。

  1. 随机算法
  2. 先进先出算法 FIFO ;先进缓存的先被替换
  3. 最不经常使用算法 LFU ;淘汰最不常使用的字块;额外空间记录字块使用频率;
  4. 最近最少使用算法 LRU ; 优先淘汰一段时间内没使用的字块;一般使用双链表实现;把当前访问的节点放在表头(淘汰链表尾部);

4、计算机指令系统

4.1、机器指令形式

操作码+ 地址码

还存在无地址指令;

地址码分为:三、二、一 地址指令,即里面有几个地址;
在这里插入图片描述

4.2、机器指令的操作类型

数据操作类型:

  1. 分为:寄存器之间、寄存器与存储单元之间、存储单元之间;

  2. 有:数据读写、交换地址数据、清零置一等;

算数逻辑操作类型:

  1. 操作数间加减乘除
  2. 与或非
  3. 移位

控制指令类型:

  1. 等待、停机、空操作、中断指令等

4.3、机器指令的寻址方式

指令寻址:

  1. 顺序寻址:
  2. 跳跃寻址:JMP 指令

数据寻址:

  1. 立即寻址:指令内包含操作数;速度快;但是位数限制了其大小;
  2. 直接寻址:指令内给出主存地址;寻找操作数简单;但是地址码限制了寻址范围;
  3. 间接寻址:指令内地址码给的是操作数地址的地址;操作数寻址范围大;但是速度慢,两次寻址;

5、计算机控制器与运算器

在这里插入图片描述

6、计算机指令执行与流水线设计

指令执行过程 :

取指->译码->执行指令

CPU流水线设计 :三级流水线:效率快约三倍

取指->译码->执行->取指->译码->执行
null->取指->译码->执行->取指->译码->执行
null->null->取指->译码->执行->取指->译码->执行

三种流水线冲突:

  1. 结构相关:当指令在重叠执行的过程中,硬件资源满足不了指令重叠执行的要求,发生资源冲突时将产生结构相关。解决方法:添加硬件资源,例如解决访存冲突就使用指令cache和数据cache分开的哈弗结构。:
  2. 数据相关:当一条指令需要用到前面指令的执行结果,而这些指令均在流水线中重叠执行时,就可能引起数据相关。解决方法:数据重定向技术,或者称为旁路技术(forwarding)。
  3. 控制相关:当流水线遇到分支指令和其他会改变PC值的指令时,会发生控制相关。解决方法:分支预测技术,投机执行,延迟分支。

流水线冲刷:

  • 分支预测不正确的时候,需要把后面的流水冲刷掉,以执行正确分支的代码。

三、计算机组成原理-计算

1、进制运算基础:

包括整数与小数;
在这里插入图片描述
有符号数、无符号数:

原码表示有符号数:负数与整数只差一个最高位;

二进制补码、反码:

为了解决二进制零的歧义、减法的复杂,引入补码。

正数原码、反码、补码一致;

负数反码:除了符号位,取反;
负数补码:除了符号位,取反加一;

小数也遵循这样的运算。

n+1位数:符号位用掉一个:
在这里插入图片描述

2、定点数、浮点数:

定点数:乘以比例因子以满足定点数保存格式;一般是左右移;

浮点数:

  1. 计算机处理的数不是存小数、纯整数;
  2. 数据范围很大,定点数难以表达;

浮点数表示格式:
在这里插入图片描述

浮点数表示范围:
在这里插入图片描述

浮点数规格化:

  1. 要求位数使用纯小数;
  2. 位数最高位必须是1;

在这里插入图片描述
定点数与浮点数的对比:

  1. 位数相同是,浮点数表示范围更大
  2. 浮点数尾数为规格化数时,浮点数精度更高
  3. 浮点数运算包含解码和尾数,运算更加复杂

浮点数于表示范围、精度、溢出处理、编程等方面优于定点数;

定点数在运算规则、运算速度、硬件成本方面更优;

3、定点数加法

在这里插入图片描述

在这里插入图片描述

定点数溢出判断:

双符号位判断:0->00 ,1->11;双符号位产生的进位丢弃,结果的双符号位不同则表示溢出。

在这里插入图片描述

4、定点数减法

负数补码再求补码,就是求回正数的补码,就是转回整数的原码;
在这里插入图片描述

6、浮点数加减法

对阶->尾数求和->尾数规格化->舍入->溢出判断

对阶: 以大阶为准,尾数右移。
在这里插入图片描述
**尾数规格化:**正常称作左规,需要舍入的称为右规
在这里插入图片描述

一般情况都进行左移
双符号位不一致的情况下需要右移(定点运算的溢出状态,对于浮点数来说不是溢出)
右移的话则需要进行舍入操作

在这里插入图片描述

溢出判断:

定点运算双符号位不一致为溢出
浮点运算尾数双符号位不一致不算溢出;因为尾数双符号位可以右移;
浮点运算主要通过阶码的双符号位判断是否溢出;如果规格化后,解码双符号位不一致则溢出

在这里插入图片描述
在这里插入图片描述

7、浮点数乘除法

阶数运算->尾数求和->尾数规格化->舍入->溢出判断

相乘:阶码相加,尾数求积
相除:阶码相减,尾数求商

在这里插入图片描述

LRU算法C++实现;

【C++】【缓存替换策略】【LRU】【LFU 】【FIFO】LRU算法C++实现,并测试;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值