本资源是一份北京大学信息科学技术学院的计算机系统导论期末考试试卷,日期为2016年1月4日。考试内容涉及基础概念、指令集、链接器行为、内存管理、信号处理和异常处理等多个方面。
1. **指令对ESP的影响**:
- 提供的指令中,`movl %esp, %ebp` 不改变栈指针ESP,因为它仅是保存ESP的值到EBP寄存器,而没有改变ESP的实际位置。
- `pushl %ebp` 将EBP压栈,ESP减小。
- `call printf` 发出函数调用,会调整栈帧,ESP可能变化。
- `subl $20, %esp` 直接减小ESP,用于函数调用时预留空间。
2. **单精度浮点数的存储**:
- 单精度浮点数由8位阶码和23位尾数组成。实际存储中,阶码可能需要额外的符号位。选项中只有0x41dc0000可能是有效存储,因为阶码为正,且尾数占用了剩余的23位。
3. **X86寻址方式**:
- 前两条指令是正确的:`movl $34, (%eax)` 和 `movl (%eax), %eax`。
- 后两条指令有误:`movl $23, 10(,%eax)` 应该是相对地址,`movl (%eax), 8(%ebx)` 的偏移量应写在后面,如`movl (%eax), [ebx+8]`。
4. **静态库链接**:
- 静态库链接时,链接器会链接目标代码,而不是简单地复制库模块。
- 使用库时,库文件可以在命令行任意位置,但每个库只需引用一次。
- 代码中的字符串常量"Youranintoaproblem!\n"会被链接到`.rodata`段,因为它通常存放只读数据。
5. **信号处理**:
- 当程序阻塞SIGCHLD和SIGUSR1信号时,后续发送的两个SIGCHLD信号不会被处理,因为SIGCHLD在被阻塞时不会立即传递。程序只会处理第一个SIGCHLD,然后继续执行。
6. **异常处理**:
- 异常是指程序运行时发生的非预期事件,可能导致控制流的改变。
- 异常处理涉及硬件和操作系统的协同工作。
- 异常不一定是不可恢复的错误,也不总是同步发生的,可能异步出现。
- 选项分析:A错误,SIGTSTP可以被忽略;B正确,默认处理是挂起;C错误,系统调用可能被中断;D错误,系统调用是可以被中断的。
通过这份试卷,学生可以检验对计算机系统基本概念的理解,包括指令集操作、内存布局、链接机制、信号处理和异常处理机制。考试内容覆盖了从底层原理到实际编程应用的广泛领域。