二、综合应用题
1某计算机系统中的磁盘有300个柱面,每个柱面有10个磁道,每个磁道有200个扇区,扇区大小为512B。文件系统的每个簇包含2个扇区。请回答下列问题:
(1)磁盘的容量是多少?
(2)假设磁头在85号柱面上,此时有4个磁盘访问请求,簇号分别为:100260、60005、101660和110560。
若采用最短寻道时间优先(SSTF)调度算法,则系统访问簇的先后次序是什么?
(3)第100530簇在磁盘上的物理地址是什么?将簇号转换成磁盘物理地址的过程是由I/O系统的什么程序完成的?[2019年408统考]
答:
(1)磁盘容量=(300×10×200×512/1024)KB=3×105KB。
(2)依次访问的簇是100 260、101 660、110 560、60 005。
(3)第100 530簇在磁盘上的物理地址由其所在的柱面号、磁头号、扇区号构成。
其所在的柱面号为⌊100530/(10×200/2)⌋=100;
100530%(10×200/2)=530,磁头号为⌊530/(200/2)⌋=5;
扇区号为(530×2)%200=60。
将簇号转换成磁盘物理地址的过程由磁盘驱动程序完成。
2某计算机采用页式虚拟存储管理方式,按字节编址。CPU进行存储访问的过程如图1-1所示。
图1-1
根据图1-1回答下列问题。
(1)主存物理地址占多少位?
(2)TLB采用什么映射方式?TLB用SRAM还是DRAM实现?
(3)Cache采用什么映射方式?若Cache采用LRU替换算法和回写(Write Back)策略,则Cache每行中除数据(Data)、Tag和有效位外,还应有哪些附加位?Cache总容量是多少?Cache中有效位的作用是什么?
(4)若CPU给出的虚拟地址为0008 C040H,则对应的物理地址是多少?是否在Cache中命中?说明理由。若CPU给出的虚拟地址为0007 C260H,则该地址所在主存块映射到的Cache组号是多少?[2018年408统考]
答:
(1)物理地址位数是20+3+5=28(或16+12=28)。
(2)TLB中每项都有一个比较器,故TLB采用全相联映射方式TLB采用SRAM实现。
(3)Cache中每组有两行,故采用2路组相联映射方式。
因为是2路组相联并采用LRU替换算法,所以每行(或每组)需要1位LRU为;因为采用回写策略,所以每行有1位修改位(脏位)。
28位物理地址中Tag字段占20位,组索引字段占3位,块内偏移地址占5位,故Cache共有23=8组,每组2行,每行有25=32B;Cache总容量为8×2×(20+1+1+1+32×8)=4464位=558字节。
(或者8×2×(20+1+1+32×8)+8=4456位=557字节)
有效位用来指出所在Cache行中的信息是否有效。
(4)虚拟地址0008 C040H对应的物理地址是004 0040H。
访问Cache不命中。
理由为:主存物理地址为004 0040H,其中高20位00400H为标志字段,低5位0000B为块内偏移量,中间3位010B为组号2,因此将00400H与Cache中第2组两行中的标志字段同时比较,可以看出,虽然有一个Cache行中的标志字段与00400H相等,但对应的有效位为0,而另一Cache行的标志字段与00400H不相等,故访问Cache不命中。
因为物理地址的低12位于虚拟地址低12位相同,即为0010 0110 0000B,其中011B是组号(组索引),因此,该地址所在的主存块映射到的Cache组号为3。
3请根据题2图1-1给出的虚拟存储管理方式,回答下列题。
(1)某虚拟地址对应的页目录号为6,在相应的页表中对应的页号为6,页内偏移量为8,该虚拟地址的十六进制表示是什么?
(2)寄存器PDBR用于保存当前进程的页目录起始地址,该地址是物理地址还是虚拟地址?进程切换时,PDBR的内容是否会变化?说明理由。同一进程的线程切换时,PDBR的内容是否会变化?说明理由。
(3)为了支持改进型CLOCK置换算法,需要在页表项中设置哪些字段?[2018年408统考]
答:
(1)该虚拟地址为0180 6008H。
(2)该地址是物理地址。进程切换时,PDBR的内容会变化;同一进程的线程切换时,PDBR的内容不会变化。每个进程的地址空间、页目录和PDBR的内容存在一一对应的关系。进程切换时,地址空间发生了变化,对应的页目录及其起始地址页相应变化,因此需要用进程切换后当前进程的页目录起始地址刷新PDBR。同一进程中的线程共享该进程的地址空间,其线程发生切换时,地址空间不变,线程使用的页目录不变,因此PDBR的内容也不变。
(3)需要设置访问字段(引用位/使用位)和修改字段(脏位)。
4已知
计算f(n)的C语言函数f1如下:
1 int f1(unsigned n)
2 { int sum=1,power=1;
3 for(unsigned i=0;i<=n-1;i++)
4 { power*=2;
5 sum+=power;
6 }
7 return sum;
8 }
将f1中的int都改为float,可得到计算f(n)的另一个函数f2。假设unsigned和int型数据都占32位,float采用IEEE754单精度标准。
请回答下列问题
(1)当n=0时,f1会出现死循环,为什么?若将f1中的变量i和n都定义为int型,则f1是否还会出现死循环?为什么?
(2)f1(23)和f2(23)的返回值是否相等?机器数各是什么(用十六进制表示)?
(3)f1(24)和f2(23)的返回值分别是33 554 431和33 554 432.0,为什么不相等?
(4)f(31)=232-1,而f1(31)的返回值却为-1,为什么?若使(n)的返回值与f(n)相等,则最大的n是多少?
(5)f2(127)的机器数为7F80 0000H,对应的值是什么?若使f2(n)的结果不溢出,则最大的n是多少?若使f2(n)的结果精确(无舍入),则最大的n是多少?[2017年408统考]
答:
(1)由于i和n是unsigned型,故“i<=n-1”是无符号数比较,n=0时,n-1的机器数为全1,值是232-1,为unsigned型可表示的最大数,条件“i<=n-1”永真,因此出现死循环。
若i和n改为int类型,则不会出现死循环。
因为“i<=n-1”是带符号整数比较,n=0时,n-1的值是-1,当i=0时条件“i<=n-1”不成立,此时退出for循环。
(2)f1(23)与f2(23)的返回值相等。
f1(23)的机器数是OOFF FFFFH,
F2(23)的机器数是4B7F FFFFH。
(3)当n=24时,f(24)=1 1111 1111 1111 1111 1111 1111B,而float型数只有24位有效位,舍入后数值增大,所以f2(24)比f1(24)大1。
(4)显然f(31)已超出了int型数据的表示范围,用f1(31)实现得到的机器数为32个1,作为int型数解释时其值为-1,即f1(31)的返回值为-1。
因为int型最大可表示数是0后面加31个1,故使f1(n)的返回值与f(n)相等的最大n值是30。
(5)IEEE754标准用“阶码全1、尾数全0”表示无穷大。f2返回值为float型,机器数7F80 0000H对应的值是+∞。
当n=126时,f(126)=2217-1=1.1...1×2126,对应阶码为127+126=253,尾数部分舍入后阶码加1,最终阶码为254,是IEEE754单精度格式表示的最大阶码。故使f2结果不溢出的最大n值为126。
当n=23时,f(23)为24位1,float型数有24位有效位,所以不需舍入,结果精确。故使f2获得精确结果的最大n值为23。
5在按字节编址的计算机M上,题4只f1的部分源程序与对应的机器级代码(包括指令的虚拟地址)如下:
int f1(unsigned n)
1 00401020 55 push ebp
...... ....... .....
for(unsigned i=0;i<=n-1;i++)
...... ...... ......
20 0040105E 39 4D F4 cmp dword ptr[ebp-OCh],ecx
...... ...... ......
{ power*=2;
...... ...... ......
23 00401066 D1 E2 sh1 edx,1
...... ...... ......
return sum;
...... ...... ......
35 0040107F C3 ret
其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令。
请回答下列问题。
(1)计算机M是RISC还是CISC?为什么?
(2)f1的机器指令代码共占多少字节?要求给出计算过程。
(3)第20条指令cmp通过i减n-1实现对i和n-1的比较。执行f1(0)过程中,当i=0时,cmp指令执行后,进/借位标志CF的内容是什么?要求给出计算过程。
(4)第23条指令sh1通过左移操作实现了power*2运算,在f2中能否也用sh1指令实现power*2?为什么?[2017年408统考]
答:
(1)M为CISC。
M的指令长短不一,不符合RISC指令系统特点。
(2)f1的机器代码占96B。
因为f1的第一条指令“push ebp”所在的虚拟地址为00401020H,最后一条指令“ret”所在的虚拟地址为0040 107FH,所以,f1的机器指令代码长度为0040 107FG-0040 1020H+1=60H=96个字节。
(3)CF=1。
cmp指令实现i与n-1的比较功能,进行的是减法运算。在执行f1(0)过程中,n=0,当i=0时,i=0000 0000H,并且n-1=FFFF FFFFH。因此,当执行第20条指令时,在补码加/减运算器中执行“0减FFFF FFFFH”的操作,即0000 0000H+00000000H+1=0000 0000H,此时,进位输出C=0,减法运算时的错位标志CF=Cy1=1。
(4)f2中不能用sh1指令实现power*2。
因为sh1指令用来将一个整数的所有有效数位作为一个整体左移;而f2中的变量power是float型,其机器数中不包含最高的有效位,但包含了阶码部分,将其作为一个整体左移时并不能实现“乘2”的功能,因而f2中不能用sh1指令实现power*2。
6假定题5给出的计算机M采用二级分页虚拟存储管理方式,虚拟地址格式如下:
请针对题4的函数f1和题5中的机器指令代码,回答下列问题。
(1)函数f1的机器指令代码占多少页?
(2)取第1条指令(push ebp)时,若在进行地址变换的过程中需要访问内存中的页目录和页表,则会分别访问它们各自的第几个表项(编号从0开始)?
(3)M的I/O采用中断控制方式。若进程P在调用f1之前通过scanf()获取n的值,则在执行scanf()的过程中,进程P的状态会如何变化?CPU是否会进入内核态?[2017年408统考]
答:
(1)函数f1的代码段中所有指令的虚拟地址的高20位相同,因此f1的机器指令代码在同一页中,仅占用1页。
(2)push ebp指令的虚拟地址的最高10位(页目录号)为00 0000 0001,中间10位(页表索引)为00 0000 0001,所以取该指令时访问了页目录的第1个表项,在对应的页表中访问了第1个表项。
(3)在执行scanf()的过程中,进程P因等待输入而从执行态变为阻塞态。输入结束时,P被中断处理程序唤醒,变为就绪态。P被调度程序调度,变为运行态。CPU状态会从用户态变为内核态。
7假定CPU主频为50MHz,CPI为4。设备D采用异步串行通信方式向主机传送7位ASCII字符,通信规程中有1位奇校验位和1位停止位,从D接收启动命令道字符送入I/O端口需要0.5ms。请回答下列问题,要求说明理由。
(1)每传送一个字符,在异步串行通信线上共需传输多少位?在设备D持续工作过程中,每秒钟最多可向I/O端口送入多少个字符?
(2)设备D采用中断方式进行输入/输出,示意图如图1-2所示。
图1-2
I/O端口每收到一个字符申请一次中断,中断响应需10个时钟周期,中断服务程序共有20条指令,其中第15条指令启动D工作。若CPU需从D读取1000个字符,则完成这一任务所需时间大约是多少个时钟周期?CPU用于完成这一任务的时间大约是多少个时钟周期?在中断响应阶段CPU进行了哪些操作?[2016年408统考]
答:
(1)每传送一个ASCII字符,需要传输的位数有1位起始位,7位数据位(ASCII字符占7位)、1位奇校验和1位停止位,故总位数为1+7+1+1=10。
I/O端口每秒钟最多可接收1000/0.5=2000个字符。
(2)一个字符传送时间包括:设备D将字符送I/O端口的时间、中断响应时间和中断服务程序前15条指令的执行时间。时钟周期为15/(50MHz)=20ns,设备D将字符送I/O端口的时间为0.5ms/20ns=2.5×104个时钟周期。一个字符的传送时间大约为2.5×104+10+15×4=25070个时钟周期。
CPU用于该任务的时间大约是1000×(10+20×4)=9×104个时钟周期。
在中断响应阶段,CPU主要进行以下操作:关中断、保护断点和程序状态、识别中断源。
8某计算机采用页式虚拟存储管理方式,按字节编址,虚拟地址为32位,物理地址为24位,页大小为8KB;TLB采用全相联映射;Cache数据区大小为64KB,按2路组相联方式组织,主存块大小为64B。存储访问过程的示意图如图1-3所示。
图1-3
请回答下列问题。
(1)图中字段A~G的位数各是多少?TLB标记字段B中存放的是什么信息?
(2)将块号为4099的主存块装入到Cache中时,所映射的Cache组号是多少?对应的H字段内容是什么?
(3)Cache缺失处理的时间开销大还是缺页处理的时间开销大?为什么?
(4)为什么Cache可以采用直写(Write Through)策略,而修改页面内容时总是采用回写(Write Bcak)策略?[2016年408统考]
答:
(1)页大小为8KB,页内偏移地址为13位,故A=B=32-13-19;D=13;C=24-13=11;主存块大小为64B,故G=6。2路组相联,每组数据区容量有64B×2=128B,共有64KB/128B=512组,故F=9;E=24-G-F=24-6-9=9。
因而A=19,B=19,C=11,D=13,E=9,F=9,G=6。
TLB中标记字段B的内容是虚页号,表示该TLB项对应哪个虚页的页表现项。
(2)块号4099=00 0001 0000 0000 0011B,因此,所映射的Cache组号为0 0000 0011B=3,对应的H字段内容为0 0000 1000B。
(3)Cache缺失带来的开销小,而处理缺页的开销大。因为缺页处理需要访问磁盘,而Cache缺失只要访问主存。
(4)因为采用直写策略对需要同时写快速存储器和慢速存储器,而写磁盘比写主存慢得多,所以,在Cache-主存层次,Cache可以采用直写策略,而在主存-外存(磁盘)层次,修改页面内容时总是采用回写策略。
9某16位计算机主存按字节编码。存取单位为16位;采用16位定长指令格式;CPU采用单总线结构,主要部分如图1-4所示。图中R0~R3为通用寄存器;T为暂存器;SR为移位寄存器,可实现直送(mov)、左移一位(left)、右移一位(right)3种操作,控制信号为SRop,SR的输出信号SRout控制;ALU可实现直送A(mova)、A加B(add)、A减B(sub)、A与B(and)、A或B(or)、非A(not)、A加1(inc)7种操作,控制信号为ALUop。
图1-4
请回答下列问题。
(1)图中哪些寄存器是程序员可见的?为何要设置暂存器T?
(2)控制信号ALUop和SRop的位数至少各是多少?
(3)控制信号Srout所控制部件的名称或作用是什么?
(4)端点①~⑨中,哪些端点须连接到控制部件的输出端?
(5)为完善单总线数据通路,需要在端点①~⑨中相应的端点之间添加必要的连线。写出连线的起点和终点,以正确表示数据的流动方向。
(6)为什么二路选择器MUX的一个输入端是2?[2015年408统考]
答:
(1)图中程序员可见的寄存器有通用寄存器R0~R3和程序计数器PC;当执行算术或逻辑操作时,由于ALU本身是没有内部存储功能的组合电路,因此如要执行加法运算,被相加的两个数必须在ALU的两个输入端同时有效,因此设置暂存器T用于暂存数据总线发送的数据。
程序员可见的寄存器包括:程序计数器、通用寄存器和状态寄存器。其他的IR、MAR和MDR等是CPU的内部工作寄存器,对程序员不可见。
(2)ALUop和SRop的位数分别为3,2。
ALU中共有7种命令,用三位即可区别表示,SR共有三种命令,其操作控制信号SRop至少需要2位。
(3)SRout所控制的部件是是一个三态门,用于控制移位器与总线之间数据通路的连接与断开。
(4)须连接到控制部件的输出端端点有①②③⑤⑧。操作符命令,传输等都需要控制信号进行控制。
(5)连线1:⑥→⑨;连线2:⑦→④。
(6)数据宽度是16位,按字节编址,所以每条指令占用2个内存单元,顺序执行时,下条指令地址为(PC)+2。MUX的一个输入端为2,可便于执行(PC)+2操作。
10题9中描述的计算机,其部分指令执行过程的控制信号如如图1-5a所示。
图1-5a 部分指令控制信号
该机指令格式如图1-5b所示,支持寄存器直接和寄存器间接两种寻址方式,寻址方式位分别为0和1,通用寄存器R0~R3的编号分别为0、1、2和3。
图1-5b 指令格式
请回答下列问题。
(1)该机的指令系统最多可定义多少条指令?
(2)假定inc、shl和sub指令的操作码分别为01H、02H和03H,则以下指令对应的机器代码各是什么?
①inc R1;R1+1→R1
②shl R2,R1;(R1)<<1→R2
③sub R3,(R1),R2;((R1))-(R2)→R3
(3)假定寄存器X的输入和输出控制信号分别为Xin和Xout,其值为1表示有效,为0表示无效(例如,PCout=1表示PC内容送总线);存储器控制信号为MEMop,用于控制存储器的读(read)和写(write)操作。写出图1-5a中标号①⑧处的控制信号或控制信号的取值。
(4)指令“sub R1,R3,(R2)”和“inc R1”的执行阶段至少各需要多少个时钟周期?[2015年408统考]
答:
(1)128
支持两种寻址方式,使用1位标识,四个寄存器,使用2位标识,因此对于每一个操作数需要3位,每条指令三个操作数,一条指令总共16位,因此剩余7位,所以可以定义27条指令。
(2)①0240H,②0488H,③06EAH
“inc R1;”中R1是直接寻址的单地址指令,代码是“0000010010001000”,前面七位是操作码(01H),001是第一个操作数地址(R1);
“shl R2,R1;(R1)<<1→R2”中R1是间接寻址,R2是直接寻址,代码是“0000011011101010”,前面七位是操作码(02H),010是第一个操作数地址(R2),101是第二个操作数地址;
“sub R3,(R1),R2;((R1))-(R2)→R3”中R1和R2是间接寻址,R3是直接寻址,代码是“000011 011 101 110”,前面七位是操作码(03H),011是第一个操作数地址(R3),101是第二个操作数地址,110是第三个操作数地址。
(3)①0,②mov,③mova,④left,⑤read,⑥sub,⑦mov,⑧Srout。
(4)至少各需要8和1个时钟周期。
在一个时钟周期内CPU仅完成一个动作。
sub R1,R3,(R2);(R3)-((R2))→R1执行周期的微操作序列是:
T0:R3→MAR
T1:M(MAR)→MDR
T2:MDR→R3
T3:R2→MAR
T4:M(MAR)→MDR
T5:MDR→MAR
T6:M(MAR)→MDR
T7:R3+MDR→R1
所以至少需要8个时钟周期。
inc R1;R1+1→R1执行周期的微操作序列是:
T0:R1+1→R1
所以至少需要1个时钟周期。
11某计算机系统按字节编址,采用二级页表的分页存储管理方式,虚拟地址格式如下所示:
请回答下列问题。
(1)页和页框的大小各位多少字节?进程的虚拟地址空间大小多少页?
(2)假定页目录项和页表项均占4个字节,则进程的页目录和页表共占多少页?请写出计算过程。
(3)若某指令周期内访问的虚拟地址为0100 0000H和0111 2048H,则进行地址转换时共访问多少个二级页表?要求说明理由。[2015年408统考]
答:
(1)页和页框大小均为4KB。进程的虚拟地址空间大小为232/212=220页。
(2)(210*4)/212(页目录所占页数)+(220*4)/212(页表所占页数)=1025页。
(3)需要访问一个二级页表。因为虚拟地址0100 0000H和0111 2048H的最高10位的值都是4,访问的是同一个二级页表。
12某程序中有如下循环代码段p:
for(int i=0;i<N;i++)sum+=A[i];
假设编译时变量sum和i分别分配在寄存器R1和R2中。常量N在寄存器R6中,数组A的首地址在寄存器R3中,程序段P起始地址为0804 8100H,对应的汇编代码和机器代码如表1-1所示。
表1-1
执行上述代码的计算机M采用32位定长指令字,其中分支指令Bne采用如下格式,
OP为操作码:Rs和Rd为寄存器编号:OFFSET为偏移量,用补码表示。请回答下列问题,并说明理由。
(1)M的存储器编址单位是什么?
(2)已知sll指令实现左移功能,数组A中每个元素占多少位?
(3)表中bne指令的OFFSET字段的值是多少?已知bne指令采用相对寻址方式,当前PC内容为bne指令地址,通过分析表中指令地址和bne指令内容,推断出bne指令的转移目标地址计算公式。
(4)若M采用如下“按序发射、按序完成”的5级指令流水线:IF(取指)、ID(译码及取数)、EXE(执行)、MEM(访存)、WB(写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起3个时钟周期阻塞,则P中哪些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒险?为什么指令1的执行不会因为与指令5的数据相关而发生阻塞?[2014年408统考]
答:
(1)由题可知,指令为32为即4个字节,而程序执行时是以4个地址单位为间隔逐条取指令的,故可知M的存储器是采用字节编址。
(2)32位,因为sll中实现左移,而(R2)<<2→R4即左移两位就是乘以4,所以是4*8=32位。
(3)由Bne的指令格式可知其OFFSET为指令的后16位,而Bne的机器码码为1446 FFFAH,所以Bne的OFFSET为FFFAH即-6。
由题可知Bne采用相对寻址方式,故有效地址EA=(PC)+A=(PC)+OFFSET,而PC的值为当前Bne指令的地址即(PC)=08048114H,而取完Bne指令后,(PC)+4→PC,故(PC)=0804 8118H。而要跳转到指令1的地址08048100H,两者相差了18H也就是24个字节,而OFFSET是-6,故转移目标地址计算公式为(PC)+OFFSET*(24/6)=(PC)+OFFSET*4。
(4)由指令序列可知,指令1需写R4而指令2需读R4,故指令2会因为数据相关而发生阻塞,同理指令3、指令4也会因为数据相关而发生阻塞;而指令6为分支指令,故其存在控制冒险。因为分支指令会有3个时钟周期的阻塞,故指令1的执行不会因为指令5的数据相关而发生阻塞。
13假设对于12题中的计算机M和程序P的机器代码,M采用页式虚拟存储管理。P开始执行时,(R1)=(R2)=0,(R6)=1000,其机器代码已调入主存但不在Cache中;数组A未调入主存,其所有数组元素在同一页,并存储在磁盘同一个扇区,请回答下列问题,并说明理由。
(1)P执行结束时,R2的内容是多少?
(2)M的指令Cache和数据Cache分离,若指令Cache共有16行,Cache和主存交换的块大小为32字节,则其数据区的容量是多少?若仅考虑程序段P的执行,则指令Cache的命中率为多少?
(3)P在执行过程中,哪条指令的执行可能发生溢出异常?哪条指令的执行可能产生缺页异常?对于数组A的访问,需要读磁盘和TLB至少各多少次?[2014年408统考]
答:
(1)R2是保存变量i的内容,当P执行完即i<N不满足,故i=N=(R6)=1000。
(2)Cache共有16行,每行大小为32B,而本段指令大小为6*4B=24B,故指令占一行Cache,所以数据Cache的大小为15*32B=480B。
由题可知N=1000,故循环了1000次,所以共执行了1000*6=6000条指令,而只有第一次循环执行指令1时指令不在Cache中,故指令Cache命中率=(6000-1)/6000=99.9%。
(3)指令4有可能发生溢出,该指令是统计数组A[0]~A[i]的和,而数组A的各元素的值未知,故该指令是可能发生溢出的。
只有访存指令可能产生缺页异常,即指令3可能产生缺页异常。
第一次执行指令2时需要访问数组A,而数组A未在内存中,第一次访问数组时会导致访盘。由题可知数组A的所有元素在同一页,并存储在磁盘同一个扇区,故经过一次便将该页调入内存,所以以后访问便不会发生缺页中断。每访问一次内存数据就会查TLB一次,共访问数组1000次,所以此时又访问TLB1000次,还要考虑到第一次访问数组A,即访问A[0]时,会多访问一次TLB(第一次访问A[0]会先查一次TLB,然后产生缺页,处理完缺页中断后,会重新访问A[0],此时又查TLB),所以访问TLB的次数一共是1001次。
14某计算机采用16位定长指令字格式,其CPU中有一个标志寄存器,其中包含进位/借位标志CF、零标志ZF和符号标志NF。假定为该机设计了条件转移指令,其格式如下:
其中,00000为操作码OP;C、Z和N分别为CF、ZF和NF的对应检测位,某检测位为1时表示需检测对应标志,需检测的标志位中只要有一个为1就转移,否则就不转移,例如,若C=1,Z=0,N=1,则需检测CF和NF的值,当CF=1或NF=1时发生转移;OFFSET是相对偏移量,用补码表示。转移执行时,转移目标地址为(PC)+2+2×OFFSET;顺序执行时,下条指令地址为(PC)+2。请回答下列问题。
(1)该计算机存储器按字节编址,还是按字编址?该条件转移指令向后(反向)最多可跳转最多少条指令?
(2)某条件转移指令的地址为200CH,指令内容如下所示,若该指令执行时CF=0,ZF=0,NF=1,则该指令执行后PC的值是多少?若该指令执行时CF=1,ZF=0Z,NF=0,则该指令执行后PC的值又是多少?请给出计算过程。
(3)实现“无符号数比较小于等时转移”功能的指令中,C、Z和N应各是什么?
(4)图1-6是该指令对应的数据通路示意图,要求给出中部件①~③的名称或功能说明。[2013年408统考]
图1-6
答:
(1)因为指令长度为16位且下条指令地址为(PC)+2,故编址单位是字节。
题中给出偏移量OFFSET为8位补码,其范围为-128~127,故相对于当前指令进行条件跳转,向后最多可跳转127条指令。
(2)指令中C=0,Z=1,N=1,故应根据ZF和NF的值来判断是否转移。当CF=0,ZF=0,NF=1时需转移。已知指令中偏移量为1110 0011B=E3H,符号扩展后为FFE3H,左移一位(乘2)后为FFC6H,故PC的值(即转移目标地址)为200CH+2+FFC6H=1FD4H当CF=1,ZF=0,NF=0时不转移。PC的值为200CH+2=200EH。
(3)指令中的C、Z和N应分别设置为C=Z=1,N=0。
(4)部件①指令寄存器:用于存放当前指令;部件②移位寄存器:用于左移一位;部件③加法器:地址相加。
15某计算机主存按字节编址,逻辑地址和物理地址都是32位,页表项大小为4字节。请回答下列问题。
(1)若使用一级页表的分页存储管理方式,逻辑地址结构为:
则页的大小是多少字节?页表最大占用多少字节?
(2)若使用二级页表的分页存储管理方式,逻辑地址结构为:
设逻辑地址为LA,请分别给出其对应的页目录号和页表索引表达式。
(3)采用(1)中的分页存储管理方式,一个代码段起始逻辑地址为00008000H,其长度为8KB,被装载到从物理地址00900000H开始的连续主存空间中。页表从主存0020 0000H开始的物理地址处连续存放,如图1-7所示(地址大小自下向上递增)。请计算出该代码段对应的两个页表项物理地址、这两个页表项中的页框号以及代码页面2的起始物理地址。[2013年408统考]
图1-7
答:
(1)因为页内偏移量是12位,所以页大小为4KB。
页表项数为232/4K=220该一级页表最大为220×4B=4MB。
(2)页目录号可表示为:(((unsigned int)(LA))>>22)&0x3FF。
页表索引可表示为:(((unsigned int)(LA))>>12)&0x3FF。
(3)代码页面1的逻辑地址为0000 8000H,表明其位于第8个页处,对应页表中的第8个页表项,所以第8个页表项的物理地址=页表起始地址+8×页表项的字节数=0020 0000H+8×4=0020 0020H,如图1-8所示。
图1-8
16假定某计算机的CPU主频为80MHz,CPI为4,并且平均每条指令访存1.5次,主存与Cache之间交换的块大小为16B,Cache的命中率为99%,存储器总线宽度为32位。请回答下列问题。
(1)该计算机的MIPS数是多少?平均每秒Cache缺失的次数是多少?在不考虑DMA传送的情况下,主存带宽至少达到多少才能满足CPU的访存要求?
(2)假定在Cache缺失的情况下访问主存时,存在0.0005%的缺页率,则CPU平均每秒产生多少次缺页异常?若页面大小为4KB,每次缺页都需要访问磁盘,访问磁盘时DMA传送采用周期挪用方式,磁盘I/O接口的数据缓冲寄存器为32位,则磁盘I/O接口平均每秒发出的DMA请求次数至少是多少?
(3)CPU和DMA控制器同时要求使用存储器总线时,哪个优先级更高?为什么?
(4)为了提高性能,主存采用4体交叉存储模式,工作时每1/4个存储周期启动一个体。若每个体的存储周期为50ns,则该主存能提供的最大带宽是多少?[2012年408统考]
答:
(1)平均每秒CPU执行的指令数为:80M/4=20M,故MIPS数为20;
平均每秒Cache缺失的次数为:20M×1.5×(1-99%)=300000;
当Cache缺失时,CPU访问主存,主存与Cache之间以块为单位传送数据,此时,主存带宽为:16B×300000/s=4.8MB/s。在不考虑DMA传输的情况下,主存带宽至少达到4.8MB/s才能满足CPU的访存要求。
(2)平均每秒钟“缺页”异常次数为:300000×0.0005%=1.5次;
因为存储器总线宽度为32位,所以,每传送32位数据,磁盘控制器发出一次DMA请求,故平均每秒磁盘DMA请求的次数至少为:1.5×4KB/4B=1.5K=1536。
(3)CPU和DMA控制器同时要求使用存储器总线时,DMA请求优先级更高;因为若DMA请求得不到及时响应,I/O传输数据可能会丢失。
(4)4体交叉存储模式能提供的最大带宽为:4×4B/50ns=320MB/s。
17某16位计算机中,带符号整数用补码表示,数据Cache和指令Cache分离。表1-2给出了指令系统中部分指令格式,其中Rs和Rd表示寄存器,mem表示存储单元地址,(X)表示寄存器X或存储单元X的内容。
表1-2 指令系统中部分指令格式
该计算机采用5段流水方式执行指令,各流水段分别是取指(IF)、译码/读寄存器(ID)、执行/计算有效地址(EX)、访问存储器(M)和结果写回寄存器(WB),流水线采用“按序发射,按序完成”方式,没有采用转发技术处理数据相关,并且同一个寄存器的读和写操作不能在同一个时钟周期内进行。请回答下列问题。
(1)若int型变量x的值为-513,存放在寄存器R1中,则执行指令“SHR R1”后,R1的内容是多少?(用十六进制表示)
(2)若某个时间段中,有连续的4条指令进入流水线,在其执行过程中没有发生任何阻塞,则执行这4条指令所需的时钟周期数为多少?
(3)若高级语言程序中某赋值语句为x=a+b,x、a和b均为int型变量,它们的存储单元地址分别表示为[x]、[a]和[b]。该语句对应的指令序列及其在指令流水线中的执行过程如图1-9所示。则这4条指令执行过程中,I3的ID段和I4的IF段被阻塞的原因各是什么?
图1-9 指令序列及其执行过程示意图
(4)若高级语言程序中某赋值语句为x=2*x+a,x和a均为unsigned int类型变量,它们的存储单元地址分别表示为[x]、[a],则执行这条语句至少需要多少个时钟周期?要求模仿图1-9画出这条语句对应的指令序列及其在流水线中的执行过程示意图。[2012年408统考]
答:(1)x的机器码为[x]补=1111 1101 1111B,即指令执行前(R1)=FDFFH,右移1位后为1111 1110 1111 1111B,即指令执行后(R1)=FEFFH。
(2)至少需要5+(4-1)=8个时钟周期数。
(3)I3的ID段被阻塞的原因:因为I3与I1和I2都存在数据相关,需等到I1和I2将结果写回寄存器后,I3才能读寄存器内容,所以I3的ID段被阻塞。
I4的IF段被阻塞的原因:因为I4的前一条指令I3在ID段被阻塞,所以I4的IF段被阻塞。
(4)x=2*x+a对应的指令序列为:
I1 LOAD R1,[x]
I2 LOAD R2,[a]
I3 SHL R1,R1 //或者ADD R1,R1
I4 ADD R1,R2
I5 STORER2,[x]
这5条指令在流水线中的执行过程如图1-10所示,执行x=2*x+a语句最少需要17个时钟周期。
图1-10
18假定在一个8位字长的计算机中运行下列C程序段:
unsigned int x=134;
unsigned int y=246;
int m=x;
int n=y;
unsigned int z1=x-y;
unsigned int z2=x+y;
int k1=m-n;
int k2=m+n;
若编译器编译时将8个8位寄存器R1~R8分别分配给变量x、y、m、n、z1、z2、k1和k2。请回答下列问题。(提示:带符号整数用补码表示)
(1)执行上述程序段后,寄存器R1、R5和R6的内容分别是什么?(用十六进制表示)
(2)执行上述程序段后,变量m和k1的值分别是多少?(用十进制表示)
(3)上述程序段涉及带符号整数加/减、无符号整数加/减运算,这四种运算能否利用同一个加法器及辅助电路实现?简述理由。
(4)计算机内部如何判断带符号整数加/减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?[2011年408统考]
答:
(1)无符号整数运算,(R1)=x=134=1000 0110B=86H、(R5)=x-y=246=1001 0000B=90H、(R6)=x+y=0111 1100B=7CH。
(2)m的机器数与x的机器数相同,皆为86H=1000 0110B,解释为带符号整数(用补码表示)时,其值为-111 1010B=-122;同理k1=(m-n)=(x-y)=90H=1001 0000B,解释为带符号整数(用补码表示)时,其值为-111 0000B=-112;
(3)能,n位加法器实现的是模2n无符号整数加法运算。对于无符号整数a和b,a+b可以直接用加法器实现,而a-b=a+[-b]补(mod2n);对于带符号整数用补码表示,补码加减运算公式为:[a+b]补=[a]补+[b]补(mod2n),[a-b]补=[a]补+[-b]补(mod2n),所以四种运算都可在n位加法器中实现。
(4)判断溢出的方法有3种:一位符号位、进位位和双符号位。上述程序段中只有int k2=m+n语句会发生溢出,因为2个带符号整数均为负数,它们相加之后,结果小于8位二进制所能表示的最小负数。
19某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16MB,主存(物理)地址空间大小为1MB,页面大小为4KB;Cache采用直接映射方式,共8行;主存与Cache之间交换的块大小为32B。系统运行到某一时刻时,页表的部分内容和Cache的部分内容分别如图1-11a、图1-11b所示,图中页框号及标记字段的内容为十六进制形式。
图1-11a 页表的部分内容
图1-11b Cache的部分内容
请回答下列问题。
(1)虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示页框号(物理页号)?
(2)使用物理地址访问Cache时,物理地址应划分哪几个字段?要求说明每个字段的位数及在物理地址中的位置。
(3)虚拟地址001C60H所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否Cache命中?要求说明理由。
(4)假定为该机配置一个4路组相联的TLB,该TLB共可存放8个页表项,若其当前内容(十六进制)如1-11c图所示,则此时虚拟地址024BACH所在的页面是否在主存中?要求说明理由。[2011年408统考]
图1-11c TLB的部分内容
答:
(1)由于虚拟(逻辑)地址空间大小为16MB=224B,所以虚拟地址24位,页面大小为4KB=212B,页内地址需要12位,所以虚拟地址24位,其中虚页号占12位;物理地址20位,其中页框号(实页号)占8位。
(2)主存物理地址20位,从左至右应划分3个字段:标记字段、块号字段、块内地址字段。Cache块大小为32=25B,则块内地址字段占5位;Cache共有8=23块,则块号字段占3位;标记字段占20-5-3=12位。
(3)虚拟地址001C60H=0000 0000 0001 1100 0110 0000B,该虚拟地址的虚页号为001H,查页表可以发现,虚页号1对应的有效位为“1”,表明此页在主存中,页框号为04H,对应的20位物理地址是04C60H=0000 0100 1100 0110 0000B。
访问该地址时,Cache不命中,因为Cache采用直接映射方式,对应的物理地址应该映射到Cache的第3行中,其有效位为1,标记值105H≠04CH(物理地址高12位),故访问该地址时Cache不命中。
(4)虚拟地址024BACH=0000 0010 0100 1011 1010 1100B,虚页号为024H,TLB中存放8个页表项,采用4路组相联,即TLB分为2组,每组4个页表项。12位虚页号字段中最低位作为组索引,其余11位为标记位。现在最低位为0,表明选择第0组,11位的标记为012H,根据标记可以知道TLB命中,所在的页面在主存中。因为如果在TLB中查到了页表项,即TLB命中,说明所在页一定命中