慕课袁春风老师《计算机系统基础》一二三部分练习题

您所在的位置:网站首页 cache主存与主存辅存 慕课袁春风老师《计算机系统基础》一二三部分练习题

慕课袁春风老师《计算机系统基础》一二三部分练习题

#慕课袁春风老师《计算机系统基础》一二三部分练习题| 来源: 网络整理| 查看: 265

2.2

1、下列几种存储器中,( A )是易失性存储器。

A. cache

B. EPROM

C. Flash Memory

D. CD-ROM

 

2、下面有关半导体存储器组织的叙述中,错误的是(  D )。

A. 存储器的核心部分是存储阵列,由若干存储单元构成

B. 每个存储单元有一个编号,就是存储单元的地址

C. 存储单元由若干个存放0或1的记忆单元(cell)构成

D. 同一个存储器中,每个存储单元的宽度可以不同

解析:  D、现代计算机的主存储器由半导体存储器构成,其中存放信息的地方称为存储阵列;每个存储阵列包含若干个存储单元,每个存储单元由若干个记忆单元(cell)构成,每个记忆单元存放一位信息(0或1)。 某一台计算机的主存储器编址方式,总是由其对应的指令集体系结构(ISA)确定的;现代通用计算机大多采用按字节编址方式,即主存储器中每个字节有一个地址,也即每个存储单元的宽度都是8位。

 

3、若某个内存条容量为1GB,则说明该内存条中可存储(  B )个字节。

A. 10^9

B. 2^30

C. 2^9

D. 10^30

 

4、某32位计算机,主存地址为32位,按字节编址,则该计算机的主存地址范围是( A )。

A.  0~(4G-1)   

B. 1~32G

C. 1~4G

D. 0~(32G-1)

解析:  A、因为主存地址为32位,所以主存地址空间占2^32=4G个存储单元;因为按字节编址,因此,主存最大可存储的信息量为4GB=32Gbits。主存储器总是从0开始编号,因此存储单元的地址为0、1、2、……、2^32-1=4G-1。这里,4G-1=2^32-1=1 0000 0000 0000 0000 0000 0000 0000 0000 -1 = 1111 1111 1111 1111 1111 1111 1111 1111 = FFFF FFFFH。

 

5、假定主存地址空间大小为1024MB,按字节编址,每次读写操作最多可以一次存取32位。不考虑其它因素,则存储器地址寄存器MAR和存储器数据寄存器MDR的位数至少应分别为( B )

A. 28,8

B. 30,32

C. 28,32

D. 30,8

解析:  B、因为1024M=2^30,所以MAR至少为30位。

 

6、采用行、列地址引脚复用的半导体存储器芯片是(  D  )。

A. SRAM

B. Flash Memory

C. EPROM

D. DRAM

 

7、下面有关ROM和RAM的叙述中,错误的是(  A )。

A. 计算机系统的主存都用DRAM芯片实现

B. RAM是可读可写存储器,ROM是只读存储器

C. ROM和RAM都采用随机访问方式进行读写

D. 计算机系统的主存由RAM和ROM组成

 

8、下面有关半导体存储器的叙述中,错误的是( D  )。

A. DRAM是半导体动态随机访问存储器,可用作主存

B. SRAM是半导体静态随机访问存储器,可用作cache

C. ROM芯片属于半导体随机存储器芯片

D. 半导体存储器都采用随机存取方式进行读写

解析:  D、有些情况下,可用半导体存储器实现相联存储器,即按内容进行访问,而不是按地址进行随机读写。

 

9、存储容量为16K×4位的DRAM芯片,其地址引脚和数据引脚数各是( D  )。

A. 7和1

B. 14和4

C. 14和1

D. 7和4

解析:  D、因为DRAM芯片存储容量为16K×4位,故该芯片共有16K=2^14个存储单元,应该有14位地址,行、列地址引脚复用后,芯片的地址引脚数为7。每个存储单元占4位,因此芯片的数据引脚数为4。

 

10、假定用若干个16K×8位的存储器芯片组成一个64K×8位的存储器,芯片各单元交叉编址,则地址BFFFH所在的芯片的最小地址为(  A )。

A. 0003H

B. 0002H

C. 0001H

D. 0000H

解析:  A、用若干个16K×8位的存储器芯片构成64K×8位的存储器,需要64K×8位/(16K×8位)= 4个芯片。因为采用交叉编址方式,所以,存储单元地址对4取模后,低两位相同的存储单元在同一个芯片中。BFFFH的最低两位为11,显然,与0003H在同一个芯片中。

 

 

 

2.3

1、以下有关磁盘存储器信息存储原理的叙述中,错误的是(  B  )。

A. 磁盘片的两个面都可存储信息

B. 共有三种不同的磁化状态

C. 信息在磁盘表面以磁化状态形式存储

D. 每个磁化状态对应一位二进制信息

 

2、以下有关磁盘存储器结构的叙述中,错误的是(  A  )。

A. 磁盘驱动器的位置介于CPU和磁盘控制器之间

B. 磁盘操作包括寻道、旋转等待和读写三个步骤

C. 由存储介质、磁盘控制器和磁盘驱动器组成

D. 磁盘的信息存储介质就是磁盘盘面

 

3、以下有关硬磁盘的磁道和扇区的叙述中,错误的是(  C  )。

A. 每面有一个磁头,寻道过程中所有磁头同时移动

B. 磁头和磁盘做相对运动而形成的轨迹即为磁道

C. 一个磁道由若干扇区构成且磁盘各磁道信息位数总相同

D. 不同盘面上同一位置的多个磁道构成一个柱面

解析:  C、早期的低密度磁盘中每个磁道信息位数总是一样,但是,现在的磁盘,其外道信息量比内道大

 

4、以下有关磁盘驱动器的叙述中,错误的是(  C  )。

A. 能对指定盘面的指定扇区进行数据的读或写操作

B. 能控制磁盘片转过指定的扇区,并发回“扇区符合”信号

C. 送到磁盘驱动器的盘地址由磁头号、盘面号和扇区号组成

D. 能控制磁头移动到指定磁道,并发回“寻道结束”信号

解析:  C、因为每个盘面有一个磁头,所以磁头号就是盘面号。盘地址由柱面号(即磁道号)、盘面号(即磁头号)和扇区号组成。

 

5、假定一个磁盘存储器有10个记录面,用于记录信息的柱面数为5000,每个磁道上记录信息位数相同,磁盘片外径200mm,内径40mm,最内道位密度为200bpm(位/毫米),则该磁盘存储器的容量约为(  D  )。

A. 0.628GB

B. 17.7GB

C. 4.425GB

D. 0.157GB

解析:  D、(10×5000×3.14×40×200)/8 B = 0.157GB。

 

6、假定一个磁盘存储器有4个盘片,用于记录信息的柱面数为2000,每个磁道上有3000个扇区,每个扇区512B,则该磁盘存储器的容量约为(  A  )。

A. 24GB

B. 12GB

 

24MB12MB

解析:  A、2×4×2000×3000×0.5KB≈24GB。

 

7、假定一个磁盘的转速为7200RPM,磁盘的平均寻道时间为10ms,内部数据传输率为1MB/s,不考虑排队等待时间。那么读一个512字节扇区的平均时间大约为 (  B  )。

A. 14.17 ms

B. 14.67 ms

C. 18.33 ms

D. 18.83 ms

解析:  B、10ms + (1/7200×60×1000)/2 + 0.5KB/1MB×1000≈14.67。

 

8、假定一个磁盘的转速为10000RPM,平均寻道时间为5.5ms,内部数据传输率为4MB/s,磁盘控制器开销为1ms,不考虑排队等待时间。那么读一个4KB扇区的平均时间大约为 (  A  )。

A. 10.5 ms

B. 12.5 ms

C. 11.5ms

D. 13.5 ms

解析:  A、1ms +5.5ms+ (1/10000×60×1000)/2 + 4KB/4MB×1000 = 10.5ms。

 

9、以下有关磁盘存储器读写操作的叙述中,错误的是(  C  )。

A. 采用直接存储器存取(DMA)方式进行输入/输出

B. 最小读写单位可以是一个扇区

C. 磁盘存储器可与CPU交换盘面上的存储信息

D. 按批处理方式进行一个数据块的读写

解析:  C、磁盘存储器以成批方式进行数据读写,CPU中没有那么多通用寄存器用于存放交换的数据,所以,磁盘存储器通常直接和主存交换信息

 

10、磁盘存储器进行读写操作之前,CPU需要对磁盘控制器或DMA控制器进行初始化。以下选项中,不包含在初始化信息中的是(  D  )。

A. 传送方向(即读磁盘还是写磁盘?)

B. 传送信息所在的通用寄存器编号

C. 传送信息所在的主存起始地址

D. 传送数据个数或传送字节数

 

2.4

1、在存储器分层体系结构中,存储器速度从最快到最慢的排列顺序是(C)。 A.寄存器-主存-cache-辅存 B.寄存器-主存-辅存-cache C.寄存器-cache-主存-辅存 D.寄存器-cache-辅存-主存

 

2、在存储器分层体系结构中,存储器从容量最大到最小的排列顺序是(B)。 A.辅存-主存-寄存器-cache B.辅存-主存-cache-寄存器 C.主存-辅存-cache-寄存器 D.辅存-cache-主存-寄存器

 

3、在主存和CPU之间增加cache的目的是(B)。 A.提高内存可靠性 B.加快信息访问速度 C.增加内存容量,同时加快访问速度 D.增加内存容量

4、以下哪一种情况能很好地发挥cache的作用?(A) A.程序具有较好的访问局部性 B.程序的大小不超过实际的内存容量 C.程序中含有较多的I/O操作 D.程序的指令间相关度不高

5、假定主存按字节编址,cache共有64行,采用直接映射方式,主存块大小为32字节,所有编号都从0开始。问主存第2593号单元所在主存块对应的cache行号是(A)。 A .17 B .34 C. 81 D .1解析:  A、因为按字节编址,主存块大小为32字节,所以块内地址占5位。采用直接映射方式,共64行,故行号占6位。因为2593=2048+512+32+1=0…01 010001 00001B,根据主存地址划分的结果,可以看出2593单元所在主存块对应的cache行号为010001B=17。

6、假定主存按字节编址,cache共有64行,采用4路组相联映射方式,主存块大小为32字节,所有编号都从0开始。问主存第2593号单元所在主存块对应的cache组号是(C)。 (1分) A. 81 B. 17 C .1

D. 34  

解析: C、因为按字节编址,主存块大小为32字节,所以块内地址占5位。采用4路组相联映射方式,共64行,分64/4=16组,故组号占4位。因为2593=2048+512+32+1=0…0101 0001 00001B,根据主存地址划分的结果,可以看出2593单元所在主存块对应的cache组号为0001B=1。

 

7、假定主存地址空间为256MB,按字节编址, cache共有64行,采用8路组相联映射方式,主存块大小为64B,则cache容量至少为(C)字节。 A. 4248 B. 4216 C. 4256 D. 4224解析:  C、因为按字节编址,256M=2^28,故主存地址位数为28位。采用8路组相联,共64行,分64/8=8组,故组号占3位。主存块大小为64B,块内地址占6位。因此,标志位占28-3-6=19位。Cache总容量为64×(1+19+64×8)位=4256字节。

8、假定CPU通过存储器总线读取数据的过程为:发送地址和读命令需1个时钟周期,存储器准备一个数据需8个时钟周期,总线上每传送1个数据需1个时钟周期。若主存和cache之间交换的主存块大小为64B,存取宽度和总线宽度都为4B,则cache的一次缺失损失至少为多少个时钟周期?(C) A. 64 B .80 C .160 D. 72

9、假定用作cache的SRAM的存取时间为2ns,用作主存的SDRAM存储器的存取时间为40ns。为使平均存取时间达到3ns,则cache命中率应为(B)左右。 A .85% B. 97.5% C. 99.9% D. 92.5%解析:  B、1-(3-2)/40=97.5%。

10、若主存地址32位,按字节编址,块大小为32字节,cache共有2K行,则以下叙述中,错误的是(B)。 A.关联度为2时,标志位共计34K位 B.全相联时,标志位共计64K位 C.关联度为8时,标志位共计38K位 D.关联度为1时,标志位共计32K位解析:  B、全相联时,标志位共计2K×(32-5)=54K位。  

2.5

1、以下关于cache替换算法的叙述中,错误的是(C)。 A.组相联和全相联映射都必须考虑如何进行替换 B. LRU算法需要对每个cache行记录替换信息,即LRU位 C.先进先出算法无需对每个cache行记录替换信息 D.直接映射方式是多对一映射,无需考虑替换问题解析:  C、先进先出算法需要对每个cache行打一个时间戳,记录何时装入了一个新的主存块。

2、单选  以下关于LRU替换算法的叙述中,错误的是(C)。  A. LRU是Least-Recently Used的缩写,表示最近最少用  B .基于cache行有多久没有被访问来进行替换  C.全相联映射方式特别适合采用LRU替换算法  D.是一种栈算法,其命中率随组的增大而提高解析:  C、LRU替换算法需要为每个cache行设置一个计数器,用于记录对应行的使用情况。计数器的位数与组的大小有关,例如,对于2-路组相联,每组有两个cache行,计数器为1位;对于4-路组相联,计数器为2位。对于全相联,则组的大小等于cache行数,因而计数器的位数等于cache行号的位数,这样,不仅计数器所占容量开销大,而且对计数器进行修改的时间开销也大。因而LRU算法不适合应用于全相联映射方式。

3、以下关于写策略的叙述中,错误的是(C)。 A. 多个带cache的CPU共享主存时会出现写策略问题 B. 写策略问题也是cache一致性问题 C. 只有在写命中时才需考虑写策略问题,在写不命中时无需考虑 D .对于写命中,有直写(Write Through)和回写(Write Back)两种写策略解析:  C、写命中指要写的单元已经在cache中,写不命中指要写的单元不在cache中。不管是写命中还是写不命中,都需要考虑写策略问题。在写命中时,可以采用直写(Write Through)或回写(Write Back)方式。前者在写cache的同时也写主存;后者仅写cache,在被替换出去时再将整个主存块写入主存。在写不命中时,可以采用写分配方式,把主存块装入cache,然后采用写命中时的直写或回写策略进行处理,也可以采用非写分配(Not Write Allocate)方式,直接写主存而不写cache。

4、以下关于直写(Write Through)策略的叙述中,错误的是(D)。 A. 每次写操作都会写cache中的内容和在主存中的副本 B. 在写不命中时,若采用非写分配(Not Write Allocate)方式,则只能用直写替换策略 C. 通常在cache和主存之间设置写缓冲,以加快写操作速度 D. 通常在cache行中加“dirty bit”,以标识对应行是否被修改过解析:  D、因为直写(Write Through)策略会同时写cache和主存,因此,总能保持cache和主存的一致性,无需用“dirty bit”来标识cache行是否被修改。而回写(Write Back)策略仅写cache,在被替换出去时,需要根据dirty bit是否为1,以了解cache行中的主存块是否被修改,若被修改,则说明发生了cache和主存的不一致,需要将整个主存块写入主存。  

5、假定主存地址位数为32位,按字节编址,主存和cache之间采用直接映射方式,主存块大小为1个字,每字32位,写操作时采用直写(Write Throght)方式,则能存放32K字数据的cache的总容量至少应有(D)位。 A. 1600K B. 1504K C. 1568K D. 1536K解析:  D、cache共有32K字/1字=32K行,故行号占15位;每个主存块为1字=32位=4B,故块内地址占2位。因此,标志占32-15-2=15位。直接映射方式无需考虑替换算法,故没有替换信息;直写方式无需修改位(dirty bit)。因而cache总容量为32K×(1+15+32)=1536K位。

6、假定主存地址位数为32位,按字节编址,主存和cache之间采用直接映射方式,主存块大小为1个字,每字32位,写操作时采用回写(Write Back)方式,则能存放32K字数据的cache的总容量至少应有(B)位。 A. 1536K B. 1568K C. 1504K D. 1600K解析:  B、cache共有32K字/1字=32K行,故行号占15位;每个主存块为1字=32位=4B,故块内地址占2位。因此,标志占32-15-2=15位。直接映射方式无需考虑替换算法,故没有替换信息;回写(Write Back)方式需1位修改位(dirty bit)。因而cache总容量为32K×(1+15+1+32)=1568K位。

7、假定主存地址位数为32位,按字节编址,主存和cache之间采用全相联映射方式,主存块大小为4个字,每字32位,采用回写(Write Back)方式和随机替换策略,则能存放32K字数据的cache的总容量至少应有(A)位。 A. 1264K B. 5024K C. 1256K D. 5056K解析:  A、cache共有32K字/4字=8K行,每个主存块为4字=4×32位=16B,故块内地址占4位。因此,全相联映射方式下,标志占32-4=28位。随机替换算法没有替换信息;回写(Write Back)方式需1位修改位(dirty bit)。因而cache总容量为8K×(1+28+1+4×32)=1264K位。

8、假定主存地址位数为32位,按字节编址,主存和cache之间采用4-路组相联映射方式,主存块大小为4个字,每字32位,采用直写(Write Throght)方式和LRU替换策略,则能存放32K字数据的cache的总容量至少应有(B)位。 A. 4736K B. 1184K C. 1168K D. 4672K解析:  B、cache共有32K字/4字=8K行,因为采用4-路组相联,因而共有8K/4=2K组,组号占11位;每个主存块为4字=4×32位=16B,故块内地址占4位。因此,标志占32-11-4=17位。4路组相联方式下,LRU替换算法需要每行有2位LRU位;直写(Write Throght)方式无需修改位(dirty bit)。因而cache总容量为8K×(1+17+2+4×32)=1184K位。

9、以下关于cache大小、主存块大小和cache缺失率之间关系的叙述中,错误的是(D)。 A. cache容量越大,cache缺失率越低 B. 主存块大小和cache容量无密切关系 C. 主存块大小通常为几十到上百个字节 D. 主存块越大,cache缺失率越低解析:  D、主存块太小,则不能很好地利用空间局部性,从而导致缺失率变高,但是,主存块太大,也会使得cache行数变少,即cache中可以存放主存块的位置变少,从而降低命中率。因此,主存块不可以太小,也不可以太大,通常为几十到上百个字节。

10、单选 某32位机按字节编址。数据cache有16行,主存块大小为64B,采用2-路组相联映射。对于以下程序A,假定编译时i, j, sum均分配在寄存器中,数组a按行优先方式存放,其首址为3200,则a[1][0]所映射的cache组号、程序A的数据cache命中率各是( B )、(  )。 short a[256][256]; …… short sum_array() {        int i, j;       short sum=0;       for (i=0; i 

int p1= p1();                                         int p1=main++;

return p1;                                            return main;

}                                                      }

对于上述两个源程序文件链接时的符号解析,错误的是( B  )。

A.因为出现了两个强符号main,所以会发生链接错误

B.在模块m1的所有语句中,对符号p1的引用一共有三处

C.在m2中,定义了一个强符号p1和一个强符号main

D.在m1中,定义了一个强符号main和一个弱符号p1

 

8以下是两个源程序文件:

/* m1.c */                                                /* m2.c */

int x=100;                                               float x;

int p1(viod);                                             static main=1;

int main                                                                                      int   p1()        {                                                        {

   x= p1();                                               int p1=main + (int) x;

   return x;                                             return p1;

}                                                        }

 对于上述两个源程序文件链接时的符号解析,错误的是( D  )。

A.m1中对x的两处引用都与m1中对x的定义绑定

B.虽然x、main和p1都出现了多次定义,但不会发生链接错误

C.m2中的变量p1与函数p1被分配在不同存储区

D.m2中对x的引用与m2中对x的定义绑定

 

9以下是两个源程序文件:

/* m1.c */                                         /* m2.c */

#include

int x=100;                                   double x;

short y=1, z=2;                                                              

int main                                                                 void p1()                                                                   

{                                                                            {

p1();                                           x= -1.0;            

printf(“x=%d, z=%d\n”, x, z);                      }

}                                                                              上述程序执行的结果是( B   )。提示:1074790400=2^30+2^20,16400=2^14+2^4。

A.x=-1, z=2

B.x=0, z=-16400

C.x=100, z=2

D.x=-1074790400, z=0

 

解析:  B、该题中变量x在m1.c中为强符号,在m2.c中为弱符号。在调用p1函数后,x处原来存放的100被替换,-1.0的double类型表示为1 0111 1111 111 00…0,十六进制表示为BFF0 0000 0000 0000。因为x、y和z都是初始化变量,同在.data节中,链接后空间被分配在一起,x占4B,随后y和z各占2B。因为IA-32为小端方式,所以,x的机器数为全0,y的机器数也为全0,z的机器数为BFF0H。执行printf函数后x=0, z=-(2^14+2^4)=-16400。

 

10假设调用关系如下:func.o→libx.a和liby.a中的函数,libx.a→libz.a中的函数,libx.a和liby.a之间、liby.a和libz.a相互独立,则以下几个命令行中,静态链接发生错误的命令是(  D   )。

A.gcc -static –o myfunc func.o liby.a libx.a libz.a

B.gcc -static –o myfunc func.o libx.a libz.a liby.a

C.gcc -static –o myfunc func.o libx.a liby.a libz.a

D.gcc -static –o myfunc func.o liby.a libz.a libx.a

 

1-12

1以下有关重定位功能的叙述中,错误的是( D   )。

A.重定位的第二步是确定每个段的起始地址,并确定段内每个定义处符号的地址

B.重定位的第一步应先将相同的节合并,且将具有相同存取属性的节合并成段

C.重定位的最终目标是重新确定各模块合并后每个引用所指向的目标地址

D.重定位的最后一步是将引用处的地址修改为与之关联(绑定)的定义处的首地址

 

解析:  D、重定位最后一步是对引用处的地址进行重定位,重定位的方式有多种,只有绝对地址方式才是将引用处的地址修改为与之关联(绑定)的定义处的首地址,而对于其他重定位方式,就不一定是这样,例如,对于PC相对地址方式,引用处填写的是一个相对地址。

 

2以下有关重定位信息的叙述中,错误的是( D  )。

A.重定位信息包含需重定位的位置、绑定的符号和重定位类型

B.指令中的重定位信息在可重定位目标文件的.rel.text节中

C.数据中的重定位信息在可重定位目标文件的.rel.data节中

D.重定位信息是由编译器在生成汇编指令时产生的

 

解析:  D、重定位信息应该是在汇编阶段生成的,只有在汇编阶段生成机器指令时才知道需要进行重定位的位置,因为这些需重定位的位置在机器指令中,例如,CALL指令中的偏移地址等。

 

3假定“int buf[2]={10,50};”所定义的buf被分配在静态数据区,其首地址为0x8048930,bufp1为全局变量,被分配在buf随后的存储空间。以下关于“int *bufp1 = &buf[1];”的重定位的描述中,错误的是( A   )。

A.在相应的重定位条目中,对bufp1和buf的引用均采用绝对地址方式

B.bufp1的地址为0x8048938,重定位前的内容为04H、00H、00H、00H

C.在可执行目标文件中,地址0x8048938开始的4个字节为34H、89H、04H、08H

D.在可重定位目标文件的.rel.data节中,有一个引用buf的重定位条目

 

解析:  A、在重定位条目中只有对buf的引用,没有对bufp1的引用,这里bufp1是一个定义。  B、因为buf有2个数组元素,每个元素占4B,因此bufp1的地址为0x8048930+8=0x8048938,重定位时与引用绑定的符号是buf,即绑定的是&buf[0],而真正赋给bufp1的是&buf[1],引用的地址和绑定的地址相差4,所以重定位前的内容为十六进制数04 00 00 00。  C、可执行文件已经进行了重定位,所以,bufp1所在的地址0x8048938处,应该是重定位后的值,显然应该是buf[1]的地址。重定位时通过初始值加上buf的值得到,即4+0x8048930=0x8048934,小端方式下,4个字节分别为34H、89H、04H、08H。  D、因为“int *bufp1 = &buf[1];”是一个声明,也即是对变量bufp1的数据类型的定义和初始化,因此这个需要重定位的初始化值将被存储在.date节中,因而重定位条目在.rel.data节中,并且是绑定buf的一个引用,即引用buf的一个重定位条目。

 

4假定“int buf[2]={10,50};”所定义的buf被分配在静态数据区,其首地址为0x8048930,bufp1为全局变量,也被分配在静态数据区。以下关于“bufp1 = &buf[1];”的重定位的描述中,错误的是( C  )。

A.在相应的重定位条目中,对bufp1和buf的引用均采用绝对地址方式

B.可用一条mov指令实现该赋值语句,该mov指令中有两处需要重定位

C.在可重定位目标文件的.rel.data节中,有一个与bufp1相关的重定位条目

D.在可重定位目标文件的.rel.text节中,有一个与buf相关的重定位条目

 

解析:  A、赋值语句“ bufp1 = &buf[1];”用movl指令可以实现,其源操作数和目操作数都是绝对地址方式。  B、赋值语句“ bufp1 = &buf[1];”用movl指令可以实现,其源操作数和目操作数都需要重定位。  C、因为“bufp1 = &buf[1];”是一个赋值语句,而不是一个声明,因而不需要对.data节中的bufp1变量进行重定位,也即重定位条目不在.rel.data节中。  D、赋值语句“ bufp1 = &buf[1];”用movl指令可以实现,所以,对buf的引用出现在机器代码中,即.text节中,因而重定位条目在.rel.text节中。

 

5以下是有关在Linux系统中启动可执行目标文件执行的叙述,其中错误的是( C   )。

A.可以通过在一个程序中调用execve()系统调用函数来启动可执行文件执行

B.可在CUI(命令行用户界面)中的命令行提示符后输入对应的命令来启动其执行

C.可在CUI(命令行用户界面)中双击可执行目标文件对应的图标来启动其执行

D.不管是哪种启动执行方式,最终都是通过调用execve()系统调用函数实现的

 

6以下是有关在Linux系统中加载可执行目标文件的叙述,其中错误的是( D  )。

A.可执行目标文件的加载通过execve()函数调用的加载器来完成

B.任何可执行目标文件中的可装入段被映射到一个统一的虚拟地址空间

C.加载器通过可执行目标文件中的程序头表对可装入段进行加载

D.在可执行目标文件的加载过程中,其中的指令和数据被读入主存

 

7以下是在Linux系统中启动并加载可执行目标文件过程中shell命令行解释程序所做的部分操作:

① 构造构造argv和envp

② 调用fork()系统调用函数

③ 调用execve()系统调用函数

④ 读入命令(可执行文件名)及参数

启动并加载可执行目标文件的正确步骤是( C   )。

A.①→②→③→④

B.②→④→①→③

C.④→①→②→③

D.④→①→③→②

 

8以下是有关动态链接及其所链接的共享库以及动态链接生成的可执行目标文件的叙述,其中错误的是(  B )。

A.共享库在Linux下称为动态共享对象(.so),在Windows下称为动态链接库(.dll)

B.可执行目标文件由动态链接器对可重定位目标文件和共享库中部分信息进行链接而成

C.生成的可执行目标文件是部分链接的,也即,其中还有部分引用没有进行重定位

D.可执行目标文件在加载或执行时,系统将会调出动态链接器利用共享库对其进行动态链接

 

9以下是有关静态链接和动态链接比较的叙述,其中错误的是(  D  )。

A.静态库函数代码包含在进程代码段中,而共享库函数代码不包含在进程代码段中

B.静态库函数更新后需对程序重新编译和链接,而共享库函数更新后程序无需重新编译和链接

C.静态库函数代码包含在可执行目标文件中,而共享库函数代码不包含在可执行目标文件中

D.静态链接情况下静态库函数在加载时被链接,动态链接情况下共享库函数可在加载或运行时被链接

 

10一个共享库文件(.so文件)由多个模块(.o文件)生成。在生成共享库文件的过程中,需要对.o文件进行处理,以生成位置无关代码。以下有关位置无关代码(PIC)生成的叙述中,错误的是(  A )。

A.模块间函数调用需要动态链接器进行重定位,重定位时在GOT和PLT中填入相应内容

B.模块内数据的引用无需动态链接器进行重定位,因为引用与定义间相对位置固定

C.模块内函数之间的调用可用PC相对地址实现,无需动态链接器进行重定位

D.模块外数据的引用需要动态链接器进行重定位,重定位时在GOT中填入外部数据的地址

 

3.1

1、以下有关计算机程序和进程的描述中,错误的是(A)。 A. 机器代码及其数据被映射到统一的虚拟地址空间即形成一个进程 B. 机器代码通常以可执行目标文件或共享库文件形式保存在磁盘中 C. 同一个程序如果处理不同的数据集合就会对应很多不同的进程 D. 用高级语言编写的程序必须转换为机器代码才能在计算机中运行 解析:  A、程序需要被启动执行后才能成为进程,机器代码和数据被映射到统一的虚拟地址空间这件事是链接程序完成的,链接后只能生成一个可执行文件或共享库文件,不能形成一个进程。

2、以下关于引入进程好处的叙述,其中错误的是( B  )。 A. 每个进程具有确定的逻辑控制流,不会因为进程被打断执行而改变 B. 每个进程须独占使用处理器,以保证每次运行都有同样的运行结果 C. 每个进程各自占用不同的主存区域,便于操作系统实现存储保护 D. 每个进程具有独立的虚拟地址空间,便于编译、链接、共享和加载 解析:  B、处理器可以被不同的进程轮流使用或并行使用,在一个进程的整个生命周期中,通常不会独占使用处理器,在某个进程执行遇到异常、中断和I/O操作时,操作系统会调度其他进程使用处理器。

3、以下是关于进程的逻辑控制流的叙述,其中错误的是(A)。 A. 进程的逻辑控制流在其对应机器代码被链接生成时就已经确定 B. 不同进程的逻辑控制流中有可能会存在相同的地址序列 C. 进程的逻辑控制流指其运行过程中执行指令的虚拟地址序列 D. 不同进程的逻辑控制流在时间上交错或重叠的情况称为并发 解析:  A、因为进程的逻辑控制流指其运行过程中执行指令的虚拟地址序列,而每个进程的虚拟地址空间都是一样的,例如,IA-32/Linux系统中每个进程的虚拟地址空间都是0000 0000~FFFF FFFFH,因此,不同进程的逻辑控制流中可能存在相同的指令地址序列。链接时可以确定每条指令和每个数据在虚拟地址空间中的地址,但是,不能确定条件转移指令的条件是否满足,因而也就不能确定具体执行的是哪些指令,因而链接时不能确定将来执行时的逻辑控制流。

4、以下关于进程上下文切换的叙述中,错误的是(B)。 A. 进程上下文指进程的代码、数据以及支持进程执行的所有运行环境 B. 进程上下文切换过程中必须将换下进程的代码和数据从主存保存到磁盘上 C. 进程上下文切换过程中必须保存换下进程在切换处的程序计数器PC的值 D. 进程上下文切换机制实现了不同进程在一个处理器中交替运行的功能 解析:  B、进程上下文切换仅是把正在处理器上执行的进程换下,让另一个进程占用处理器执行指令,因而没有必要把换下进程的代码和数据从主存保存到磁盘上,只要在栈中保存换下进程的上下文信息即可。

5、以下关于IA-32/Linux进程虚拟地址空间的叙述中,错误的是(C)。 A. 用户空间从0x8048000开始,由高地址的动态区和低地址的静态区组成 B. 分为内核空间和用户空间两大块,各占高地址1GB和低地址3GB空间 C. 用户空间的静态区由代码段和数据段组成,数据段由读写数据和只读数据组成 D. 用户空间的动态区由栈和堆组成,栈从高地址向低地址生长而堆则相反 解析:  C、用户空间的静态区由只读代码段和可读可写数据段组成,只读代码段由代码区和只读数据区组成,可读可写数据段由已经初始化的数据区和没有进行初始化的数据区组成。

6、以下关于IA-32/Linux进程内核空间的叙述中,错误的是(C)。 A. 包含进程标识信息和控制信息,如进程标识符、页表等 B. 包含进程现场信息,如寄存器(硬件)上下文等 C. 包含所有进程可以动态链接的共享库映射区 D. 包含内核程序的代码及其所用的数据信息 解析:  C、动态链接的共享库映射区不属于内核信息,因而存储在用户空间,通常位于栈和堆之间。

7、以下关于内核态和用户态的叙述中,错误的是(B  )。 A. IA-32系统中,特权级别由代码段寄存器CS中的最后两位指定 B. shell命令行解释程序实现程序的加载和运行,因而它运行在内核态 C. 只有在内核态才能执行内核程序代码,其中可包含特权指令 D. 用户态也称目标程序状态,用户态下只能执行用户进程 解析:  B、Shell命令行解释程序本身运行在用户态,它通过调用fork()、execve()等系统调用封装函数实现程序的加载和运行,在执行这些系统调用函数的过程中,会通过int 0x80指令陷入内核,从而在内核态由内核代码实现相应的子进程创建、程序加载等工作。

8、以下是关于Linux系统中shell命令行解释器如何进行程序加载和运行的叙述,其中错误的是( C )。 A. shell命令行解释器可以通过调用execve()函数来启动加载器进行程序加载 B. shell命令行解释器根据输入的命令行信息获得程序名及参数和环境变量 C. 加载器会把可执行目标文件从磁盘读到内存中,然后从第一条指令开始执行 D. 调用execve()函数前shell命令行解释器先调用fork()函数创建一个子进程 解析:  C、加载器只会根据可执行文件的程序头表等信息建立新加载进程的一些初始数据结构,如对页表信息进行初始化等,而不会从磁盘中把可执行文件中的代码和数据读到内存。只有在发生缺页(page fault)异常时才会把代码和数据从磁盘读到内存。

 

 

3.2

1、以下关于异常/中断机制与进程上下文切换机制比较的叙述中,错误的是(D)。A. 进程上下文切换和异常/中断响应两者都会产生异常控制流

B. 响应异常/中断请求后,CPU执行的是内核程序的代码

C. 进程上下文切换后,CPU执行的是另一个进程的代码

D. 进程上下文切换和异常/中断响应处理都通过执行内核程序实现

解析:  D、进程上下文切换由操作系统内核程序实现,而异常/中断响应的过程则由CPU这个硬件完成的,而不是由内核程序实现的。

 

2、以下选项中,不属于“故障”类的异常是(D)。

A.缺页

B.非法指令操作码

C.整除时除数为0

D.断点设置

解析:D、断点设置指令是一种事先设定好的“陷阱”指令,不属于“故障”类异常。

 

3、故障类异常分为可修复的和不可修复的两类,以下“故障”类异常中,可以修复的异常是(B)。

A. 整数运算溢出

B. TLB缺失

C. 存储访问违例     

D. 存储访问越权

 

4、以下关于“陷阱”类异常的叙述中,错误的是(D)。

A. 单步跟踪状态下,每一条执行的指令都是陷阱指令

B. 是一种事先安排好的或以某种条件触发的“事件”

C. 通常通过陷阱指令或设置单步跟踪状态来触发异常

D. INTO是一条陷阱指令,一旦执行该指令则陷入内核态执行

解析:  D、执行到INTO指令时,CPU将检测OF是否为1。若OF为1,则说明当前发生了溢出,需要陷入内核进行溢出处理。在IA-32架构中,若没有INTO指令,即使发生溢出也不会处理溢出异常。

 

5、以下关于异常/中断响应的叙述中,错误的是(A)。

A. CPU检测到异常事件后所做的处理和检测到中断请求后所做的处理完全一样

B. 中断请求检测由CPU在每条指令执行结束、取下条指令之前进行

C. CPU在中断响应过程中会保存断点和程序状态、关中断并转中断服务程序执行

D. 异常事件检测由CPU在执行每一条指令的过程中进行

解析:  A、异常事件是CPU执行指令过程中发生的与当前执行指令有关的意外事件,而中断请求则是CPU外部的I/O部件或时钟等向CPU发出的与当前执行指令无关的意外事件。CPU对于异常和中断的响应处理在大的方面基本一致,都需要保存断点和程序状态并转到相应的处理程序去执行。但有些细节并不一样,例如,在检测到中断请求后,CPU必须通过“中断回答”信号启动中断控制器进行中断查询,以确定当前发出的优先级最高的中断请求类型,并通过数据线获取相应的中断类型号。而对于内部异常,CPU则无需进行中断回答。

 

6、断点是指异常处理或中断服务结束后返回到被中断原程序继续执行的指令处的地址。以下关于断点的叙述中,错误的是(C)。

A.“陷阱”类异常的断点为陷阱指令下一条指令的地址

B.“故障”类异常的断点为当前发生异常的指令的地址

C. 外部中断请求事件的断点总是当前刚刚执行完的指令的地址

D.“终止”类异常的断点可以是当前指令或下条指令的地址

解析:  C、外部中断请求信号的检测总是在一条指令执行完、取下条指令之前,因此,如果检测到有外部中断请求,那么响应中断请求并转到中断服务程序执行后,应该返回到原来被中断的程序中已经完成执行的指令的下条指令执行,而不是返回到刚刚执行完的指令执行。

 

7、以下关于向量中断方式的叙述中,错误的是(B)。

A.异常处理程序和中断服务程序的首地址称为中断向量,按序存放在一个中断向量表中

B.使用一个统一的查询程序按响应优先级查询异常和中断,并转具体处理程序执行

C.每个异常和中断都被设定一个中断类型号,中断向量存放的位置与对应的中断类型号相关

D.与程序查询中断方式相比,向量中断方式可以在更短的时间内转到对应的中断服务程序执行

 

8、以下关于外部中断的叙述中,错误的是(B)。

A.分为可屏蔽中断和不可屏蔽中断两类

B.可屏蔽中断比不可屏蔽中断优先级高

C.中断事件主要来源于外部设备或时钟

D.中断事件与当前正在执行的指令无关

 

3-3

1单选(1.25分)

以下关于x86实地址模式下异常/中断机制的叙述中,错误的是( D )。

A.中断向量地址为中断类型号乘以4

B.采用向量中断方式识别中断源

C.中断向量表固定在0~3FFH的内存区域

D.中断服务程序首地址占8个字节

 

解析:D、实地址模式下,每个中断向量占4个字节,由16位段地址和16位段内偏移量组成,通过对段地址左移4位然后加上段内偏移量,以得到20位的中断服务程序首地址。

2以下关于x86系统启动过程的叙述中,错误的是( B )。

A.BIOS程序在主存中设置中断向量表

B.进入保护模式后中断向量表中被填入新的中断向量

C.与输入/输出相关的操作通过执行int指令由中断服务程序实现

D.开机后系统首先在实地址模式下工作

 

解析:  B、系统启动结束时进入保护模式,此时,不再使用主存0~3FFH区域内的中断向量表,而是通过专门的中断描述符表来获得中断服务程序或异常处理程序的入口地址。

 

3以下关于IA-32的异常/中断机制的叙述中,错误的是( B  )。

A.最多可以有256种异常和中断类型,每种类型有一个中断号i(0≤i≤255)

B.中断向量表和中断描述符表中都有256个表项,每个表项都占8个字节

C.在保护模式下通过中断描述符表获取异常处理程序和中断服务程序的首地址

D.在实地址模式下使用中断向量表保存异常处理程序和中断服务程序的首地址

解析:  B、实地址模式下,每个中断向量表的表项占4个字节,由16位段地址和16位段内偏移量组成。

 

4以下选项中,不属于中断描述符表中表项内容的是( A  )。

A.调用门描述符

B.陷阱门描述符

C.中断门描述符

D.任务门描述符

 

5以下关于IA-32的中断门描述符的叙述中,错误的是(D   )。

A.每个中断门描述符占64位,与一个中断类型号对应

B.包含对应中断服务程序首地址(段选择符和偏移地址)

C.包含DPL字段,用于表示访问本段时的CPL所要求的最低特权级

D.包含存在位(字段P),用于表示对应中断类型是否存在1.25/1.25

解析:  D、存在位P用于表示对应段(即异常处理程序或中断服务程序所在的段,通常就是指内核代码段)是否存在,而不是表示对应中断类型是否存在。

 

6以下给出的IA-32指令中,不属于陷阱指令的是(  D )。

A.sysenter

B.int

C.int $0x80

D.iret

解析:  D、陷阱指令是指在用户程序中事先设定好的、能引起从用户态“陷入”到内核态的一种指令,而iret指令是在异常处理程序或中断服务程序中的最后一条指令,用于结束异常处理或中断服务过程并返回到原断点继续执行。

 

7单选(1.25分)

以下关于IA-32保护模式下异常和中断响应过程的叙述中,错误的是( C  )。

A.处理器根据中断类型号i访问IDTi,再根据IDTi中段选择符访问指定段描述符

B.处理器在检测到异常事件或中断请求后,获得中断类型号并进入响应阶段

C.异常和中断响应处理结束前CPU将对应IDTi中的段选择符送SS,偏移地址送ESP

D.处理器获取内核栈栈顶指针送SS/ESP,并在内核栈保存SS/ESP、EFLAGS、CS/EIP

解析:  C、异常和中断响应处理结束前,CPU将对应IDTi中的段选择符送CS,偏移地址送EIP,以便跳转到中断服务程序或异常处理程序执行。

 

8以下关于IA-32保护模式下iret指令执行过程的叙述中,错误的是( A  )。

A.会从内核栈中弹出异常/中断响应时保存的用户栈指针SS/ESP

B.执行iret指令后使得CPU回到异常/中断处理之前的断点执行

C.会从内核栈中弹出异常/中断响应时保存的CS/EIP和EFLAGS

D.会检查异常/中断响应前、后系统是否处于同一个特权级

解析:  A、如果检查出异常/中断响应前、后系统处于同一个特权级(也即异常/中断是在内核程序执行时发生的),则不需要从内核栈中弹出用户栈指针SS/ESP,因为,在这种情况下,异常/中断响应时并没有在内核栈中保存用户栈栈顶指针。

 

3-4

1.以下关于IA-32/Linux异常/中断处理的叙述中,错误的是(B   )。

A.中断服务程序和异常处理程序属于Linux内核部分

B.Linux完全按照IA-32的门描述符类型构造了三种门描述符

C.IA-32硬件负责对异常事件和中断请求进行检测和响应

D.在系统启动过程中由Linux负责对IDT的初始化

解析:  B、IA-32规定IDT的每个表项可以是三种门描述符中的一种:中断门(TYPE=1110B)、陷阱门(TYPE=1111B)和任务门(TYPE=0101B)。而Linux通过对TYPE和DPL的组合构造了5种门描述符:中断门、系统门、系统中断门、陷阱门和任务门。

 

2单选(1.25分)

根据Linux对IDT中每种门描述符的初始化构建,以下指令中,不能在用户态执行的是( A  )。

A.int 20

B.int 3

C.into

D.int $0x80

解析:  A、Linux通过对TYPE和DPL的组合构造了5种门描述符:中断门、系统门(DPL=3,TYPE=1111B)、系统中断门(DPL=3,TYPE=1110B)、陷阱门(DPL=0,TYPE=1111B)和任务门。类型4(into)和128(int $0x80)初始化为系统门,类型3(int 3)初始化为系统中断门,这两种门描述符的DPL都为3。所有未定义的类型(如20~31)都属于陷阱门,即DPL为0。

在异常/中断响应过程中,对于编程异常(由INT n等陷阱指令引起的异常),若IDT中的DPL



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3