2023-9-25 17:11 /
一楼置NULL
#1 - 2023-9-25 17:11
(咕咕咕)
前言:
由于不想在超展开里被看到,所以发一个不关联任何条目(废话)的日志。日志的初衷在于记录学习进度,以及随时发表一些相关感想。发到bgm的原因是自建blog比较麻烦,而bgm日志私密性还是不错的,如果我调为“仅好友可见”便效果更好了(还没想好是否需要),而且还能为我提供一些受监督的感觉。
实际上我在过去一年多里总是感觉手足无措:想读研但是卷不过绩点,处于难以保研的分数边缘徘徊,何况我对卷“没有意义的”事情是有抵触的;想刷竞赛,可是我在大一下刚开始时便出于很多原因退出了校ACM队,打算法根本比不过他们,也仅仅是让经历好看一些罢了,而且不会占用太多精力;想提升能力,可是我始终不知道该如何去做,去读CSAPP也感觉观感微妙,少有收获,可以说上个学期在这方面浪费了相当多时间。好在几个月前了解到CS自学指南这个网站,总算有些头绪,可是时间所剩不多,说不定还有考研方面的考量,我决定抓紧所剩一个学期的时间做些真正CS人应该做的事情。
虽然如此,可是我也不是完全没有课,好在课不多且有一半的课程没有听课必要,我早已决定放弃绩点,那么便可以较好的利用这种时间。我自身并不是什么能长久自习一动不动还能保持很高效率的人,基本上过去三周每天分配在自学上的时间是2.5h-4.5h不等,每周单休。不过保持这种pace我自己便感觉很舒服了,远比上个学习感觉自己“烂在泥地里”的手足无措感要轻松。
日志格式为每周统计放在一楼中,有可能更新进度会有延迟,每阶段(一门课)的前后会单开一楼写出随感,统计到这学期结束前,考虑到考试周应该比较接近12月底和1月初。这样大约是20多楼。本日志写于9.25,开学已经三周而我感觉计划的效果不错,但不知之后是否会有突发情况或个人因素推迟、暂停或中断计划。无论如何,我认为这是有意义的。
#2 - 2023-9-25 17:11
(咕咕咕)
Period 1: NJU OS (2022)
https://jyywiki.cn/OS/2022/index.html
计划结束时间:10.8 十一假期结束前后(以一周满计)
Period 0实为GAMES101,是我暑假看的,然而因为是暑假效率很低拖了很久,这些事都按下不表了。
NJU OS,原本我是因为不想看英文的mit6.s081所以选择的,而看下来远比我想象中的质量要高。甚至我可以说,jyy的NJU OS是我见过的全中国最好的计算机课,没有之一。我看这门课,感觉自己不仅在学OS,同时还把linux、csapp都学了,还丰富了一些domain knowledge。何况jyy所讲的OS内容也完全不同于一般的垃圾水OS原理课,该说这就是C9老师的实力么……不过实际上他本人的贡献要占绝大原因。
NJU OS的课特点是非常注重实践,命令行代码、调试内容都非常丰富,lab也很工程,写起来虽然很吃力,但是收获颇丰,我也受jyy影响逐渐掌握查manuel(RTFM)的能力了。他的课信息量真的很足,可能我们学校的课10分钟不听看一眼ppt还能接上,他的课可是从头到尾都需要集中注意力了。我们学校虽说最近要改培养方案,要开OS的实现课,可是实际说起来,Linux的老师(他应该负责大纲编排)水平也只能说很一般。可是看了jyy的课我真的认为我也许也能写个操作系统出来,虽说肯定会遇上不少困难吧。
目前进度(9.25)是课程20/32,Minilab完成2-4(不做1),Lab都没动,不过jyy有一节课专门讲Lab怎么写。实话说10.8前完成还是有困难,不过计划是有弹性的。
Period 2目前想法:补一些CS61B/CS61C的内容。后续有cs144、coursera ML的想法,具体再定。
#3 - 2023-9-25 17:12
(咕咕咕)
9.25-10.1 Week4
Mon.       
Lec19一大半,Lec20一半,晚上调M2和M4代码。由于是第一天,稍微多写一下之前的事吧。周六憋在教室把M2 Libco写了,虽然最终只有50余行但是逻辑真的不容易,也是对着几千字的实验指南看了好几遍。还没有调试感觉不妙,应该会晚上Linux课调试。Lec20讲处理器调度这里就完全看出NJU OS与其他的区别了,在那里手算RR真的是OS课应该有的内容吗?而且手算RR根本没难度啊。
插点题外话,Lec20有一点讲的很有感想,现实世界中的处理器调度都如此复杂到无法考虑单一算法,何况更大的调度呢。工作里向运维抱怨客户反馈反应慢了很容易,但是真改进起来要wordload分析和perf多少次才能得到头绪呢。机制是教科书的内容,而策略是复杂的工作,从这个角度来看,愤青没什么意义。这也是我一直看不惯bgm键政人的原因:推翻秩序比建立秩序容易的多,口头指责比实操容易的多,何况很多人连“机制”都知之甚少呢。
Tues.
Lec21。22是lab课待之后看,23好像非常水的样子,这样可以从24开始了。调了libco的代码,easy case下是能运行了,逐步调试下协程切换效果不错。但是堆栈对齐没搞懂,ABI要求%rsp16字节对齐,然而直接asm改又会Segmentation fault。printf不使用传入参数则工作正常,实感又吃了x86_64体系知之甚少的亏,毕竟nju的ics教x86_64,而我们学校只会念唐朔飞课本,这部分还是有点困难的,先这样吧。
Wed.
搞明白了堆栈对齐的意思,原来是我想复杂了。只需要切换堆栈时保证初始rsp、rbp为16字节对齐即可,那么传入rsp前对地址做一个&-16就行了。那么M2搞定了。晚上看Lec24。
实话说感觉进度有点慢,不知道4个月能做多少事。自己心理上也有各式各样的想法。想补的东西不少(何况商业上现在在用的库都还没有考虑去学,虽说我自己觉得调包这种事并不难)。深感自习确实是容易产生一些困难的,不过我还是会干下去。虽说我自己也不敢吹嘘一天自学3h是个什么了不起的事,不过这对我有意义就好了。
Thur.
Lec25。进度稍慢。
Fri.
划水一天,发现肉鸽新星Astrea。原本预期在周日划水提前了,因为是假期氛围一下子就不一样了,感觉自习上的阻力增大了不少。靠我之前完全没考虑到这点。
Sat.
Lec26。预计晚上Lec27。应该会跳过Lec30、31,这样就只剩3节+lec22了,课和M5肯定是能按期完成的。不过今天研究了一下Lab发现还是略复杂的,而且需要查的内容不少(他规定的教科书three easy pieces我就没有看过)。L1只有malloc和free还好,L2kmt还是相当复杂的。而我实际上对xv6也是近乎一无所知,mit6.s081也没有碰过。比较麻烦,保留采取搁置手段的可能。
Lec27今天看不完还要剩一点。不过发现了一个更刚需的事情:看FAT的官方Specification,似乎M5是要求通读手册才能做的。那么明天可能会去看看手册吧。
整个教学楼都没几个人,空教室可太好找了。
Sun.
提前写:放假气氛比较浓,且周日一直是我设计的单休日,感觉很有可能会鸽(即使没鸽估计也只会看半节),有可能会去看书吧。晚上直播看以撒光头杯5,终于赶上个直播了真不错。
#4 - 2023-10-2 16:30
(咕咕咕)
10.2-10.8 Week5
Mon.
读FAT spec。
Tues.
读FAT spec,晚上lec28。推算得完成除lab以外内容后还剩余两天左右。lab的先修知识不少,实际上我根本没有用过qemu也不会写printf sprintf的源码(直接用syscall里的write可以吗?),似乎也要读three easy pieces的书,更何况我写minilab根本没有按照要求用make。可能会视情况写L1而搁置L2(不过L2很重要我是肯定会补上的),然后按原计划结束本阶段。
虽说rtfm stfb获取内容也不难,M5明显要读好多关于FAT和BMP的内容。说到底还是一放假就有点松散了(沉迷Astrea和以撒)。原本也是巴不得有早八否则上午学习时间就会缩水很多。
Wed.
上午出去骑车绕了一圈,大概25km吧。于是头疼翘掉了。也正好把单休改到今天,毕竟周六周日要调休。明天去写M5。(好像开始流水账了?)
Thur.
M5,但是没写完。cluster的偏移量没搞明白。总体上看虽然叫file recovery,但实际上就是个模拟,论码量还没有csp认证第3题多的那种。但是确实对着xxd十六进制数据看了半天。其实就是找到解析FAT的方法,先读头找偏移量,再跳过FAT表读目录里的名称和首clus偏移量(没搞明白这个怎么算的),最后按大小读数据写入临时文件做个校验和就好了。
Fri.
Lec29。我在考虑以后一周一更而不是每天更(当然我会视情况在当天记录并保留),主要原因有二:其一并不是每天都有记录的必要,流水账写一下没有什么用;其二是记录并发在bgm上这件事也给我带来了一些负面的心理作用,被动监督对我的积极性还是有点影响,而且这也不是我的本意。我想内容比进度更重要,但我又不会把内容全放在这里,所以便成了形式上的写一下进度,这没有什么用处。所以从下周开始,我大概会在单休日将一周内容放出,初步想的是把进度统一而扩充关于内容的部分,这样的话便不会刻意去关注每一天干了什么,这实在是有磨洋工的意味在了,而我们都知道自学磨洋工是完全没意义的。
Sat.
研究了一下接下来的打算,果然接下来是离不开听英文课的,于是把workflow稍微配了一些。打算是cs61c->cs144,我对编译,数据库,web的兴趣不大所以暂不考虑。油管接翻译插件是个不错的选择,笔记暂且还用平板手写去记。完全使用电脑看视频还是有不方便的地方。另外这几天会把csapp的第9,10章认真看一遍。csapp啊,这东西我对它总有一种难以形容的感受。
Sun.
虽然说自己不看lec30和lec31,但今天还是去看完了这两个。明天收尾lec32,这样nju os就结束了。lec30和31更接近杂谈,lec30聚焦数据存储的演变说明了需求与风口的不断更新,完全是当局者迷的,而lec31则说明真实工程的复杂,再也不是只靠几个人就能做出一个系统的时代了。当真实世界的需求不断扩大,复杂度不断增大,各方面的压力都来到源码上,这已经不是靠着点子和几个人协作就能创造一切的事情了。华为真难啊。
#5 - 2023-10-9 11:01
(咕咕咕)
Period 1 结束总结:
以NJU OS作为csdiy的起始是个明智的决定。这不仅仅在于它是一门中文课,没有语言门槛,方便养成习惯;更在于它教了我很多可能需要像无边无际的英文大Lab公开课冲锋所做的基础准备——RTFM与调试操作,走出舒适区的勇气,以及作为一个中国教师以本土国情告诉了我们应该去怎样做。中国的大学教育——起码一直上溯到我这种中下游985档次的,近乎是1%水平的大学教育——都是不让人满意的。虽然可能你不能强求双非以下档次的学生有什么普遍的学习动力,但全中国只有寥寥几所大学的一部分课程是让人满意的,这个比例实在让人唏嘘不已。我想大概率jyy的课是中国最好的计算机课了,而且就以绝对的水平去衡量也丝毫不输国外名校的课(例如,他是唯一一个以状态机视角展开整个操作系统的)。
就这门课而言,虽然选为OS拔高课,但实际上内容涵盖了很多领域的导引。工具使用、Linux架构、CSAPP的内容、并发、工程实践等等。去纵观整个课程,jyy绝大多数时候都在命令行里开demo。这是个很重视代码的课,而中国学生所缺乏的就在于此,这门课我所得到的最大收获便是学会怎样自己去解决一个个lab的问题。就我个人而言,一开始完全没有碰过Linux,配环境都花了很久。写pstree也有一个点完全没有思路,又看libco很复杂很难想要放弃,最后决定以M3开始写Lab。写m3有个小点被折磨了5h不知道问题在哪,又去调试,rtfm等等。然后还是去写了libco把它做好了...虽说最后因为时间因素现在没有写lab(一定会找时间补上的),但是我完全没有最开始那么害怕去写它了,哪怕要查阅不少资料。这真的是一次很宝贵而有趣的经历。至于Lab,我决定在结束Period2 CS61C后去补上(也有可能会提前),届时我应该对体系结构有了一定了解了。
P.S.对不起jyy,我现在还是不会用gdb,调试都用的vscode看变量和寄存器。make因为用不了oj也没有使用,全部都是本地gcc的。以及vim我不喜欢用也不太会用,只能vscode傻瓜式使用(这个问题好像不大,写大Lab用vim很不好)
#6 - 2023-10-9 11:13
(咕咕咕)
Period 2:UCB CS61B (sp21)
计划结束时间:十月底
CS61B:https://sp21.datastructur.es/
一直犹豫要不要去看CS61B。因为我可以算是半个ACM出身,虽然没认真打过但却呆过半年ACM队,写C都有浓重的ACM风格。这带来两个方面的影响:其一是我在数据结构上的知识并不缺乏太多,专门去看CS61B不知是否有必要;其二是我数据结构的写法是不正规的(ACM队员能不用指针就不用),需要去重新考虑究竟如何写好数据结构,从这个角度似乎又需要去看CS61B。另外一个影响因素是我所剩时间不多,不知道是否应该去分配时间在上面。实话说现在比较急迫,确实该静下心来一些。综合思考下来我还是决定去看CS61B,但会选择性的跳过一部分内容,大约分配3周时间在上面,Lab肯定照做,然后去完整学完CS61C。
已拆分61B和61C,61C作为Period 3。
#7 - 2023-10-9 16:55
(咕咕咕)
10.9-10.16 Week6
以后的格式会比较懒散,采取不定期随感+周总结的方式。
10.11:随笔记录一下,cs61b确实比我想的要简单的多。课快速听了几节,全是已经学过的内容(java基础还是应该跳过一下)。proj0的难度.....比nju os的m5逻辑还要简单(proj0哪里用的到3-10h啊,配环境配1h,写代码1h都不到,纯粹一个小模拟),且m5要rtfm很久,它不需要。听说难点主要在proj2 gitlet。那么我还是继续加速快进一下,这周结束大概刷到lec15+同步的lab和proj吧。
10.12:进度lec7(lec15还是太激进了,因为有不少事,这周可能大概ep12-13吧)。其实61b的讲法还是很好的,但是我都会了......不知道怎么评价,几节课倒是听到了一点不知道的,但是大段内容属于是一眼就能看出来怎么做的,看一眼逻辑框架就直接快进了。

周进度:cs61b lec14,lab因为简单比较随意。
总结:实话说乏善可陈。原因已经写在上面了:难度不适配。几个Lab都属于大一的编程练习题水平,Proj只是大Lab,我真的没想到Proj1只是用链表和数组方式写俩队列,搞得我都没兴趣去写下去了。这样发展下去最多认真写写gitlet,这个页面长的让我回想起nju os M2协程库了。真实体会到了过于难和过于简单都是让人没有动力去写的。
至于CS61B课程内容方面,如果我没有学过Java,那它将是极好的。不过既然是我自己选的开61b,那当然会看完。等数据结构后面的部分展开后能学到的应该会多一点,而现在我感觉10+节课新学到的大约就只有不到2节的量,所以相当轻松。
下周就会开磕Gitlet了,周末lab时间应该是它的,不知道会磕多久但写完就约等于61b没什么东西了。
好想开CS61C。
#8 - 2023-10-17 20:58
(咕咕咕)
10.16-10.22 Week7
10.17:进度lec20,b-tree和红黑树没学过,看的很爽。但大概能看爽的也不多,现在距我开始看开始过了一周,这样看理想情况在下周五之前能结61b(结的真的快,虽说本来可以更快)。讲真有点焦虑,无数次想到要是早点开始认真起来就好了,结果等到想要去认真的时候已经很晚了,想一想大概是浪费掉了8-10个月的时间,有的是在试错,有的则纯粹在不知所措。大概估算在本学期结束最好能学完61c和cs144,然后大概就不剩下什么时间了。实际上我还有很多想涉猎的部分,但是在寒假和下学期还能分配出来时间吗?真的完全未知啊,这个gap half year结束后会怎么样。

进度:lec28,每天的lec数量记得应该是2.5+2+1.5+2+3+1+1。这个速度下周课肯定看完了,但proj要花点时间,具体完成时间未定。
总结:java部分和数据结构前期部分结束后还是有了一些收获的。二叉树讲的尤其畅快,我有兴趣想写篇内容整理随便发在哪里了(比如没人看的b站)。Proj2 Gitlet要花一点时间来做,因此完成时间应该会延后一些,就预设为下周结束吧,到时候我整理一下把61b和61c拆分开,61c当作period3。Gitlet这边倒是让我对git有了一定的了解,hash存所有版本的object这种如此浪费空间的策略还是挺有意思的。
但是负面内容也不少,10.17的内容就不赘述了。实话说每天平摊下来时长也不多,写proj的动力也寥寥。周末一直是一天放假一天出去写lab/proj,写lab(10.22)状态不佳,最后这个gitlet也只是开了一点头。网上gitlet风评不易,有人说他写这个写了40h。我虽自认不会写那么慢,但实在也才刚开始准备3h左右,指望一天写好毫无疑问不现实。在这个角度上看自己确实蛮焦躁的,总想着进度大跃进却难以实现。
不说这么多了。就算最慢,11月前也可以把61b结束开61c。如此上学期过半,学校课的活可能多起来了。也许有必要把寒假交了多开一门课算了,傻逼研究生之类的事管他呢。
诶红黑树的内容整理什么时候写呢,还有两周前被我搁置的nju os lab.......
#9 - 2023-10-23 19:32
(咕咕咕)
10.23-10.29 Week8
10.23:有点感冒,精神不太好。想了想gitlet还是要认真做,只听课的收获没有那么大。不急着追进度比较好。找了一下61c的资料,似乎按我现在的速度也要6周才能干完吧......计网那边学期末应该无法完成了。还有系统这方面内容很多lab也很多,csapp的lab也是考虑在内的,这样一算是不能急的,效果才重要。61b我就保留结束时间待定了,不过早晚也就是差个三五天的事。
到底还是一天学习时间也就那么点,说实在的我完全无法在周一到周五挤出5h,更何况很多因素把这个数削到3-4h就不错了。而且我自己挺累的,每天6h+是什么神人,考研也是这个数字属实不是我做不到的。没办法啦。
10.28:绝赞gitlet中,写了几天吧(4d?),纯代码时间大约10小时出头,加上查资料、准备、分析就15h+吧,我也没去刻意算这个时间。目前进度90%,没有测试。自我上次写中型以上项目也过去了大半年了,现在抽象程度一复杂起来,写的时间长就开始头晕.......但是感觉还是不错的,除了我确实每天学习时间不太多这一点。确实对Git理解深入了不少。唯一一点不好就是方法全写到一个文件里了,而且几乎必须要把绝大多数方法写一个文件里,一个.java塞20+个方法就算折起来还是头疼。周六就提前把这周的整理写完吧。

进度:lec37(?),gitlet完成待测试
周总结:这周一半多空闲时间在写gitlet,剩下的本来应有的lec时间因为被梯子抽风和上课干扰等因素制裁导致严重少于预期.......不过也没什么所谓了。大约下周二周三结束61b。也想不到什么好写的,就不写那么多了。
#10 - 2023-10-28 21:00
(咕咕咕)
Period 2 结束总结:
历时三周多一点完成了61B的课程和略多于一半的lab/proj。后者没有全部完成的原因是过于简单或者平替内容我已经做过了,没有再做一遍的必要,当然也有时间因素。纵观整个过程下来61B毫无疑问对我而言仍是太过trivial的,无论是课程内容还是lab难度都是如此。61B给我带来的收获,有一半来自Gitlet。这个Proj虽说与DS关系不大,但却颇具深度与工程意义,给我带来的感受也不亚于写NJU OS的M2。虽然我在框架之上只写了大约500-600行的代码(其中也包括空行、注释与长段switch命令行参数判断),但复杂度却不低。从中也是不断查找资料理解了Git内部的很多原理。这种基于命令行的朴实无华的500行实在比调用swing、qt包的500行要有价值的多,我学校的课设从来都是过于强调绘图,其中很多根本做不到需要去对底层数据结构进行深入思考,而Gitlet的元数据存储方式与数据结构我却改了不下5遍。深感优秀的project确实能让人学到很多,这方面我今后也会增加数量与时间分配。
回到61B的课上来,我原本的目的是整理一下对于数据结构的认识。虽然61B所及数据结构并不深,但这个目的还是基本达到了。实际上我acm的陋习大概已经在这两门课改好了不少,也认为指针越来越好用了。Acm的另一个陋习是过于追求解法和worst case下的时间复杂度,但这显然并不是DS和算法的全部。不过也因为acm的影响,我对于DS早已养成了一种“去DS化”的感受(取自尖塔的“去流派化”),即对于数据结构间的boundary感受并不严重,这也帮助了我理解很多算法的设计。总的来说吧,思维活一点总是好的。
61B的总体过程相当轻松,甚至经常让我感受收获甚微而不舒服,接下来就是61C的内容了,难度也能回归正常一些。
#11 - 2023-10-31 14:47
(咕咕咕)
Period 3 : UCB CS61C (fa20)
https://inst.eecs.berkeley.edu/~cs61c/fa20/
预计结束时间:十二月上旬
视情况,可能会补充CMU 15-213 CSAPP的实验。
CS的技术壁垒在中底层(OS,算法等),这是我比较相信的一点。体系结构在其中的作用是揭示操作系统层次背后的依赖,同时也基本可以与组成原理这些抽象好的硬件层共同看做CS一般讨论条件下的最底层。选择61C的主要原因有二:其一是好的体系结构课是会具体深入RISCV等,这是想深入学习系统层面不可或缺的;其二是我们学校对体系结构/组成原理的授课实在是一言难尽,学了好似如同没学(此刻我便在体系结构的课上,ppt满篇都是不知所谓的术语,而计组的课水平比这有过之而无不及)。
愈在网上搜索资料愈发觉时间有限,过去浪费时间太多。但这个是一定要补的。
#12 - 2023-10-31 14:56
(咕咕咕)
10.30-11.5 Week9
11.3 进度lec10。才发现RISCV是UCB牵头做的,讲课照着自己人做的讲挺有意思的。RV确实比x86的指令集简洁的多。补充了当时看nju os很多搞不清楚的概念,栈帧、pc寄存器、栈指针之类的。回去看了看之前写nju os M2搞不清楚的堆栈切换,看来我需要开gdb调一下setjmp,longjmp了。csdn的文档找了找难有把这个说清楚点,Stackoverflow又没有这个习惯,只能自己调一下试试了。
RV的sp寄存器感觉比x86简单很多,在调用过程结束的值是不会改变的,如果是RV我就完全可以理解为什么不能直接在函数中改rsp寄存器值了,但是x86我还不太理解。
周进度:lec11.5
总结:周末喜提发烧,鸽了一段时间,也没什么想法写总结了。
#13 - 2023-11-7 14:25
(咕咕咕)
11.6-11.12 Week10
Tues. 11.7:
写点杂谈吧,虽然内容可能有点不客观或有点偏见的东西。上课在前面一排看见了某位认识名字的acm选手,他在敲他的简历大纲,好像已经得到了一个银牌一个金牌。但我瞄了一下他写的其他内容,已经是除acm没有其他实质性内容了。想来也是正常的,大学做好一件事就已经不容易了。不过我还是觉得acm不是计算机科学,只做题也绝不是cs的学习方法。我高中就是打竞赛过来的(虽然是化学),深知竞赛人的缺陷所在。我当初没一直走下去这条道也很大程度上是不想被束缚住。虽然最后可能还不如搞下去呢,不过那都是“假如”了。打了这么多字也没讲到重点,acm人太容易气傲了,凭着自己会算法就自视甚高是很不应该的。或者说,深入学某种竞赛的都容易产生钻牛角尖子,以竞赛题目设涉及内容为评价水平的第一标准的问题,因此膜拜圈内大佬但是对圈外的易傲慢,高中这种现象太普遍了。即使我还是半个门外汉,但我走出这种心态也花了不少时间。
唉,写了这么多,果然我对acm实在有种复杂的感情。感觉这些是不是在bgm日志里发是不是不太好了。
正常内容:进度lec17。比较快是因为过了一堆已经学过的数电内容,甚至比当时我们学的数电简单多了,这下学校教的还真起了不小作用。
Thurs. 11.9:
写好了红黑树的整理,结合着CSAPP把之前一直困扰的rsp也想明白了很多,写了稿子发了b站上。这段记录很短是因为不知道为啥我这天写的日志被吞了,这段是我周日补的。原本写了挺长的不知道为啥也没了,可能是我存了个旧的编辑页的网页快照然后提交覆盖了吧.......
栈指针的:https://www.bilibili.com/opus/861931199655837704
虽然应该有很多错误
Sun. 11.12:
受不了南方这鬼天气,连秋天都没有。一周前还是快30度,现在已经10度了。湿冷的还一直下雨。现在窝在空教室中午想打个盹都冷的睡不着,转头一看窗外又开始下雨了。
这周因为写稿子本来进度就比较拖了,然后天气冷起来还下着雨惰性大了很多。预计进度lec24(实际约23.2,冷的提前回去了),lab还没写多少。实际是呢,好几次想去学习但是一懒就没走,最理想情况这周lec30都不是问题的。但是呢,现在我蜷成一团带在空教室里瑟瑟发抖的状态真的很喜感,实在不知道说什么好。那就这样吧。
#14 - 2023-11-15 20:23
(咕咕咕)
11.13-11.19 Week11
Wed. 11.15
进度lec28.25,近几天沉迷尖塔,重新打猎人从a10打到了a20碎心。61C开始讲OS/VM部分了,由于看过nju os还是很轻松,而且比较下来也觉得nju os 讲的真的很好,把理论全用linux实际演示出来真的是个很厉害的思路。但是nju os唯独没怎么讲vm,这里稍微补一下。后面并行也是,2023年的minilab2把libco换成一个并行计算了,有好有坏吧,毕竟libco真的很难,但也对上下文切换理解真的很有作用,而并行设计的真的不多。
Sat. 11.18
lec 32.5。这周也想把周总结鸽掉了毕竟真的没什么好写的。proj2那边就是写汇编,主要还是函数调用规范那一套,这一点我之前玩rsp的时候翻csapp和调代码已经理解加深了很多了。proj3好像是画模拟电路,还没有细看,另外一些硬件加法器之类的让我想起做数电实验的事了,自然也不会去做这个lab了。那么下周结束基本都是61c就可以完成了,可能稍有延后不过大差不差。
又说到csapp,之前想深入了解一下链接的细节,结果plt表那边写的过于繁杂,也不知道是不是翻译的问题。之前觉得观感微妙很大程度上也跟这个有关系吧。就是罗列的太过紧密很难看,然后那些“why”的问题涉及倒不多。感觉很多时候听课理解why绝对是比how要更有意义的。
Sun. 11.19
本来有点不想写硬件模拟,最后还是开始写了,也把lab5,6那边必要的练习做了。今天写proj3开了头,连线连的头皮发麻。另外偶然看到网上说61a的一个精髓proj4 scheme。我自己是完全没碰过SICP相关内容的,感觉可以一试。
进度lab7(大约),proj1不做,2,3开头。下周就是主要写lab,把最后几节并行和期末常见fun课给看了。然后我会考虑开CSAPP的lab看一看,因为还没完全确定接下来要干什么。至于cs144,计网那边也不是很急,何况我也是看过一遍自顶向下的,主要还是做lab吧。
学校这边的课设要开始了,要写一个android的联网应用,可是Android我没学,联网的web也不太会。估计12月中旬之后时间会越来越少了。
#15 - 2023-11-21 21:10
(咕咕咕)
11.20-11.26 Week12
Tues. 11.21
进度lec35+。准备开CSAPP的lab,就作为“period 3.5”吧。实际上今天已经搭好环境写了大半个lab1,感觉难度还是在线的。61c的proj2和proj3总让我有点不想写,也不知道什么时候完成。
学校的课设/实验逐渐放出来了,粗算一下大概有4-5门课,大体上都很水,但是堆一起也难以很快完成,不过我自己也不在乎绩点了所以争取快速混过去腾更多时间了。
Wed. 11.22
忍不下去了倒个垃圾:茶话会的键政人怎么这么恶心啊,呕。cn就人间地狱那99.9%没钱/能力润不出去的人都生不如死活的像老鼠是吧。脑残一样的逻辑然后攻击欲还特强万物皆可转进。不理就算了但是为啥我把他们全屏蔽了还能看见啊,呕
舒服了,不发泄一下都有点集中不了注意力了。继续写lab。
头疼gdb,开始补票gdb了......CSAPP的bomb lab我要仔细想想有没有稳定得到正确jmp下寄存器值的方法,不然翻汇编码太难看了。
Sat. 11.22
完成CSAPP bomb lab(lab2),成功进化飞升脱离gdb苦手!虽然这个lab我写了6个小时(粗略统计可能更多)。CSAPP的lab都挺有趣的,有做下去的动力,而且难度也合适。61c的proj被我搁置到九霄云外了。毕竟写汇编函数和CPU连线真的不是很有趣,而且感觉收获不算大。说实话现在我不愿意写那种重复度大但又看不出有太多难点的lab,偏偏这两个proj都是这样。这样暂时就算把61c结了,下周开CSAPP的lab。15-213的课不需要了,因为知识在前面覆盖了很多,而且CSAPP的书也不是不能看。不过说了这么多,又是61c的proj又是csapp的视频,根本上还是时间不够,挺无奈的。
于是开始做lab3,很离谱的一件事出现了,lab3用ubuntu 22.04的libc版本(2.35)直接出seg fault根本做不了,而20.04能做(2.31),折腾了一小时把正确答案copy了都没有结果是这个原因,我去。(而且好像lab4也会出问题,但是这个lab3直接不能做了)。降libc版本、降ubuntu版本、搞其他虚拟机(又要连git)都很麻烦。索性直接纸上分析了。
#16 - 2023-11-25 16:21
(咕咕咕)
Period 3 结束总结:
用时同样是3周多一点,区别是proj的完成度很低,非常低。就时间上来说我的peroid划了4周,但除去中间写整理、最后一周大半周在搞CSAPP的lab,也就是3周的样子,几乎全部分配在看视频上了。proj完成度很低让我多少感觉于心不安,暂时只能算做搁置下来等CSAPP的lab完成后是否要补上了。
就CS61C的实际体验而言,效果是很好的。61C围绕RISC-V展开了整个从汇编到CPU机器码与硬件,很好的构建了一个全局的图景,让人对体系结构有的整体上的理解。学了RV后反过来看Linux的x86-64理解也加深了不少。我自己虽然不喜欢硬件,但过来看硬件的模型也没有那么神秘了。
现代计算机为了性能而设计了很多复杂的难以理解的细节,而真实的工业产品要向下兼容又必须保留很多过时内容。RV好就好在它是简单的、模型化的。学习如果直接对着Linux源码或x86的spec啃我相信是难以很好抓住重点的,所以才有了xv6和risc-v。这方面他们做的确实很好,让学生通过这些学会整体结构是怎样的,计算机思维是怎么思考的,而不只是掌握工具。
#17 - 2023-11-27 19:52
(咕咕咕)
Period 3.5 : (Labs of) CMU 15-213 CS:APP
http://csapp.cs.cmu.edu/3e/labs.html
CSAPP者何也?其名曰"Computer System: A Programmer's Perspective",又曰“深入理解计算机系统”,其名声震海内海外,观者无不称其精妙。然余向读此书,囫囵吞枣而不解,未得其言。今复观之,乃识其美。
不写了,高中过去久了写不出什么好文言文了。这里也包括csapp的书,这次我要认真整体过一遍这本书。今天准备写cache lab时读第六章发现是对61c讲缓存部分很好的复习和互为补充。以前看书经常容易看了一点就翻过去导致结果如同没看,今天想起来上学期看这些书的时候经常以为一两个小时就能看完学会一大块东西,可能也跟当时看的是自顶向下和那本写的不太行的黑皮操作系统原理有关。现在看来真是太年轻了,我现在可真的感觉我不会的东西太多了。

预计结束时间 : 12.10那一周,因为学校事多起来了。

P.S.硬件我是真不喜欢,所以 goodbye lab4 Arch Lab。
#18 - 2023-11-29 21:16
(咕咕咕)
11.27-12.3 Week13
Wed. 11.29
读csapp中,细读系统部分还能与以前学的产生不不少联系,还是很不错的。而且让我感觉我看nju os没有消化很好,即使当时动态链接那一节看了两遍仍然没有完全理解,毕竟写一个全套工具链还是太超前了。会不会需要再复习一下,但我感觉我又没这个时间去做。
lab在lab5暂时阻塞中,书基本上是一天一章的在看。还好有点基础不然不可能细读还这么快。
#19 - 2023-12-5 10:22
(咕咕咕)
12.4-12.10 Week14
Tues. 12.5
之所以上周只写了一天是因为划了好几天的水。莫名感觉一读起书来就没动力了,当然csapp还是看完了。但是lab有些没动力做了。也有学校事情多起来的原因吧。细致的事情过段时间再说,现在状态不太好(状态这东西真是飘忽不定的啊)
补充:划了3天水,因为以撒更了官方联机,于是3天打了20h。还是查找了一些资料,决定把mit6.s081提前,大概课程的时间也不超过40h。写lab的惰性还是太大了,缓存的小模拟根本不想写,shell的模拟多少倒还有点兴趣,毕竟要用fork和execve。这样一看我也未必能按计划走。剩下6周时间,除掉考试周和lab时间大概有三周半,多看门课肯定没问题,lab感觉要欠很多账了...
不过总体还是问题不大。真投入进去(即使时间分配不多的情况下)是没那么焦虑的。我有一个高绩点的同学就非常焦虑,昨天把jyy的os课的m2给他看,他说现在做这个没时间不适合。焦虑起来也没用,学好东西还是要坐冷板凳,这一点我在高中学竞赛教练让我们读好几遍书的时候就清楚的。我感觉这学期焦虑程度比上学期好了很多。好歹多少我这学期的自主时间也有250h左右了,而且是绝对时长,你要是按某些考研晒时长人的计算标准看都能到350-400h了。上学期?呵,如果去掉我准备csp的时间,可能有效时长50h都不到,感觉上学期除了csp考了320是认真了一次外啥也没学到。
Sat. 12.9
没什么想干的,最近写lab的意愿低的令人发指,可以说是我从暑假以来最低的一段时间。出来写shell模拟写了一点就写不下去了。前几天尝试看mit os课,但是感觉他们没有ppt,板书用手写大写英文体不是很方便看。那就暂且咕一会了。
想从这些计划中暂且剥离出一段时间了。正好先在bgm上给我喜欢的几个游戏点个格子吧。
#20 - 2023-12-12 14:09
(咕咕咕)
Week15空过。这周事实在多。剩下来的一部分时间用来看《程序员的自我修养》(副标题:链接,装载与库)
#21 - 2023-12-19 15:29
(咕咕咕)
Week 16-19同上。
任务量还不能完全确定。这中间应该能省一些时间出来。下一步就是准备mit操作系统,寒假把这个做完就好了。

2024.1.22
I'm back.期末真是一堆破事,占了整一个月的说法真是完全没问题的。今天按前面的算法应该是21周周一,但是由于学期结束了所以就不这么算了。而寒假只有5周,不长。
现在的问题是,因为好久没碰这个计划了,生疏太多了都没有习惯了,我大概真得适应一段时间。
#22 - 2024-1-23 17:17
(咕咕咕)
Period 4 : MIT 6.S081 (2020/2021)
https://pdos.csail.mit.edu/6.828/2021/schedule.html
还是回到了这一步。做OS还是很重要的,其一是我之后大概率会找Linux/C/OS方向的工作或研究生,其二是为了凑一些project,其三是考虑后面参加一下这个相关的比赛,只是完全不知道够不够格。
按我最完美的设想是下学期打蓝桥混个省一去考国赛;完善OS方面的project让简历有东西写,秋招能先找个保底;然后考研。但是这是最好情况,而且时间相当紧张。不过吧.......紧张好像又能怎么样呢。还是干活吧。
回到这个上面来呢,CSAPP和NJU OS我都学过了(虽然lab没写完),这说明6.s081的课应该轻松不少,主要就是做lab了。寒假来了时间应该还好,不过我挺懒的也不知道自己能给出来多少时间。这种情况下我只能说想得多不如实际看看吧。

预计时间:未定,但至少整个寒假。
目标:MIT 6.S081课程+所有lab,在此之上看看如何扩展project内容。

P.S.用经费买了个树莓派玩玩,明天就能到了,好像很有意思的。