白中英《计算机组成原理》(第5版)配套题库【考研真题精选+章节题库】
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

二、综合应用题

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。

说明: 说明: 2

图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命中,说明所在页一定命中