前言
1、不属于计算机控制器的部件的是
A. 程序计数器PC B. 时序发生器 C. 程序状态字寄存器PSW D. 数据缓冲寄存器
解析:D
1)控制器由程序计数器PC、指令寄存器IR、指令译码器、时序产生器、操作控制器、程序状态字寄存器PSW、中断机构组成;
2)运算器由算术逻辑单元ALU、累加寄存器、数据缓冲寄存器DR,和状态条件寄存器组成。
2、在CPU中,用()给出将要执行的下一条指令在内存中的地址。
A.程序计数器 B.指令寄存器 C.主存地址寄存器 D.状态条件寄存器
解析:A
1)程序计数器PC:存储下一条要执行指令的地址。
3)主存地址寄存器MAR:用来保存当前CPU所访问的内存单元的地址。
4)状态条件寄存器PSW:存状态标志与控制标志。
3、计算机执行程序时,在一个指令周期的过程中,为了能够从内存中读指令操作码,首先是将()的内容送到地址总线上。
A.程序计数器PC B.指令寄存器IR C.状态寄存器SR D.通用寄存器GR
解析:A
4、在程序运行过程中,CPU需要将指令从内存中取出并加以分析和执行。CPU依据()来区分在内存中以二进制编码形式存放的指令和数据。
解析:指令周期的不同阶段
指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。CPU执行指令的过程中,根据时序部件发出的时钟信号按部就班进行操作。在取指令阶段读取到的是指令,在分析指令和执行指令时,需要操作数时再去读操作数。
5、以下关于RISC和CISC的叙述中,不正确的是(4)
A. RISC的大多数指令在一个时钟周期内空完成
B. RISC普遍采用微程序控制器,CISC则遍采用硬布线控制器
C. RISC的指令种类和寻址方式相对于CISC更少
D. RISC和CISC都采用流水线技术
解析:B
- CISC(complex instruction set computer,复杂指令系统)。兼容性性强,指令繁多,长度可变,由微程序实现。
- RISC(reduced instruction set computer,精简指令系统)。指令少,使用频率接近,主要是依靠硬件实现(通用寄存器、硬布线逻辑控制)
- CISC的主要特点
1)指令系统复杂庞大,指令数目一般为200条以上。
2)指令的长度不固定,指令格式多,寻址方式多。
3)可以访存的指令不受限制。
4)各种指令使用频度相差很大。
5)各种指令执行时间相差很大,大多数指令需多个时钟周期才能完成。
6)控制器大多数采用微程序控制。有些指令非常复杂,以至于无法采用硬连线控制。
7)难以用优化编译生成高效的目标代码程序。
- RISC的主要特点
1) 选取使用频率最高的一些简单指令,复杂指令的功能由简单指令的组合来实现。
2) 指令长度固定,指令格式种类少,寻址方式种类少。
3) 只有Load/Store(取数/存数)指令访存,其余指令的操作都在寄存器之间进行。
4) CPU中通用寄存器的数量相当多。
5) RISC一定采用指令流水线技术,大部分指令在一个时钟周期内完成。
6) 以硬布线控制为主,不用或少用微程序控制。
7) 特别重视编译优化工作,以减少程序执行时间。
6、两个同符号的数相加或异符号数相减,所得结果符号位SF和进位标志CF进行()时,表示运算的结果产生溢出。
解析:异或运算为1
1)正溢:两个正数相加而绝对值超出允许的表示范围
2)负溢:两个负数相加绝对值超出允许的表示范围
3)结果的符号位为:SF
4)符号位直接参与运算,所产生的符号位进位为CF
7、机器字长为 n 位的二进制可以用补码来表示( )个不同的有符号定点小数。
解析:2^n
1)补码表示定点小数,范围是:[-1,(1-2^(-n+1))],这个范围一共有2^n个数。
2)补码就是二进制表示负数的一种方法,引入了补码概念,负数的补码就是反码加一,而正数不变,正数的原码反码补码是一样的。在补码中,用(-128)代替(-0),所以补码的表示范围为(-128~0~127)共256个。
3)8位原码和反码能够表示数的范围是-127~127
4)8位补码能够表示数的范围是-128~127
8、设16位浮点数,其中阶符1位、阶码值6位、数符1位、尾数8位。若阶码用移码表示,尾数用补码表示,则该浮点数所能表示的数值范围是( )。
解析:B
如果浮点数的阶码(包括1位阶符)用R位的移码表示,尾数(包括1位数符)用M位的补码表示,则浮点数表示的数值范围如下。
9、某种机器的浮点数表示格式如下(允许非规格化表示)。若阶码以补码表示,尾数以原码表示,则1 0001 0 0000000001表示的浮点数是()
解析:B
1)浮点数表示:N=尾数*基数^指数
2)其中尾数是用原码表示,是一个小数,通过表格和题干可知, 0 0000000001是尾数部分,共计后11位,其中第1位为0表示正数,展开得2-10;
3)阶码部分是用补码表示,是一个整数,通过表格和题干可知,1 0001是整数部分,共计前5位,要计算其具体数值需要将其转换成原码,通过第1位符号位1可知其为负数,补码:10001 ,反码:10000 原码:11111,数据为-15,基数在浮点数表示为2,可得2-15×2-10
10、某一个数据通信系统采用CRC校验方式,其中,生成多项式为g(x) = x的5次方 + x的4次方 + x的2次方 + 1。发送端要发送的信息序列为1010001101。(1)求CRC校验码。(2)最后传输的信息。
解析:
1)根据多项式每一项是否存在,比如从右往左第0项、第2项、第4项、第5项存在则为1,第1项、第3项不存在则为0,所以首先根据多项式,获得二进制CRC码设为:110101。用于和补0后的原编码做除法。
2)多项式最高幂次为5,则校验码有5位,需补5位0。补0后的原编码:101000110100000
3)补0后的原编码除以步骤1得到的CRC码,取相除的余数作为CRC校验码,则CRC校验码为:01110
4)下图为求CRC校验码的除法,过程中进行异或处理。(异或逻辑:00为0,01为1,10为1,11为0)
5)真正传送的编码序列为原编码+求出的CRC校验码,原编码为1010001101,求出的CRC校验码为01110,合起来即传输信息为101000110101110
11、计算机系统的主存主要是由()构成的
A. DRAM B. SRAM C. Cache D. EEPROM
解析:A
1)主存主要采用动态随机存储器DRAM(周期性刷新)
2)Cache采用静态随机存储器SRAM(不需要刷新)
3)EEPROM是电擦除可编程的只读存储器(即插即用,常用在接口卡中,存放硬件设置数据)
12、使用电容存储信息且需要周期性地进行刷新的存储器是
A.DRAM B.EPROM C.SRAM D.EEPROM
解析:A
1)动态存取存储器DRAM(Dynamic Random Access Memory),掉电后数据丢失,用于内存,需要周期性刷新。作用原理是用一个晶体管另加一个电容记录每个bit。但电容不可避免的会有漏电现象,导致电位差不足而使记忆消失,因此除非电容经常周期性地充电,否则无法确保记忆长存。主要的由于这种需要定时刷新的特性,因此被称为“动态”存储器。所有元件较少,集成率高;功耗较小,便于大规模集成。
2)静态存取存储器SRAM(Static RAM),用于高速缓存。采用了与制作CPU相同的半导体工艺,使用触发器来存储数据,也不需要刷新。缺点:所有元件较多,集成率低,功耗较大,体积较大,制造成本比DRAM高。
3)可擦写可编程只读存储器EPROM。用于即插即用设备。是非易失性存储器,不需要周期性刷新。
4)带电可擦可编程只读存储器EEPROM,用于即插即用设备。是非易失性存储器,不需要周期性刷新。
5)拓展:动态存储器DRAM和静态存储器SDAR的区别
13、以下关于闪存(Flash Memory)的叙述中,错误的是( )。
A.掉电后信息不会丢失,属于非易失性存储器
解析:C
1)闪存(Flash Memory)是一种长寿命的非易失性的存储器,数据删除不是以单个的字节为单位而是以固定的区块为单位,区块大小一般为256KB到20MB。
2)闪存是电子可擦除只读存储器(EEPROM )的变种,EEPROM 与闪存不同的是,它能在字节水平上进行删除和重写而不是整个芯片擦写,这样闪存就比EEPROM 的更新速度快。由于其断电时仍能保存数据,闪存通常被用来保存设置信息。
3)闪存不像RAM(随机存取存储器)一样以字节为单位改写数据,因此不能取代RAM,也不能替换主存,因此C选项错误。但是在嵌入式中,可以用闪存代替ROM存储器。
14、假如有5块80G和2块60G的硬盘,采用RAID5的容量是()
A.240G B.300G C.360G D.480G
解析:C
1)RAID5的容量:(总硬盘块数-1)*最小磁盘的容量,(6-1)*2TB= 10TB。 RAID5的一个磁盘发生损坏后,不会影响数据的完整性。
2)RAID 0并不是真正的RAID结构,不提供数据冗余,因此一旦一块磁盘损坏,损坏的数据将无法得到恢复。
3)RAID 0+1是先做RAID1,后做RAID0,磁盘空间利用率与RAID1相同(只有50%),能够经受住RAID 0阵列中任何一块硬盘的故障,若两块硬盘出现故障会影响整个阵列。
4)RAID1+0是先做RAID0,后做RAID1,磁盘空间利用率与RAID1相同(只有50%)。如果一个条带上的2个硬盘同时故障,数据无法恢复。
15、主存与Cache的地址映射方式中,____方式可以实现任意主存的任意一块装入Cache中任意位置,只有装满才需要替换。
A 全相联 B 直接映射 C 组相联 D 串并联
解析:A
主存与Cache的地址映射方式主要有三种,分别是直接映射、全相联映射和组相联映射。
1)直接映射:主存中的每一块只能装入Cache中的唯一位置。若这个位置已有内容,则产生块冲突,原来的块将无条件地被替换出去。这种方式的优点是实现简单,只需利用主存地址的某些位直接判断,即可确定所需字块是否在缓存中。缺点是不够灵活,每个主存快只能对应固定的缓存块,即使缓存快空了很多也不能使用,使得每个缓存块得不到充分的利用。
2)全相联映射:允许主存中每一字块映射到Cache中的任何一块的位置上。这种方式更加灵活,命中率也更高,缩小了块冲突率。但是相联目录表容量大导致成本高,查表速度慢。但缺点是逻辑电路多,成本高。
3)组相联映射:将Cache分为Q组,每组R块,主存的一个数据块可以装入到一组内的任何一个位置。这种方式是对直接映射和全相联映射的一种折中,既保持了一定的灵活性,又降低了实现的复杂度和成本。
16、高速缓存 Cache 与主存间采用全相联地址映像方式,高速缓存的容量为 4MB ,分为 4 块 ,每块 1MB ,主存容量为 256MB 。若主存读写时间为 30ns ,高速缓存的读写时间为 3ns ,平均读写时间为 3. 27ns ,则该高速缓存的命中率为 ( )%。若地址变换表如下所示,则主存地址为 8888888H 时,高速缓存地址为 ( )H 。
A.90 B.95 C.97 D.99
A.488888 B.388888 C.288888 D.188888
解析:D D
1)等效加权平均存取时间T:T=Tc * Hc + ( 1-Hc ) * Tz
其中,Tc为高速缓存Cache的读写时间,Hc为高速缓存Cache的命中率,Tz为主存的读写时间。
2)主存块数=主存容量/缓存每块容量(注意统一单位)
主存容量为256MB,每块1MB,则主存可以分为256/1=256=256块,块号为0~255,即块号需要8位二进制表示块号;
1)Cache块数=Cache容量/缓存每块容量(注意统一单位)
高速缓存的容量为 4MB,每块1MB,则缓存分为4/1=4块,块号为0~3,即块号需要2位二进制表示块号;
2)存放主存块号的相联存储器需要有Cache块个数相同数目的单元,其中每个单元记录所存储的主存块的块号。那么,该例题中单元数目为4,每个单元应为8位。
3)Cache容量4MB,分为4块,所以Cache的22位长地址划分位2部分,块号2位,块内地址20位;主存256MB,所以主存长地址28位,块号位8位,块内地址为20位。
4)给出主存地址,计算Cache地址。计算主存地址的前8位,得到主存块号,在相联存储器或地址变换表中找到对应的Cache块号,Cache块号+主存的块内地址,即所求对应的Cache地址
5)本题目主存地址的高8位是88H,对应地址更换表,高速缓存地址为188888H
17、以下存储存取速度最快的是
A、主存 B、Cache C、寄存器 D、高速磁盘
解析:C
1)访问速度:寄存器>Cache>内存>硬盘
2)存储器的主要性能指标:容量、速度和成本。
3)主存储器:主板上的存储部件,CPU直接与之沟通,存放当前正在使用(即执行中)的数据和程序,它的物理实质就是一组或多组具备数据输入输出和数据存储功能的集成电路。内存只用于暂时存放程序和数据,一旦关闭电源或发生断电,其中的程序和数据就会丢失。
4)主存储器通常分为RAM和ROM两部分。RAM可读可写,ROM只能读不能写。
5)主存与CPU之间硬链接有三组连线:地址总线AB、数据总线DB、控制总线CB。
6)高速缓冲存储器Cache,存在于主存和CPU之间的一级存储器,指存取速度比一般随机存取记忆体RAM要快的一种RAM。一般不像系统主记忆体使用DRAM技术,Cache使用昂贵但较快速的SRAM技术。Cache的容量小,是主存内容的一个子集。Cache与主存数据交换以块为单位。
7)寄存器是CPU内部用来暂存数据、指令和地址的高速存储器,包括通用寄存器、标志寄存器、程序计数器等。寄存器是集成电路中非常重要的一种存储单元,通常由触发器组成。
18、指定内存地址空间的相关计算—内存单元、存储芯片容量或数量
- 内存地址从B0000H到EFFFFH,共有(A)个内存单元。
- 若该内存每个存储单元可存储16位二进制数,并用4片存储芯片构成,则芯片的容量是(B)
- 若内存按字节编址,用存储容量为16K*8比特的存储芯片构成该内存空间,则至少需要(C)片
- 若内存按字节编址,利用8K * 4bit的存储器芯片构成该内存空间,共需(D)片
解析:
1)内存单元数目
EFFFFH-B0000H+1=4000H,转换为10进制,等于2的18次幂,即(2的18次幂)个内存单元
2)芯片容量:2的18次幂*16bit/4=2的16次幂*16bit=64KB*16bit
3)芯片数量:2的18次幂/(16K*8)=16片
4)芯片数量:内存按字节编址,则需要的容量为4000H * 8bit
4000H * 8bit/(8K * 4bit)=(256KB* 8bit)/(8K * 4bit)= 64片
19、2K*8位的芯片组成16K*8位的存储器(地址单元为0000H~3FFFFH,每个芯片的地址空间连续),则地址单元0B1FH所在芯片最小地址编号。
解析:
1)计算片数:16K*8除以(2K*8)=8片,需要3位二进制数表示,片号为000~111。
2)如果按字节编址,16K*8位的存储器,需要地址位数
16K=2的14次幂字节,所以需要14位地址,其中高3位为片选地址,低11位为片内地址。
3)计算0B1FH在哪个芯片
0B1FH=0000 1011 0001 1111
取有效14位00 1011 0001 1111
取前3位001,所以是第2片芯片。
4)芯片起始地址
前3位001,后11位 00000000000,所以是00 1000 0000 0000,即0800H
20、I/O设备与主存的数据交换
- 关于在I/O设备与主机间交换数据的叙述中,错误的(1)。
A.中断方式下,CPU需要执行程序来实现数据传送
B.中断方式和DMA方式下,CPU与I/O设备都可同步工作
C.中断方式和DMA方式相比,快速I/O设备更适合釆用中断方式传递数据
D.若同时接到DMA请求和中断请求,CPU优先响应DMA请求
- 以下关于中断方式与DMA方式的叙述中,正确的是 (2)
A. 中断方式与DMA方式都可实现外设与CPU之间的并行工作
B. 程序中断方式和DMA方式在数据传输过程中都不需要CPU的干预
C. 采用DMA方式传输数据的速度比程序中断方式的速度慢
D. 程序中断方式和DMA方式都不需要CPU保护现场
- 在由高速缓存,主存和硬盘构成的三级存储体系中,CPU执行指令时需要读取数据,那么DMA控制器和中断CPU发出的数据地址是 (3)
A. 高速缓存地址 B. 主存物理地址 C. 硬盘的扇区地址 D. 虚拟地址
- CPU是在(4)结束时响应DMA请求的。
A.一条指令执行 B.一段程序 C.一个时钟周期 D.一个总线周期
- 中断向量提供的是(5)
A、被选中设备的地址 B、待传送数据的起始地址 C、中断服务程序入口地址 D、主程序的断点地址
- 采用DMA方式传送数据时,每传送一个数据都需要占用一个( 6)。
A.指令周期 B.总线周期 C.存储周期 D.机器周期
解析:(1)C(2)A(3)B(4)D(5)C(6)C
1)常用的I/O设备和CPU或内存之间数据传送控制方式有4种,分别为程序直接控制方式、中断控制方式、DMA方式和通道方式。
2)程序直接控制方式:就是由用户进程直接控制内存或CPU和外围设备之间的信息传送。这种方式控制者都是用户进程。
3)中断控制方式:被用来控制外围设备和内存与CPU之间的数据传送。要求CPU与设备(或控制器)之间有相应的中断请求线,而且在设备控制器的控制状态寄存器的相应的中断允许位。微型计算机中,管理键盘最合适的IO控制方式就是中断方式,因为微型计算机是慢速设备,无法预知IO时间。
过程:
当I/O系统与外设交换数据时,CPU无须等待也不必查询I/O的状态,而可以抽身来处理其他任务。当I/O系统准备好以后,则发出中断请求信号通知CPU,CPU接到中断请求信号后,保存正在执行的程序的现场,转入I/O中断服务程序的执行,完成于I/O系统的数据交换,然后再返回被打断的程序继续执行。与程序控制方式相比,中断方式因为CPU无需等待而提高了效率
a.中断向量表:中断向量表用来保存各个中断源的中断服务程序的入口地址。当外设发出中断请求信号(INTR)以后,由中断控制器(INTC)确定其中断号,并根据中断号查找中断向量表来取得其中断服务程序的入口地址,同时INTC把中断请求信号提交给CPU。
b.多级中断嵌套:系统中有多个中断请求时,中断系统按照优先级进行排队。若在处理低级中断过程中又有高级中断申请中断,则高级中断可以打断低级中断处理,转去处理高级中断,等处理完高级中断后再返回去处理原来的低级中断,称为中断嵌套。实现中断嵌套用后进先出的栈来保护断点和现场最有效。
4)DMA方式:又称直接存取方式。是指数据在(主存与外设 )之间的直接成块传送,即在内存与I/O设备间传送一个数据块的过程中,不需要CPU的任何干涉,只需要CPU正在过程开始启动与过程结束时的处理,实际操作由DMA硬件直接执行完成,CPU在数据传送过程中可执行别的任务。
a. 在DMA控制方式下主存与高速I/O设备之间会有一条直接数据通路(DMA总线)。CPU向DMA接口发出“读/写”命令,并指明主存地址、磁盘地址、读写数据量等参数。DMA控制器自动控制磁盘与主存的数据读写,每完成一整块数据读写(如1KB为一整块),才向CPU发出一次中断请求。所以这里的主存地址是主存的物理地址。
b. DMA控制器在需要的时候代替CPU作为总线主设备,在不受CPU干预的情况下,控制I/O设备与系统主存之间的直接数据传输。DMA操作占用的资源是系统总线,而CPU并非在整个指令执行期间即指令周期内都会使用总线,故DMA请求的检测点设置在每个机器周期也即总线周期结束时执行,这样使得总线利用率最高。即一个DMA传送只需要执行一个DMA周期,相当于一个总线读写周期。但DMA方式下每传送一个数据,仅占用一个存储周期。
c. DMA传送主要用于需要高速大批量数据传送的系统中,以提高数据的吞吐量。如磁盘存取、图像处理、高速数据采集系统、同步通信中的收/发信号等方面应用甚广。
d. DMA传送的优点是以增加系统硬件的复杂性和成本为代价的,因为DMA是用硬件控制代替软件控制的。另外,DMA传送期间CPU被挂起,部分或完全失去对系统总线的控制,这可能会影响CPU对中断请求的及时响应与处理。因此,在一些小系统或速度要求不高、数据传输量不大的系统中,一般并不用DMA方式。
e. DMA传送虽然脱离CPU的控制,但并不是说DMA传送不需要进行控制和管理。通常是采用DMA控制器来取代CPU,负责DMA传送的全过程控制。目前DMA控制器都是可编程的大规模集成芯片,且类型很多,如Z-80DMA、Intel 8257、8237。
5)通道方式:与DMA方式相类似,也是一种以内存为中心,实现设备和内存直接交换数据的控制方式。
6)程序直接控制方式和中断控制方式都只适用于简单的、外设很少的计算机系统。
- 因为程序直接控制方式耗费大量的CPU时间,而且无法检测发现设备或其他硬件产生的错误,设备与CPU、设备与设备只能串行工作。
- 中断控制方式虽然在某种程度上解决了上述问题,但由于中断次数多,因而CPU仍需要花费较多的时间处理中断,而且能够并行操作的设备台数也受到中断处理时间的限制,中断次数增多也导致数据丢失。
- DMA方式和通道方式采用了外设和内存直接交换数据的方式。只有在一段数据传送结束时,才发出中断信号要求CPU做善后处理,从而大大减少了CPU的工作负担。
- DMA方式要求CPU执行设备驱动程序来启动设备,给出存放数据的内存起始地址以及操作方式和传送字节长度等;
- 通道控制方式则是在CPU发出I/O启动命令之后,由通道指令来完成这些工作。
21、系统总线—总线分类
- 计算机中,系统总线用于(1)连接
A.接口和外设 B运算器、控制器和寄存器 C.主存及外设部件 D.DMA控制器和中断控制器
- 并行总线与串行总线:关于总线的说法中,正确的(2)
A.串行总线适合近距离高速数据传输,但线间串扰会导致速率受限
B.并行总线适合长距离数据传输,易提高通信时钟频率来实现高速数据传输
C.单总线结构在一个总线上适应不同种类的设备,设计复杂导致性能降低
D.半双工总线只能在一个方向上传输信息
- 以下关于PCI总线和SCSI总线的叙述中,正确的是(3)
A、PCI总线是串行外总线,SCSI 总线是并行内总线
B、PCI总线是串行内总线, SCSI总线是串行外总线
C、PCI总线是并行内总线, SCSI 总线是串行内总线
D 、PCI总线是并行内总线,SCSI总线是并行外总线
解析:(1)C(2)C(3)D
- 按连接部件的不同分为片内总线,系统总线,通信总线;
- 片内总线:用于芯片内部各主要部件间(如运算器、控制器、寄存器)的数据传输;
- 系统总线:三总线结构,计算机内部的数据传输方式,内总线,也叫系统总线。 CPU、主存等各大部件之间的信息传输线。按照传输信息的不同可以分为数据总线,地址总线,控制总线。
- 数据总线用来传输个功能部件之间的数据信息,是双向传输总线。数据总线的位数称为数据总线宽度,是衡量系统性能的重要参数。
- 地址总线主要用来指出数据总线上的源数据和目的数据在主存单元的地址或者I/O设备的地址。地址线的根数为n,则对应的存储单元个数为2的n次幂。
- 控制总线是用来发出各种控制信号的传输线。数据总线和地址总线是被挂在总线上的所有部件共享的,因此需要控制总线发出控制信号使各个部件在不同时刻占有总线的使用权。
- 通信总线:用于计算机系统之间通信或者计算机系统与其他系统通信。传输方式有两种,串行通信和并行通信。
- 并行总线和串行总线的比较。
- 并行总线是含有多条双向数据线的总线,它可以实现一个数据的多位同时传输,总线中数据线的数量决定了可传输一个数据的最大位数(一般为8的倍数)。
- 由于可以同时传输数据的各位,所以并行总线具有数据传输速率高的优点。
- 由于各条数据线的传输特性不可能完全一致,当数据线较长时,数据各位到达接收端时的延迟可能不一致,会造成传输错误,所以并行总线不宜过长,适合近距离连接。
- 大多数的系统总线属于并行总线。
- 串行总线是只含有一条双向数据线或两条单向数据线的总线,可以实现一个数据的各位按照一定的速度和顺序依次传输。
- 由于按位串行传输数据对数据线传输特性的要求不高,在长距离连线情况下仍可以有效地传送数据,所以串行总线的优势在于远距离通信。
- 因数据是按位顺序传送的,所以在相同的时钟控制下,数据传输速率低于并行总线。
- 大多数的通信总线属于串行总线。
- 在单总线结构中计算机的各个部件均与系统总线相连,所以它又称为面向系统的单总线结构。在单总线结构中,CPU与主存之间、CPU与I/O设备之间、I/O设备与主存之间、各种设备之间都通过系统总线交换信息。单总线结构的优点是控制简单方便,扩充方便。但由于所有设备部件均挂在单一总线上,使这种结构只能分时工作,即同一时刻只能在两个设备之间传送数据,这就使系统总体数据传输的效率和速度受到限制,这是单总线结构的主要缺点。
- PCI和SCSI
- PCI总线(Peripheral Component Interconnect,外围设备互联)用于连接计算机内部的各种设备,PC机常用内总线,采用并行传输方式;
- SCSI总线(Small Computer System Interface,小型计算机系统接口)一条并行外总线,广泛用于连接软硬磁盘、光盘、扫描仪等。
22、总线带宽计算
- 总线宽度为32bit,时钟频率为200MHz,若总线上每5个时钟周期传送一个32bit的字,则总线的带宽为(A);
- 内存容量为16GB,字长为64位,则(B);
- 假设某系统总线在一个总周期中并行传输4B信息,一个总线周期占用2个时钟周期,总线时钟频率为10MHz,则总线带宽为(C)Mbps;
- 总线规范会详细描述总线各方面的特性,其中(D物理)特性规定了总线的线数,以及总线的插头、插座的形状、尺寸和信号线的排列方式等要素。
解析:
A. 时钟频率是指同步电路中时钟的基础频率,它以若干次周期每秒来度量,量度单位采用SI单位赫兹(Hz)。
1)每秒200MHz周期,每5个时钟周期传送一个字,每秒传送200MHz/5=40M次;
2)每次32bit,共4个字节,那么每秒40M*4/s=160MB/s。
B.计算机内存容量决定地址总线宽度,字长决定数据总线宽度;
1)地址总线宽度= 寻址范围(即内存容量):
16GB =2的4次方GB = 2的34次方B ,所以地址总线的宽度是 2的34次方B,
2)数据总线宽度=字长=64。
C.系统总线在一个总线周期中并行传输4B信息,一个总线周期占用2个时钟周期,总线时钟频率为10MHz,则总线带宽为 (4/2)x10=20 Mbps。
23、某机为定长指令字结构,指令长度16位;每个操作数的地址码长6位,指令分为无操作数、单操作数和双操作数三类。(1)若双操作数指令已有K种,无操作数指令已有L种,问单操作数指令最多可能有()种;(2)上述三类指令各自允许的最大指令条数是()
解析:
- 1条指令包含两部分:操作码和操作数。
- 字长16位,即指令最长16位。
- 双操作数,操作码长度为16-2*6=4位;双操作数已有K种,所以留有(2^4-K)=16-K 个编码给单操作数。
- 单操作数,操作码长度为16-6=10位,再减去原来的4位操作码,可扩展位为6位;
已知无操作数已有L种,设单操作数有Y种,那么有:L=[(2^4-K)*2^6-Y]*2^6,化简得:Y=(2^4-K)*2^6-L/(2^6),单操作数指令最多可能有(2^4-K)*2^6-L/(2^6)种。
5.由于必须保证三类指令都要有,所以双操作数、单操作数都必须至少留出1个指令数便于进一步扩展。所以有:
- 双操作数:满足K<=2^4且K为整数,K=15,要保证最大指令数为2^4-1=15个;
- 单操作数:满足1种双操作数,再留有1个指令数给无操作数扩展,即K=1,最大指令数为(2^4-1)*2^6-1=959个;
- 无操作数:满足1种双操作数和1种单操作数,即K=1、Y=1,最大指令数为[(2^4-1)*2^6-1]*2^6=2^16-2^12-2^6=61376个
24、Java 语言符合的特征有( )和自动的垃圾回收处理
①采用即时编译 ②采用静态优化编译 ③对象在堆空间分配 ④对象在栈空间分配
A. ①③ B. ①④ C. ②③ D. ②④
解析:A
JAVA是解释型语言,可以生成中间代码后再边解释为目标代码边执行,也就是即时编译,可以根据运行机器优化代码,采用的是动态优化编译。
Java程序最初都是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁,就会把这些代码认定为“热点代码 ”(Hot Spot Code),为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成本地机器码,并以各种手段尽可能地进行代码优化,这个过程就叫即时编译,运行时完成这个任务的后端编译器被称为即时编译器。
JAVA的栈空间只存放基本类型、引用类型变量和方法,而堆中存储实例对象。
25、在①过程式程序设计、②数据抽象程序设计、③面向对象程序设计、④泛型(通用)程序设计中,C++ 语言支持(),C语言支持()。
A① B②③ C③④ D①②③④
A① B①③ C②③ D①②③④
解析: D A
设计范型,这是一种基于任务分解的、自上而下的程序设计方法。
1)数据抽象程序设计允许将问题空间和解空间中的事物、概念等采用类机制来表示。
2)面向对象程序设计比数据抽象更进一步,支持继承、多态等,更符合客观世界规律。
3)泛型程序设计即设计出通用算法、通用类型,并使它们应用于多种数据类型。
4)C++语言以C语言为基础,增加了后三种程序设计范型的支持,它是目前使用广泛的程序设计语言之一;
5)经典的C语言目前仅支持过程式程序;
26、C程序中全局变量的存储空间在()分配
解析: 静态区
一个由c/c++编译程序占用内存分为以下几个部分:
1.栈区(stack):由编译器自动分配释放,存放函数参数值,局部变量值等。其操作方式类似于数据结构中栈。
2.堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS操作系统回收。注意它与数据结构中堆是两回事,链表数据空间必须采用堆存储分配策。
3.全局区(静态区)(static):全局变量和静态变量存储是放在这一块。初始化全局变量和静态变量在一块区域,未初始化全局变量和未初始化静态变量在相邻另一块区域,程序结束后由系统释放。
4.文字常量区:常量字符串就是放在这里,程序结束后由系统释放。
5.程序代码区:存放函数体二进制代码。
27、编译过程
- 高级语言程序编译的过程可以分成干个阶段,其中把单词符号分解成句子属于( )阶段的工作。
- 编译方式翻译C/C++源程序的过程中,类型检查在( )阶段。
- 编译过程中进行的语法分析主要分析( )
A源程序中标识符是否合法 B程序语句的含义是否合法 C程序语句的结构是否合法 D表达式的类型是否合法
解析:(1)语法分析(2)语义分析(3)C
编译过程通常分为:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。中间代码生成和代码优化非必需。
- 词法分析:对字符串扫描和分解,识别出单词符号。单词符号是程序设计语言的基本语法单位,如关键字(或称保留字)、标识符、常数、运算符和分隔符(如标点符号、左右括号)等。词法分析程序输出的单词常以二元组的方式输出,即单词种别和单词自身的值。在词法分析阶段工作所依据的是语言的词法规则,描述词法规则的有效工具是正规式和有限自动机。字符流转化为记号流。
- 语法分析:根据语言的语法规则,将单词符号序列分解成各类语法单位,如“表达式”、“语句”和“程序”等。语法分析程序确定整个输入串的语句结构合法性。如果源程序中没有语法错误,语法分析后就正确地构造出其语法树;否则指出语法错误,并给出相应的诊断信息。
语法分析方法分两类:自上而下(自顶向下)分析法和自下而上(自底向上)分析法。
- 递归下降分析法就是自上向下分析法。
- 移进-归约分析法是编译程序(或解释程序)对高级语言源程序进行语法分析的一种方法,属于 自底向上(或自下而上)的语法分析方法。
3. 语义分析:分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。语义分析的一个主要工作是进行类型分析和检查。静态语义分析的方法是语法制导翻译。
4. 中间代码生成:根据语义分析的输出生成中间代码。中间代码是一种简单且含义明确的几号系统,可以有若干种形式,他们的共同特征是与具体的机器无关。中间代码除四元式外,还有三元式、间接三元式、逆波兰式(后缀式)、树形表示等。分配寄存器的工作在该阶段完成。
后缀表达式使用规则:从左到右遍历表达式每个数字和符号,遇到的是数字就进栈,遇到的是符号,就将处于栈顶的两个数字出栈,进行运算。将运算结果进栈,直到获得最终结果。
- 一种简便的方法:
表达式a+b*(c+d/e) 按计算顺序加上括号(a+(b*(c+(d/e))))
然后将运算符都放到各自的括号外面
(a(b(c(de)/)+)*)+ 去掉括号abcde/+*+
5. 代码优化:对前面产生的中间代码进行加工,以期在最后阶段产生更为高效的代码。所做的优化一般建立在对程序的控制流和数据流分析的基础上,与具体机器无关。优化所依据的原则是程序的等价变换规则,其方法有公共子表达式的提取、循环优化、删除无用代码等。
6. 目标代码生成:把中间代码(或经优化处理后)变换成特定机器上的低级语言代码。这个阶段的工作与具体的机器密切相关。
28、正规式和上下文无关文法
- 在仅由字符a、b构成的所有字符串中,以b结尾的字符串集合可用正规式表示为(D)
A. (b|ab)*b B. (ab*)*b C. a*b*b D. (a|b)*b
- 上下文无关文法1
- 上下文无关文法2
E→E+T|T
T→F*T|F
F→id与使用该文法描述的表达式a+b*c*d相符的语法树为( )
解析:(1)D(2)D(3)A
- 所有选线都是以b为结尾的,只有D可以包含以a、b字符串组成,并以b结尾的所有字符串。A要求每个a后面至少1个b,BC要求以a开头,无法表示由ab构成的字符串。
2. 根据非终结符与生成式之间的逻辑关系,可以判定a+b*c*d这个表达式的有限规则为a+(b*(c*d))。
29、线性表—链式存储
- 关于线性表采用链式存储时删除结点运算的描述,正确的()
A.带头结点的线性链表删除结点时,不需要更改头指针。
B.带头结点的线性链表删除第一个结点时,需要更改头指针。
C.不带头结点的线性链表删除结点时,需要更改头指针。
D.不带头结点的线性链表删除第一个结点时,不需要更改头指针。
- 栈的特点是先进后出,若用单链表作为栈的存储结构,并用头指针作为栈顶指针,则入栈和出栈操作都不需要遍历链表,原因是只需对头指针进行操作即可。
- 对于线性表,相对于顺序存储,采用链表存储的缺点是()。
A.数据元素之间的关系需要占用存储空间,导致存储密度不高
B.表中结点必须占用地址连续的存储单元,存储密度不高
C.插入新元素时需要遍历整个链表,运算的时间效率不高
D.删除元素时需要遍历整个链表,运算的时间效率不高
解析:(1)A(3)A
- 概念
首元结点:指链表中存储第一个数据元素a1的结点。
头结点:是为了操作方便在首元结点前复设的结点。
头指针:指向链表中第一个结点(或为头结点或为首元结点)的指针。
2、头结点是不能被删除的
带头结点的线性链表的第一个结点就是头结点;
不带头结点的线性链表只有在删除第一个节点,即首元结点时,需要更改头指针。如果删除其他结点,则不需要更改头指针。
3、链式存储和顺序存储
顺序存储:顺序存储、随机读取
链式存储:随机存储、顺序读取
栈和队列都是限制存储点的线性结构。
30、字符串匹配KMP算法
- 字符串求next函数值。
- 字符串“abaac”求next函数值。
- 字符串“aaabaaa”求next函数值。
解析:
- 字符串“abcc”求next函数值。
2. 字符串“aaabaaa”求next函数值。
31、队列—循环队列和优先队列
- 循环队列元素位置计算
- 优先队列通经常使用以下___数据结构来实现。 队列中插入一个元素的时间复杂度为?
A栈 B堆 C队列 D二叉查找树
A.O(n) B.O(1) C.O(lgn) D.O(n2)
解析:(1)B(2)B C
- 问的是队尾元素的指针,不是队尾指针,因此按照之前理论应该是(Q.,front+Q.size-1)%M;
- 加一个M再对M取余没有任何影响。
- 优先队列是一种常用的数据结构,通常用堆实现。
32、广义表的长度和深度
在广义表LS=(a,b,(a,b,c),(a,(a,b),c))中,第一层的元素有(a)、(b)、((a,b,c))和((a,(a,b),c)),因此 长度为4。例如,对于广义表LS=(a,(b,c,d)),其深度为2,因为括号嵌套了两层。
广义表的长度是第一层元素的个数,而深度是表中括号的最大层数。
33、树的叶子结点个数计算
- 一棵度为4的树,有20个度为4的结点,10个度为3的结点,1个度为2的结点
- 10个度为1的结点,则树的叶子结点个数?
- 若不知度为1的结点个数,则树的叶子结点个数?
- 一个具有967个结点的完全二叉树,其叶子结点个数为?
解析:
- (1)题
- 在树中,除根节点外,其余所有结点都是由其双亲结点引出的。
- 一个度为n的结点表示由该节点引出n个孩子结点。
- 树的结点个数为20*4+10*3+1*2+10*1+1=123
- 叶子结点数为123-20-10-1-10=82·
- (2)题
- 除根结点外,其他每个结点都只有一个边进入,所以总边数为(总结点数目-1)
- 每个度为a结点发出a条边,所以总边数为(x*度x节点个数之和)
- 设度0有a个,度1有b个,度2有c个,度3有d个,度4有e个
- 总结点数为n,则n=a+b+c+d+e
- 总边数为a*0+b*1+c*2+d*3+e*4=n-1= a+b+c+d+e-1,
- 简化为a=c+2d+3e+1=82
- 完全二叉树
- 当节点数n为奇数时,说明该树结构中没有度为1的节点。
- 当节点数n为偶数时,说明有一个度为1的节点。
- 对于一个非空二叉树: n0=n2+1
- 一棵树含有n个结点,则最后一个结点的编号必为n,它的父结点则为n/2,且为上一层最右边的一个结点。所以叶结点的个数就为:n-n/2。
- 叶子节点数967-967/2=484;
- 常规做法
- 设度为2结点n2,度为1结点n1,设度为0结点n0,那么n0+n1+n2=967。
- 完全二叉树n0=n2+1
2n0-1=967,所以n0=484
34、哈夫曼树—特点总结
1、没有度为1的结点
2、n个叶子结点的哈夫曼树共有2n-1个结点(生成n-1个非叶子结点)
3、哈夫曼树的任意非叶子结点的左右子树交换后仍是哈夫曼树
4、对同一组权值 {W1,W2,......Wn} 、存在不同结构的两颗哈夫曼树、但他们的带权路径长度(WPL)一定是一样的;
5、哈夫曼编码属于前缀编码,任一字符的编码都不是另一字符编码的前缀。
6、带权路径长度=所有(权值*路径)之和。例如:由权值为 29、12、15、6、23 的五个叶子结点构造的哈夫曼树为( A),其带权路径长度为(188 )。
带权路径长度(12+6)*3+15*2+23*2+29*2=188。
35、哈夫曼树—构造与编码
某消息只包含7个字符怡{a,b,c,d,e,f,g},各字符出现的次数为{5,24,8,17,34,4,13}。
- 若采用定长编码,则该文件中字符的码长应为 (1) ;
- 利用哈夫曼树(最优二叉树)为该消息中的字符构造符合前缀编码要求的不等长编码。
- 各字符的编码长度分别为 (2) ;
A.a:4,b:2,c:3,d:3,e:2,f:4,g:3 B.a:6,b:2,c:5,d:3,e:1,f:6,g:4
C.a:3,b:3,c:3,d:3,e:3,f:2,g:3 D.a:2,b:6,c:3,d:5,e:6,f:1,g:4
2. 字符序列“face”的编码应为 (3) ;
解析:
- (1)3
字符在计算机中是用二进制表示的,每个字符用不同的二进制编码来表示。码的长度影响存储空间和传输效率。若是定长编码方法,用2位码长,只能表示4个字符。题中一共有7个字符,因此采用3位码长的编码可以表示这些字符。
- (2) A (3)0000000100111
36、二叉树在线索化后,仍不能有效解决的问题是
A先序线索二叉树中求先序后继 B中序线索二叉树中求中序后继
C中序线索二叉树中求中序前驱 D后序线索二叉树中求后序后继
解析:D
先序遍历(中左右)、中序遍历(左中右)的最后访问的节点都是左或右叶节点,叶节点是没有子树的,所以两个指针域空出来了,可以存放线索指针。但是后续遍历(左右中),最后访问的是子树的根节点,而子树根节点的两个指针域都指向子树了,所以不能空出来存放线索信息。
37、平衡二叉树构造——由元素序列(27,16,75,38,51)构造平衡二叉树,则首次出现的最小不平衡子树的根(即离插入结点最近且平衡因子的绝对值为2的结点)为(D)。
A.27 B.38 C.51 D.75
解析:平衡二叉树构造过程如下:
距离插入节点最近的,并且 平衡因子BF(值:左子树高度 - 右子树高度的值) 的绝对值大于 1 的节点为根节点的子树。
38、连通无向图和非连通无向图
- 如果G是一个有36条边的非连通无向图,那么该图顶点个数最少为多少?
A.7 B.8 C.9 D.10 - 某图G的邻接表中共有奇数个表示边的表结点,则图G()
A. 有奇数个顶点 B. 有偶数个顶点 C. 是无向图 D. 是有向图
- 己知某带权图G的邻接表如下所示,其中表结点的结构为:则图G是
A. 无向图 B. 完全图 C. 有向图 D. 强连通图
- 若无向图G有n个顶点e条边,则G采用邻接矩阵存储时,矩阵的大小为 ()
- 设有向图G 具有n个顶点、e条弧,采用邻接表存储,则完成广度优先遍历的时间复杂度为()
A. O(n+e) B. O(n2) C. O(e2) D. O(n*e)
- 以下关于无向连通图G的叙述中,不正确的是()
A、G中任意两个顶点之间均有边存在 B、G中任意两个顶点之间存在路径
C、从G中任意顶点出发可遍历所有顶点 D、G的邻接矩阵是对称距阵
解析:(1)D(2)D(3)C(4)B(5)A(6)A
- 全连通图的话,n(n-1)/2=36,n=9,题中此图为非连通图,则顶点个数至少为9+1=10
- 在邻接表中,奇数个表示边的表结点说明在图中有奇数条边,无法说明顶点个数是奇数还是偶数,A、B选项都是错误的。若是无向图则对于有n个顶点,e条边的无向图,需要使用n个表头结点,2e个表结点,本题有奇数个,所以可以判断是有向图。
- 画图:v1->v3,v1->v2,v2->v5,v2->v6,v3->v6,v3->v2,v5->v4,v6->v4,v6->v5.
完全图:
1)无向图:边数e、顶点n的关系e=n(n-1)/2;
2)有向图:边数e、顶点n的关系e=n(n-1);
强连通图:任意两个顶点之间存在路径。
- 邻接矩阵记录图,i,j都是表示所有的顶点,值为是否有边,所以矩阵大小只与顶点数有关,所以矩阵大小为n^2。
- O(n+e)
39、拓扑序列
- 拓扑排序是指有向图中的所有顶点排成一个线性序列的过程,若在有向图中从顶点vi到vj有一条路径,则在该线性序列中,顶点vi必然在顶点vj之前。因此,若不能得到全部顶点的拓扑排序序列,则说明该有向图一定()。
A.包含回路 B.是强连通图 C.是完全图 D.是有向树
- 对有向图G进行拓扑排序得到的拓扑序列中,顶点Vi在顶点Vj之前,则说明G中( )
A、一定存在有向弧 < Vi,Vj > B、一定不存在有向弧< Vj,Vi >
C、必定存在从Vi到Vj的路 D、必定存在从Vj到Vi的路径
解析:(1)A(2)B
- 拓扑序列。注意:
①若将图中顶点按拓扑次序排成一行,则图中所有的有向边均是从左指向右的。
②若图中存在有向环,则不可能使顶点满足拓扑次序。
③一个DAG的拓扑序列通常表示某种方案切实可行。
- 拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:
1)每个顶点出现且只出现一次。
2)若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。
有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。
写出它的拓扑排序呢?这里说一种比较常用的方法:
- 从 DAG 图中选择一个 没有前驱(即入度为0)的顶点并输出。
- 从图中删除该顶点和所有以它为起点的有向边。
重复 1 和 2 直到当前的 DAG 图为空或当前图中不存在无前驱的顶点为止。后一种情况说明有向图中必然存在环。
得到拓扑排序后的结果是 { 1, 2, 4, 3, 5 }。通常,一个有向无环图可以有一个或多个拓扑排序序列。
- 对于拓扑序列,需要按照有向弧的指向,明确其先后顺序,例如:存在一条Vi指向Vj的有向弧,那么在拓扑序列中Vi需要写出Vj前面,其次对于属于同一层次或者毫无关联的两个结点可以不用在意先后顺序。
A、一定存在有向弧<Vi, Vj>,说法错误,不一定存在,Vi和Vj可以是并列的,并不一定要存在Vi到Vj的有向弧。
B、一定不存在有向弧<Vj, Vi>,说法正确,如果存在有向弧<Vj, Vi>,那么Vj是需要在顶点Vi之前的,则与题干相悖,所以必定不存在。
C、必定存在从Vi到Vj的路径,说法错误,不一定存在,Vi和Vj可以是两个毫无关联没有指向的关系,不会存在相关的路径。
D、必定存在从Vj到Vi的路径,错误,如果存在Vj到Vi的路径,Vj就会出现在Vi前面。
40、散列表(哈希)等概率平均查找长度
- 关键字序列为:{38,25,74,63,52,48},哈希函数为H(k)=k%7,哈希表长度为7,用线性探测和链地址法处理冲突,分别计算等概率情况下查找成功的平均查找长度。
注:没给哈希表长度,给出装填因子时,可求哈希表长度,可根据此公式装填因子=元素个数/表长推:表长=元素个数/装填因子。如:现在元素个数为7个,若给出装填因子为 0.7的话,散列表的大小就为7/0.7=10个
- 用线性探查法解决冲突构造哈希表,且哈希函数为H(key)=key%m,若在该哈希表中查找某关键字e是成功的且与多个关键字进行了比较,则( D )。
A这些关键字形成一个有序序列 B这些关键字都不是e的同义词
C这些关键字都是e的同义词 D这些关键字的第一个可以不是e的同义词
解析:
1.线性探测法:当冲突发生的时候,顺序查看表中下一个单元,直到找出一个空闲单元。
构造的哈希表如上等概率下查找成功的平均查找长度为:
ASL=(1+3+1+1+2+4)/6=2 这里的数据一共是6个,所以除以6,不要写成是散列表的长度
2、链地址法
由上构造的哈希表如上,等概率下查找成功的平均查找长度为:
ASL=(1*4+2*2)/6=1.3//从构造的哈希表可以看出,63,38,25,48,探查一次所以是1*4,52,74探查两次,所以是2*2.
3、关键字e的同义词,指的是其他关键字利用哈希函数进行求值时,得到的函数结果与e是一致的,此时这些关键字就是e的同义词。在哈希表查找关键字e时成功且经过多次比较,可以知道经过计算e的位置,此时该位置存放的并不是关键字e,并且这些关键字的顺序与原序列顺序相关,与大小无关。
线性探测法解决哈希冲突,此时该位置对同义词开放,对非同义词也是开放的,也就是说,其他非同义关键字在使用线性探测法解决冲突时,也有可能直接占据该位置。所以对该位置进行比较的关键字,可能是e的同义词,也可能不是e的同义词。