目录
- 《计算机系统》加分项目
- 《CSAPP:深入理解计算机系统》
- 数据实验
- 二进制炸弹实验
- 缓冲区溢出实验
- 体系结构实验
- 性能实验
- cache实验
- shell实验
- malloc实验
- 代理实验
- 《CSAPP:深入理解计算机系统》
《计算机系统》加分项目
过去,凡是计算机专业人员都对计算机的工作原理和工作方式了如指掌。计算机体系中的硬件、软件、编译器以及操作系统之间的交互既简单又透明,因此要把握计算机系统大局观并非难事。然而随着现代计算机技术的日趋复杂,这种明晰性不复存在:计算机科学领域里面大多数基本思想和技术都被隐藏在众多抽象接口以及私有实现的层面之下。这种复杂性导致了无法避免,的结果,即领域专业化;这使得多门计算机科学领域应运而生, 每个领域只涵盖整个学科中的某一个方面。
计算机专业、信息安全专业、网络空间安全专业的学生识木而不知林,疲于埋头学习程序设计、各种理论以及工程知识,却失去了对计算机系统整体的把握和理解,未曾停下来欣赏计算机系统大局观的美景。这个大局观为我们展示的是:硬件系统和软件系统如何经由隐藏的抽象、接口以及基于各种约定的实现所编织起来的网,从而紧紧地关联在一起。由于没有从表及里地透彻领略这个繁复大局观的魅力,使很多学生和计算机、信息安全从业人员产生了不安的感觉,因为他们并没有完全透彻理解和掌握计算机的内 部工作原理。
理解计算机工作原理的最好方法就是亲自动手,或者从零开始构建计算机系统,或者基于各种计算机系统深入了解底层,这些知识并不难,只是太底层,导致不少学生很畏难。
我读书的时候,计算机硬件集成度比较低,声卡、显卡、网卡等都是分离的,那时候的学生多有拆卸机器的经验,装卸内存条、硬盘也经常操作,组装计算机的过程就对计算机硬件有比较好的了解,现在的主板集成度已经很高了,很多计算机专业、信息安全专业、网络空间安全专业的学生甚至都没有打开过计算机,看看内部都有什么。我读书的时候,操作系统主要还是DOS系统,你想玩个游戏,不会写批处理文件,不会配置内存都玩不好,那时候操作系统更新也比较快,系统稳定性也不好,漏洞很多,经常需要安装系统,现在的学生做这些工作也很少了。
当然,现在有各种单片机,DSP,嵌入式系统开发板,FPGA开发板等,组装一个计算机系统并不是太难,特别是现在有树莓派、Arduino开发板,可是一旦涉及到硬件都要花钱买硬件。
如何不花钱学习计算机系统,我推荐几个软计算机系统供大家参考,这些虚拟机的深入研究能帮助大家深入理解计算机系统,相关学习作为学有余力的学生的加分项目。
- 《CSAPP:深入理解计算机系统》第二版第4章提供一个Y86模拟器,类似intel的IA32,第三版第4章提供一个Y64-64模拟器,类似intel的x86-64,
- 《计算机系统要素》中提供了一个计算机Hack,这台计算机是从NAND门开始一步一步搭建起来的,涉及到硬件构建、机器语言、汇编语言、高级语言、操作系统、编译原理
- 《计算机系统》第4版提供了一个虚拟机Pep/8,第5版提供了一个虚拟机Pep/9.
《CSAPP:深入理解计算机系统》
实验详细细节参考Lab Assignments.每个实验都要提交相关总结博客链接,代码托管链接,并进行答辩。
数据实验
- 这个实验要求学生实现简单的逻辑和算术运算函数,但是只能使用一个
非常有限的C语言子集。比如,只能用位级操作来计算一个数字的绝对值。这个实验可帮助学生了解C语言数据类型的位级表示,以及数据操作的位级行为。
二进制炸弹实验
- 二进制炸弹是一个作为目标代码文件提供给学生的程序。运行时,它提示用户输入6个不同的字符串。如果其中的任何一个不正确,炸弹就会“爆炸”,打印出一条错误消息,并且在一个打分服务器上记录事件日志。学生必须过对程序反汇编和逆向工程来测定应该是哪6个串,从而解除各自炸弹的雷管,该实验能教会学生理解汇编语言,并且强制他们学习怎样使用调试器。
缓冲区溢出实验
- 它要求学生通过利用一个缓冲区溢出漏洞,来修改一个二进制可执行文件的运行时行为。这个实验可教会学生栈的原理,并让他们了解写那种易于遭受缓冲区溢出攻击的代码的危险性。
体系结构实验
- CSAPP第4章的几个家庭作业能够组合成一个实验作业,在实验中,学生修改处理器的HCL描述,增加新的指令,修改分支预测策略,或者增加、删除旁路路径和寄存器端口。修改后的处理器能够被模拟,并通过运行自动化测试检测出大多数可能的错误。这个实验使学生能够体验处理器设计中今人激动的部分,而不需要掌握逻辑设计和硬件描述语言的完整知识。
性能实验
- 学生必须优化应用程序的核心函数(比如卷积积分或矩阵转置)的性能,这个实验可非常清晰地表明高速级存的特性,并带给学生低级程序优化的经验·
cache实验
- 这个实验类似于性能实验,学生编写一个通用高速缓存模拟器,并优化小型矩阵转置核心函数,以最小化对模拟的高速缓存的不命中次数。我们使用valgrind为矩阵转置核心函数生成真实的地址访问记录
shell实验
- 学生实现他们自己的带有作业控制的 Unix shell程序,包括Ctrl+C和Ctrl+Z按键,fg、bg和job命令。这是学生第一次接触并发,并且让他们对Unix的进程控制、信号和信号处理有清晰的了解。
malloc实验
- 学生实现他们自己的ma11o、free和rea1loc(可选)版本。这个实验可让学生们清晰地理解数据的布局和组织,并且要求他们评估时间和空间效率的各种权衡及折中
代理实验
- 实现一个位于浏览器和万维网其他部分之间的并行Web代理。这个实验向学生们揭示了Web客户端和服务器这样的主题,并且把课程中的许多概念联系起来,比如字节排序、文件1O、进程控制、信号、信号处理、内存映射、套接字和并发。学生很高兴能够看到他们的程序在真实的Web浏览器和Web服务器之间起到的作用。
欢迎关注“rocedu”微信公众号(手机上长按二维码)
做中教,做中学,实践中共同进步!
- 原文地址:https://www.cnblogs.com/rocedu/p/11684156.html
- 推荐网站:博客园、新浪微博、扇贝背单词、DKY背单词小组、有道云笔记、豆瓣读书
- 版权声明:自由转载-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文”
《计算机系统》加分项目
原文地址:https://www.cnblogs.com/rocedu/p/11684156.html