【2025.1.11更新】核心课程笔记挂在github(笔记链接)欢迎star&follow
本学期学的两门核心课,一个CS,一个OS。对我来说都有一定难度。
CS总评91/100。(应该是年级第三)
主要是期末考试没太发挥好,
期末没考好的原因是存储部分有个++没有考虑写的情况,送了8分(这个很多人都错了)。
总领
CS的学习采用最经典的书——CSAPP,也被称为计算机领域圣经,这是必看的书。
学习完这本书,对于计算机的组成以及汇编语言会有一定的了解,能大致知道计算机的系统层面是怎么工作的。
教学采用的是第二版,我的书是第三版,这两者之间的主要不同点在于第二版是以32位系统为例讲解的,而第三版是以64位系统为例讲解的。主要在第三章汇编语言的部分会有不同,一是寄存器的表述,64位系统寄存器有rax%等,而32位系统寄存器只有eax%等。另一个主要是调用函数时存储调用参数以及返回参数,64位系统由于寄存器较多,有时可能不用在栈内储存调用参数,但32位系统寄存器较少,会更多地占用栈的空间。此外,返回的参数储存在哪里也会有影响。
总而言之,应试而言,至少第三章的汇编语言部分得看第二版,否则会做不了题目。
(封面是著名的存储器山,反应主存读写吞吐量的)
课程成绩主要由 【作业+实验+小班】 + 期中(10%)+ 期末(40%)这5个部分组成
【2024.2.26补充】重新上了一下2022级的课,好像实验占比20%
作业和实验不知道怎么给分的。给分的算法很迷。
作业
作业我看了一眼,几乎都是100,大家应该都一样。
说实在,学到大二往后,看作业基本上没什么意义了,大家都能校对答案到100分,平时分都能拉满,究竟学没学懂,就只有自己能知道了。
作业我觉得还是自己要做一遍,给挑出来作为作业的题目,要么是往年的期末考题,要么是书上原题,对于知识掌握和应试都有很大帮助,做完之后校对到100即可,错的自己记号。
实验
第一个实验是研究生助教学姐验收的,可能我和助教都没太看懂,好像给了A。
第二个实验是一位临时征派的老师负责验收,可能老师和我也都没太懂,讲运行时栈我给他讲了几遍,他好像能听懂了,给了我B++,不是很懂。
第三个实验和第四个实验都是A橙_学长给我验收的,A橙_学长可真的是太懂了,因为他去年自己做过这些实验,只能说不愧是计科top,太强了!!!学长不仅能够在短时间内判断我们有没有真的自己做这个实验,还能通过几个问题快速确定我们理解到了什么程度。厉害!
PrototypeSystemLab,DataLab,BombLab,ShellLab
这四个实验都很精彩。【补:如果有志于之后学习系统的同学,一定要认真完成】
【BombLab】
特别是BombLab,特别值得花很多时间研究!从一点都不懂,通过自己研究搞懂整个给定汇编代码的运行逻辑。对于自己的汇编语言基础是一个很大的提升。记得一开始几题其实很简单,但我花了好多时间去理解它的模式,一道题往往能花上一个下午,甚至一个晚上。总共六道题和隐藏题加起来应该能研究了20个小时。可能是我天资比较愚笨,但这种依靠时间堆砌的方法真的能让我看懂汇编代码。看着这些汇编代码能让我忘记打崩三,忘记原神启动。从一点不懂到有一点懂,再到有一些理解的过程,能给人带来纯真的喜悦。
【补:BombLab自己认真做一遍,对做汇编题有很重大的帮助,千万要抽时间自己做一遍】
【ShellLab】
ShellLab让我有机会能自己实现一个简单shell,这个实验主要是参考的学长代码作为主体框架,然后自己去看懂复现,应该是我自己代码能力的问题。主要就是信号的传递以及处理,包括信号处理函数,重点还在于对于jobs列表的修改要上锁,这里涉及到OS的临界区问题,这个列表同时只能一个在修改,防止出现并发问题。具体的解释在实验里有。
【DataLab】
DataLab主要是对于二进制数的理解,我们的实验只是一小部分,还有很多题目在CSAPP官网上有。这个实验主要是在限制操作数与操作符下,只通过二进制数之间的与或非反移位等简单的限制操作,实现将这个二进制数改变成目标的效果。
说实在,这个实验我觉着其实没那么有意思。但是也是对虚拟机理解的一个用处吧。
小班
小班是达老师(哒老师)教的,很喜欢这样有互动的小班,感觉能push我们学习
各次讨论课PPT如下:
【challenge部分】
最有趣的是讨论课7的challenge部分,要求缩小可执行文件的大小,用最小的空间能运行并输出2023。实际上这个考察的就是对于链接静态库这一章的知识点的理解,称为一个实验毫不为过,我是花了一晚上的时间熬夜到3点,利用网上有限的资料进行了一些探索,虽然方向跟老师的方向可能不太一样,但还是做出了一些结果的。这个讨论真的非常有趣。
期中
没什么好说的,给了题库,刷题就完事了。最好别扣分,错两道题总评就少0.3分,很致命。
期末
【2024.1.25补】
我的期末复习方法是看书+刷题,很平平无奇的方法,主要是坚持下去。
事先说明,我的方法适合特别想考好的小镇做题家,无师自通的大佬可以略过。
看书:
看书就是把CSAPP书从前往后看,然后做笔记(笔记我放GitHub上了,问我要链接即可),做笔记主要是为了怕自己看完后面的把前面的忘记了,考前再翻一遍起到巩固的作用。
做题:
① 能找到的往年期末卷子,都可以做一遍,看看题目是怎么出的,我该怎么答。
【提示】最好找一个志同道合并有一定实力的伙伴,边做边校对答案,然后不懂的进行讨论。
② CSAPP课本后面的习题也是很好的,可以翻一翻,看一看会不会答,往年也出现过出课本原题的情况。
心态:
事在人为,复习充分,考试就与我没有关系了。我要做的就是把我知道的都写上去,就行了。
湖南大学的系统在学科排名里是很靠前的,课程组的备课感觉也是很用心的,
祝大家都能从这门课程中收获获得感(成绩满意+学到东西)。