Skip to content

csapp/README.md ​

配套源码,运行方法见同目录 README。返回实验总览。

md
# CSAPP 原创教学程序

本目录为课程网站配套代码,不是 CMU 官方 lab 答案,不包含第三方 handout。

```sh
make -C labs/csapp test
make -C labs/csapp sanitize
```

从本目录运行时可直接 `make test`。需要 C11、POSIX、Make 和 pthread。`sanitize` 清理后启用 ASan/UBSan;之后若需普通版本,请先 `make clean` 再 `make test`。Make 不自动跟踪编译选项变化。

| 文件 | 内容 | 教学边界 |
| --- | --- | --- |
| bits.c | 无符号位计数与旋转、有符号加法检查、字节序 | 不遵守 Data Lab 受限操作规则 |
| cache_sim.c | LRU 组相联 cache | CLI 为 `s E b trace`;支持跨行访问;不模拟写策略/多级缓存/时间 |
| allocator.c | 固定 arena、first-fit、分裂、双向合并 | 隐式空闲表;无 realloc、增长、线程安全;合法指针调用者 |
| process_demo.c | block/fork/sigsuspend/waitpid | 一个孩子,handler 只设置标志 |
| tiny_shell.c | 前台命令、cd、exit | 无引号/管道/重定向/后台/完整 job control |
| sync_demo.c | 单槽生产者消费者 | 一个生产者与消费者,固定项目数 |
| verify.sh | 精确结果与边界检查 | 测试范围见 VALIDATION.md |

cache trace 的地址按十六进制读取,大小按十进制读取。I 被忽略,L/S 各访问一次,M 先完成整个范围的读再完成整个范围的写;跨行请求按块拆开。允许空行和行首 `#` 注释。s 为组索引位数,E 为每组行数,b 为行内偏移位数。

验证脚本不运行外部评分器。官方 3e 自学实验见 <https://csapp.cs.cmu.edu/3e/labs.html>。Bomb/Attack/Cache 的原版平台要求与本目录可移植 C 示例不同。中文学习路径从 `docs/csapp/index.md` 开始。

练习时建议复制一个程序到自己的工作文件中,先写预期结果,再改变一处策略:cache 改 FIFO;allocator 改 best-fit;同步示例扩展容量与关闭协议。保留原始版本作对照,不要将新练习混入已经通过的验证声明。