CS61C结课笔记,感想,以及资源
前面的碎碎念
从10月半开始到12月末,终于赶在年尾完成了自己曾经做出的计划,原计划是大概两个月的节奏收一门课,后来由于学校的期中考试分数爆炸和自己的压力导致学习浮躁,心不在焉。
最后不仅学校的学习没有做好,拥有基础的CS61C居然花了目前为止最长的时间,实在是不应该!!!
气死我了
关于CS61C
前排推荐飞猪大佬和茗落哥哥写的对应的文章。
UCB CS61C: Great Ideas in Computer Architecture (Machine Structures) - CS Plan (cs-plan.com)
https://cs-plan.com/%E5%9F%BA%E7%A1%80%E6%B7%B1%E5%85%A5/%E8%AF%BE%E7%A8%8B%E6%8E%A8%E8%8D%90/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/UCBCS61C/
UCB CS61C: Great Ideas in Computer Architecture - CS自学指南 (csdiy.wiki)
https://csdiy.wiki/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/CS61C/
CS61C,个人感觉对标国内的《计算机组成原理》(但是不要指望学完这个就可以乱杀408),跟CSAPP(CMU-15213)相比则是更加偏向于硬件,对于操作系统方面只有非常少的部分。
CSAPP的话是更加偏向于整体的一个概念。
而且两者采用的是不同的汇编指令集进行教学,如果有条件的话,最好两个都上。我个人是目前没有上完213的,等到学完之后,可能会写一个比较综合的评价
贴一段别人写的
本课程涵盖的主题包括C语言和汇编语言编程(RISC_V),高级程序翻译成机器语言,计算机组织,缓存,性能测量,并行性,CPU设计,仓库规模计算,以及相关主题。
感想
我上的是fa21版本,写的是fa22的作业。
我是先把大黑书看完了(以前无聊加上对这个有兴趣)然后才来上这门课的,所以后面内容基本没有感受到什么压力。要不是我摆烂我觉得我可以一个月不到完成这个东西
没有学过C语言写前面的内容很痛苦,61C关于C的部分节奏很快,有比较好的复习效果,对于初学者也有一定的帮助,感觉老师讲了但又好像没有讲,写HW的时候感觉老师好像又什么都讲了,回去看的时候又发现好像什么都没讲。
0.0?
太痛苦了
建议新手一定要看参考书,我个人看的是《C和指针》
Project3,手撕CPU的一部分,实现二段流水(很简单),很好的总结和回顾了前面内容,就像打通了任督二脉一样让人神清气爽。
我个人觉得是61C的精髓并且强烈建议使用硬布线,而不是用ROM,纵然ROM确实非常的节省时间,但硬布线他会强迫你观察指令对应的机器级指令,进行比较和猜想,从而构建出一套比较优雅的控制逻辑。因为你如果掌握不了对应的美的话,你可能会想自杀的。
举个例子,其中一个控制逻辑PCSel,只需要七个门就可以做出来!大家可以试一下。
以及RISC-V如此稀碎的立即数也是有他的美丽和优雅的。(这个比较好发现,但是在我尝试优雅的布线后,我裂开了,大家有优雅的实现可以在评论里踢我一脚......)
这里贴一下我PCSel的发现过程
其实也是有运气的成分了,只有设计良好的指令集可能才能这么用。
我是首先把所有类型指令的opcode列出来,
然后看哪些指令可以修改PC(就是pcsel能等于一)
发现只有b型和j型,还有一个特殊的I型(jalr)可以这么修改
然后这些指令特点就是op6是1,其他指令都是0(我的op编号是从右到左是0~6)
所以我就判断op6一定是在这个pcsel中,是必要条件
然后jal和jalr是无条件的,B是有条件的,所以我看了一下他们有什么区别,然后我发现op2他们是1
B对应是0,所以肯定有一个op6 AND op2,(jal和jalr的op3不一样,应该是用在其他控制判断里)
然后看了一下B型指令的跳转条件
发现func3(2,1,0)
里面的fun1是表示无符号数,fun2表示是是否执行不等指令
然后我把pc=1的条件成立条件列出来后发现可以用xor。
背后的逻辑是
我认为指令是不同信号的组合(hw里面有问过几个虚构指令是否可行,可行的话对应控制逻辑是什么。)
Op段的指令应该会控制绝大部分的数据通路的逻辑(ALU取什么数进行运算,mem是否可写)
func3和func7应该是对具体运算和具体指令的指导。
然后比较巧的是pcsel可以这样写。
复杂点的Immsel我弄不出来,写的就很丑。
Project4的环境配置堪称环境科学,我只写了part1,dumbpy的导入不论哪个版本我都会有segmentation fault。(顺便发现fa21和fa22的代码几乎一模一样0.0)文末会给出我踩过有关环境的坑。
建议去把参考书目的《计算机组成与设计硬件/软件接口》看完,有很多话题61C并没有深入的讨论。
最后考了下final test ,只有80分.....暴露出来的问题是
并行产生的cache不一致,memory问题,反而比串行要慢
C语言,关于String literal,关于#define的替换
仓储级计算机居然用上水冷了
眼瞎(对着sb在reference card 上找sw)
失忆(忘了calling convention)
对于Datapath自定义指令没有一步步实行导致认为的理所当然
笔记 真正的碎碎念,所以我忽略了
lab与project的综述

个人Project3的疑问

Project4的环境配置(建议写fa21的)

然后Makefile里面的python版本一定要修改成本地的!
记得要去掉python版本号后面的m!(不行再加回来)

如果没有对应的python3.6版本可能是因为你没有安装python3.6,你安装了python不一定安装了这个。
然后应该就可以运行 make test了。
一些比较碎的而且可能无所谓的资源,他人的经验分享之类的。
cs61c 自学小结 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/346676981
CS61C 完结记录 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/476562056
“奋战三星期,造台计算机”__CS61C教材__《计算机组成与设计RISC-V版》__硬件和软件__15-213教材__CSAPP《深入理解计算机系统》 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/379380471
61C的QQ交流群
300202956