3.1 计算机组成与体系结构

目录 ✌ #


  本章内容的考试方式主要集中在上午的选择题里面,约2~4分,占比2.7%~5.3%

1 计算机结构 ✅✅ #


  计算机的硬件包含5大组成:运算器控制器存储器输入和输出设备。CPU依据指令周期的不同阶段来区分二进制的指令和数据,因为在指令周期的不同阶段指令会命令CPU分别去取指令或者数据。

  它们之间的交互如下图(别的部件会在后面的章节详细讲解,本节会说到运算器和控制器): p9DeARs.md.png

  程序员是可以通过汇编语言直接操作CPU中的寄存器的,如AX、BX等;也可以直接操作内存、外存;然而cache对于程序员来说是透明的

  CPU与别的部件交换信息通常是同步方式;如:CPU访问内存通常是同步方式,CPU与PCI总线交换信息通常是同步方式,CPU与I/0接口交换信息通常是同步方式,I/O接口与打印机交换信息则通常采用基于缓存池的异步方式

  总线标准是种局部并行总线标准,常用来表示个人计算机中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。图形用户界面GUI常用来表示采用图形方式显示的计算机操作用户界面。应用程序接口API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,开发人员无须访问源码或理解内部工作机制的细节

  • 冯诺依曼结构

  现代pc计算机一般采用的结构,指令和数据存储在一起、指令和数据都是通过相同的数据总线传输,通过不同的周期来区分数据和指令

  • 哈佛结构

  一般用于嵌入式系统处理器DSP(数字信号处理器),指令和数据可并行分开存储与传输

1.1 运算器 ✅ #

  算术逻辑单元(Arithmetic and Logic Unit, ALU):实现对数据的算术和逻辑运算。

  累加寄存器(Accumulator register, AC):通用寄存器、运算结果或源操作数的存放区。

  数据缓冲寄存器(Data Register, DR):暂时存放内存的指令或数据。

  程序状态寄存器(Program Status Word, PSW):保存指令运行结果的条件码内容,如溢出标志、进位等。

1.2 控制器 ✅ #

  程序计数器(Program Count, PC):存储下一条要执行指令的地址。

  指令寄存器(Instruction Register, IR):存储即将执行的指令内容。

  指令译码器(Instruction Decoder, ID):对指令中的操作码字段进行分析解释。

  时序部件:提供时序控制信号。

例题 p9DnRPg.md.png

pCkN5KH.md.png

2 存储系统 ✅✅✅✅ #


  整体采用分层的思想,主要是解决速度、容量和成本之间的矛盾。cache内存外存成为三级存储结构.如下图: pCkau6g.md.png

  虚拟存储器可以认为是一个由“内存”+“外存”配合而成的容量非常大的逻辑存储模型(页面置换算法决定了其容量比内存加外存都大),当虚拟存储器发生页面失效时(其实就是页面失效),需要进行外部地址变换,即实现虚地址到辅存物理地址的变换

2.1 Cache ✅✅✅✅ #

  高速缓存Cache在物理上是集成在CPU上的 (linux系统可通过lscpu命令查看),它用来存储当前最活跃的程序和数据,直接与CPU交互,位于CPU和主存之间,容量小,速度为内存的5-10倍,其内容是主存(内存)的拷贝,对于程序员来说是透明的。Cache由控制部分和存储器组成,存储器存储数据,控制部分判断CPU要访问的数据是否在Cache中,在则称为命中,不在则依据一定的算法从主存中获取数据,主存中没有则通过页面置换算法从外存中调取。

  地址映射:在CPU工作时,送出的是主存单元的地址,而应从Cache存储器中读/写信息。这就需要将主存地址转换为Cache存储器地址,这种地址的转换称为地址映像,由硬件自动完成映射

  • Cache的命中率

  当CPU所访问的数据在Cache中时,命中,直接丛Cache中读取数据,设读取一次Cache时间为1ns,若CPU访问的数据不在Cache中,则需要从内存中读取,设读取一次内存的时间为1000ns,若在CPU多次读取数据过程中,有90%命中Cache(90%一般由cache的算法决定),则CPU读取一次的平均时间为(90% * 1 + 10% * 1000)ns。

  • Cache的功能

  1.提高CPU数据输入输出的速率,突破冯·诺依曼瓶颈,即突破CPU与存储系统间数据传送带宽限制。

  2.在计算机的存储系统体系中(除cpu中的寄存器外),Cache是访问速度最快的层次。

  3.使用Cache能改善系统性能的依据在于:程序的局部性原理。总的来说,在CPU运行时,所访问的数据会趋向于一个较小的局部时空内。包括下面两个方面:时间局部性原理:如果一个数据项正在被访问,那么在近期它很可能会被再次访问(代码里面的循环),即在相邻的时间里会访问同一个数据项。空间局部性原理:在最近的将来会用到的数据的地址和现在正在访问的数据地址很可能是相近的,即相邻的空间地址会被连续访问(数组)。

例题 p9D4n8x.md.png

p9D4JIA.md.png
pCkdaPP.md.png

2.2 主存(内存)编址计算 ✅✅✅✅ #

  主存如图所示,可以看图试着回答红色框线里面的问题,图中一个存储单元存放了4个bit位,每个存储单元的地址就是我们熟悉的指针,看完应该要知道字长为32位机器和64位机器大概是啥意思了。 p9D5gTH.md.png

特别提醒:不要硬算,要化简为二进制或者十进制来算。

存储单元个数=最大地址-最小地址+1

  • 编址方式
    • 按字编址:一个存储单元存储的是一个字,最小寻址单位是一个字。
    • 按字节编址:一个存储单元存储的是一个字节(Byte),最小寻址单位是一个字节。

总容量=存储单元个数*单个存储单元所占大小

单位换算:1GB=1024MB,1MB=1024KB,1KB=1024Byte,1Byte=8bit。K=2^10,M=2^20,G=2^30

例题 p9h0daQ.md.png

2.3 磁盘管理 ✅✅✅✅ #

  磁盘有正反两个盘面,每个盘面有多个同心圆,每个同心圆是一个磁道,不同盘面上的多个磁道叫做柱面(柱面简单理解为磁道也是可以的),每个同心圆又被划分为多个扇区,数据就被存放在一个个扇区中。如下图所示:

pCkwesg.md.png

  磁盘在运行过程中,磁头首先要寻找到对应的磁道,然后等待磁盘进行周期旋转,旋转到指定的扇区,才能读取到对应的数据,因此,会产生寻道时间、等待时间和存取数据的时间。其公式为:存取时间=寻道时间+等待时间+存取数据时间(在考试时,有这个时间就算上,没有就忽略)

  • 磁盘调度算法(磁盘旋转是同方向匀速旋转,只会在寻道的时候产生优化算法,所以磁盘调度算法都是指的是寻道调度算法)

    • 先来先服务FCFS:根据进程请求访问磁盘的先后顺序进行调度。

    • 最短寻道时间优先SSTF:请求访问的磁道与当前磁道最进的进程优先调度,使得每次的寻道时间最短。会产生“饥饿”现象,即远处进程可能永远无法访问。

    • 扫描算法SCAN:又称“电梯算法”,磁头在磁盘上双向移动,其会选择离磁头当前所在磁道最近的请求访问的磁道,并且与磁头移动方向一致,磁头永远都是从里向外或者从外向里一直移动完才掉头。

    • 单向扫描调度算法CSCAN:与电梯算法类似,与SCAN不同的是,其只做单向移动,即只能从里向外或者从外向里。

例题 p9hsNSs.md.png

p9hsWOx.md.png

  • 磁盘单缓冲区与双缓冲区的读取问题:单缓冲区表示的是同一时间智能有一个任务读或者写缓冲区,也就是串行。双缓冲区表示的是同一时间可以有两个任务访问两个不同的缓冲区,也就是并行。

例题 pCk0XuD.md.png

p9xx6hT.md.png

3 数据传输控制方式 ✅ #


  用于主存和外设交换数据。

3.1 程序查询方式 ✅ #

  CPU主动查询外设是否完成数据传输,如果没有CPU持续查询并等待I/O,效率极低。

3.2 程序中断方式 ✅ #

  外设开始或者完成数据传输后,向CPU发送中断,等待CPU处理数据,效率相对较高,中断响应时间指的是从发出中断请求到开始进入中断处理程序;中断处理时间指的是从中断处理开始到中断处理结束。中断向量提供中断服务程序的入口地址。多级中断嵌套,使用栈来保护断点和现场。如鼠标键盘

3.3 DMA方式 ✅ #

  CPU只需完成必要的初始化等操作,数据传输的整个过程都中,都由DMA控制器来完成,在主存和外设之间建立直接的数据通路,效率很高。如硬盘

例题 p9hyPpj.md.png

p9hyFcn.md.png

4 总线 ✅✅ #


  总线(Bus),是指计算机硬件设备和硬件设备之间传输信息的公共数据通道,它是一组能为多个部件分时共享的公共信息传输线路;即一条总线同一时刻仅允许一个设备发送,但允许多个设备接收,所以总线是半双工模式(单工:只能单向传输,全双工:可以双向传输)。总线有串行总线和并行总线之分,串行总线适合长距离传输(串行总线是按位(bit)传输数据的,其数据的正确性依赖于校验码纠正),并行总线适合于短距离传输。

  总线具体分为数据总线(并行数据传输位数)、地址总线(系统可管理的内存空间的大小) 、控制总线(传送控制命令)。

例题 p9h6vFS.md.png

p9hcSzj.md.png
pCAaPbj.md.png

5 CISC与RISC ✅ #


p9hcPLq.md.png

例题 pCAae2T.md.png

6 流水线 ✅✅ #


  • 流水线时间计算

流水线周期:指令分成不同执行段(取址、分析、执行),其中执行时间最长的段为流水线周期。

流水线执行时间:1条指令总执行时间(也叫流水线建立时间)+ (总指令条数-1)*流水线周期。

流水线吞吐率计算:吞叶率即单位时间内执行的指今条数。即:指令条数/流水线执行时间。

流水线最大吞吐率:周期的倒数。

流水线的加速比计算:加速比即使用流水线后的效率提升度,即比不使用流水线快了多少倍,越高表明流水线效率越高。即:不使用流水线执行时间/使用流水线执行时间。

p9hcNSH.md.png

例题 p9hca6A.md.png

7 校验码 ✅ #


  校验码是在信息位之外添加额外的bit位,不同的校验方式,加的bit位的位数和位置不同

7.1 奇偶校验码 ✅ #

  奇偶校验码:在编码中增加1位校验位来使编码中1的个数为奇数(奇校验)或者偶数(偶校验),编码中,含有奇数个1,发送给接收方,接收方收到后,会计算收到的编码有多少个1,如果是奇数个,则无误,是偶数个,则有误。

  特点:奇偶校验可检查出1位错位,不可纠错。

7.2 循环冗余码 ✅ #

  特点:可检错不可纠错。接收方拿到信息串/生成多项式=0则没错,不为0则传输过程中错误。

p9hcq1J.md.png

例题 p9hgu4S.md.png

7.3 海明码 ✅ #

  特点:可检错,也可纠错,知道添加多少位,以及某一位用哪些校验位校验就行。

  添加的位数:2^k-k >= n+1就行,n是数据的位数。

  某一位由哪些位校验参考例题。

例题 p9hgU4U.md.png

课后习题 #


todo 计算机组成与体系结构习题