|
| 1 | +# Lab1 -- DataLab |
| 2 | + |
| 3 | +> author: 蔡亦扬、项正豪 |
| 4 | +
|
| 5 | +## 一、实验简介 |
| 6 | + |
| 7 | +CSAPP 第一章配套实验。 |
| 8 | + |
| 9 | +本实验的目的是加深同学们对整数和浮点数二进制表示的认识。同学们需要解出若干程序谜题,编写代码并通过正确性测试,最后提交代码和报告。希望同学们多加思考,在解题过程中能学到的远不止二进制本身,还能加深对位运算的理解,以及学到一些算法知识。 |
| 10 | + |
| 11 | +本实验分为常规部和荣誉部分。荣誉部分的难度较高,是本课程比较有挑战性的部分。 |
| 12 | + |
| 13 | +荣誉部分虽然占分,但是占分并不高,大家可以自己决定要不要做荣誉部分。生活就像海洋,只有意志坚强的人才能到达彼岸! |
| 14 | + |
| 15 | + |
| 16 | + |
| 17 | +## 二、部署实验环境 |
| 18 | + |
| 19 | +### (1)下载 |
| 20 | + |
| 21 | +从 `github classroom` 拉取`ICS2025_datalab` 文件夹,其中的内容就是本次实验用到的的文件了,拉取指令如下: |
| 22 | + |
| 23 | +```shell |
| 24 | +git clone xxx # 将 xxx 替换为对应链接 |
| 25 | +cd ICS2025_datalab |
| 26 | +``` |
| 27 | + |
| 28 | +### (2)准备工作 |
| 29 | + |
| 30 | +#### 确保已安装了 gcc |
| 31 | + |
| 32 | +在终端中检查是否安装了 gcc: |
| 33 | + |
| 34 | +```shell |
| 35 | +gcc -v |
| 36 | +``` |
| 37 | + |
| 38 | +如果已安装,终端将会反馈版本信息,否则会反馈 `command not found` 。 |
| 39 | + |
| 40 | +如未安装,尝试执行以下命令进行安装: |
| 41 | + |
| 42 | +```shell |
| 43 | +sudo apt-get install gcc |
| 44 | +``` |
| 45 | + |
| 46 | + |
| 47 | + |
| 48 | +#### 确保已安装了 make |
| 49 | + |
| 50 | +检查是否安装 make,在终端输入: |
| 51 | + |
| 52 | +```shell |
| 53 | +make -v |
| 54 | +``` |
| 55 | + |
| 56 | +同理,如未安装,尝试以此执行以下命令: |
| 57 | + |
| 58 | +```shell |
| 59 | +sudo apt-get update |
| 60 | +sudo apt-get install make |
| 61 | +sudo apt-get install libc6 libc6-dev libc6-dev-i386 |
| 62 | +``` |
| 63 | + |
| 64 | + |
| 65 | + |
| 66 | +#### 确保实验文件能正常 make 并运行测试 |
| 67 | + |
| 68 | +在终端中进入 `datalab/` 文件夹目录。 |
| 69 | + |
| 70 | +键入 `ls` 查看内容,你应当看到如下文件: |
| 71 | + |
| 72 | +```shell |
| 73 | +Driverhdrs.pm Makefile bits.c btest.c decl.c driver.pl ishow.c |
| 74 | +Driverlib.pm README bits.h btest.h dlc fshow.c tests.c |
| 75 | +``` |
| 76 | + |
| 77 | +在终端中依次执行如下命令,以生成可执行文件并执行: |
| 78 | + |
| 79 | +```shell |
| 80 | +make clean |
| 81 | +make all |
| 82 | +./btest |
| 83 | +``` |
| 84 | + |
| 85 | +如果过程顺利,最后会输出测试结果,最后一行为 `Total points: 0/69` 。 |
| 86 | + |
| 87 | +如果过程中出现如下报错: |
| 88 | + |
| 89 | +```shell |
| 90 | +/usr/bin/ld: cannot found -lgcc |
| 91 | +``` |
| 92 | + |
| 93 | +那么尝试执行: |
| 94 | + |
| 95 | +```shell |
| 96 | +sudo apt install gcc-multilib |
| 97 | +``` |
| 98 | + |
| 99 | + |
| 100 | + |
| 101 | +#### 确保 dlc(data lab compiler)能正常执行 |
| 102 | + |
| 103 | +依然在 `datalab/` 目录下, |
| 104 | + |
| 105 | +执行: |
| 106 | + |
| 107 | +```shell |
| 108 | +./dlc bits.c |
| 109 | +``` |
| 110 | + |
| 111 | +如果遇到 `./dlc: Permission denied`,说明没有当前文件的执行权限,执行: |
| 112 | +```shell |
| 113 | +chmod +x dlc |
| 114 | +``` |
| 115 | +增加执行权限。 |
| 116 | + |
| 117 | +如果执行立即结束并且没有任何反馈,则没有问题。 |
| 118 | + |
| 119 | + |
| 120 | + |
| 121 | +## 三、实验提示与说明 |
| 122 | + |
| 123 | +### (1)如何入手 |
| 124 | + |
| 125 | +推荐阅读顺序:本文档 > `README` > `bits.c` 的注释部分。 |
| 126 | + |
| 127 | +`README` 文档中对实验文件做了较为详细的介绍。 |
| 128 | + |
| 129 | +`bits.c` 是同学们唯一需要编辑的文件,其中包含了谜题规则介绍, 18 个谜题以及谜题内容、难度、分数等。 |
| 130 | + |
| 131 | +上面的两个文件请务必仔细阅读。 |
| 132 | + |
| 133 | + |
| 134 | + |
| 135 | +注意到,每一个谜题包含了如下信息: |
| 136 | + |
| 137 | +* 能使用的运算符。 |
| 138 | +* 能使用的运算符总数量。 |
| 139 | +* 能使用的常数的值域范围。 |
| 140 | +* 变量类型。 |
| 141 | +* 能否使用控制语句(如 `if` )等。 |
| 142 | + |
| 143 | + |
| 144 | + |
| 145 | +### (2)测试 |
| 146 | + |
| 147 | +* 除了 `bits.c` ,你不应该编辑任何其余文件。 |
| 148 | + |
| 149 | +* 完成谜题后,需要检验自己的代码是否正确: |
| 150 | + |
| 151 | + * 首先,执行下述指令,检查每个函数使用的运算符类型、数目是否符合要求: |
| 152 | + |
| 153 | + * ```shell |
| 154 | + ./dlc -e bits.c |
| 155 | + ``` |
| 156 | + |
| 157 | + * 如没有任何报错,按顺序执行下述指令,测试每个函数的正确性: |
| 158 | + |
| 159 | + * ```shell |
| 160 | + make clean |
| 161 | + make all |
| 162 | + ./btest |
| 163 | + ``` |
| 164 | + |
| 165 | + * `btest` 执行时会给出每个谜题(函数)是否通过测试(未通过时会给出测试数据),并且会计算你的最终得分。 |
| 166 | + |
| 167 | +* 你可以利用上 `./ishow` 和 `./fshow` 来帮助你调试(用法见 `README`)。 |
| 168 | + |
| 169 | + |
| 170 | + |
| 171 | +## 四、提交实验 |
| 172 | + |
| 173 | +### (1)内容要求 |
| 174 | + |
| 175 | +你需要提交至少两份文件,包含你的 `bits.c` 和一份实验报告。 |
| 176 | + |
| 177 | +实验报告应该包含以下内容: |
| 178 | + |
| 179 | +* 实验标题,你的姓名,学号。 |
| 180 | + |
| 181 | +* 你在终端中执行 `./dlc -e bits.c` 后的截图。 |
| 182 | +* 你在终端中执行 `./btest` 后的截图。 |
| 183 | +* 描述你实现每个函数的思路。bits.c中不要求给自己的代码写注释(写了也无妨) |
| 184 | +* 如果有,请务必在报告中列出引用的内容以及参考的资料。 |
| 185 | +* 对本实验的感受(可选)。 |
| 186 | +* 对助教们的建议(可选)。 |
| 187 | + |
| 188 | +### (2)格式要求 |
| 189 | + |
| 190 | +可提交 `.md` 文件或者 `.pdf` 文件。不要提交 `.doc` 或 `.docx` 文件。 |
| 191 | +(如果提交 `.md` 文件,请确保助教能同时看到你报告中的截图!) |
| 192 | + |
| 193 | +### (3)上传 |
| 194 | + |
| 195 | +在终端运行以下指令: |
| 196 | + |
| 197 | +```shell |
| 198 | +git add -A |
| 199 | +# 提交当前文件夹下的所有更改到暂存区 |
| 200 | +git commit -m "xxx(可以是你的提交注释)" |
| 201 | +# 将暂存区的所有更改提交到本地仓库 |
| 202 | +git push |
| 203 | +# 将本地仓库推送到远程 |
| 204 | +``` |
| 205 | + |
| 206 | +### (4)打分规则 |
| 207 | + |
| 208 | +* 实验报告要求简洁清晰,不必追求字数,描述清楚思路即可 |
| 209 | +* 对每道谜题请先做思考,不要立即使用搜索引擎。 |
| 210 | +* 不允许抄袭其它人的代码,一旦发现,零分处理。 |
| 211 | + |
| 212 | + |
| 213 | + |
| 214 | +## 五、参考资料 |
| 215 | + |
| 216 | +* http://csapp.cs.cmu.edu/3e/labs.html (lab 来源,本实验相较原文件有改动) |
| 217 | +* 本文档编写时参考了 24 年的实验文档 。 |
| 218 | +* 负责助教: |
| 219 | + * 蔡亦扬 caiyy23@m.fudan.edu.cn |
| 220 | + * 项正豪 zhxiang23@m.fudan.edu.cn |
| 221 | + |
| 222 | +**特别鸣谢**:24 Fall ICS助教李增昊 |
0 commit comments