408真题---疑难杂症
大部分的疑难杂症我都直接记在了真题试卷上,这篇博客主要是记录不好记在真题试卷上的疑难杂症
一、编制单位的确定
问题来源: 2010年真题-T43
按1字节编址: 说明一个编址单元是一字节,我们可以这样编址:
0x00400000(地址) E8(机器码/数据)
0x00400001 C5
0x00400002 03
0x00400003 00
0x00400004 00
0x00400005 E9
0x00400006 74
0x00400007 FE
0x00400008 FF
0x00400009 FF
0x00400000~0x00400009 有十个编址单元,包含了10B数据
按2字节编址:说明一个编址单元是二字节,我们可以这样编址:
0x00400000(地址) E8 C5(机器码/数据)
0x00400001 03 00
0x00400002 00 E9
0x00400003 74 FE
0x00400004 FF FF
0x00400003 74 FE
0x00400004 FF FF
则从地址 0x00400000~0x00400004 就有5个编址单元,包含了10个字节的数据,那要是从0x00400000~0x00400009 有二十字节的数据
如果按照2字节编址,并用2字节定长指令,若PC+1,那么就是在加1,因为编址单位的1代表数据的2
如果按照1字节编址,并用2字节定长指令,那么PC+1,实际上想相当于PC+2
同样的,如果主存地址空间为2MB,采用2字节编址,那么MAR的大小为1MB(20位)即可
二、队列方向的确定
题源刨析
2011年真题选择题-T3 开门大吉
知识点
我总是惯性的认为,入队是让front ++,rear保持不变
实际上应该是这样
这样可能不太直观,但把它倒过来就比较直观了,或者水平来看他
入队: rear++
出队: front++
三、DMA方式与程序中断方式的响应发生时间为何不同
https://zhidao.baidu.com/question/575333827.html
机器周期又叫存取周期。计算机在指令执行完毕是发程序查询信号这时,发生程序中断响应,CPU中断现行程序。在DMA请求方式中,CPU只是让出总线使用权和不能访存,因此可以在不访存即存取周期结束后响应DMA,让出总线使用权,同时不在访存,而此时CPU还可以进行其他内部操作。
四、中断屏蔽字
对中断屏蔽字的概念,不知何时出现了差错...
经典的错误:
正确的做法:
中断屏蔽字概念:现代计算机一般使用中断屏蔽技术,每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。
我的错误认知:
算了,不写了,怕写下来再被我记得更深
屏蔽字真正的含义:
屏蔽字是某中断源根据自己的屏蔽字去屏蔽或同意其他的中断源
比如A中断源,当有其他中断源要进行中断时(比如C),A查看自己的中断字,发现对C的中断字上是1,也就是屏蔽C,而如果是D中断源要进行中断,A对D是0,也就是允许D进行中断
屏蔽源对自己的屏蔽字都是1!
五、编译、链接、装入
这方面一直掌握不好,今天做整体看到答案解析不错,遂记录一下
题源刨析
知识点
C语言经过预处理(cpp)-编译(eel)-汇编(as) -链接Cld)产生可执行文件
1、预处理
主要处理#开始的预编译指令,如宏定义(#define)、文件包含(#include)、条件编译(#ifdef)等
2、编译
C语言采用源文件独立编译的方法,如程序main.e,filel.e, file2.e, filel.h, file2.h, 在链接的前 一步生成了main.o,filel.o, file2.o,
这些目标模块采用的逻辑地址都从 0开始,但只是相对于该模块的逻辑地址
注意是相对于模块的逻辑地址
3、链接
链接器将这三个 文件,libc和其他的库文件链接成一个可执行 文件。 链接阶段主要完成了重定位, 形成整个程序的完整逻**辑地址空间。
注意是完整逻**辑地址空间。
4、装载
装载器把可执行程序装入内存并运行的过程
总之,在这题中,逻辑地址指的就是段内的偏移量而不是链接后生成的整个程序全局的逻辑地址空间, 所以逻辑地址是编译时产生的。
六、一个关键路径的很好的题,能暴露出你对关键路径知识点的掌握有多么不堪xD
注意在求各个事件的最早发生事件时,对于某点,如果有多条路径,要选则权最大的那一个
同时,在求各个事件的最晚发生时间是,对于某点,如果有多条路径,要选择权最小的哪一条
七、高地址、低地址问题
题源刨析
一般来说,我们对于这些结构的定义从左到右为高地址到低地址
比如:
高地址自然就是靠近左边的部分
这种指令地址方向的涉及是为了满足小端存储的需求
比如,有一条陷阱门(上图)指令为 0x12345678,那么它在内存中的存储就为 78 56 34 12 , 78 56 对应低地址,34 12 对应高地址
八、NAT内网地址范围
NAT协议保留了3段IP地址供内部使用 (T32)
NAT协议保留了3段P地址供内部使用,这3段地址如下:
A类:1个A类网段,即10.0.0.0 ~ 10.255.255.255,主机数16777216。
B类:16个B类网段,即172.16.0.0 ~ 172.31.255.255,主机数1048576。
C类:256个C类网段,即192.168.0.0 ~ 192.168.255.255,主机数65536。
真的是,今天做题又没想到NAT网关转换
九、总线补充 --- 通信总线
通信总线是在计算机系统之间或计算机系统与其他系统(如远程通信、测试设备)之间传输信息的总线,属于外部总线
回顾一下系统总线:
计算机系统内各功能部件(CPU、主存、I/O接⼝)之间相互连接的总线
按系统总线传输内容的不同⼜可分为3类
1、数据总线
传输各功能部件之间的数据信息,是双向传输线,其位数与机器字⻓、存储字⻓有关。
2、地址总线
指出主存和I/O设备接⼝电路的地址
3、控制总线
传输控制信息,包括控制命令和反馈信号
除了系统总线,还有片内总线、I/O总线
十、经典问题---K/k表示的是 1000 还是 1024
我一直以为小k代表1000,大K代表1024;
今天遇到的题目 16B * 300k/s = 4.8MB/s ???
在谷歌的时候,看到一个帖子是这样写的:
https://blog.csdn.net/weixin_43306331/article/details/96142563
即在传输领域,1k/1K代表1000
在存储领域,1k/1K代表 1024
目前这个答案能让我勉强接受,希望不要让我碰到反例打脸
十一、海明码知识点
0、确定海明码位数公式
n为有效信息的位数,k为校验位的位数
想想书上那张图检验四位就用了三个海明码
1、海明码一般来说具有一位纠错功能
2、海明码纠错d位,需要2d+1海明距,检错d位,需要d+1的海明距
十二、被误解的低位交叉编址
参考资料
408真题2013-T43-(3)
错误原因
用王道的知识点不能解释的通最后5ns是哪里来的
并且王道在这里的用词不太对
r不应该叫存取时间,应该叫总线传输周期更合理,实际的存取时间还是T
我们之所以把r误认为了存取时间,大概是因为当流水线稳定的时候,每经过一个r就会有一个体的存取周期结束
正确的理解
模块的一个存取周期是T,其中T包含了总线传送周期r、DRAM恢复时间h
可以写成T=r+h,在一个体内完成总线传送周期r后不能说该体已经完成了存取。必须等待T经过后才能说完成了存取
我们再完成存取后并没有完成数据的传输,我们还需要额外的时间进行数据的传输,会消费时间d,这是独立于存取周期T之外的时间
或者,我们也可以认为这个r是依赖于低位交叉编址体的个数
如下图的(3)
低位交叉编制与位扩展的区别
位扩展的大小与总线宽度、存储单元大小相同,比如8个8192 x 8192 x 8位的芯片,若采用位扩展,扩展至64位则其数数据总线宽度也应该为64位,且其存储单元也为64位(即按8字节编址),一次读入64位
而若采用低位交叉编制,则其数据总线宽度也应该为64位,不过存储单元是8位,一次读入8位
低位交叉存储器访存冲突问题
计算机使用4体交叉编址(默认为低位交叉),存储器总线出现的主存地址序列为: 8000,8001,8002,8003,8004,8006
转化为模块序号即为: 0 1 2 3 0 2,则8002与8006冲突
冲突规则如下: 相邻四个访问地址对应的模块尚若重复出现即为冲突
十三、页、页表、页框的区别
1、页
页是指进程中的块
2、页表
页表是系统为每个进程建立的页面映像表
3、页框 / 页帧
页框,也叫页帧 Page Frame
是指物理内存中的块
4、页表项
页表项是页表中的任一项
5、页目录表
没找到这个概念哪来的
页表是存放页表项的页框,页目录表是存放页表地址的页框
最主要的就是 页、页表、页框/帧的概念
真题溯源
2013-T46-(3)
这里的页框号我写的 页框号1: 0 页框号2:1
实际上应该是: 页框号1: 00900H 页框号2:00901H
可以这样说,页号就是虚拟地址的前x个位数
页框号就是物理地址的前x个位数,他们是从0开始的,而不是从00900H开始的
十四、知识点补充---共享存储、消息存储、管道Pipe
共享存储
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换,在对共享空间进行写/读操作时,需要使用同步互斥工具(如P操作、V操作),对共享空间的写/读进行控制。
通过系统调用实现
消息传递
- 直接通信方式。发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲
队列上,接收进程从消息缓冲队列中取得消息 - 间接通信方式。发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息。这种中间实体一般称为信箱。
管道
1、管道本质上是一个文件
2、管道常驻在内存中
3、半双工
4、当管道满时,进程在写管道会被阻塞,而当管道空时,进程在读管道会被阻塞
十五、控制冒险
无条件转移指令,停两个周期:
十六、多级页表---那一级才是多级页表?
以二级页表为例,顶级页表就是一级页表
另外,注意一个知识点,顶级页表最多只能有一个页(P170)
十七、关于间指周期指令执行流的错误认识
做了王道的课后题,外加真题考察的很少,导致我对间指周期产生了错误的认识
我的错误认识
我一直以为间址周期会完成所有的寻址任务,包括第一次间址、直接寻址之后得到有效操作数,而指令的执行阶段只需要用操作数进行运算即可
错误朔源
看这道题
王道给的参考答案是这样的:
这是寄存器间接寻址,其实这里的间址周期应该让执行周期来干
怎样的寄存器间接寻址才是正确的呢?
参考2009年真题答案
答案:
这里直接就没有间址周期!
唐朔飞计算机组成原理 间接寻址的解释
总结
- 间址周期不是一次完成所有的寻址得到操作数,而是为了得到操作数的有效地址,它为执行周期留了一次寻址
- 执行周期也有可能会寻址的
- 寄存器间接寻址没有间址周期,直接在执行周期完成寻址与运算
- 在执行一重间接寻址指令时,存在间址周期,再次期间,CPU寻址一次,获得有效地址,放入MDR寄存器中,之后由执行周期完成最后的寻址
ps: 已经不是第一次发现王道的书存在问题了,王道的书慎用吧
十八、扇区的地址---易记错点、易混淆点
真题朔源
2022年真题-44
知识点、易错点
一直以为扇区的地址是: 柱面号·磁道号·扇区号
实际上是: 柱面号·盘面号·扇区号
我们来看一下磁盘驱动器的物理结构
可以发现一个垂直于所有盘面的磁道就是一个柱面
而盘面就是盘片,我们寻址的时候都是先找根据磁道号找柱面,再找盘面,最后找扇区
注意有的盘片可能会有正反两个盘面
十九、多级域名查询次数问题
题目朔源
2016年408真题---T40
做了三次,错了三次,g
知识点
https://www.bilibili.com/video/BV15K4y1b7Zd/?p=8&vd_source=87f7ad8544d4c3ad070c5c2ff28b7698
各种不同的域名服务器的功能
-
根域名服务器: 根域名服务器通常并不直接对域名进行解析,而是返回该域名所属顶级域名的顶级域名服务器的IP地址。 Internet 一共有13个根域名服务器
-
顶级域名服务器
负责管理在该顶级域名服务器注册的所有二级域名
-
权限域名服务器
这些域名服务器负责管理某个区的域名。每一个主机的域名都必须在某个权限域名服务器处注册登记。
根域名服务器、顶级域名服务器、权限域名服务器分别对应网站的哪一级域名
- 根域名服务器的功能就是给出顶级域名服务器的地址,所以其不对应任何一级域名
- 顶级域名服务器对应着顶级域名
- 权限域名对应着二级域名、三级域名...n级域名(直到查询成功)
答案
二十、快速排序的时间复杂度分析过程
题源分析
2016年408真题算法题的时间复杂度分析
时间复杂度分析
参考:
https://zhuanlan.zhihu.com/p/341201904
我在上面的基础上,分析了一下题目的时间复杂度
二十一、浮点数上溢、下溢
浮点数下溢,直接当作机器零处理
浮点数上溢,表示超出了浮点数范围,属于内中断
二十二、对汇编程序员不透明的寄存器
题目朔源
2023王道模拟题第一张
解答
需要注意的是:
-
移位器是不可见的
-
中断字寄存器
-
中断字寄存器应该是指的标志寄存器调度IF位(x86)
-
比如cli关中断指令、sti开中断指令(x86下)
-
对于汇编程序员可见
-
二十三、总结CF、OF所有的溢出判断
我们都知道 :
OF = 最高位的进位⊕次高位的进位
CF = 最高位的 进位/借位 ⊕ Sub信号 (也称为cin信号,减为1)
我总结一下怎么一眼看出有没有溢出
OF
只要正数+正数与负数+负数的时候会溢出
- -2+(-127) = 127 => 1111 1110 + 1000 0001 = 0111 1111
- 127+2 = -127 => 0111 1111 + 0000 0010 = 1000 0001
且正数加正数=负数 / 负数+负数 = 正数 时一定溢出
CF
- 255+2 = 1 => 1111 1111 + 0000 0002 = 0000 0001
- 255+255 = 254 => 1111 1111 + 1111 1111 = 1111 1110
然鹅,255-1不会溢出: - 255-1 = 1111 1111 - 0000 0001 => 1111 1111 + 1111 1111 => 1111 1110
综上,对于OF,考虑正负号,只要运算结果违背有符号运算的常识,就会溢出
对于CF,不考虑正负号,逻辑运算,只要运算结果违背逻辑运算的常识,就会溢出
或者说,对于有符号数,我们可以直接根据常识来判断(比如-2-127=127这明显不正确)
而对于无符号数,我们可以先把正值转化成无符号数后,再根据常识判断
比如: -1 + 2
1、转无符号数: 1111 1111 + 0000 0002 => 255+2 = 0000 0001 =>1
2、根据常识,255+2是等于257的,故发生了溢出
特别注意的是,当计算: 10 - (-20)时,我们不要变10+20算,而要直接转成无符号数的形式,再计算:
1、0000 1010 - 11101100 => 10 - 236 = 0001 1110 => 30
2、根据常识,10-236=-226,即 1110 0010 ,故完全对不上
二十四、CN---各种协议的层次
FTP: 应用层、基于TCP、20(数据)与21(控制)号端口
DNS: 应用层,基于UDP 、53号端口
SMTP、POP: 应用层,基于TCP
HTTP: 应用层,基于TCP ,80号端口
TELNET: 应用层,基于TCP,23号端口
BGP: 应用层,基于TCP
RIP: 应用层,基于UDP
DHCP:应用层,基于UDP
OSPF: 传输层,基于IP
ICMP:网络层协议,IP协议的附属协议
ARP: 网络层协议
PPP: 数据链路层
HDLC: 数据链路层
二十四、当IP分组达到目的地,TTL恰好为0时
真题朔源
2018年408真题-T42-(3)
题目刨析
23版王道408 P151有这样一句话
路由器在转发分组前,先把TTL减1,若TTL为1,则必须丢弃
由此可知当IP分组达到目的地,TTL恰好为0时也要丢弃
二十五、求强连通分量的个数
很容易被遗漏的一个知识点
题源刨析
23版王道P237
23版王道模拟卷---卷4---T8
求解方法
- 找入度或出度为0的点
- 依此删除这些点,每删除一次计数器加1
- 直到没有入度/出度为0的点,此时计数器的值就是强连通分量的个数
以王道题为例
二十六、不同种类的进程优先级问题
计算型作业的优先级,应低于I/O型作业的优先级
I/O操作需要及时完成,没办法长时间保存所要输入输出的数据,因此I/O型作业优先级更高
系统进程的优先级应高于普通进程
短作业与长进程的优先没关系,关键看算法
资源要求高的优先级应该低于资源要求低的优先级
资源要求低的优先级应该让其尽快完成,释放出占有资源
二十七、802.11 MAC帧的地址1、地址2、地址3、地址4
刚刚在梳理无线局域网知识点的时候,发现这个知识点我一直都是理解错的,特此记录一下
以一道题来研究
- 当为发送帧时
- 地址1是AP的MAC地址 (不是真正的目的地址)
- 地址2是源MAC地址
- 地址3是真正的目的地址
- 当帧为接受帧时
- 地址1是目的MAC地址
- 地址2是AP的MAC地址(不是源地址)
- 地址3是原MAC地址
地址4用于自组网
详情可翻看 《计算机网络(第八版)》P420
二十八、排队器、中断响应、中断处理、中断屏蔽
1、排队器: 当某一时刻有多个中断请求时,需要使用排队其来确定其响应优先级
2、中断响应: 中断响应取决于中断的优先级,这种响应是硬件规定的,是定死的
3、中断屏蔽字: 处理优先级是指CPU实际对各中断源请求的处理优先次序。如果不采用屏蔽技术,响应的优先次序就是处理的优先次序。中断屏蔽字可以根据实际需要来确定
4、中断响应前的中断请求判优是由排队器完成的,CPU一旦检测到中断请求,便会立马进行中断响应
二十九、GBN与SR的传输速率问题
分两种情况,设发送方从发送第一个帧到接收到第一个确认帧为止所用的时间为RTT,设窗口尺寸为n,帧传输时间为t0,则有
1、n*t0 < t
这说明在一个RTT内就可以发送完所有的数据,那么发送方的数据传输速率=\(\frac{n*t_0}{RTT}\)
2、n*t0 > t
这说明在一个RTT内不能发送完所有的数据,此时数据传输速率为 \(100\%\)