详解计算机组成原理组成篇(磁盘调度算法,cache命中率,效率,平均访问时间,以及FIFO、LFU、LRU算法。拒绝挂科)

本文深入讲解计算机组成原理,包括计算机的总线(总线分类、总线仲裁),存储器(存储器层次结构、高速缓存、磁盘调度算法)和CPU(指令形式、控制器、运算器)。介绍了FIFO、LFU、LRU等缓存替换策略,以及磁盘调度的先来先服务、最短寻道时间优先、扫描和循环扫描算法。

计算机组成原理组成篇

一、计算机的总线与IO设备

1.1计算机的总线
总线的概述

总线意在解决不同设备之间的通信问题

总线即是

  • 提供了对外连接的接口
  • 不同设备可以通过USB接口进行连接
  • 连接的标准,促使外围设备接口的统一

当没有IO总线处于分散连接时,若添加新的输入输出设备则需要重新加线连接到CPU中去这会导致线路复杂,资源浪费。

image-20220325202336477

当通过总线连接时所有的输入输出设备都可通过连接总线,在通过总线连接CPU使得线路结构更加清晰

image-20220325202352787
总线的分类

片内总线

片内总线即是高集成度芯片内部的信息传输线其可以在于

  • 芯片内部的总线
  • 寄存器与寄存器之间
  • 寄存器与控制器、运算器之间
image-20220325202408264

系统总线

系统总线则是CPU、主内存、IO设备、各组件之间的信息传输线且分为3大类

image-20220325202429894
  1. 数据总线

    • 作用在双向传输各个部件的数据信息
    • 数据总线的位数(总线宽度)是数据总线的重要参数(一般与CPU位数相同(32位、64位))
  2. 地址总线

    • 指定源数据或目的数据在内存中的地址
    • 地址总线的位数与存储单元有关(地址总线位数=n,寻址范围:0~2ⁿ)
  3. 控制总线

    • 控制总线是用来发出各种控制信号的传输线
    • 控制信号经由控制总线从一个组件发给另外一个组件
    • 控制总线可以监视不同组件之间的状态(就绪/未就绪)
总线仲裁

总线仲裁是为了解决总线使用权的冲突问题

总线仲裁的方法

  1. 链式查询

当设备处于准备状态时按照设备顺序来确立控制器的优先使用权

image-20220325202509209

链式查询的好处:电路复杂度低,仲裁方式简单

​ 坏处:1.优先级低的设备难以获得总线使用权 2.对电路故障敏感

  1. 计时器定时查询

仲裁控制器对设备编号并使用计数器累计计数当接收到仲裁信号后,往所有设备发出计数值,计数值与设备编号一致则获得总线使用权。

image-20220325202541191
  1. 独立请求

    每个设备均有总线独立连接仲裁器,设备可单独向仲裁器发送请求和接收请求,当同时收到多个请求信号,仲裁器有权按优先级分配使用。

    image-20220325202608570

    独立请求的好处:响应速度快,优先顺序可动态改变

    ​ 坏处:设备连线多,总线控制复杂

1.2计算机的输入、输出设备
常见的输入输出设备分

1.字符输入设备

2.图像输入设备

输入输出接口的通用设计

四大设计

  1. 数据线
  • 是I/O设备与主机之间进行数据交换的传送线
  • 有单向传输数据线或双向传输数据线
  1. 状态线
    • IO设备状态向主机报告的信号线
    • 用于查询设备是否已经正常连接并就绪和查询设备是否已经被占用
  2. 命令线
    • CPU向设备发送命令的信号线
    • 发送读写信号或者发送启动停止信号
  3. 设备选择线
  • 主机选择I/O设备进行操作的信号线
  • 对连在总线上的设备进行选择
CPU与IO设备的通信

程序中断(提供低速设备通知CPU的一种异步的方式,CPU可以高速运转同时兼顾低速设备的响应)

  • 当外围IO设备就绪时,向CPU发出中断信号
  • CPU有专门的电路响应中断信号
image-20220325202654856

DMA(直接存储器访问)

  • 当主存与IO设备交换信息时,不需要中断CPU,可以提高CPU的效率
  • DMA直接连接主存与IO设备
  • DMA工作时不需要CPU的参与
image-20220325202714404

二、计算机的存储器

2.1计算机的存储器概览
存储器的分类

按存储介质分类

  1. 半导体存储器
    • 内存
    • U盘
    • 固态硬盘
  2. 磁存储器
    • 磁带磁盘

按存取方式分类

  1. 随机存储器(RAM)
    • 随机读取
    • 与位置无关
  2. 串行存储器
    • 与位置有关
    • 按顺序查找
  3. 只读存储器(ROM)
    • 只读不写
存储器的层次结构

image-20220325202750842

缓存-主存层次

  • 原理:局部性原理

  • 实现:在CPU与主存之间增加一层速度快(容量小)的Cache

  • 目的:解决主存速度不足的问题

主存-辅存层次

  • 原理:局部性原理
  • 实现:主存之外增加辅助存储器(磁盘、SD卡、U盘等)
  • 目的:解决主存容量不足的问题

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

2.2计算机的主存储器与辅助存储器
主存储器——内存
  • RAM(随机存取存储器:Random Access Memory)
  • RAM通过电容存储数据,必须隔一段时间刷新一次
  • 如果掉电,那么一段时间后将丢失所有数据
image-20220325202829504

因为有数据总线和地址总线的存在,CPU即可通过地址总线指定地址的位置,通过数据总线来传输相关的数据

32位系统:2³² = 4 × 2³º = 4𝐺𝐵 即在32位系统中最大只能支持4GB的内存

64位系统:2^64= 2^34 × 2³º = 2^34𝐺B

辅助存储器——磁盘
  • 表面是可磁化的硬磁特性材料
  • 移动磁头径向运动读取磁道信息

磁盘四大调度算法

  1. 先来先服务算法
  • 按顺序访问进程的磁道读写需求
image-20220325204342270

现读取磁道:1 4 2 3 1 5

则读取顺序为:1 =》 4 =》 2 =》 3 =》 1 =》 5

  1. 最短寻道时间优先

    • 与磁头当前位置有关
    • 优先访问离磁头最近的磁道
    image-20220325205002148

    现读取磁道:1 4 2 3 1 5

    假设磁头为4,则读取顺序为:4 =》 5 =》 3 =》 2 =》 1 =》 1

  2. 扫描算法(电梯算法)

    • 每次只往一个方向移动
    • 到达一个方向需要服务的尽头再反方向移动
    image-20220325205151252

    现读取磁道:1 4 2 3 1 5

    假设磁头为4,当磁头由里向外读取时,则读取顺序为:4 =》 3 =》 2 =》 1 =》 1 =》 5

  3. 循环扫描算法

  • 只从一个方向进行读取
image-20220325205727867

现读取磁道:1 4 2 3 1 5

假设磁头在磁道4。则读取顺序为:4 =》 5 =》 1 =》 1 =》 2 =》 3

2.3计算机的高速缓存
高速缓存的工作原理

高速缓存位于缓存-主存结构层次,是为了解决CPU与主存的速度不匹配的问题

先了解主存的概念

  • 字: 是指存放在一个存储单元中的二进制代码组合
  • 字块: 存储在连续的存储单元中而被看作是一个单元的一组字
image-20220325210402666

一个字有32位,一个字块共B个字,主存共M个字块

B*M = 主存总字数

BM32 = 主存总容量(bits)

image-20220325210946268

字的地址包含两个部分,前m位指定字块的地址,后b位指定字在字块中的地址(个人认为把它想象成二维数组的地址方式即可)

一个字有32位,一个字块共B个字,主存共M个字块

既有image-20220325211206802

例子:假设主存用户空间容量为4G,字块大小为4M,字长为32位,则对于字 地址中的块地址m和块内地址b的位数,至少应该是多少?

即4𝐺 = 4096M
字块数:4096 ÷ 4 = 1024 字块地址m:log₂1024 = 10

块内字数: 4𝑀 ÷ 32𝑏𝑖𝑡 = 1048576 因为1M=1024k=1048576字节 ,8bit(位)=1Byte(字节) 所以为(4x1024x1024)÷(32÷8)= 1048576

块内地址b: log₂1048576 = 20

所以𝑚 ≥ 10 b ≥ 20

image-20220325211958332

主存的字块数是远大于缓存的

缓存的每一个数据是来自于主存的

即得到结论

  • 存储的逻辑结构类似
  • 缓存的容量较小
  • 缓存的速度更快
image-20220325212540413

CPU需要的数据在缓存里

当CPU需要的数据不在缓存里则需要去主存拿,这会大大降低CPU的效率

通过命中率是衡量缓存的重要性能指标

理论上CPU每次都能从高速缓存取数据的时候,命中率为1(但因为高速缓存的容量不及主存所以命中率永远不可能为1)

命中率、访问Cache-主存系统平均时间、访问效率的计算方式

命中率

访问主存次数:image-20220325213157226

访问Cache(缓存)次数:image-20220325213215866

h(命中率)=image-20220325213141316

访问Cache-主存系统平均时间

访问主存时间:image-20220325213436772

访问缓存时间:image-20220325213457364

访问Cache-主存系统平均时间:image-20220325213531864

访问效率

访问效率:image-20220325213750412

例子:假设CPU在执行某段程序时,共访问了Cache命中2000次,访问主存 50次,已知Cache的存取时间为50ns,主存的存取时间为200ns,求Cache主存系统的命中率、访问效率和平均访问时间。

命中率:image-20220325213921558

访问效率:image-20220325214015272

平均访问时间:image-20220325214034711

高速缓存的替换策略

高速缓存的替换时机

当缓存中没有数据需要从主存中载入所需数据时image-20220325214307342

三大策略算法

  1. 先进先出算法(FIFO)

    • 把高速缓存看做是一个先进先出的队列
    • 优先替换最先进入队列的字块
    image-20220325214647940

    当缓存满时先淘汰了最新进入的一号字块

  2. 最不经常使用算法(LFU)

    • 优先淘汰最不经常使用的字块
    • 需要额外的空间记录字块的使用频率
    image-20220325214832027

    因为4号字块使用频率最低所以将其淘汰

    3.最近最少使用算法 (LRU)

    • 优先淘汰一段时间内没有使用的字块
    • 有多种实现方法,一般使用双向链表
    • 把当前访问节点置于链表前面(保证链表头部节点是最近使用的)
    image-202203252215149705

假设缓存4个字块,()表示使用的字块,[]表示淘汰的字块


三、计算机的CPU

3.1计算机的指令形式

机器指令主要由两部分组成:操作码、地址码image-20220326212651439

操作码字段
  1. 操作码指明指令所要完成的操作
  2. 操作码的位数反映了机器的操作种类

假设操作码字段有8位,这最多有image-20220326212951864种操作。

地址码字段
  1. 地址码直接给出操作数或者操作数的地址
  2. 分三地址指令、二地址指令、一地址指令和零地址指令

三地址指令(即地址码字段有三个地址)image-20220326213227359

(addr1)OP(addr2) → (addr3)

假设地址一和地址二是两个数字操作是它们两个相加则地址三就保存着这两数之和的结果

二地址指令(即地址码字段有2个地址)image-20220326213502360

(addr1)OP(addr2) → (addr1)或(addr2)

把地址一和地址二两个操作后的结果放在地址一或二中

一地址指令(即地址码字段有1个地址)image-20220326213618965

(addr1)OP→ (addr1)

这个可以理解为自己对自己的操作

(addr1)OP(ACC) → (addr1)

这个可以理解为自增的操作因为自增的操作不需要第二个指令

零地址指令(在机器指令中无地址码)

一般用于空操作、停机操作、中断返回操作等

机器指令的操作类型
  1. 数据传输
    • 在寄存器之间、寄存器与存储单元、存储单元之间传送
    • 用于数据读写、交换地址数据、清零置一等操作
  2. 算术逻辑操作
    • 操作数之间的加减乘除运算
    • 操作数的与或非等逻辑位运算
  3. 移位操作
    • 数据左移(乘2)、数据右移(除2)
    • 完成数据在算术逻辑单元的必要操作
  4. 控制指令
    • 等待指令、停机指令、空操作指令、中断指令等
机器指令的寻址方式
  1. 指令寻址

    • 顺序寻址
    • 跳跃寻址
    image-20220326214230492

    顺序寻址是指令按照地址顺序从101-105进行操作,跳跃寻址到地址105后实现跳跃到102地址

  2. 数据寻址

    • 立即寻址

      image-20220326214449274

      指令直接获得操作数

      无需访问存储器

    • 直接寻址

      image-20220326214620343

      直接给出操作数在主存的地址

      寻找操作数简单,无需计算数据地址

    • 间接寻址

      image-20220326214754254

      指令地址码给出的是操作数地址的地址

      需要访问一次或多次主存来获取操作数

三种寻址方式的比较

image-20220326214846410

3.2计算机的控制器

控制器是协调和控制计算机运行的

七大控制器
  1. 程序计数器
    • 程序计数器用来存储下一条指令的地址
    • 循环从程序计数器中拿出指令
    • 当指令被拿出时,指向下一条指令
  2. 时序发生器
    • 电气工程领域,用于发送时序脉冲
    • CPU依据不同的时序脉冲有节奏的进行工作
  3. 指令译码器
    • 指令译码器是控制器的主要部件之一
    • 计算机指令由操作码和地址码组成
    • 翻译操作码对应的操作以及控制传输地址码对应的数据
  4. 指令寄存器
    • 指令寄存器也是控制器的主要部件之一
    • 从主存或高速缓存取计算机指令
  5. 主存地址寄存器
    • 保存当前CPU正要访问的内存单元的地址
  6. 主存数据寄存器
    • 保存当前CPU正要读或写的主存数据
  7. 通用寄存器
    • 用于暂时存放或传送数据或指令
    • 可保存ALU的运算中间结果
    • 容量比一般专用寄存器要大
3.3计算器的运算器

运算器是用来进行数据运算加工的

四大运算器
  1. 数据缓冲器
    • 分为输入缓冲和输出缓冲
    • 输入缓冲暂时存放外设送过来的数据
    • 输出缓冲暂时存放送往外设的数据
  2. ALU
    • ALU:算术逻辑单元,是运算器的主要组成
    • 常见的位运算(左右移、与或非等)
    • 算术运算(加减乘除等)
  3. 状态字寄存器
    • 存放运算状态(条件码、进位、溢出、结果正负等)
    • 存放运算控制信息(调试跟踪标记位、允许中断位等)
  4. 通用寄存器
    • 用于暂时存放或传送数据或指令
    • 可保存ALU的运算中间结果
    • 容量比一般专用寄存器要大
3.4指令执行过程
一般的指令执行过程
image-20220326215726275 image-20220326220639916
image-20220326215829880

这样的执行过程会让运算器和控制器分开使用,导致CPU的综合利用率不高

CPU流水线设计
  1. 类似工厂的装配线
  2. 工厂的装配线使得多个产品可以同时被加工
  3. 在同一个时刻,不同产品均位于不同的加工阶段
image-20220326220113412

从执行指令的时间来对比

假设:串行执行m条指令: 𝑇1 = 3t × 𝑚

流水线执行m条指令: 𝑇2 = 𝑡 × (𝑚 + 2)

image-20220326220315623

当执行的指令无限多时3m分之一忽略不计,则串行执行与流水线执行的时间比为3:1

流水线设计大大提升了CPU的利用率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值