1、 简述:1)计算机体系结构研究的目的,2)计算机系统中并行性的层次划分。
a.目的:
如何利用现有软硬件技术,以并行、流水机制改变系统的工作方式,通过增加性能结构,综合软硬件技术优势提高计算机系统性能。
b.划分(从低层到高层)
①指令内并行:
②指令级并行:
③任务(或过程)级并行
④作业(或程序)级并行:
2、 术语解释: 1) CISC, 2) RISC, 3)微体系结构,4)系列机,5) Cacbe与主存一致性6)多处理机MESI协议。
① CISC:复杂指令集计算机。
② RISC:精简指令集计算机。
③ 微体系结构:指处理器内部的体系结构。
④ 系列机:基本指令系统相同、基本体系结构相同的一系列不同型号的计算机。
⑤ Cache与主存一致性:若cache中某个字被修改,那么在主存(以及更高层次)上,该字的副本必须立即或最后加以修改,并确保它者改用主存上该字的正确性。
⑥ 多处理机MESI协议:一种采用写无效方式的监听协议。它要求每个cache line有4个状态,用2bits来表示,用于描述该行当前处于修改、专有、共享、无效中哪种状态,从而决定它的读写状态。
3.简述程序局部性原理及其在多级存储体系中的应用。
①局部性原理:在某一段时间内,CPU频繁访问某一局部的存储器区域,而对此范围外的地址访问较少。
②应用:实现多级存储器的关键技术之一就是新旧内容的替换,这需要高效率的替换算法,LRU是一种基本的替换算法,它利用程序局部性特点,替换最近最少使用的页面。
4、 简述: 1)存储器带宽的定义,2)提高存储器带宽的主要途径
①定义:单位时间内传送、交换、处理的二进制数据位数。
带宽=字长W/访问周期T
②主要途径:
A、提高器件技术,缩短访问时间T
B、多体并行存储器结构:加宽存储字长度(W↑)→超长字存储方案
缩短平均访问周期(T↓)→多模块交叉存储方案
C、多级存储器层次结构:以不同速度、容量的存储器进行层次化组织(T↓),既提高容量、带宽,又降低成本,属于高效率技术。
5、超长字存储方案单缓冲结构图(读出)及工作原理描述
(1)访问地址中的“行地址”,与行地址寄存器比较;
(2)如果比较“=”,则用访问“行内地址”通过多路分配器、选择器对缓冲行的对应单元进行读,操作结束;
(3)如果比较“!=”,则先将行缓冲中已修改的数据写回存储体,即根据修改标志位启动对应存储体,用关联行地址写入修改单元内容。
(4)用访问“行地址”启动存储体(整体),读出访问行打入行缓冲,并清除全部修改标志位;
(5)如果读操作,则用访问“行内地址”通过多路分配器、选择器读出缓冲行的对应单元输出到数据总线
<如果写操作,则用访问“行内地址”通过多路分配器、选择器对缓冲行的对应单元写入数据总线的数据,并设置修改标志位>
(6)用访问行地址刷新行地址寄存器,操作结束;
6、简述多模块存储器提高带宽的原理(附画时空图说明)
利用程序局部性原理,将连续的地址分配到不同的存储模块,则连续地址访问可使多个模块重叠操作。地址分配如图1所示,地址访问如图2所示。在一个周期内,在不同时间段t0~t4,可以同时访问不同的存储模块,使得存储器的平均访问周期缩短,在传输字长不变的情况下,带宽提高。
图1 存储器地址分配
图2 存储器地址访问
7、描述虚拟存储系统中的两级地址变换过程(要求附图说明)与地址变换的加速方法 两级地址变换过程
① 从段号到页表基地址的第一级变换:首先根据段号和当前进程的段表基地址,从主存中的段表查表,获得该段的页表基地址。
② 从页号到实页号的第二级变换:根据当前页号和当前段的页表基地址(页表基地址+页号)从页表中查出实页号,与页内地址拼装成完整的实地址。
地址变换的加速方法:
利用程序的局部性特点,保存最近几次页面地址变换结果,构成“虚页-实页”转换表,以备重复使用,并用硬件实现快速检索,该机构称为地址转换后备缓冲TLB。CPU用于访问的虚地址首先通过TLB查表,如果TLB命中,则直接获得实页号,完成地址变换;如果不命中,则启动两级地址变换,获得实页号,并且将“段号页号-实页号”对应关系存入TLB。
8、 描述TLB工作机制,设计4行的TLB逻辑结构
段号和虚页号作为TLB查找标志,对应的实页号作为存储数据。当检索标志输入TLB后,检索标志与表目中所有的标志项相比较,如果有相同的项,则输出标志关联的数据(实页号),进而获取实地址,称为“TLB命中”。
实页号+页内地址=实地址
9、 简述4路组相联Cache的工作机制,并画出(读出)逻辑结构图
组相联Cache的访问过程:
① 根据组号译码选组,获取组内全部行信息,同一组的行分配在不同的存储体中,类似于交叉存储。
② 一个组所有行的标志段与访问标志段进行比较,需要4个比较器。
③ 从匹配的行中用行内地址选出数据,为了减少延迟,数据选择与标志匹配过程并行,需要4个多路选择器。
④ 如果组内的标志比较都不相等,则数据不在Cache中,则需要访问主存调入一行数据,在同组内替换一个旧行。
10、简述直接相联Cache的工作机制,并画出(读出)基本逻辑结构图
11、描述MESI协议及状态转换关系
由于cache中保存的信息是主存中部分信息的副本,当处理机在执行过程中对cache的某些行进行修改,但不会改变主存中对应的信息,就会造成cache与主存对应信息不一致现象,MESI协议则用于解决这个问题:M指修改状态,E指独有状态,S指共享状态,I指无效状态。在MESI协议中,每个cache的cache控制器不仅知道自己的读写操作,而且也监听其他cache的读写操作,每个cache line所处的状态根据本核和其他核的读写操作在4个状态间进行迁移。
LR-本地读;LW-本地写;RR-远程读;RW-远程写;
12、简述Cache的三种典型结构及其特点
(1) 组相联:将Cache存储器划分为若干组,每组包含若干行,每行包括若干数据。通过组号,标志,行内地址找到数据字。(主存中的每一块可被放置到cache中唯一的一组中的任何地方)
特点:复杂性不高,容量大,映射较灵活,性能较均衡。可以通过增加组数,增加组内行数,增加数据行的长度,来对cache进行扩展,提高命中率和速度。
(2) 直接相联:在组相联的基础上,若每组只有一行,变为直接相联结构,根据行号直接定位数据行,根据行内地址进行数据选择。(主存中的每一块只能被放置到cache中唯一的一个地方)
特点:直接利用行号定位,结构简单易实现,容量大速度快。但地址映象不灵活,命中率不高。
(3) 全相联:在组相联的基础上,若只有一组,包括所有行,变为全相联结构。
完全通过标志的相联比较定位数据行。(主存中的任一快可被放置到cache中任意部分)
特点:cache内部结构复杂,容量小,访问速度慢。但地址映象最灵活,每个cache行可以映象到主存任意行,命中率高。
13、简述影响流水线性能的主要因素,并举例说明流水线的阻塞情况以及提高流水线吞吐李的主要途径。
主要因素
(1) 指令长度不均一
(2) 流水段操作时间不均一
(3) 转移相关:下一条指令的地址依赖于上一条指令(转移)的执行结果
(4) 数据相关:流水线中下一条指令的操作数依赖于上一条指令的执行结果
举例说明流水线的阻塞情况
假设一个基本的流水段周期等于存储器的访问周期,如果一条指令的执行过程中,取指令IN占两个周期,取操作数占两个周期,进入流水线后,下一条指令的执行就要在流水线入口处和流水线内部推迟执行。
提高流水线吞吐量的主要途径
(1) 采用并行结构直接压缩段操作时间(往往受限)
(2) 采用流水线技术将段细分成多段流水处理(通用方法)
14、简述流水线细分提高流水线吞吐率的原理(附结构图说明) .
流水线细分包括两种类型:
串行流水结构,细分功能段允许作串行多步处理,如乘除法运算
并行重叠结构,细分功能段非串行多步处理,如存储访问
15、举例说明寄存器变名的优势,简述动态执行(错序执行)的工作机制
动态执行:设置一组指令保留站和多个算术逻辑功能部件,容纳多条指令,实现指令的挂起与并发处理。
(1) 保留站用来存储进入执行段的指令信息,根据指令类型为每一类功能设置一个或多个保留站,如加法、乘法保留站。
(2) 每一类保留站又与一套或多套功能执行部件相连。
(3) 当保留站中的指令具备源操作数和空闲的功能执行部件时,则启动功能部件执行指令。
工作流程
(1) 定向分配:根据指令类型分配OPR(修改IDR则分配OPR副本)
(2) 指令压站:将指令送入对应的保留站,并标记数据缺省情况。
(3) 指令执行:保留站中可执行指令送入对应功能部件执行。
(4) 返回结果:功能部件执行结果按目的地址存入OPR组中,一旦条件具备,给保留站中被挂起的指令填操作数,这些指令在下一个周期就可能启动执行
(5) 定向回收:OPR管理器根据OPR使用状态回收OPR
16、描述-般树 型结构节点的深度优先搜索机制
(1)初始化,将根节点压栈
(2)节点出栈作为当前父节点
(3)搜索当前父节点的子节点,若无子节点并且栈空则结束
(4)如果当前父节点有下层子节点,则将同层子节点压栈。
(5)返回(2)
17、描述-般树型结构节 点的广度优先搜索机制
(1)初始化,将根节点进队列
(2)节点出队列作为当前节点
(3)搜索当前节点的子节点,若无子节点并且队列空则结束
(4)如果当前节点有下层子节点,则将同层子节点进队列
(5)返回(2)
18、描述支持Call/ Return快速执行的环形缓冲器管理算法。
(1) 利用随机函数产生指定长度的CNR序列,要求:序列开始为C(预置C开始);任意长度处C的数量>=R的数量(边产生,边检查,不满足就补充C);在序列后面补充数个R,满足C/R的匹配关系。
(2) 由于前台CPU端的缓冲切换极快,后台栈备份极慢(m倍消耗时间),因此程序模拟时前台工作m次,后台工作1次
(3) 顺序扫描CNR活动序列(依次取出字符)
① 前台过程循环m次(每次取1字符)
② 后台过程1次
③ 记录失效次数,转①重复至扫描结束(输出活动数量、失效次数)
<其中,如果是‘C’字符,就进入循环缓冲队列,如果当前‘C’字符数量达到队列占用的上限,就压入后备栈,记为失效1次;如果是‘R’字符,就从队列中取出‘C’字符,响应RETURN指令,如果当前队列‘C’字符数量低于队列空闲下限,就从后备栈中取出‘C’字符,重新进入循环队列。>
(4) 累计活动数量、失效次数,转(2),重复K次
(5) 输出总活动数量、总失效次数、计算失效率
19、描述支持LRU策略的访问序列先后次序的队列维持算法。
通过LRU(最近最久未使用算法)实现对队列的维持,
(1)利用一维数组模拟队列;
(2)当队列未满,有新的访问行进入时,队列内容依次向后移动,新进的行号插入队列头;
(3)当队列满,有新的访问行进入时,队列内容依次向后移动,将队尾行号移出队列;
(4)当有已存在队列中的访问行进入时,该行号所在位置后面的队列内容保持不变,前面的队列内容依次后移,该行号插入队列头;
20、 描述多功能流水线动态插入新任务的控制算法(保障新旧任务执行期间资源无冲突)。
21、 描述蒙特卡罗随机模拟超长字存储方案单缓冲结构的访问命中率的伪代码程序。
1、 创建一个一维数组memory[]模拟数据和指令的物理内存块
2、 创建一个一维数组buffer[]模拟数据/指令缓冲行
3、 生成数据、指令类型及长度
指令类型 简单指令 常规 复杂 跳转
指令长度 1字节 2 4 1
指令概率 0.4 ip[1] 0.2 ip[2] 0.1 0.3
指令出现概率:0.85
数据类型 整型 长整型 单精度 双精度
数据长度 1 2 4 8
数据概率 0.4 dp[1] 0.2 0.2 0.2
数据概率:0.15
4、 通过rand()函数随机生成10个按不同比例划分的指令,并在物理内存中分配该类型指令大小的空间。数据同理。
r1=rand()
If(r<=ip[1]) then itype=1
If()……
r2=rand()
If(r2<=dp[1]) then dtype=1
……
5、 通过add_instruction()和add_data()模拟内存块中已经存在指令和数据
6、 通过create(int r)模拟从外界产生需要进行比较的指令或数据。
Void create(int r){
srand(time(null));
r=rand(); //t<17表产生指令;17<=t<20代表产生数据
}
7、 通过data_exit(state,address),instruct(state,address)进行命中判断。state为类型,address为地址。其中在第一次比较之前需要将数据、指令从内存调入缓冲行,将缓冲行内容与外界内容进行比较。如果命中不刷新缓冲行,未命中或者遇到跳转指令就刷新缓冲行
temp=new_data/new_instruct //temp用于模拟外界产生的数据或指令
If(temp==buffer){
valid++; //命中次数加1
}
Count++; //访问次数加1
8、最后分别计算数据、指令及汇总的命中率
22、描述随机模拟Call / Return快速执行的环形缓冲器失效率的伪代码程序。
参考18题