- 数据实验。这个实验要求实现简单的逻辑和算术运算函数,但是只能使用一个非常有限的 C 语言子集。比如,只能用位级操作来计算一个数字的绝对值。这个实验可帮助你了解 C 语言数据类型的位级表示,以及数据操作的位级行为。
- 二进制炸弹实验。二进制炸弹是一个作为目标代码文件提供给你的程序。运行时,它提示用户输入 6 个不同的字符串。如果其中的任何一个不正确,炸弹就会“爆炸",打印出一条错误消息,并且在一个打分服务器上记录事件日志。你必须通过对程序反汇编和逆向工程来测定应该是哪 6 个串,从而解除各自炸弹的雷管。该实验能教会你理解汇编语言,并且强制你学习怎样使用调试器。
- 缓冲区溢出实验。它要求你通过利用一个缓冲区溢出漏洞,来修改一个二进制可执行文件的运行时行为。这个实验可教会你栈的原理,并让他们了解写那种易于遭受缓冲区溢出攻击的代码的危险性。
- 体系结构实验。第 4 章的几个家庭作业能够组合成一个实验作业,在实验中,你修改处理器的 HCL 描述,增加新的指令,修改分支预测策略,或者增加、删除旁路路径和寄存器端口。修改后的处理器能够被模拟,并通过运行自动化测试检测出大多数可能的错误。这个实验使你能够体验处理器设计中令人激动的部分,而不需要掌握逻辑设计和硬件描述语言的完整知识。
- 性能实验。你必须优化应用程序的核心函数(比如卷积积分或矩阵转置)的性能。这个实验可非常清晰地表明高速缓存的特性,并带给你低级程序优化的经验。
- cache 实验。这个实验类似千性能实验,你编写一个通用高速缓存模拟器,并优化小型矩阵转置核心函数,以最小化对模拟的高速缓存的不命中次数。使用 Valgrind 为矩阵转置核心函数生成真实的地址访问记录。
- shell 实验。你需要实现自己的带有作业控制的 Unix shell 程序,包括 Ctrl + C 和 Ctrl+Z 按键, fg、bg、jobs 命令。这个过程你能够对 Unix 的进程控制、信号和信号处理有清晰的了解。
- malloc 实验。你需要实现自己的 malloc、free、realloc( 可选)版本。这个实验可让你清晰地理解数据的布局和组织,并且要求评估时间和空间效率的各种权衡及折中。
- 代理实验。你需要实现一个位于浏览器和万维网其他部分之间的并行 Web 代理。这个实验向你揭示了 Web 客户端和服务器这样的主题,并且把课程中的许多概念联系起来,比如字节排序、文件 、进程控制、信号、信号处理、内存映射、套接字和并发。你会很高兴能够看到他们的程序在真实的 Web 浏览器和 Web 服务器之间起到的作用。
网友评论