赞
踩
免责声明:题目源自于网络,侵删。
就在今天2024-5-18,考的题下面的只有一道AVL的原题,其他都不是原题,然后操作系统并没有那么难的概念,考了很多编译原理,也考了离散(群和格,两三道吧)。
建议
:先把数据结构算法的题会的做了,分值一样,但至少这些是会一点的,然后做其他的,编译原理是真的不会,其他也不太会(忘完了),基本上能做的是数据结构算法。
考得最多的估计是数据结构算法,编译原理,计网,操作系统这些,离散考的少,计组也少。没记错的话单选题40道,多选题35道。(单选也可能是35道,记不得了)
分析和知识点复习:
传输层的拥塞控制:AIMD(加法增加,乘法减小)
答案:
本题超时:16->1->2->4->8(若是超时,则直接从拥塞窗口cwnd=1,慢启动开始,
)
甲是发送端:应该是服务器发送网页资源给客户端,因此甲是服务器。
答案:
同一个网络号的IP地址组成一个“CIDR块”。
A. 120.128.1.100/24
B. 120.128.1.0/24
C. 120.128.1.100/16
D. 120.128.0.0/16
正确答案是 D. 120.128.0.0/16,因为它提供了从120.128.0.0到120.128.255.255的正确网络地址,与子网掩码255.255.0.0完全对应。
分析
在无线局域网中,如IEEE 802.11标准,调整优先级的一种有效方法是通过改变帧间隔(Frame Spacing),尤其是在处理媒体访问控制(MAC)层时。帧间隔的调整可以通过以下几种方式进行:
AIFS的设置可以根据数据的优先级不同而不同。在802.11e标准中,AIFS的长度是动态可调的,通常表达为:
AIFS
=
AIFSN
×
时间槽
+
SIFS
\text{AIFS} = \text{AIFSN} \times \text{时间槽} + \text{SIFS}
AIFS=AIFSN×时间槽+SIFS
其中AIFSN(Arbitration Inter-Frame Space Number)是根据数据流的优先级设置的一个因子,时间槽(Slot Time)是传输介质上两次传输之间的时间间隔,SIFS(Short Inter-Frame Space)是最短帧间间隔,用于确认帧和清空帧的快速回复。
答案:
选C。如果不知道使用排除法,不同长度数据包,确认包只能说明数据内容多少不一样,但是数据流的优先级不能确定,冲突避免时间是整个局域网中相同的对优先级没啥用,因此选C。
分析:
模拟题:
分析:
由于是选择题本题要求能看出答案是否满足要求,因此只要能看出答案是否满足要求即可,不需要自己设计。
分析:
既然没有100,也没有其他信息,那就选个质数吧~
选择 97(一个质数)作为模数 P P P 有助于散列函数 H ( k ) = k % P H(k) = k \% P H(k)=k%P 产生均匀分布的散列值,减少散列冲突,并提高散列表的整体性能和效率。这种方法确保了输入值 k k k在散列过程中的随机性和均匀性,降低了因为数学特性(如因数分解)导致的预测性和冲突问题。
答案:
分析:
答案:
分析:
因此求顶点
i
i
i的入度,就看有多少条边指向
i
i
i,因此
∑
k
n
A
[
k
]
[
i
]
\sum^n_k{A[k][i]}
∑knA[k][i]
答案:
AVL:
AVL树:高度平衡树
:每个节点的左子树和右子树的高度最多相差1。这种高度上的平衡称为“平衡因子”,平衡因子是节点的左子树高度减去右子树高度(有时相反)。每个节点的平衡因子只能是 -1, 0, 或 +1。
单旋
双旋
分析:
要解决这个问题,我们需要先插入关键码 2、4、6、8 和 10 到一个初始为空的 AVL 树中,并观察插入后每个节点的平衡因子。
插入 2:
插入 4:
2
\
4
插入 6:
4
/ \
2 6
插入 8:
4
/ \
2 6
\
8
插入 10:
4
/ \
2 8
/ \
6 10
在最终的 AVL 树中,节点2、6、10和8的平衡因子都为 0。
但是分支结点必须是有儿子的结点,因此满足题意的只有结点8
。
数据结构基础知识。
答案:
分析:
沿着选项给出的边集走就行,能走完的就是答案。
答案:
if(x < ptr->data){
return Search(x,ptr->left);//在左子树里面查找
}else if(x > ptr->data){
return Search(x,ptr->right);
}else
return ptr;//x既不大于,也不小于,就是等于ptr->data == x
知识:
加载器
将可执行目标文件中的代码和数据从磁盘复制到内存中,然后通过跳转到程序的第一条指令或入口点来运行该程序。这个将程序复制到内存并运行的过程叫做加载
。加载器是驻留在存储器中的操作系统代码。
任何Linux程序都可以通过系统调用execve
函数来调用加载器
。
execve
的执行过程:
- shell(或其他父进程)运行一个程序时,会先调用
fork
,创建一个一模一样的子进程副本。- 这个子进程副本调用
execve
系统调用加载和执行一个新的程序。
execve
系统调用开始会先调用加载器
(也就是题目说的第一条指令是加载器的入口地址,也就是调用加载器
)加载器
先将该子进程的虚拟内存(如堆栈、代码数据等)都清空,然后将该虚拟地址空间映射到需要调用的程序磁盘页上,方便之后执行程序。(这里在执行程序时才会将使用的页真正调入内存中(虚拟地址空间已经指向了,只是发生缺页中断。))
17.分析:
在 Linux 中使用 execve
系统调用加载并执行一个动态链接的 ELF(Executable and Linkable Format)二进制文件时,执行流程是比较复杂的。它涉及到不仅仅是程序代码的直接执行,还包括多个阶段的准备工作。具体到该问题,我们要确定执行 execve
后执行的第一条指令位于哪里。以下是每个选项的解析:
main
函数。libc
的初始化代码会在程序的主体执行之前运行,但这不是 execve
后执行的第一条指令。execve
后立即执行的第一条指令,因为需要先进行一系列的初始化和设置步骤。execve
后执行的第一条指令实际上位于动态链接器(如 Linux 的 /lib/ld-linux.so.2
)中。这是因为动态链接器负责加载所有必要的共享库,并进行符号解析和重定位,然后才会跳转到程序的实际入口点。execve
执行后的第一条指令的典型位置。17.答案:
根据这些信息,正确的答案是 E。加载器的入口地址是 execve
调用后执行的第一条指令的位置,因为动态链接器首先介入,处理必要的库加载和准备工作,然后将控制权转交给程序本身的入口点。这个过程是必要的,以确保所有的库依赖和符号都正确解析,使程序能够正确运行。
6.答案:
需要注意的是函数中的filename
可以使用。绝对路径也可以使用相对路径
根据函数容易知道,参数有path
、args
、Envp
。
分析:
A. 互斥锁
B. 自旋锁
非常短的代码段(如只有几条指令的临界区)是非常有效的
。线程在获取锁之前会进行忙等(busy-wait),不断检查锁的状态,这避免了线程在等待期间的上下文切换开销。C. 信号量
控制资源的有限访问数量
,而不是保护短临界区。D. 条件变量
E. 管程
管程适用于更复杂的同步需求
,不一定适合延迟敏感的简短临界区。F. Peterson算法
适用于两个线程的互斥
。它不适合多处理器系统或实际的多线程环境中使用。答案:
自旋锁 (B)
分析:
在x86和x86-64体系结构中,当发生页面错误(Page Fault)时,引起该错误的虚拟地址会被保存在特定的寄存器中。对于这种情况,正确的选项是 E. CR2寄存器。
以下是每个选项的具体解释和分析:
A. TSS (Task State Segment)
存储任务执行时机器状态
,包括栈指针和程序计数器等,但不用于存储引发页面错误的虚拟地址。B. 内核栈
处理内核级的函数调用和异常处理
,但不直接用于存储引发页面错误的虚拟地址。C. 用户栈
应用程序代码执行而保留的栈空间
,同样,它不用于存储页面错误的虚拟地址。D. CR1寄存器
不存在
的寄存器。E. CR2寄存器
用于存储发生页面错误时的虚拟地址
。当CPU检测到一个访问违规或者无法翻译的虚拟地址时,该地址就会被立即保存到CR2寄存器中。F. CR3寄存器
当前使用的页目录基址寄存器
(Page Directory Base Register,PDBR)。这是物理内存中页目录的基地址,用于页面翻译过程中的内存管理,而不是用来存储引起页面错误的虚拟地址。答案:
E.CR2
分析:
A. 设备驱动程序必然对应连接在外部总线上的I/O设备
B. 设备驱动程序必须运行在操作系统内核态
C. 必须拥有root权限才能调用设备驱动程序
D. 设备驱动程序实现了设备到一组固定接口的抽象
E. 键盘是一种块设备
F. 显示控制器是一种块设备
答案:
选C、D。(当然这是我的答案,这个不太确定)
B的话它不适用于高速以太网。并且可以思考一下使用CSMA/CD只是进行了一个最短帧长要求,并没有提高传输速度。
A的话,以太网数据包首部好像大差不差。
GPT分析:
循环展开(Loop Unrolling)是一种常用的代码优化技术,通过减少循环迭代次数来减少循环控制开销,并可能增加程序的并行度。在循环展开中,循环体中的操作被重复多次,以减少循环迭代次数。我们可以逐一审视每个选项,看看哪些是循环展开的优点或不具备的特性:
A. 提高Cache命中率
B. 减小代码长度
C. 增加基本块大小,方便编译器进行静态调度
增加了单个基本块(循环体)的大小
。这更容易让编译器进行指令调度和其他优化,如指令重排以隐藏延迟或增加指令级并行。D. 减少寄存器使用量
因此,正确的选项(循环展开不具备的优点)是 B 和 D:减小代码长度和减少寄存器使用量。这两个选项描述了循环展开可能带来的负面效果,而非优点。
GPT分析:
在计算机体系结构中,中断和异常是用来处理特定事件或错误情况的机制。这两者虽然在功能上类似,但在触发原因和处理方式上存在区别。以下是对所提供选项的分析:
A. 发生外部中断时处理器可以继续执行完流水线中的指令后再处理中断
B. 除硬件故障外的内部异常的产生与当前执行的指令有关
C. 在流水线检测到内部异常时,应当立即停止流水线并冲刷流水线中所有正在执行的代码
D. 缺页是一种常见的中断,需要操作系统介入处理
因此,错误的选项是 C 和 D。这些描述要么误解了中断和异常的处理机制,要么错误地分类了特定的事件。
分析:
A. 一个文件描述符对应了一个磁盘上的文件
B. 文件描述符是属于进程的
C. fork时父子进程共享文件描述符的偏移量
fork()
调用后,父进程和子进程确实共享文件描述符和其对应的偏移量。如果一个进程改变了文件偏移量,这一改变对另一个进程也是可见的。D. 文件描述符之间不能共享偏移量
dup
、dup2
或在fork
之后继承的同一个文件描述符的情况下。E. 可以通过procfs访问其他进程的文件描述符
/proc
文件系统(procfs)提供了一种机制来检查系统及进程的状态,包括访问特定进程的文件描述符信息。例如,/proc/[pid]/fd/
目录包含了对应进程的所有文件描述符的符号链接。F. 文件描述符是可以在进程内复制的
dup
和dup2
系统调用,进程可以复制其文件描述符,从而使多个文件描述符指向相同的文件表项。答案:
正确的选项是 B, C, E, F。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。