【CSAPP】Architecture Lab 实验笔记】的更多相关文章

archlab属于第四章的内容.这章讲了处理器体系结构,就CPU是怎样构成的.看到时候跃跃欲试,以为最后实验是真要去造个CPU,配套资料也是一如既往的豪华,合计四十多页的参考手册,一大包的源码和测试程序.意料之外是具体考你的不是"炼丹"(指沙土炼硅造芯),而是处理器级别的优化,要把处理器的性能榨干才能得满分.不愧是CMU,榨得我已经一滴脑汁也没有了,最后还只得了八成的分. 通过上次实验我知道了CMU喜欢给头铁之人留几个零头,所以剩下两成分我也不追求了.(耻辱下播) 前期准备 下载讲义和…
shlab这节是要求写个支持任务(job)功能的简易shell,主要考察了linux信号机制的相关内容.难度上如果熟读了<CSAPP>的"异常控制流"一章,应该是可以不算困难的写出来.但如果读书不仔细,或者实践的时候忘记了部分细节,那就可能完全不知道怎么下手,或者得改bug改到吐了.我自己写了大概八个小时,其中仅一半的时间都在处理收到SIGTSTP后莫名卡死的问题,最后才发现是课本没看仔细,子进程停止后也会向父进程发送SIGCHLD. 在实验中我们需要实现job.fg.bg…
cachelab这节先让你实现个高速缓存模拟器,再在此基础上对矩阵转置函数进行优化,降低高速缓存不命中次数.我的感受如上一节,实在是不想研究这些犄角旮旯的优化策略了. 前期准备 我实验的时候用到了valgrind和python,都可以用apt-get大法直接安装 Prat A: 高速缓存模拟器 C语言图书管理系统级别的题目,照着课本硬模拟就行.讲义里说可以用malloc动态分配cache大小,但这东西规模很小,我直接预定义成了个大二维数组.唯一能说的新东西就是getopt了,解答了我一直以来对程…
attacklab这节玩的是利用一个字符串进行缓冲区溢出漏洞攻击,就小时候想象中黑客干的事儿. 做题的时候好几次感叹这些人的脑洞,"这都可以攻击?还能这么注入?这还可能借力打力?"等自己注入的时候却是"啊?怎么又段错误了?怎么又算错地址了?"也是一次有趣的经历了. 小插曲:我拿到文件的时候直接去读得readme,看完了还迷惑这readme咋就这么点信息.后来知道了实验都要配合着writeup讲义看,不禁感叹我前两个实验没看讲义还能做出来真是个奇迹! level1 第…
perflab这节的任务是利用书中知识,来对图像处理中的Rotate和Smooth操作函数进行优化.这次没对上电波,觉得学了一堆屠龙之技.于我个人理解,现在计算机配置比以前高多了,连SWAP分区都几近废弃了,对于一般开发者来讲,代码效率瓶颈首先是架构,其次是算法,最后才是书里教的这些小细节.而且这节也没个具体的分数标准,优化了半天也不知道自己写的算啥水平,缺了前面几节那种攻克难题的成就感.不过也有可能是因为我太菜了 XD 前期准备 这次的开发环境被我迁移到了WSL上,系统版本为ubuntu 18…
bomblab这节搞的是二进制拆弹,可以通俗理解为利用反汇编知识找出程序的六个解锁密码. 早就听闻BOMBLAB的大名,再加上我一直觉得反汇编是个很艰难的工作,开工前我做好了打BOSS心理准备.实际上手后发现比想象的要简单. 我觉得这多亏了作者没有搞代码优化,让我能比较轻易的还原出源代码,甚至一眼看出所用的数据结构.但凡它搞一点儿代码混淆,都会把这次实验变成一次苦痛之旅. 前置小技巧 1.gdb调试汇编 我试了一番后觉得用以下几条指令在全屏模式下调试是体验最好的 gdb -tui ./bomb…
前天讲到要刚CSAPP,这一刚就是两天半.CSAPP果然够爽,自带完整的说明文档,评判程序,辅助程序.样例直接百万组走起,管饱! datalab讲的是整数和浮点数怎么用二进制表示的,考验的是用基本只用位运算来实现一些看似稀松平常的操作.实际体会就是看题五秒钟,脱发两小时.当然做出来的成就感也是爆棚的. 求异或 根据离散数学等值演算写出公式 //1 /* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Legal op…
本文为上海交大 ipads 研究所陈海波老师等人所著的<现代操作系统:原理与实现>的课程实验(LAB)的学习笔记的第三篇:用户进程与异常处理.所有章节的笔记可在此处查看:chcore | 康宇PL's Blog 实现用户进程 进程结构 ChCore 中每个进程都对应一个 process 结构体.slot_table 是一个进程占有的内核对象数组和元信息组成的结构体.thread_list 是连接该进程所有线程的链表.如何通过 list_head 的得到对应的对象我们在 Lab 2 里已经学习过…
CSAPP buffer lab为深入理解计算机系统(原书第二版)的配套的缓冲区溢出实验,该实验要求利用缓冲区溢出的原理解决5个难度递增的问题,分别为smoke(level 0).fizz(level 1).bang(level 2).boom(level 3).kaboom(level 4).在实践中加深对函数调用和缓冲区溢出机制的理解(针对IA-32体系结构). 本记录使用的是取自原书配套网站的self-study handout版本,网址为http://csapp.cs.cmu.edu/2…
记录关于CSAPP 二进制炸弹实验过程 (CSAPP配套教学网站Bomb Lab自学版本,实验地址:http://csapp.cs.cmu.edu/2e/labs.html) (个人体验:对x86汇编寻址模式要有清晰的了解,如mov指令涉及的是计算出的地址所指向的存储单元的值,而lea指令保留的是计算出来的地址,数字是否加$表示常数的问题等: 实验中涉及的跳表的存储方式.链表的处理等是C语言的汇编语言实现方式,处理起来较为复杂,但可对这些方式的对象底层实现方式有一个较为清晰的了解: 涉及指针操作…