CSAPP 小结 花了大概一个寒假的时间,读完了 CSAPP 这本书,看完了这门课的视频,并且完成了部分家庭作业和七个 lab。 读完这本书有一些收获,让我接触到了很多未曾涉足的方面,让我明白自己还有哪些东西需要继续学习,算是为未来铺路的一门导论课程(不过好像有点晚了?)。 简要评价一下各个 lab 的体验: data lab 整数部分涉及到了很多位运算的技巧,有一道问题把我难住了。浮点数部分没有什么意思,基本按照 2024-02-17 system #CSAPP
CSAPP shelllab 虽然信号是一个比较陌生的话题,但其实大部分需要用的技巧都在课本和 handout 中给出了,所以并不是特别困难。 eval 基本可以参考书上的来写。只需要注意创建一个新进程时需要给它分配一个新的进程组,事实上 handout 中已经指出了这一点。 builtin_cmd 直接判断就可以了。比较让我纠结的是执行 quit 时是否需要先回收所有子进程,看起来好像不需要的样子。 do_bgfg 主要难度 2024-02-17 system #CSAPP #信号 #并发编程
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 #网络代理 #网络编程 #并发编程