1.指令周期的概念,与时钟周期、机器周期的区别。
- 指令周期是执行一条指令所需的时间,包括多个子阶段的时间总和
- 时钟周期是计算机系统中的基本时间单位,由时钟信号控制,用于同步处理器和其他组件的操作。
- 机器周期是指令周期中的一个子阶段,描述处理器执行特定操作所需的时间。
数据通路的含义(包括组合逻辑元件、存储元件),要求理解不是记下来。
组合逻辑(操作)元件和存储(状态)元件组成。
- 组合逻辑元件是数字电路中的一种基本元件,根据输入的状态产生相应的输出。它们通过逻辑门(如与门、或门、非门等)和时序逻辑组成,用于执行各种逻辑运算和数据处理操作。
- 在数据通路中,存储元件被用来临时存储数据,方便数据的传输和处理。存储元件接受来自组合逻辑元件的数据输出,并将其存储下来,以供后续的操作使用。
CPU由数据通路和控制部件两大部分组成。
通常将指令执行过程中数据所经过的路径,包括路径上的部件称为数据通路。
通常把数据通路中专门进行数据运算的部件称为执行部件或功能部件。
程序计数器(PC)和指令寄存器(IR)等寄存器的功能与作用。
程序计数器(PC),又称指令计数器,用来存放正在执行的指令的地址
指令寄存器(IR),正在执行的指令的内容
根据MIPS指令集单周期CPU的数据通路,写出正在执行的指令的相关执行过程信息。
2.单周期、多周期CPU设计。结合教材上的几条指令举例,例如单周期处理器的特点,多周期数据通路和单周期数据通路比较特点。
单周期数据通路特点:
- 指令执行时间相等:每条指令的执行时间都是相等的(CPI=1,取复杂指令所用的指令周期,在所给的11条指令中,最长的是lw指令周期)),每个时钟周期只能执行一条指令。
- 简单明确:单周期数据通路结构相对简单,每个指令的执行过程可以划分为几个明确的阶段,例如取指、译码、执行、访存和写回。
- 控制信号简单:每个阶段的控制信号相对独立,且每个控制信号只需要在相应的阶段激活。
- 效率较低:由于每个指令都需要占用一个完整的时钟周期,使得指令的执行效率较低,无法充分利用硬件资源。
多周期数据通路特点:
- 指令执行时间不等:每条指令的执行时间可能不同,取决于指令的复杂性和需要的处理步骤数量。
- 阶段划分细致:多周期数据通路将指令执行过程划分为更多的阶段,以适应不同指令的需求,每个阶段的操作更加细致明确。
- 多周期控制信号:每个阶段的控制信号较多,需要根据指令的类型和当前阶段的需求来激活相应的控制信号。
- 效率相对高:由于多周期数据通路允许并行执行多个指令的不同阶段,可以更充分地利用硬件资源,提高了指令执行效率。
3.结合习题,学会区别硬连线路控制器设计和微程序控制器设计,CS控制存储器与一般意义上的存储器的区别(所在的位置)。
主存储器:用于存放程序和数据,在CPU外部,用RAM实现,
控制存储器(CS或CM):用于存放微程序,在CPU内部,用ROM实现。
机器指令与微指令的关系。根据具体CPU数据通路图,能够给出具体指令周期流程图并给出微操作控制信号序列。
一条机器指令对应一个微程序,这个微程序是由若干条微指令构成的。因此,一条机器指令的功能是若干条微指令组成的序列来实现的。简而言之,一条机器指令所完成的操作划分成若干条微指令来完成,由微指令进行解释和执行。
4.异常事件在当前指令执行过程中进行检测,中断请求则在当前指令执行后进行检测。
异常事件:
异常事件是指在当前指令执行过程中发生的无法继续正常执行下去的情况,例如除零错误、非法操作码等。异常事件的检测是在当前指令执行过程中进行的,通常通过一些特定的控制信号或条件判断来检测异常事件的发生。一旦异常事件被检测到,处理器会立即转入异常处理程序,中断当前指令的执行流程,对异常进行处理,例如保存现场、跳转到异常处理程序、执行相应的异常处理代码等。
中断请求:
中断请求是指外部设备或其他模块向处理器发送的请求,要求处理器暂停当前工作,并为请求提供服务。中断请求的检测是在当前指令执行完成后进行的。处理器在执行完当前指令后,会检查是否有中断请求发生。如果检测到中断请求,处理器会保存当前状态、中断当前指令流程,并转入中断处理程序执行相应的中断服务。
看一下即可
M e m t o R e g MemtoReg MemtoReg从主存写到寄存器,所以 l w lw lw不能执行
1.五段流水线: IF, ID, OF, EX, WB。
(1)取指令(IF):从cache或主存取指令。
(2)指令译码(ID):产生指令执行所需的控制信号。
(3)取操作数(OF):读取存储器操作数或寄存器操作数。
(4)执行(EX):对操作数完成指定操作。
(5)写回(WB):将操作数写回存储器或寄存器。
N条指令的执行总时间: ( M + N − 1 ) × T (M+N-1)×T (M+N−1)×T 其中 M M M 为流水段数, T T T 为每个流水段的执行时间, N N N 是指令条数
2.流水线冒险(熟悉各类冒险的特点,选择题):结构冒险、数据冒险和控制冒险。 尤其要熟悉数据冒险。
(1)结构冒险(硬件资源冲突):同一个部件同时被不同指令所用。
(2)数据冒险(数据相关):后面指令用到前面指令结果时,前面指令结果还没有产生。
解决方法:1.插入空操作指令 2.插入气泡 3.采用转发技术
(3)控制冒险(硬件资源冲突):指令执行顺序改变而引起的流水线阻塞。beq
3.重点是Load-use数据冒险,如何识别与改进,结合习题。
L o a d − u s e Load-use Load−use 数据冒险: l w lw lw 指令后跟 R − R- R− 型指令 或 I − I- I− 型运算类指令
L o a d − u s e Load-use Load−use 冒险发生的条件是,上一条是 L o a d Load Load 指令,并且从存储器装入寄存器的数据是当前指令的源操作数(转发无法解决)
对于 L o a d − u s e Load-use Load−use 数据冒险:
最简单的做法是由编译器在 l o a d load load 指令之前插入 n o p nop nop 指令来解决,这样就无须硬件来处理数据冒险问题,
最好的方法是在程序编译时进行优化,通过调整指令顺序以避免出现 L o a d − u s e Load-use Load−use 现象。
1.存储器的分类。ROM和RAM叙述理解。存储器的速度从快到慢:寄存器—cache—主存—辅存。计算机的存储器系统是指哪些?
存储器分类:ROM和RAM
ROM:只读存储器(Read-Only Memory,ROM),非易失性存储器,只能读,不需要刷新,ROM不能作为 Cache的存储体
RAM:随机存取存储器(Random Access Memory),易失性存储器,可以随机读写,需要刷新,Cache(SRAM),主存(DRAM)
ROM和RAM指的都是半导体存储器,都采用随机存取的方式进行信息的访问。
寄存器:寄存器是CPU内部最快的存储器,用于存储指令和数据,并直接供CPU执行操作。
高速缓存(Cache):位于CPU和主存之间的高速缓存存储器,用于存储最常访问的数据和指令,以提高CPU的访问速度。
主存(主存储器):主存是计算机中的主要存储器,用于存储操作系统、应用程序和数据等信息。
辅助存储(辅存):辅助存储器主要指硬盘驱动器、固态硬盘、磁带等,用于长期存储大量的数据和程序。
2.SRAM和DRAM的区别(刷新:以行为单位)。
SRAM: 静态随机存取存储器
所用MOS管多,占硅片面积大,功耗大,集成度低,无须刷新,无须读后再生,读写速度快,价格高,适合做高速小容量的半导体存储器,如cache
DRAM: 动态随机存取存储器
所用MOS管少,占硅片面积小,功耗小,集成度高,定时刷新,读后再生,读写速度慢,价格低,适合做低速大容量的半导体存储器,如主存
3.存储器芯片的扩展:位扩展、字扩展、字位扩展,需要的片数。结合课件讲解。
DRAM的扩展与SRAM的不同。 交叉编址
位扩展:(并联)
- 位扩展是指扩展存储器的位数,即增加存储器的数据宽度。
- 对于位扩展,所需的芯片数目等于扩展后的位数除以原有的位数。例如,如果要将一个8位存储器位扩展为16位,则需要2个8位存储器芯片。
字扩展:(串联)
- 字扩展是指扩展存储器的字数,即增加存储器的容量。
- 对于字扩展,所需的芯片数目等于扩展后的字数除以原有的字数。例如,如果要将一个1K字存储器字扩展为2K字,则需要2个1K字存储器芯片。
字位扩展:
- 字位扩展是指同时扩展存储器的位数和字数,即增加存储器的数据宽度和容量。
- 16K×4位 — 字扩展 4片串联,位扩展 4片并联 —> 64K×8位
需要的片数 = 64K / 16K × 8位 / 4位 = 8片
在DRAM中,数据存储在电容中,需要定期刷新以保持数据的有效性。因此,在DRAM扩展时,需要考虑额外的刷新逻辑和控制电路。而SRAM是用稳定的双稳态触发器存储数据,不需要刷新操作。
在交叉编址中,内存被分为多个连续的块,每个块可以包含若干个内存地址。然后,每个块按照一定的顺序与其他块进行交错编址,使得相邻的地址不属于同一个块。这样,当程序需要访问内存时,可以通过一个线性地址来计算出实际的内存地址,并从相应的内存块中读取或写入数据。
交叉编址的主要目的是提高内存的并行访问能力。由于交叉编址将内存空间分割成多个块,并且允许同时访问不同块的数据,因此可以提高内存读写操作的效率。特别是在多通道内存系统中,交叉编址可以充分利用多个通道同时进行数据传输,从而进一步提高内存访问速度。
4.磁盘存储器的存储区域为磁盘记录面(盘面),每个记录面又划分为多个磁道,每条磁道又划分为扇区,扇区也就是基础的存储快,是磁盘的最小读写单位。每个扇区包含数据及其地址信息,地址信息分为三个字段(盘面号、磁道号、扇区号)。
平均存取时间由寻道时间、旋转延迟时间(磁头定位到要读写的扇区时间,取旋转时间的一半)和传输时间三部分相加组成。
- 寻道时间:指的是磁头从当前磁道移动到目标磁道所需的时间。当请求访问某个扇区时,磁头需要移动到所在磁道的位置。寻道时间包括了寻道操作的定位时间和寻道距离相关的机械延迟。寻道时间通常以毫秒为单位。
- 旋转延迟时间:也被称为旋转延迟或旋转时间,是磁盘完成一个完整旋转周期所需的时间。当磁头定位到目标磁道后,需要等待所需扇区在磁盘旋转到磁头位置上。旋转延迟时间的一半被认为是平均等待时间。旋转延迟时间通常以毫秒(ms)为单位。
- 传输时间:指的是数据从磁盘读取或写入到主存储器所需的时间。一旦磁头定位到了目标磁道并等待旋转延迟时间后,数据就可以开始传输了。传输时间取决于数据的大小和磁盘驱动器的传输速率。传输时间通常以毫秒(ms)为单位。
DMA(直接内存访问)是一种数据传输方式,它允许外设和主存储器之间直接进行数据传输,而无需CPU参与每个数据传送操作。
的数据传送过程,分为预处理、数据传送和后处理。其中预处理是CPU完成一些必要的准备工作。数据传送是采用单字节(或者数据块)为基本单位进行传送,此过程完全由DMA控制。后处理是DMA控制器向CPU发出中断请求,CPU执行中断并在DMA结束后校验数据是否正确,测试传送过程是否出错以及决定的是否继续使用DMA传送其他数据块等。
5.常用的数据校验码:奇偶校验码(奇校验位、偶校验位的求解)、海明校验码(给定宽度的数据,学会求单纠错码SEC)、循环冗余校验码(根据生成多项式的位数求出CRC码的位数)。要求掌握海明校验码(8位数据位+4位校验位:发现1位错并能纠正1位错)。区别:发现1位错;发现1位错并能纠正1位错,发现两位错。
- 奇偶校验码:
- 看书pdf75
- 海明校验码:
- 看课件
- 循环冗余校验码(CRC):
- 看课件(模2除法)
总结:
- 奇偶校验码只能发现1位错误,无法纠正错误;
- 海明校验码可以发现并纠正1位错误;
- CRC校验码可以发现多位错误,但无法纠正错误。
6.局部性:时间局部性和空间局部性。
时间局部性:被访问的某个存储单元 在一个较短的时间间隔内 很可能又被访问。
空间局部性:被访问的某个存储单元 的邻近单元 在一个较短的时间间隔内 很可能也被访问。
7.Cache的行,槽 就是块。通过硬件来实现映射。 有效位,标记(三种映射变化)。
有效位:在系统启动或复位时,每个cache行都为空,其中的信息无效,只有装入了主存块后信息才有效。为了说明cache行中的信息是否有效,每个cache行需要一个有效位。
有了有效位,就可将有效位清零来淘汰某cache行中的主存块,称为“冲刷”,装入一个新主存块后,再使有效位置1。
标记(三种映射变化):cache中存放的主存块地址
直接映射
主存地址: 主存字块标记 + Cache行号 + 字块内地址 t位 c位 b位 | | / ___________________ / | / t位 b位 Cache地址: 标记 + 字块内地址
全相联映射
主存地址: 主存块号 + 字块内地址 t+c位 b位 | | / _____ / | / t+c位 b位 Cache地址: 标记 + 字块内地址
组相联映射
主存地址: 主存字块标记 + Cache组号 + 字块内地址 t位 q位 b位 | | / ____________________ / | / t位 b位 Cache地址: 标记 + 字块内地址
8.Cache命中率计算公式,平均访问时间公式, 例如采用两级Cache的存储系统中,如果告诉了第1级Cache和第2级Cache的命中率,然后求平均访问时间。
命中率= (命中次数 / 总访问次数) * 100%
在一个采用两级缓存的存储系统中,可以使用以下公式计算平均访问时间AAT:
AAT = Tc1 + (1 - P1) * (Tc2 + Mp2)
其中:
Tc1 是第1级缓存(L1 Cache)的访问时间(Cache Hit Time),即从第1级缓存中找到所需数据的时间。
P1 是第1级缓存命中率(Cache Hit Rate),表示在访问中命中第1级缓存的概率(即找到数据时的概率)。
Tc2 是第2级缓存(L2 Cache)的访问时间,即从第2级缓存中找到所需数据的时间。
Mp2 是第2级缓存的访问时间乘数(Miss Penalty),表示当在第1级缓存未命中时需要额外花费的时间。(主存访问时间/缺失损失Mp2: 主存块送cache 所用的时间)
9.直接映射、全相联、组相联映射方式的区别及使用案例(结合例题和习题)。
映射方式 | 工作原理 | 特点 | 使用案例 |
---|---|---|---|
直接映射 | 每个内存块只能映射到缓存的固定位置。 | - 缓存与主存之间的地址映射是一对一的关系。 - 内存块只能在缓存特定位置上存储。 - 易于实现和管理。 |
适用于对成本和资源要求较高,并且对于缓存冲突不敏感的情况。例如,低功耗设备或嵌入式系统。 |
全相联 | 内存块可以映射到任意空闲的缓存位置。 | - 每个内存块可以放置在任何一个缓存位置上。 - 查找内存块时需要遍历整个缓存以寻找匹配。 - 高度灵活性和并行性,但由于需要全局比较,性能开销较大。 |
适用于对灵活性要求较高,且对于缓存容量和延迟要求能够进行弹性调整的情况。例如,高性能服务器或通用计算机系统。 |
组相联 | 内存块可以映射到一组预定义的缓存位置中的任意一个。 | - 缓存被划分为多个组(sets),每个组中包含若干个缓存行。 - 内存块只能映射到所属组中的某个缓存行。 - 在组内进行查找匹配,具有一定的灵活性和性能优化。 |
折中了直接映射和全相联的特点,适用于大多数应用场景。它提供了一定的灵活性,并在一定程度上降低了全相联的查找开销。例如,桌面计算机、移动设备等。 |
要求掌握地址的字段划分(注意标记字段的变化);
看习题
要求掌握给出主存块号或者主存单元地址,给出相应方式下(考核直接映射、组相联映射)的Cache行号或组号。
看后面的习题即可
要求掌握组相联映射中的比较器的个数和位数 P243
在组相联映射中,比较器的个数和位数取决于缓存的总行数和每组的关联度。
假设缓存的总行数为C,每组的关联度为A,那么有如下关系:
- 组数 G = C / A
- 每组的行数 B = A
比较器的个数等于每组的行数,用于比较主存块的标记字段与缓存行的标记字段是否匹配。比较器的位数等于主存块标记字段的位数(tag位数)
10.Cache总容量的计算:有效位、标记、数据块。(写回法下增加修改位)
看后面的习题,有算cache容量的
11.Cache中主存块的替换算法:先进先出、LRU算法、最不经常用算法、随机替换算法。结合习题、例题。 注意:LRU位的设置。
- 先进先出(FIFO)算法:
该算法基于缓存行进入缓存的时间顺序来进行替换。当发生缺失时,最早进入缓存的主存块将被替换出去。FIFO算法维护一个队列来记录缓存行的进入顺序,最先进入的主存块位于队列的头部。当需要替换时,将队列头部的缓存行进行替换,并将新的主存块插入队列的尾部。- 最近最少使用(LRU)算法:
LRU算法基于主存块的最近使用情况来进行替换。每当主存块被访问时,它就会被移动到队列的尾部,表示最近使用过。当需要替换时,将队列头部的缓存行进行替换。可以使用一个具有固定大小的双向链表(或近似实现)来实现LRU算法,其中越靠近链表尾部的主存块表示最近使用的,越靠近链表头部的主存块表示最久未被使用的。- 最不经常使用(LFU)算法:
LFU算法基于主存块的使用频率来进行替换。它记录每个缓存行被访问的次数,并在替换时选择使用频率最低的主存块进行替换。LFU算法需要维护额外的计数器来统计主存块的使用次数。- 随机替换算法:
随机替换算法是一种简单而常用的替换策略。它通过随机选择一个缓存行来进行替换,没有特定的置换规则。这种方法没有考虑主存块的使用情况,因此可能会导致较高的缺失率。例题中有 L R U LRU LRU的计算
12.Cache的一致性问题:全写法(Write Through)、写回法(Write Back)[每个cache行设置了一个修改位(dirty bit),注意计算cache容量时] ( 标记,有效位,修改位)
- 全写法(Write Through):
在全写法中,每次写操作都会同时更新缓存和主存。当发生写操作时,数据会首先被写入缓存,并且立即写入主存。这确保了缓存和主存中的数据始终保持一致。在全写法中,无需关注修改位(dirty bit),因为每个写都会更新主存,缓存行中的数据一直是有效的。对于计算缓存容量时,需要考虑的比特数包括:
- 有效位(Valid Bit):用于表示缓存行是否有效,每个缓存行需要一个有效位进行标识。
- 标记(Tag):用于唯一标识主存块的地址,标记字段通常存储在每个缓存行中。
因此,计算全写法缓存的总容量时,需要考虑有效位和标记的总比特数。
总容量 = 有效位的总比特数 + 标记的总比特数
- 写回法(Write Back):
在写回法中,只有当缓存行被修改后才会将其写回主存。当发生写操作时,数据会被写入缓存,并且修改位(dirty bit)会被置为1,表示该缓存行已被修改。当该缓存行被替换出去时,才会将其写回主存,以保持缓存和主存的一致性。
在计算写回法缓存的总容量时,除了考虑有效位和标记的总比特数外,还需要考虑修改位(dirty bit)的总比特数。
总容量 = 有效位的总比特数 + 标记的总比特数 + 修改位的总比特数
13.虚拟存储器的TLB和Cache的访问过程。虚拟存储器借用外存来为程序提供的很大的虚拟存储空间,解决了编程受限的问题。快表与慢表。
- TLB(快表)访问过程:
- 当CPU发出一个虚拟地址时,首先会检查TLB中是否存在该虚拟地址的映射。
- 如果TLB中存在该映射,则TLB会直接提供对应的物理地址。
- 如果TLB中不存在该映射,即发生了TLB Miss,则需要通过慢表进行地址转换。
- 慢表访问过程:
- 当发生TLB缺失时,CPU会将虚拟地址发送给内存管理单元(MMU)。
- MMU会使用页表等数据结构,在慢表中进行地址转换,将虚拟地址转换为对应的物理地址。
- 一旦转换完成,MMU会将获得的物理地址返回给CPU,并将该映射添加到TLB中,以供后续快速访问。
- Cache(缓存)访问过程:
- 当CPU需要读取或写入数据时,首先会检查Cache中是否存在所需的数据。
- 如果Cache中存在数据(命中),CPU会直接从Cache中读取或写入数据,并避免了访问主存的开销。
- 如果Cache中不存在所需的数据(未命中),则发生了缓存失效(Cache Miss),需要从主存中加载数据到Cache中。
- 在缓存失效时,CPU会将缺失的数据块的地址发送给内存,并从主存中读取相应的数据块。
- 读取后的数据会被存储到Cache中,并提供给CPU使用。
TLB和Cache的存在都是为了加速访问速度,并减少对慢速外存的访问。TLB主要用于加速地址转换过程,而Cache则用于加速数据访问过程。它们通过存储最常用的地址映射和数据块,避免了频繁访问慢速外存的开销,并提高了系统的整体性能。
段式、页式、段页式。
- 段式:
- 段式内存管理将虚拟地址空间划分为多个逻辑段(按程序的逻辑),每个段可以代表程序中的一个逻辑单位,如代码段、数据段等。
- 每个段都有自己的基址和长度,通过偏移量来访问段内的具体位置。
- 段式内存管理提供了更灵活的地址空间划分,能够满足不同段的大小和权限需求,但会产生零碎空间的问题。
- 页式:
- 页式内存管理将虚拟地址空间和物理内存都划分为固定大小的页,而不管程序的逻辑结构。
- 每个页都有一个页号和页内偏移量,通过页表将虚拟页号映射到物理页框号,实现虚拟地址到物理地址的转换。
- 页式内存管理能够解决外部碎片的问题,但可能会产生内部碎片,即每个页的利用率不高。
- 段页式:
- 段页式内存管理结合了段式和页式的特点,将虚拟地址空间划分为多个段,并在每个段内使用页式管理。
- 通过段表进行段的转换,每个段表项记录该段的页表地址,而页表则负责页级别的转换。
- 段页式内存管理结合了段式的灵活性和页式的利用率优势,能够克服两种方案各自的缺点,但增加了管理复杂度。
虚拟存储器管理机制中地址转换描述,页式管理中虚页号到实页号的转换。
- 虚拟地址由两部分组成:虚页号和页内偏移量。虚页号用于表示虚拟地址所在的页,页内偏移量表示虚拟地址在该页内的偏移位置
- 虚页号到实页号的转换是通过页表完成的。页表是一个数据结构,其中包含每个虚拟页号对应的实际物理页框号
- 当需要将虚拟地址转换为物理地址时,操作系统会首先解析虚页号。通过查找页表,找到虚拟页号对应的实际物理页框号
- 找到实际物理页框号后,将其与页内偏移量组合成物理地址,即得到最终的物理地址
- 如果在页表中没有找到虚拟页号对应的实际物理页框号,则说明该虚拟页不在内存中,发生了缺页。此时,操作系统需要将相应的页从磁盘加载到内存,并更新页表中的映射关系
1:
for (i = 0; i < 1000; i++) {
for (j = 0; j < 1000; j++) {
sum = sum + a[i][j];
product = product * a[i][j];
square = square + a[i][j] * a[i][j];
}
}
2:
for (j = 0; j < 1000; j++) {
for (i = 0; i < 1000; i++) {
sum = sum + a[i][j];
product = product * a[i][j];
square = square + a[i][j] * a[i][j];
}
}
3:
for (i = 0; i < 1000; i++) {
for (j = 0; j < 1000; j++) {
sum = sum + a[i][j];
}
}
for (i = 0; i < 1000; i++) {
for (j = 0; j < 1000; j++) {
product = product * a[i][j];
}
}
for (i = 0; i < 1000; i++) {
for (j = 0; j < 1000; j++) {
square = square + a[i][j] * a[i][j];
}
}
4:
for (j = 0; j < 1000; j++) {
for (i = 0; i < 1000; i++) {
sum = sum + a[i][j];
}
}
for (j = 0; j < 1000; j++) {
for (i = 0; i < 1000; i++) {
product = product * a[i][j];
}
}
for (j = 0; j < 1000; j++) {
for (i = 0; i < 1000; i++) {
square = square + a[i][j] * a[i][j];
}
}
有替换, L R U LRU LRU位与cache组的大小有关,2-路—— 1位,4-路—— 2位