Csapp真心不好学

总体原则

尽量做完所有的exercise,做了一部分,感觉出的不错

看书前沐浴更香,保持心静(逃)

链接推荐

计算机科学速成课

推荐大家在正式学习前花一点时间看完这个,只需要一点点时间,就能够对计算机有一个较为全面的认识

CSAPP导读

我主要是以这个为索引阅读的,主要是光啃书真的太困难了,我的bomblab就是光啃书做的,痛苦死了

中英精校字幕课程

这个课程除了没有助教的补充说明(这个在Csapp导读里面有链接),其余部分还是很不错的,字幕完整精确(要注意,字幕是由作者谷歌机翻再手动改一点的,所以有些地方可能不是人话)

环境配置

[[CSAPP环境配置]]

实验资料

这里包含目前(2021.07.02)所有的CSAPP实验文件,一共11个,其中有3个实验是同一实验的不同版本,所以真正需要做的就是8个实验。

以下是CMU官网对于各个实验的介绍:

1. Data Lab

该实验让学生们在一个使用C语言的高度限制的子集中对无符号整数、补码整数和浮点数进行一些操作。 例如,他们可能会被要求只能使用位级运算和顺序控制代码来计算一个数字的绝对值。 这个实验通过让学生们操作各种二进制的位级行为,来帮助理解C数据类型的位级表示。
[[lab1_datalab]]

2. Bomb Lab

“二进制炸弹”是向学生们提供操作的可执行文件。 当该程序运行时,它会逐个提示用户输入总共6个不同的字符串。如果其中任何一个是不正确的,则炸弹就会“爆炸”,在界面上打印错误消息并在计分系统上记录该次错误。 学生们必须通过反汇编以及逆向工程来“拆除”自己所独有的炸弹,以确定这6个字符串应该是什么。 该实验将会让学生们去理解什么是汇编语言,并迫使他们去学习如何使用调试器。该实验非常有趣,且这个实验也是CMU本科中的一个传奇实验。

我们所提供的二进制炸弹是一个Linux/x86-64的可执行文件,你可以自己尝试运行一下。现在,计分系统已禁用,因此可以随意引爆此炸弹而不会受到惩罚。
[[lab2_bomblab]]

3. Attack Lab

注意:这个实验是Buffer Lab(IA32)的64位改进版本。

我们提供了学生们一对独特的X86-64的二进制可执行文件,这对文件也被称为攻击目标,它们都具有缓冲区溢出漏洞。它们中的一个容易受到代码注入(CI)攻击;而另一个容易受到面向返回编程(ROP)攻击。 我们要求学生通过基于CI或者ROP来修改攻击目标的一些行为。此实验会让学生们了解一些堆栈的使用规则,并指导他们编写出能够防范缓冲区溢出攻击的代码。
[[lab3_attacklab]]

4. Architecture Lab

注意:该实验是Architecture Lab(Y86)的64位改进版本。

给学生们一个基于Y86-64处理器的数组复制函数和一个流水线架构的Y86-64处理器,用于计算复制每个元素所需要的时钟周期(CPE)。学生们需要通过修改该函数的实现和Y86-64处理器的设计来使该函数的CPE最小化。该实验能够让学生对于硬件与软件的交互有一个深刻的理解。

提示:本次实验的材料包括Y86-64处理器模拟器的发行源码和Y86-64模拟器的指南。
[[lab4_archlab]]

5. Cache Lab

注意:该实验是Performance Lab的64位改进版本。

学生需要编写一个通用的高速缓存模拟器,然后再优化一个矩阵转置算法,使其在高速缓存中的未命中次数最小。 该实验使用Valgrind工具来生成内存操作记录。

注意:此实验必须在X86-64系统上才能运行。
[[lab5_cachelab]]

6. Shell Lab

这次实验让学生们实现自己的一个简单Unix Shell程序,该程序包括作业控制、ctrl-c和ctrl-z击键控制、fg、bg和jobs指令。 这次是第一次对学生们引入应用级并发的概念,这些让他们对Unix的进程控制和信号处理方面有了一个清晰的认识。
[[lab6_shlab]]

7. Malloc Lab

本次实验让学生们实现他们自己版本的mallocfreerealloc函数。 该实验让学生清楚地理解了数据的布局和组织,并要求他们对于空间和时间效率之间进行权衡和折中。 这个实验是我们最喜欢的实验之一,当学生们完成这个实验时,他们真正的理解了指针的含义!
[[lab7_malloclab]]

8. Proxy Lab

实现一个位于浏览器和万维网其他部分之间的并行Web代理。这个实验向学生们揭示了Web客户端和服务器这样的主题,并且把课程中的许多概念联系起来,比如字节排序、文件IO、进程控制、信号、信号处理、内存映射、套接字和并发。学生很高兴能够看到他们的程序在真实的Web浏览器和Web服务器之间起到的作用。
[[lab8_proxylab]]