Back

计算机组成原理

  • 计算机原理之概述
  • 计算机原理之组成
  • 计算机组成原理之计算
  • 计算机组成原理实践

计算机原理之概述

计算机的发展历史

  • 计算机发展的四个阶段
  • 微型计算机的发展历史

计算机的分类

  • 超级计算机
  • 大型计算机
  • 迷你计算机(服务器)
  • 工作站
  • 微型计算机

计算机的体系与结构

冯诺依曼体系

将程序指令和数据一起存储的计算机设计概念结构

  • 必须有一个存储器
  • 必须有一个控制器
  • 必须有一个运算器
  • 必须有输入设备
  • 必须有输出设备

现代计算机都是冯诺依曼机。

  • 能够把需要的程序和数据送至计算机中
  • 能够长期记忆程序、数据、中间结果及最终运算结果的能力
  • 能够具备算数、逻辑运算和数据传送等数据加工处理的能力
  • 能够按照要求将处理结果输出给用户

现代计算机的结构

  • 现代计算机在冯诺依曼体系结构基础上进行修改
  • 解决CPU与存储设备之间的性能差异问题

计算机的层次与编程语言

程序翻译与程序解释

  • 计算机执行的指令都是L0
  • 翻译过程生成新的L0程序,解释过程不生成新的L0程序
  • 解释过程由L0编写的解释器去解释L1程序

计算机的层次与编程语言

  • 硬件逻辑层
  • 微程序机器层
  • 传统机器层

它们的关系:

  • 一条机器指令对应一个微程序

  • 一个微程序对应一组微指令

  • 操作系统层

  • 汇编语言层

  • 高级语言层

  • 应用层

计算机的速度单位

容量单位

  • 1Byte = 8bits

速度单位

  • 网络速度 100M/S = 100 Mbps = 100 Mbit/s = (100/8)MB/s = 12.5MB/s

CPU速度

  • CPU的速度一般体现在CPU的时钟频率
  • CPU的时钟频率的单位一般是赫兹(Hz)
  • Hz就是秒分之一 每秒中的周期性变动重复次数的计量

计算机的字符与编码集

字符编码集的历史

  • ASCII码
    • 使用7个bits就可以完全表示ASCII码
    • 包含95个可打印字符
    • 33个不可打印字符(包括控制字符)
    • 很多应用或者国家中的符号都无法表示。于是7bits->8bits,出现Extended ASCII码
  • Extended ASCII码
  • 字符编码集的国际化
    • GB2312
    • GBK
    • Unicode。定义了世界通用的符号集,UTF-*实现了编码。UTF-8以字节为单位对Unicode进行编码

计算机原理之组成

计算机的总线

总线的概述

USB:Universal Serial Bus(通用串行总线)

  • 提供了对外连接的接口
  • 不同设备可以通过USB接口进行连接
  • 连接的标准,促使外围设备接口的统一
  • PCI总线、ISA总线。。。。。。
  • 解决不同设备之间的通信问题

总线的分类:

  • 片内总线
    • 芯片内部的总线
    • 寄存器与寄存器之间
    • 寄存器与控制器、运算器之间
    • 高集成度芯片内部的信息传输线
  • 系统总线
    • 数据总线
      • 双向传输各个部件的数据信息
      • 数据总线的位数(总线宽度)是数据总线的重要参数。一般与CPU位数相同(32位、64位)
    • 地址总线
      • 指定源数据或目的数据在内存中的地址
      • 地址总线的位数与存储单元有关。地址总线位数=n,寻址范围:0~2^n
    • 控制总线
      • 控制总线是用来发出各种控制信号的传输线
      • 控制信号经由控制总线从一个组件发给另一个组件
      • 控制总线可以见识不同组件之间的状态(就绪/未就绪)

总线的仲裁

为什么需要总线的仲裁

  • 为了解决总线使用权的冲突问题

总线仲裁的方法

  • 链式查询
    • 好处:电路复杂度低,仲裁方式简单
    • 坏处:优先级低的设备难以获得总线使用权
    • 坏处:对电路故障敏感
  • 计时器定时查询
    • 仲裁控制器对设备编号并使用计数器累计计数
    • 接收到仲裁信号后,往所有设备发出计数值
    • 计数值与设备编号一致则获得总线使用权
  • 独立请求
    • 每个设备均有总线独立连接仲裁器
    • 设备可单独向仲裁器发送请求和接收请求
    • 当同时收到多个请求信号,仲裁器有权按优先级分配使用权
    • 好处:响应速度快,优先顺序可动态改变
    • 坏处:设备连线多,总线控制复杂

计算机的输入输出设备

常见的输入输出设备

  • 常见输入设备
    • 字符输入设备
    • 图像输入设备

输入输出接口的通用设计

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

CPU与IO设备的通信

  • 程序中断
    • 当外围IO设备就绪时,向CPU发出中断信号
    • CPU有专门的电路响应中断信号
    • 提供低速设备通知CPU的一种异步的方式
    • CPU可以高速运转同事兼顾低速设备的响应
  • DMA(直接存储器访问)
    • DMA直接连接主存与IO设备
    • DMA工作时不需要CPU的参与

计算机存储器概览

存储器的分类

  • 按照存储介质
    • 半导体存储器。内存、U盘、固态硬盘
    • 磁存储器。磁带、磁盘
  • 按照存取方式
    • 随机存储器(RAM)。随机读取、与位置无关
    • 串行存储器。与位置有关、按顺序查找
    • 只读存储器(ROM)。只读不写

存储器的层次结构

读写速度、存储容量、价格。位价:每比特位价格。

缓存、主存、辅存

  • 缓存-主存层次
    • 原理:局部性原理
      • 局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
    • 实现:在CPU与主存直接增加一层速度快(容量小)的Cache
    • 目的:解决主存速度不足的问题
  • 主存-辅存层次
    • 原理:局部性原理
    • 实现:主存之外增加辅助存储器(磁盘、SD卡、U盘等)
    • 目的:解决主存容量不足的问题

计算机的主存储器与辅助存储器

  • 主存储器–内存
    • RAM(随机存取存储器:Random Access Memory)
    • RAM通过电容存储数据,必须隔一段时间刷新一次
    • 如果掉电,那么一段时间后将丢失所有数据
  • 辅助存储器–磁盘
    • 表面是可磁化的硬磁特性材料
    • 移动磁头径向运动读取磁道信息
    • 磁盘调度算法
      • 先来先服务算法
        • 按照顺序访问进程的磁道读写需求
      • 最短寻道时间优先
        • 与磁头当前位置有关
        • 优先访问离磁头最近的磁道
      • 扫描算法(电梯算法)
        • 每次只往一个方向移动
        • 到达一个方向需要服务的尽头再反方向移动
      • 循环扫描算法
        • 只往一个方向移动

计算机的高速缓存

  • 高速缓存的工作原理
    • 字:是指存放在一个存储单元中的二进制代码组合
    • 字块:存储在连续的存储单元中而被看做是一个单元的一组字
    • 字的地址包含两个部分。前m位指定字块的地址,后b位指定字在字块中的地址
    • 命中率是衡量缓存的重要性能指标
    • 理论上CPU每次都能从高速缓存存取数据的时候,命中率为1
    • 命中率:h = Nc/(Nc+Nm)。访问效率:e = Tc/Ta = Tc/(hTc + (1-h)Tm)
  • 高速缓存的替换策略
    • 随机算法
    • 先进先出算法 FIFO
      • 把高速缓存看做是一个先进先出的队列
      • 优先替换最先进入队列的字块
    • 最不经常使用算法 LFU
      • 优先淘汰最不经常使用的字块
      • 需要额外空间记录字块的使用频率
    • 最近最少使用算法 LRU
      • 优先淘汰一段时间内没有使用的字块
      • 有多种实现方法,一般使用双向链表
      • 把当前访问节点置于链表前面,保证链表头部节点是最近使用的。淘汰链表尾部节点

计算机的指令系统

机器指令的形式

  • 机器指令主要由两部分组成:操作码、地址码
  • 操作码指明指令所要完成的操作
  • 操作码的位数反映了机器的操作种类
  • 地址码直接给出操作数或者操作数的地址
  • 分三地址指令、二地址指令、一地址指令、零地址指令
    • 零地址指令:在机器指令中无地址码。空操作、停机操作、中断返回操作等

机器指令的操作类型

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

机器指令的寻址方式

  • 指令寻址
    • 顺序寻址
    • 跳跃寻址
  • 数据寻址
    • 立即寻址
      • 指令直接获取操作数,无需访问存储器
    • 直接寻址
      • 直接给出操作数在主存的地址
      • 寻找操作数简单,无需计算数据地址
    • 间接寻址
      • 指令地址码给出的是操作数地址的地址
      • 需要访问一次或多次主存来获取操作数

计算机的控制器

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

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

计算机的运算器

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

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

计算机指令的执行过程

  • 指令执行过程
    • 取指令:从缓存取指令,送到指令寄存器
    • 分析指令:指令译码器译码,发出控制信号,程序计数器+1
    • 执行指令:装载数据到寄存器,ALU处理数据,记录运算状态,送出运算结果
  • CPU的流水线设计
    • 类似工厂的装配线
    • 工厂的装配线使得多个产品可以同时被加工
    • 在同一个时刻,不同产品均位于不同的加工阶段

计算机组成原理之计算

进制运算的基础

进制概述

  • 进制的定义
    • 进位制是一种计数方式,亦称进位计数法或位值记数法
    • 有限种数字符号来表示无限的数值
    • 使用的数字符号的数目成为这种进位制的基数或底数
  • 常见的进制

二进制运算的基础

  • 二进制转化十进制:按权展开法
    • N = (01100101) = 1*2^6 + 1*2^5 + 1*2^2 + 1 = 101
  • 十进制转换二进制:重复相除法
  • 小数二进制转换十进制:按权展开法
    • N = (0.11001) = 1*2^-1 + 1*2^-2 + 1*2^-5 = 0.78125 = 25/32
  • 小数十进制转二进制:重复想乘法

有符号数与无符号数

  • 原码表示法
    • 使用0表示正数、1表示负数
    • 规定符号位位于数值第一位
    • 表达简单明了,是最容易理解的表示法

二进制的不补码表示法

  • 补码的定义
    • n=4,x=13。x的补码 = 原码 = 01101
    • x=-13。x的补码 = 2^5-13 = 100000-1101 = 10011

二进制的反码表示法

  • 反码的定义

  • 负数的反码等于原码除符号位外按位取反

  • 负数的补码等于反码+1

小数的补码

  • 二进制小数的补码

定点数与浮点数

定点数的表示方法

  • 小数点固定在某个位置的数成为定点数
  • 纯小数:小数点位于符号位和数值位之间
  • 纯整数:小数点位于符号位和数值位之后
  • 如果不是纯小数也不是纯整数,就需要乘以一个比例因子以满足定点数的保存格式
  • 计算机处理的很大程度上不是纯小数或纯整数
  • 数据范围很大,定点数难以表达

浮点数的表示方法

  • 浮点数的表示格式
  • 浮点数的表示范围
    • 假设阶码数值取m位,尾数取n位
    • 阶码表示范围:[-(2^m-1),2^m-1]
    • 尾数表示范围:[-(1-2^-n),-(2^-n)] [2^-n,1-2^-n]
    • 单精度浮点数:使用4字节、32位来表达浮点数 float
    • 双精度浮点数:使用8字节、64位来表达浮点数 double
  • 浮点数的规格化
    • 尾数规定使用纯小数
    • 尾数最高位必须是1 定点数与浮点数的对比
  • 当定点数与浮点数位数相同时,浮点数表示的范围更大
  • 当浮点数尾数为规格化数时,浮点数的精度更高
  • 浮点数运算包含阶码和尾数,浮点数的运算更为复杂
  • 浮点数在数的表示范围、精度、溢出处理、编程等方便均优于定点数
  • 浮点数在数的运算规则、运算速度、硬件成本方便不如定点数

定点数的加减法运算

定点数的加法运算

  • 数值位与符号位一同运算,并将符号位产生的进位自然丢掉

判断溢出

  • 双符号位判断法
    • 单符号位表示变成双符号位:0=>00,1=>11
    • 双符号位产生的进位丢弃
    • 结果的双符号位不同则表示溢出

定点数的减法运算

浮点数的加减法运算

运算步骤

  • 对阶
    • 对阶的目的是是的两个浮点数阶码一致,使得尾数可以进行运算
    • 浮点数尾数运算简单
    • 浮点数尾数实际小数位与阶码有关
    • 阶码按小阶看齐大阶的原则
  • 尾数求和
    • 使用补码进行运算
    • 减法运算转化为加法运算:A - B = A + (-B)
  • 尾数规格化
    • 对补码进行规格化需要判断两种情况:S>0和S<0
    • 尾数规格化(右移)
      • 一般情况下都是左移
      • 双符号位不一致下需要右移(定点运算的溢出情况)
      • 右移的话需要进行舍入操作
  • 舍入
    • “0舍1入”法(二进制的四舍五入)
  • 溢出判断
    • 浮点数运尾数双符号位不一致不算溢出,因为尾数双符号位可以右移进行规格化
    • 浮点运算主要通过阶码的双符号位判断是否溢出
    • 如果规格化后,阶码双符号位不一致,则认为溢出

浮点数的乘除法运算

浮点数乘法

浮点数除法

例子

计算机组成原理 实践

双向链表的原理与实践1

  • 双向链表可以快速找到上一个节点(和下一个节点)
  • 可以快速的去掉链表中的某一个节点

代码:https://github.com/Cuiks/review

持续性混吃等死...
Built with Hugo
Theme Stack designed by Jimmy