计算机组成原理——组成篇


计算机的总线

1、总线的作用及概述

解决设备间通讯问题。

总线是为了解决不同设备之间的通信问题。

总线可以连接CPU和IO设备。

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

片内总线:连接CPU內部高速缓存、寄存器、运算单元的总线;

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

数据总线:双向传输各个部件的数据信息;数据总线的位数(总线宽度)是数据总线的重要参数(一般于CPU位数相同)

总线如果是32位 则一次可传递4个字节的数据 总线如果是64位 则一次可传递8个字节的数据

地址总线:指定源数据或目的数据在内存中的地址;地址总线的位数和存储单元相关

(地址总线的位数=n,寻址范围0~2^n-1)

控制总线:控制总线是用来发出各种控制信号的传输线;

控制信号经由控制总线从一个组件发给另一个组件;

控制组件可以监视不同组件之间的状态(就绪/未就绪);

3、总线的总裁:为了解决总线使用权的冲突问题。

仲裁方法有三种。(链式查询、计时器定时查询、独立请求)

为了解决各设备之间的总线使用权问题;

链式查询:各个设备与仲裁器串联,当有设备申请总线使用权时,仲裁器发出使用许可,总是按照设备优先顺序接收到信号,导致优先级高的设备总是能先获取到使用权。

链式查询的优缺点:

好处:电路复杂度低,总裁方式简单

坏处:优先级低的设备难以获得总线使用权

坏处:对电脑故障敏感

计时器定时查询:仲裁控制器对设备标号并使用计数器累计计数,其次当控制器接收到仲裁信号后,往所有设备发出计数值,计数值与设备编号保持一致时会优先获得使用权。

计时器查询的工作过程:设备主要是通过设备地址与计数器进行对比的,课程使用计数器是为了方便理解,可以理解为设备有一个唯一的设备地址,将设备地址的值与计数器比较,如果一致的话,才会得到总线使用权。

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

独立请求的优缺点:

好处:响应速度快,优先顺序可动态改变

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

 

计算机的输入输出设备

常见的输入输出设备:

字符输入设备:键盘(薄膜键盘,机械键盘)。

图像输入设备:鼠标;数位板;扫描仪。

图像输出设备:显示器(CRT显示器、液晶显示器);打印机;投影仪。

输入输出接口的通用设计:

数据线:IO设备与主机之间进行数据交换的传送线(单向,双向)。

状态线:IO设备状态向主机报告的信号线(是否正常连接;是否被占用)。

命令线:CPU向设备发送命令的信号线(发送读写信号;发送启动停止信号)。

设备选择线:主机选择IO设备进行操作的信号线。(对连在设备总线上进行选择)

CPU与IO设备的通信方法(程序中断、DMA):

前提:CPU速度和IO设备速度不一致

程序中断:外围设备就绪时,向CPU发出中断,专门电路相应中断信号。

提供低速设备通知CPU的一种异步的方式、CPU可以高速的运转同时兼顾低速设备的响应

第一种方法如果频繁打断CPU的工作,会降低其效率。

因此产生了第二种方法,DMA 直接存储器访问方法:

DMA:DMA(Direct Memory Access,直接存储器访问)。对于没有DMA的情况,CPU可能需要被IO设备频繁打断,并且由CPU进行IO设备缓存与主存之间的数据拷贝,占用大量的CPU时间。对于有DMA的情况,当IO设备准备完成以后,会先通知CPU,然后后续的数据传输由DMA协助就可以完成,不再需要CPU的参与。

DMA的出现就是为了解决批量数据的输入/输出问题。DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。这样数据的传送速度就取决于存储器和外设的工作速度。

通常系统总线是由CPU管理的,在DMA方式时,就希望CPU把这些总线让出来,即CPU连到这些总线上的线处于第三态(高阻状态),而由DMA控制器接管,控制传送的字节数,判断DMA是否结束,以及发出DMA结束信号。

因此DMA控制器必须有以下功能:

1、    能向CPU发出系统保持(HOLD)信号,提出总线接管请求;

2、    当CPU发出允许接管信号后,负责对总线的控制,进入DMA方式;

3、    能对存储器寻址及能修改地址指针,实现对内存的读写;

4、    能决定本次DMA传送的字节数,判断DMA传送是否借宿。

5、    发出DMA结束信号,使CPU恢复正常工作

 

计算机储存器概述

存储器的分类

按存储介质分类

  • 半导体存储器:内存、u盘、固态硬盘等
  • 磁存储器:磁带、磁盘等

按存取方式分类

  • 随机存储器(RAM):随机读取、与位置无关
  • 串存储器: 与位置有关、按顺序查找
  • 只读存储器(ROM):只读不写

存储器的层次结构

读写速度

存储容量

价格

容量+价格=>位价:每比特位价格

缓存:速度快 位价高

主存:速度适中 位价适中

辅存:速度慢 位价低

 

缓存-主存层次

原理:局部性原理

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

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

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

主存-辅存层次

原理:局部性的原理

实现:主存之外增加辅助存储器(磁盘、SD卡、U盘等)

目的:解决主存容量不足的问题

计算机的主存储器与副存储

主存储器——内存RAM(随机存储器)

工作原理:RAM,(随机存储器;Random Access Memory)通过电容存储数据,必须每隔一段时间刷新一次,如果断电,那么一段时间后将丢失所有数据。

内存与CPU的交互:

操作系统位数与内存大小关系

首先,2是从比特位来的,一个比特位可以表示0和1。

那么,对于32位地址,就有2^32次方的寻址范围可以表示,换算成数值就是4*2^30次方,指的是寻址范围,每个地址按字寻址是1byte,所以总的过程就是4 * 1024 * 1024 * 1024 * 1Byte = 4G。

32位CPU的意思是,一次CPU寻址,可以寻址32个比特位长度的地址,也就是最多2^32个数据地址,这里面,对于每个地址,寻址数据大小是一个字节1Byte,可以得到4G的结果;因此,对于32位CPU,安装超过4G的物理内存,都是浪费的。

辅助存储器——磁盘

工作原理:表面是可磁化的硬磁特性材料,移动磁头径向运动读取磁道信息。

磁盘内容读取主要算法

  • 先来先服务算法
  • 最短寻道时间优先
  • 扫描算法(电梯算法)
  • 循环扫描算法

例题:假如磁盘最外圈磁道为1,最内圈磁道为5,磁头现在在4磁道,且磁头移动向外,求不同寻道算法的磁头移动顺序,假设磁头需要读取的顺序为142315.

先来先服务算法(FCFS):按顺序访问进程的磁道读写需求。读取顺序为142315.

最短寻道时间优先算法(SSTF):与磁头当前位置有关,优先访问离磁头最近的磁道。读取顺序为452311

扫描算法(电梯算法/SCAN):每次只往一个方向移动,到达一个方向的尽头后反方向移动。读取顺序为432115

循环扫描算法(C-SCAN):只往一个方向移动。读取顺序为451123

计算机的高速缓存

高速缓存的工作原理

前提知识之主存存取数据的方法:

1. 字:指存放在一个存储单元中的二进制代码组合

2. 字块:存储在连续的存储单元中而被看作是一个单元的一组字

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

解: 

高速缓存的内部存储结构与主存的逻辑结构非常类似,缓冲容量较小,缓冲的速度更快

CPU可以从高速缓存和主存中获取数据,前者的效率比后者高。

命中率:

  • 命中率是衡量缓存的重要性能指标
  • 理论上CPU每次都能从高速缓存存取数据时候,命中率为1

例题:

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

解:命中率、访问效率、平均访问时间分别是0.97、91.7%、54.5ns

高速缓冲的替换策略

替换时机:高速缓存内没有需要运行的数据,就会从主存内拿数据。

替换算法:随机算法、先进先出算法(FIFO)、最不经常使用算法(LFU)、最近最少使用算法(LRU)

  • 随机算法(RAND):每一次需要发生替换,随机选取一个高速缓存的位置,然后把相关的内容替换掉
  • 先进先出算法(FIFO):把高速缓存看做是一个先进先出的队列,优先替换最先进入的字块

  • 最不经常使用算法(LFU):优先淘汰掉最不经常使用的字快,需要额外的空间记录字块的使用频率

 

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

计算机的指令系统

机器指令的形式

机器指令主要由两部分组成:操作码.地址码

操作码:操作码指明指令所要完成的操作;操作码的位数反映了机器的操作种类(比如有8位,那么就是2^8 = 256种操作)

地址码:直接给出操作数或者操作数的地址;分三地址指令、二地址指令和一地址指令、零地址指令

三地址指令:   

                

二地址指令:

一地址指令: 

零地址指令:

机器指令的操作类型(数据传输、算数逻辑操作、位移操作、控制指令)

1.         数据传输

  • 寄存器之间、寄存器与存储单元、存储单元之间的传送(存储单元可以是主存,高速缓存,硬盘等等...)
  • 数据读写、交换地址数据、清零置一等操作

2.         算数逻辑操作

  • 操作数之间的加减乘除的运算
  • 操作数的与或非等逻辑位运算

3.         位移操作

  • 数据左移(乘2)、数据右移(除2)
  • 完成数据在算术逻辑单元的必要操作

4.         控制指令

  • 等待、停机、空操作、中断等

 

 

机器指令的寻址方式(指令寻址、数据寻址)

指令寻址(顺序寻址、跳跃寻址)

1.        顺序寻址:通过程序计数器PC加1,自动形成下一条指令的地址

2.  跳跃寻址:通过转移指令实现。

数据寻址(立即寻址、直接寻址、间接寻址)

1.        立即寻址:机器指令内包含了操作的数据,无需访问存储器

2.        直接寻址:机器指令内包含了数据在内存中的地址,无需计算数据地址

3.        间接寻址:机器指令内包含了数据地址在内存的地址,通过内存地址找到真正的数据。需要访问一次或多次主存来获取操作数

数据寻址的优缺点

计算机的控制器

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

程序计数器:

  1. 用来存储下一条指令的地址
  2. 循环从程序计数器中拿出指令
  3. 当指令被拿出时指向下一条指令

时序发生器:

  1. 电气工程领域,用于发送时序脉冲
  2. CPU依据不同的时序脉冲有节奏的进行工作

指令译码器:

  1. 是控制器的主要部件之一
  2. 计算机指令有操作码和地址码组成
  3. 翻译操作码对应的操作以及控制传输地址码对应的数据

指令寄存器:

  1. 也是控制器的主要部件之一
  2. 从主存或高速缓存取计算机指令

主存地址寄存器:

  1. 保存当前CPU正要访问的单元的地址

主存数据寄存器:

  1. 保存当前CPU正要读或写的主存数据

通用寄存器:

  1. 暂时存放或存送数据或指令
  2. 可保存ALU的运算中间的结果
  3. 容量比一般专业寄存器要大

 

计算机的运算器

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

数据缓存器:

  1. 分为输入缓冲和输出缓冲
  2. 输入缓冲暂时存放外设送过来的数据
  3. 输出缓冲暂时存放送往外设的数据

ALU:

  1. ALU:算术逻辑单元,是运算器的主要组成
  2. 常见的位运算(左右移、与、非)
  3. 算术运算(加减乘除)

状态字寄存器:

  1. 存放运算状态(条件码、进位、溢出、结果正负等)
  2. 存放运算控制信息(调试跟踪标记位、允许中断位等)

通用寄存器:

  1. 用于暂时存放或传送数据或指令
  2. 可保存ALU的运算中间结果
  3. 容量比一般专用寄存器要大

 

CPU指令执行的过程

由于是在cpu内执行的,所以涉及的设备有: 控制器(程序计数器,指令译码器,时序发生器,指令寄存器)

高速缓存(数据缓存器,指令缓存器),运算器(通用寄存器,数据寄存器,状态寄存器),他们是由片内总线连接的;

详细过程是:

首先,系统operator(自己)调用系统功能的时候,会生成指令,和数据,然后它们缓存入指令缓存和数据缓存中(例:数据缓存有"地址"1,数据120;

指令缓存有地址101,操作码MOV,地址码RO,R1),接着程序计数器会把指令缓存中,指令的地址记录下来(例:101), 指令会通过片内总线传输到指令寄存器(操作码,地址码),接着又从指令寄存器发送到指令译码器中,之后程序计数器会+1(例:变成102), 之后指令译码器译码完成(把汇编语言变成机器语言),之后其通过片内总线发送控制信号给运算器进行运算:

例如,把指令缓存中,地址101,操作码MOV,地址码R0,R1的数据中的R1,加载到ALU(算数逻辑单元,是逻辑门),再通过片内总线的数据总线,传入数据缓存器,然后把R1数据覆盖掉R0,记录运算状态(状态寄存器)并送出运算结果给UI至此,就完成了这条指令的操作,CPU会执行下一条指令(如果有发起操作)

CPU的流水线设计

执行过程中,控制器和运算器不能同时工作,所以CPU综合利用率不高所以需要流水线设计

可以看到,非流水线情况,指令只能一条一条被执行,而流水线的情况,系统可以并发执行指令(不等前一条结束,后一条指令就可以执行),从而大大增加执行效率