【仅供参考】csapp第八章课后习题答案(欢迎批评指正)

8.9

 

【答案】

进程对并发?
AB
AC
AD
BC
BD
CD

【解释】时间有重叠部分

8.10

【答案】

setjmp:C

longjmp:B

execve:B

fork:A

8.11

【答案】

4行

【解释】

8.12

【答案】

8行

【解释】

 8.13

【答案】

4,3,2

【解释】共三种情况:432,423,243

8.14

【答案】

3

【解释】

 8.15

【答案】

5行

【解释】 

8.16

【答案】

2

【解释】

子进程并不会影响父进程的数值

8.17

【答案】

Hello   0   1        Bye   2   Bye
Hello   1   0        Bye   2   Bye
Hello   1   Bye    0       2   Bye

【解释】

就是对进程图拓扑排序的所有输出序列。

8.18

【答案】

ACE

【解释】

两个2必须保证一个前面有1,另一个前面有0     

 8.19

【答案】

2^n

【解释】

每循环一次分裂成两个进程,循环n次,共2^n个进程。

8.20

【答案】

#include <stdio.h>
#include "csapp.h"

int main(int argc, char* argv[], char* env[]) {
  if (execve("/bin/ls", argv, env) == -1) {
    fprintf(stderr, "execve error: %s\n", strerror(errno));
    exit(1);
  }
}

8.21

【答案】

abc或者bac

【解释】

 8.23

【答案】

不可以用信号来对其他进程中发生的事件计数,因为在处理程序处理第一个信号时,第二个信号添加进待处理信号集合,后面的信号就全部丢弃了。

### CSAPP 第三章 课后习题解答与分析 #### 函数 `aframe` 的栈帧结构解析 在讨论函数 `aframe` 的实现时,注意到此函数调用了库函数 `alloca` 动态分配局部数组 `p` 所需的空间。这种动态内存分配方式使得编译器无法提前知晓所需的具体空间大小,因此引入了变长栈桢的概念来处理这种情况。 当执行到第4行代码时,栈指针被设定为值 \(s_1\);而在第7行处再次调整至新的位置 \(s_2\)。此时,在这两个地址间可能存在一段未使用的额外空间 \(e_1\)。到了第9行,则正式将变量 `p` 指向这段由 `alloca` 分配出来的缓冲区首部[^2]。 ```c void aframe(int n) { int *p; // ... p = (int *)alloca(n * sizeof(int)); } ``` #### 数据成员偏移量计算实例 对于联合体(union)类型的元素访问操作而言,由于其内部各字段共享同一块存储区域,所以不同字段之间的相对位移关系变得尤为重要。例如给定如下定义: ```c typedef union { struct { long y; char z[8]; } e1; struct { short x; long next;} e2; } ele_t; ``` 针对上述数据结构,可以得出以下结论: - 成员 `e1.p` 和 `e1.y` 的字节偏移分别为0和8; - 同样地,`e2.x` 及 `e2.next` 则分别位于偏移0以及8的位置上[^3]。 #### 进一步探讨过程间的参数传递机制 考虑这样一个场景——通过指针间接修改另一个对象的内容。具体来说就是下面这个名为 `proc` 的C语言子程序,它接收一个指向联合体类型 `ele` 的指针作为输入,并利用箭头运算符完成特定逻辑的操作。 ```c void proc(ele_t *up) { up->e2.x = *(up->e2.next->e1.p) - up->e2.next->e1.y; } ``` 在这个例子中,假设传入的对象已经初始化完毕并含有有效数值,那么该语句的作用即是从指定路径读取两个整数相减的结果赋值给目标域 `x`。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值