2015 408
1
已知程序如下:
int S(int n)
{
return (n<=0)?0:s(n-1)+n;
}
void main()
{
cout<< S(1);
}
return (n<=0)?0:s(n-1)+n;
判断n是否小于0,如果小于等于0,那么返回0;
如果n大于0,那么返回s(n-1)+n
当n等于1时,返回s(0)+1
程序运行时用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是。
首先调用main函数,其次调用S函数,输出S(1),然后再输出S(0);
2
哈夫曼树
带权路径长度:
从树的根到任意结点的路径长度(经过的边数)与该节点权值的乘积。
带权路径长度(WPL)最小的树称为哈夫曼树。
哈夫曼树具有以下特点:
1 每个初始节点最终都成为叶节点,且权值越小的结点到根节点的路径长度越大。
2 构造过程中共新建了n-1个结点,因此哈夫曼树的结点总数为2n-1.
3每次构造都选择2棵树作为新结点的孩子,因此哈夫曼树中不存在度为1的结点。
在数据通信中,若对每个字符用相等长度的二进制位表示,称这种编码方式为固定长度编码。若允许对不同字符用不等长的二进制位表示,则这种编码方式称为可变长度编码。可变长度编码比固定长度编码要好得多,其特点是对频率高的字符赋以短编码,而对频率较低的字符则赋以较长一些的编码,从而可以使字符的平均编码长度减短,起到压缩数据的作用。
前缀编码:若没有一个编码是另一个编码的前缀,则这样的编码成为前缀编码。
3
设有向图G=(V,E),顶点集V={v0,v1,v2,v3},边集={<v0,v1>,<v0,v2>,<v0,v3>,<v1,v3>}。若从顶点V0开始对图进行深度优先遍历

v0,v2,v1,v3
v0,v2,v3,v1
v0,v1,v3,v2
v0,v3,v1,v2
v0,v3,v2,v1
则可能得到的不同遍历序列个数是5个。
4
希尔排序仅适用于线性表为顺序存储的情况,不适用于链表,可能是因为链表没有随机存取的特性,太过耗费时间。
5
硬件描述语言(hardware drscription language)是电子系统硬件行为描述,结构描述,数据流描述的语言,。利用这种语言数字电路系统的设计可以从顶层到底层,从抽象到具体,逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数据系统,然后利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动布局布线工具,把网表转换为具体要实现的具体电路布线结构。
硬件能直接执行的只能是机器语言。
6
8位二进制补码表示的范围
1111 1111补求原,符号位不变,剩余各位变反+1
1000 0000 +1 =1000 0001 表示-1
1000 0000 补求原,符号位不变,剩余各位变反+11
111 1111 +1 = 1 0000 0000 表示-128
最大为127?
0000 0001补求原,符号位不变,剩余各位变反+1
0111 1110 +1 = 0111 1111,所以最大是127
最小为-128?
1000 0001补求原,符号位不变,剩余各位变反+1
1111 1110 +1 1111 1111,表示-127
二进制补码表示的最小整数为-128,如果八位中有3位1,
最小,那就要优先选择负数,符号位就是1
1110 0000,补求原,1001 1111 +1=1010 0000 =-32
1000 0011,补求原 1111 1100 +1 = 1111 1101=-125
7
浮点数加减运算
1
对阶,对阶是指小阶向大阶对齐,过程中尾数会右移,舍弃掉有效位会产生误差,影响精度。
所以在对阶的过程中只会舍弃掉尾数,不会发生阶码的溢出
2
规格化
右规:在尾数求和结果溢出的时候,如尾数为10.XXX、或者01.XXX,右规就是阶码+1
左规:当尾数出现00.0XXX或11.1XXX时,需要左规,阶码减小。
如果尾数的最高位与符号位相同,那就坏了,需要进行规格化处理。
3
溢出判断
与定点数加减法一样,浮点数加减运算最后一步也需判断溢出。
在浮点数规格化中指出,当尾数之和(差)出现01.XXX或10.XXX时,并不表示溢出,只能将此数右规后,再根据阶码来判断浮点数运算结果是否溢出。
浮点数的溢出与否是由阶码的符号来决定的。以双符号补码为例,当阶码符号位出现“01”时,即阶码大于最大阶码时,表示上溢,进入中断处理。
当阶码的符号位出现“10”时,即阶码小于最小阶码时,表示下溢,按机器零处理。实际上原理还是阶码符号位不同表示溢出,且真实符号位和高位符号位一致。
8
只读存储器ROM
1掩模式只读存储器
MROM的内容由半导体制造商按用户提出的要求在芯片的生产过程中直接写入,写入以后任何人都无法改变其内容。优点是可靠性高,集成度高,价格便宜;缺点是灵活性差。
2一次可编程只读存储器
PROM是可以实现一次性编程的只读存储器。允许用户利用专门的设备(编程器)写入自己的程序,一旦写入,内容就无法改变。
3可擦除可编程只读存储器
EPROM不仅可以由用户利用编程器写入信息,而且可以对其内容进行多次改写。需要修改EPROM的内容时,先将其全部内容擦除,然后编程。EPROM虽然既可读又可写,但它不能取代RAM,因为EPROM的编程次数有限,且写入时间过长。
4闪速存储器(Flash Memory)
Flash Memory 是在EPROM和E^2PROM的基础上发展起来的,其主要特点是既可在不加电的情况下长期保存信息,又能在线进行快速擦除重写。闪速存储器既有EPROM的价格便宜,集成度高的优点,又有
E^2PROM电可擦除重写的特点,且擦除重写的速度快。
9
四体交叉编制存储器
可能发生访存冲突的规则是:给定的访存地址在相邻的四次访问中出现在同一个存储模块内。
10
内中断是指来自CPU和内存内部产生的中断,包括程序运算引起的各种错误,如地址非法,校验错,页面失效,非法指令,用户程序执行特权指令自行中断(INT)和除数为0等,以上中断都在指令的执行过程中产生的。
内中断是不能被屏蔽的,所以内部异常的响应发生在指令执行过程中。
内中断处理后一般是返回到发生异常的指令继续执行,但也有特殊情况,比如除数为0,这就没法返回原指令处理。
11
死锁:
1只有对不可剥夺资源的竞争才可能产生死锁,而对可剥夺资源的竞争是不会引起死锁的。
2进程推进顺序非法也会导致死锁。如两个进程互相需要彼此的资源。
3互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他资源请求该资源,则请求进程只能等待。
不剥夺条件:进程所获得的资源在未使用完前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放。
请求并保持条件:通俗来说,就是吃着碗里的,看着锅里的。
进程已经保持了一个资源,但又提出了新的资源请求,而该资源已经被其他进程占有,此时请求进程被阻塞,但对自己获得的资源保持不放。
循环等待条件:存在一种进程资源的循环等待链。
资源分配图含圈但系统不一定死锁,其原因是同类资源数大于1。
为了解决死锁,我们有三个策略
死锁预防:顾名思义,就是提前采取一些措施来预防死锁。,比如一次性请求所有资源,这是破坏请求并保持条件。允许剥夺其他进程的资源,破坏不剥夺条件,资源按照顺序分配,破坏循环等待条件。
因为死锁预防效率低,进程初始化时间太长,剥夺次数过多,不便灵活申请新资源等缺点,所以死锁避免算法应运而出。
死锁避免算法就是寻找可能的安全允许序列,不破坏四个基本条件,比如银行家算法。
死锁检测就比较简单了,就是啥也不干,过一段时间检查一下就完了。
12
在文件的索引节点中存放直接索引10个,一级和二级索引指针各1个。磁盘块大小为1KB,每个索引指针占4字节。若某文件的索引节点已在内存中,则把文件偏移量(按字节编址)为1234和307400处所在的磁盘读入内存,需访问的磁盘块个数分别是。
10KB,266KB,266KB+64MB
偏移量为307400时,因10KB+256KB<307400B<64MB,可知,该偏移量的内容在二级索引指针所指向的某个磁盘块中,索引节点已在内存中,故先访盘两次得到文件所在的磁盘块地址,再访盘一次即可读出内容,故共需要3次访盘。
13
文件系统用位图法表示磁盘空间的分配情况,位图位于磁盘的32-127号块中,每个盘块占1024字节,盘块和块内字节均从0开始编号。假设要释放的盘块号为409612,则位图中要修改的位所在的盘块好和块内字节序号分别是。
这里的409612指的应该是409612bit,就是51201B还余4个bit
一个盘块占1024B,那就是50个盘块还余1B
32+50=82,所以盘块号为82,块内字节序号应该是1
14
数据链路层的流量控制和可靠传输协议。
共有四个协议,分别是 停止-等待协议,滑动窗口协议,后退N帧协议和选择重传协议SR。
从某种意义上来说,停止-等待协议,后退N帧协议和选择重传协议都是滑动窗口协议的变种。
滑动窗口的特性:只有接收窗口向前滑动(同时接收方发送了确认帧时),发送窗口才有可能(只有发送方收到确认帧后才一定)向前滑动。
停止等待协议:发送窗口大小=1,接收窗口大小=1;
后退N帧协议:发送窗口>1,接收窗口=1;
选择重传协议:发送窗口>1,接收窗口>1。
接收窗口为1时,可保证帧的有序接收。
数据链路层的滑动窗口协议中,窗口的大小在传输中是固定的。
主机甲通过128kbps卫星链路,采用滑动窗口协议向主机乙发送数据,链路单向传播延时为250ms,帧长为1000字节。不考虑确认帧的开销,为使链路利用率不小于80%,帧序号的比特数至少是
我发现一件事,凡是出现单向传播延时,都是要在发送完帧前接收到确认帧,本题也是如此。
128kbps意为每秒发送128kb,也就是16B/s,那么发送一个帧就需要
1/16=0.0625s,就是62.5ms。
链路利用率>=80%
设发送n个帧
链路利用率=(n发送时延)/(RTT+发送时延)
为什么这里只有一个发送时延而不是n个发送时延呢?
这是因为发送一个数据帧需要收到确认帧就需要一个RTT,如果是
发送n个数据帧,就需要n个RTT
(62.5n)/(62.5+500)=80%
自动重传请求(Auto Repeat request,ARQ )通过接收方请求发送方重传出错的数据帧来恢复出错的帧。
由于停止-等待协议需要不停的等待确认帧,浪费的时间过多,所以设计了后退N帧协议,所谓的后退n帧指的是,发送方在没有接收到确认的时候就连续发送数据,接收方则可以累计确认,如接收方发送的确认帧为ackn,表明接收方已正确收到第n号帧以及以前的帧,同时它还有一个作用,它表明下一次期望收到第n+1号帧。
后退N帧协议相较于停止等待协议提升了信道的利用率,但一个帧出错误就要丢弃那么多其他的帧,造成了很大的浪费,所以人们发明了选择重传协议。
选择重传协议(SR)
15
IPV4地址和NAT
IP地址包括网络号和主机号
分为3类IP地址。分别是A类,1-126;B类128-191;C类192-223
其中有些特殊的IP地址要记住
主机号全为0表示本网络本身,如202.98.174.0
主机号全为1表示本网络的广播地址,又称直接广播地址,如202.98.174.255
127.0.0.0保留为环回自检(Loopback Test)地址,此地址表示任意主机本身,目的地址为环回地址的IP数据报永远不会出现在任何网络上。
32位全为0,即0.0.0.0表示本网络上的本主机
32位全为1,即255.255.255.255表示整个TCP/IP网络的广播地址,又称受限广播地址
实际使用时,由于路由器对广播域的隔离,255.255.255.255等效为本网络的广播地址。
A类网络地址的最大网络数是2^7-2个
这里的网络数是指有多少个网络号。A类地址首位为0是固定的,也就是只有7位网络号是可变的,7位全为0,即0000 0000是保留地址,意为本网络,7位全为1,即0111 1111是环回自检地址,这两个都不能使用。
B类网络地址的可用网络数是2^14-1个
B类网络地址前两位为10,所以有14位网络号是可变的
但是为什么B类网络地址要减去一个呢?这是因为128.0这个网络号是不可指派的。128.0其实就是 1000 0000 0000 0000,也就是说除了前两位以外,其它网络号全为0是不允许的。那为很么全为1就被允许了呢?
1011 1111 1111 1111为191.255,我也不知道,但它确实为B类网络地址最后一个网络号。
C类网络地址的前三位为110,所以有21位网络号是可变的
和B类网络地址相同的是,网络号全为0是不被允许的
即1100 0000.0000 0000.0000 0000也就是192.0.0这个网络号不可指派
同样的1101 1111.1111 1111.1111 1111 也就是223.255.255是C类网络地址的最后一个网络号。
一个IP网络上的路由器必然至少应具有两个IP地址(路由器每个端口必须至少分配一个IP地址)
NAT大大节省了IP地址的消耗,同时,它隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。
私有IP地址:
1个A类网段:10.0.0.0-10.255.255.255
16个B类网段,即172.16.0.0-172.31.255.255
256个C类网段,即192.168.0.0-192.168.255.255
在因特网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发。
普通路由器在转发IP数据报时,不改变其源IP地址和目的IP地址,而NAT路由器在转发IP数据报时,一定要更换其IP地址(转换源IP地址或目的IP地址),普通路由器仅工作在网络层,而NAT路由器转发数据报时需要查看和转换传输层的端口号。
路由聚合:将网络前缀都相同的连续IP地址组成“CIDR地址块”,一个CIDR地址块可以表示很多地址,这种地址的聚合称为路由聚合,或称为构成超网。
网络1:206.1.0.0/17
网络2:206.1.128.0/17
他们俩可以聚合成一条206.1.0.0/16的路由。
路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高网络性能。
最长前缀匹配(最佳匹配):使用CIDR时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。此时,应当从匹配结果中选择具有最长网络前缀的路由,因为网络前缀越长,其地址块就越小,从而路由也就越具体。
16
在计算机网络这本书中,有两个发送窗口,分别是数据链路层的发送窗口,与停止-等待协议,ARQ协议,SR协议有关。另一个是传输层的发送窗口,与TCP有关,为什么不和UDP有关呢,因为UDP是无连接,不可靠的数据传输,不需要拥塞控制。
传输层与数据链路层的流量控制的区别是传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制。另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的则可以动态变化。
TCP提供流量控制服务来消除发送方(发送速率太快)使接收方缓冲区溢出的可能性,因此可以说流量控制是一个速度匹配服务(匹配发送方的发送速率和接收方的接收速率)
拥塞控制与流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机,所有的路由器,以及与降低网络传输性能的所有因素。相反,流量控制往往是指点对点的通信量的控制,是个端到端的问题,它所要做的是抑制发送端发送数据的速率,以便使接收端来得及接收。当然,拥塞控制和流量控制也有相似的地方,即它们都通过控制发送方发送数据的速率来达到控制效果。
接收窗口rwnd:接收方根据目前接收缓存大小所许诺的最新窗口值,反应接收方的容量。由接收方根据其放在TCP报文的首部的窗口字段通知发送方。
拥塞窗口cwnd,发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络的当前容量。只要网络出现拥塞,拥塞窗口就减少一些,以减少注入网络的分组数。
很显然,发送窗口不能大于接收窗口,否则接收方会丢失报文。
其次,发送窗口也不能大于拥塞窗口,否则会导致报文根本发送不过去。
本文详细解析了408考试中的多项选择题,涵盖内容包括递归算法、哈夫曼树、数据通信编码、硬件描述语言、二进制补码、浮点数运算、存储器类型、并发控制、文件系统和网络IP地址管理。通过这些题目,深入理解计算机系统的基本原理和技术细节。
1476

被折叠的 条评论
为什么被折叠?



