CSAPP e5.5 练习题5.5 这里可以把 result += a[i]*xpwr 拆分为 tmp=a[i]*xpwr,result+=tmp。这是可以并行的,只需要把 result 放在下一次迭代时更新就可以了。下面这张图很好地说明了这一点: 2024-02-17 system #CSAPP
CSAPP hw10 10.6 fd2 = 4 12345678910111213一个比较严谨的解答:1.若成功打开“foo.txt”:-->1.1若成功打开“baz.txt”: 输出“4\n”-->1.2若未能成功打开“baz.txt”: 输出“-1\n”2.若未能成功打开“foo.txt”:-->2.1若成功打开“baz.txt”: 输出“3\n”-->2.2若未能成功打开“baz.txt” 2024-02-17 system #CSAPP #文件
CSAPP hw3 3.58 123y-=z;x*=y;return ((y<<63)>>63)^x 3.59 p=xy=(xhyl+yhxl)264+xlyl\begin{aligned} p &=xy\\ &=(x_hy_l+y_hx_l)2^{64}+x_ly_l \end{aligned} p=xy=(xhyl+yhxl)264+xlyl 记 xlyl= 2024-02-17 system #CSAPP #汇编
CSAPP hw2 2.55 12345678910111213141516171819202122232425#include <stdio.h>typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start, size_t len){ size_t i; for(i=0;i<len;i++) pr 2024-02-17 system #CSAPP #位运算
CSAPP hw8 8.9 否 是 是 是 是 是 8.10 setjump: C longjmp: B execve: B fork: A 8.11 4 8.12 8 8.13 x=4 x=2 x=3 8.14 3 8.15 5 8.16 counter = 2 8.17 Hello 1 Bye 0 2 Bye Hello 1 0 Bye 2 Bye Hello 0 1 Bye 2 Bye 8.18 A C E 8 2024-02-17 system #CSAPP #信号
CSAPP hw6 6.22 xr(r−xr)=−r2x2+r2xxr(r-xr)=-r^2x^2+r^2xxr(r−xr)=−r2x2+r2x r=0.5r=0.5r=0.5 时容量最大 6.23 4+115000×60×1000×12+1800×115000×60×1000=6.005ms4+\frac{1}{15000}\times60\times1000\times\frac{1}{2}+\frac{1}{8 2024-02-17 system #CSAPP #cache
CSAPP hw9 9.11 A 00 0010 0111 1100 B 0x9 0x1 0x2 否 否 0x17 C 0101 1111 1100 D 0x0 0xf 0x17 否 9.12 A 00 0011 1010 1001 B 0xe 0x2 0x3 否 否 0x11 C 0100 0110 1001 D 0x1 0xa 0x11 否 9.13 A 00 0000 0100 0000 B 0x1 0x1 0 2024-02-17 system #CSAPP #虚拟内存
CSAPP proxylab 不是很有趣,但综合性比较强的lab。 phase1 基本参考 tiny 的代码进行编写即可。区别在于,服务代理的 doit 后半部分需要将请求头传给服务端,并从服务端读取数据返回给客户端。 phase 2 同样参考课本上的代码,创建线程并在线程中完成 doit。需要注意的是,driver.sh 中第 301 行需要修改为 1python3 nop-server.py ${nop_port 2024-02-17 system #CSAPP #cache #网络代理 #网络编程 #并发编程
CSAPP malloclab 首先先跑一遍课本上的代码,内存利用率和吞吐量都不是很好。尤其是吞吐量,非常糟糕。 e9.17 将首次适配搜索改为下一次适配搜索。 为此,定义 rover 指向上一次分配的块。在 mm_init 中,rover 初始化为 heap_listp。编写 next_fit 用于实现下一次适配搜索算法:从 rover 开始,一直找到结尾块。再从 heap_list 开始,一直找到 rover。 一个易错点 2024-02-17 system #CSAPP #虚拟内存
CSAPP attacklab Phase 1 getbuf 的栈帧如图所示,只需先输入 40 个字节,然后输入 touch1 的起始地址即可。 Phase 2 需要在缓冲区内输入一段指令,从 getbuf 返回时开始执行这段指令。这段指令需要向 touch2 传入 cookie,并将返回地址设置为 touch2。 指令很容易书写 123movq $0x59b997fa,%rdipushq $0x4017ecret 查看 % 2024-02-17 system #CSAPP #汇编