欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流
本文收录于软考中级:软件设计师系列专栏,本专栏服务于软考中级的软件设计师考试,包括不限于知识点讲解与真题讲解两大部分,并且提供
电子教材
与电子版真题
,关注私聊
即可
计算机组成与体系结构(二)
一、计算机系统基础知识
👉:传送门💖计算机系统基础知识💖
二、计算机体系结构
1.计算机体系结构
👉:传送门💖计算机体系结构💖
2.存储系统
2.1 计算机存储结构层次
- 计算机采用分级存储体系的主要目的是为了
解决存储容量、成本和速度之间的矛盾问题
- 两级存储: Cache-主存、主存-辅存(虚拟存储体系)
- 存储器分类
- 按存储器所处的位置:内存、外存。
- 按存储器构成材料:磁存储器(磁带)、半导体存健器、光存储器(光盘)
- 按存储器的工作方式:可读可写存储(RAM),只读存储器(ROM只能读,PROM可写入一次,EPROM和EEPOM既可以读也可以写,只是修改方式不用)
- 按存储器访问方式:按地址访间、按内容访间(相联存储器)
- 按寻址方式:随机存储器(访问任意存储单元所用时间相同)、顺序存储器(只能按顺序访问,如磁带)、直接存储器(二者结合,如磁盘,对于砸道的寻址是随机的,在一个磁道内则是顺序的)
🚩2.2 局部性原理
在CPU运行时,所访问的数据会趋向于一个较小的局部空间地址内,包括下面两个方面:
时间局部性原理:
如果一个数据项正在被访问,那么在近期它很可能会被再次访问,即在相邻的时间里会访问同一个数据项
。空间局部性原理:
在最近的将来会用到的数据的地址和现在正在访问的数据地址很可能是相近的,即相邻的空间地址会被连续访问
。
🚩2.3 高速缓存Cache
- 高速缓存Cache用来存储当前最活跃的程序和数据,直接与CPU交互,位于CPU和主存之间,容量小,速度为内存的5-10倍,由半导体材料构成。其内容是主存内存的副本拷贝,对于程序员来说是透明的。
- Cache由
控制部分
和存储器
组成,存储器存储数据,控制部分判断CPU要访问的数据是否在Cache中,在则命中,不在则依据一定的算法从主存中替换
🚩2.3.1地址映射方法
在CPU工作时,送出的是主存单元的地址,而应从Cache存储器中读/写信息。这就需要 将主存地址转换为Cache存储器地址
,这种地址的转换 称为地址映像
, 由硬件自动完成映射,分为下列三种方法:
- 1️⃣直接映像: 将Cache存储器等分成块,主存也等分成块并编号。主存中的块与Cache中的块的对应关系是固定的,也即二者块号相同才能命中。
优点
:地址变换简单缺点
:不灵活,容易造成资源浪费
- 2️⃣全相联映像: 同样都等分成块并编号。主存中
任意
一块都与Cache中任意
一块对应。优点
:可以随意调入Cache任意位置缺点
:地址变换复杂,速度较慢。
因为主存可以随意调入Cache任意块,只有当Cache满了才会发生块冲突,是
最不容易发生块冲突
的映像方式。
- 3️⃣组相联映像: 前面两种方式的结合,将Cache存储器先分块再分组,主存也同样先分块再分组,组间采用直接映像,即主存中组号与Cache中组号相同的组才能命中,但是组内全相联映像,也即组号相同的两个组内的所有块可以任意调换。
主存块可以放到特定分组中共的任意位置
优点
:两种方式的折中,效果较好
🚩2.3.2 Cache置换算法
- 1️⃣随机算法(RAND,Random):若Cache已满,则
随机选择一块替换
优点
:实现简单缺点
:完全没考虑局部性原理,命中率低,实际效果很不稳定
设总共有4个Cache块,初始整个Cache为空。采用全相联映像,依次访问主存块{1,2,3,4,1,2,5,1,2,3,4,5}
-
2️⃣先进先出算法(FIFO,First In First Out):按调入cache的先后决定淘汰的顺序,即在需要更新时,
将最先进入cache的块作为被替换的块
优点
:实现简单,最开始按#0 #1 #2的顺序放入Cache,之后轮流替换#0 #1 #2
缺点
:没考虑局部性原理,最先被调入Cache的块也有可能被频繁访问——抖动现象
:频繁的换入换出现象(刚被替换的块很快又被调入)
设总共有4个Cache块,初始整个Cache为空。采用全相联映像,依次访问主存块{1,2,3,4,1,2,5,1,2,3,4,5}
- 3️⃣近期最少使用算法(LRU,Least Recently Used):
把CPU近期最少使用的块作为被替换的块
。为每一个Cache块设置一个“计数器”,用于记录每个Cache块已经有多久没被访问了。当Cache满后替换“计数器”最大的
设总共有4个Cache块,初始整个Cache为空。采用全相联映像,依次访问主存块{1,2,3,4,1,2,5,1,2,3,4,5}
①命中时
,所命中的行的计数器清零,比其低的计数器加1,其余不变;
②未命中且还有空闲行时
,新装入的行的计数器置0。其余非空闲行全加1;
③未命中且无空闲行时
,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1。
- 4️⃣最不经常使用页置换算法(LFU,Least Frequently Used ):为每一个Cache块设置一个“计数器”,用于记录每个Cache块被访问过几次。当Cache满后替换“计数器”最小的
- 缺点: 曾经被经常访问的主存块在未来不一定会用到,并没有很好的遵循局部性原理,因此实际运行效果不如LRU
设总共有4个Cache块,初始整个Cache为空。采用全相联映像,依次访问主存块{1,2,3,4,1,2,5,1,2,3,4,5}
★新调入的块计数器=0,之后每被访问一次,计数器+1。需要替换时,选择计数器最小的一行
🚩2.3.3 命中率及平均时间
- 当CPU所访问的数据在Cache中时,称为
命中
,直接从Cache中读取数据,否则没有命中,需要从主存中读取所需的数据 - 示例:
- 设读取一次Cache时间为1ns,若CPU访问的数据不在Cache中,则需要从内存中读取,设读取一次内存的时间为1000ns,若在CPU多次读取数据过程中,有90%命中Cache,则CpU读取一次的
平均时间
为(90%*1+10%*1000)ns
- 设读取一次Cache时间为1ns,若CPU访问的数据不在Cache中,则需要从内存中读取,设读取一次内存的时间为1000ns,若在CPU多次读取数据过程中,有90%命中Cache,则CpU读取一次的
🚩2.3.4 主存编址
- B 表示一个字节,b表示位,现代计算机中常以字节数来描述容量的大小,一个字节已被定义为 8位二进制代码,故用字节数便能反映主存容量。 1 B = 8 b 1B = 8b 1B=8b
- 1 K = 1024 , 1 k = 1000 1K = 1024,1k = 1000 1K=1024,1k=1000
示例:求地址编号从80000H到BFFFFH且按字节编址的内存容量是多少KB?
①地址段包含的存储空间数,为BFFFFH-80000H+1=40000H
②按字节编制,即一个存储空间占一个字节,共40000H个字节
③将十六进制40000H转换为十进制:位权展开法,在计算机系统基础知识里讲过, 40000 = 0 ∗ 1 6 1 + 0 ∗ 1 6 2 + 0 ∗ 1 6 3 + 4 ∗ 1 6 4 = 4 ∗ 1 6 4 40000=0*16^1+0*16^2+0*16^3+4*16^4=4*16^4 40000=0∗161+0∗162+0∗163+4∗164=4∗164,此时如果直接乘开,数字太大,所以 4 ∗ 1 6 4 = 2 2 ∗ ( 2 4 ) 4 = 2 18 = 2 8 ∗ 2 10 = 2 8 K = 256 K 4*16^4=2^2*(2^4)^4=2^{18}=2^8*2^{10}=2^8K=256K 4∗164=22∗(24)4=218=28∗210=28K=256K
④40000H个字节,即256KB
2.4 虚拟存储器
-
虚拟存储器技术是将很大的数据分成许多较小的块,全部存储在外存中。运行时,将用到的数据调入主存中,马上要用到的数据置于缓存中,这样,一边运行一边进行所需数据块的调入/调出。
-
对于应用程序员来说,就好像有一个比实际主存空间大得多的虚拟主存空间,基本层级为:主存一一缓存一一外存。与CPU一一高速缓存Cache一一主存的原理类似。可以看计算机存储结构层次这里的图.
-
虚拟存储器中程序员无需考虑地址映像关系,由系统自动完成,因此对于程序来说是透明的。
3.输入/输出技术
- 1️⃣程序控制(查询)方式:CPU主动查询外设是否完成数据传输,
效率极低
。 - 2️⃣程序中断方式:外设完成数据传输后,向CPU发送中断,等待CPU处理数据,
效率相对较高
。中断响应时间
指的是从发出中断请求到开始进入中断处理程序;中断处理时间
指的是从中断处理开始到中断处理结束。- 中断向量提供中断服务程序的入口地址。
- 多级中断嵌套,使用堆栈来保护断点和现场。
- 3️⃣DMA方式(直接主存存取):CPU只需完成必要的初始化等操作,数据传输的整个过程都由DMA控制器来完成,在主存和外设之间建立直接的数据通路,
效率很高
。- 在一个总线周期结束后,CPU会响应DMA请求开始读取数据
- CPU响应程序中断方式请求是在一条指令执行结束时
- 区分指令执行结束和总线周期结束。
- 4️⃣通道:也是一种处理机,内部具有独立的处理系统,使数据的传输独立于CPU。
- 分为字节多路通道的传送方式(每一次传送一个通道的一个字节,多路通道循环)和选择通道的传送方式(选择一个通道,先传送完这个通道的所有字节,再开始下一个通道传送)。
4.总线结构
4.1 总线
从广义上讲,任何连接两个以上电子元器件的导线都可以称为总线,通常分为以下三类:
- 1️⃣内部总线:内部芯片级别的总线,芯片与处理器之间通信的总线。
- 2️⃣系统总线:是板级总线,用于计算机内各部分之间的连接
- 具体分为数据总线(并行数据传输位数)、地址总线(系统可管理的内存空间的大小)、控制总线(传送控制命令)
- 代表的有ISA总线、 EISA总线、PCI总线。
- 3️⃣外部总线:设备一级的总线,微机和外部设备的总线。
- 代表的有RS232(串行总线)、 SCSI(并行总线)、 USB(通用串行总线,即插即用,支持热插拔)
并行总线适合近距离高速数据传输,串行总线适合长距离数据传输,专用总线在设计上可以与连接设备实现最佳匹配。
4.2 总线计算
- 1️⃣总线的时钟周期=时钟频率的倒数;
- 2️⃣总线的宽度(传输速率) = 单位时间内传输的数据总量/单位时间大小