2024-3-3 17:10 /
接上个帖子,一楼置NULL。
#1 - 2024-3-3 17:20
(咕咕咕)
前言:
上个帖子的前一次计划在寒假开的,也根本没有更新过,主要原因还是寒假懒,学的本来就不多,日志更是懒得写。今天是下半学期的Week1周日,因此我也重启了这份记录,而由于上个帖也写了20楼了,时间也超出了标题2023.12的范围,于是开个新帖吧。
目前的状态仍然在mit6.s081。 寒假的进度显然不会太乐观,现在进度大约可以认为是课75%+lab15%吧。暂时的计划是,6.s081会在两周后结束(如果顺利),然后处理一些琐事,在4月初准备一下蓝桥。打完蓝桥去学考研数学。后面插一段时间写项目。
前言暂时先写到这里。现在刚开学几天,没有完全确定下来时间分配习惯。之后会补充一些内容,这里就不这么重视仪式感了。
#2 - 2024-3-7 18:26
(咕咕咕)
Thurs. 3.7
非常离谱的事情。起因是我lab最开始用的是2021版本的,但是课和资源基本上都是2020版本的。两者相差不大,而我现在课几乎看完了,要写lab,lab1,2还都完全没有任何区别,而我用着2020版的指南翻译去写2021版的lab3结果报了错,找了半天原来是lab3大改了。那我想了想就改成2020版的吧,网上参考也多。结果xv6启动卡住,一看实验书前面他们已经知道了这个bug,需要降qemu版本。于是卸载版本后却发现他们推荐的版本在ubuntu上找不到,于是又翻了知乎,说这个版本就是没有,20.04的才有,也就是我还需要降ubuntu版本。我可去你的吧。于是又改回2021版,还要恢复以前的文件。费了好半天时间,结果现在就写了20多行的一个easy题。
Sun. 3.10
写完lab4,今天还会写一会lab5。trap的机制比较感兴趣仔细研究了一下所以写的比较快,看了一下知乎的帖子某人为了实现类似用户级trap的机制还额外设置了一个trapframe多保存一次进入handler前的内容,这样还要多分配页面,完全没考虑调用规范里callee-saved的概念。本来proc里开新结构体存caller-saved就可以了,这个方法也是从后面进程上下文切换里得到启发的,这样一看把lab堆到一起写也有好处?
以及仍然有问题,现在是每个lab基本上都需要往proc里塞自己的东西,什么systrace要塞掩码,sysalarm要塞tick、handler和寄存器ctx。虽然可以把一个模块的功能开一个结构体,但怎么看也未免太臃肿了。这几个lab做完我合理怀疑proc结构体的词条数能扩一倍。这怎么搞吗,减也减不掉,这些功能都与进程有关只能进proc......
因为我已经决定用2021版的了,而2021版的实验少了一个,所以进度是4/10。虽说吧,这种大项目我都不敢调试的,好几个lab写完没有调试检查......
下周大概率能结lab。//update:不好说,看了一下有好几个hard,可能结不了
Wed. 3.13
看到了茶话会的帖子,愈发感觉bangumi已经越来越暮气沉沉了。纯良一个个被赶走,剩下的活跃用户巨魔比例大幅增加,屏蔽又有什么用呢。我早就把键政人屏蔽了,阴阳怪气人依旧不少;如果我把所有涉嫌不文明发言的用户全屏蔽了,剩下来的也未必比之前好到哪里。所以说总感觉在走向一种暮气:“反正现实已经这个样子了,我抱怨两句又能怎么样”。帖子发言变成了表演赛(行为模仿)与无所谓式的找乐子,纯朴的态度越来越少了。这样看下去真的还不如有些地方的贴吧呢,贴吧大佬兢兢业业出游戏攻略讨论数据的态度比如今茶话会大多数活跃用户的态度真的是好太多了。而这种人与人之间的交互关系就是社区啊。
不谈这个了。我这几天又看了看操作系统大赛,原本实际上已经放弃考虑报名了,但现在还是犹豫起来了。它的内容是真的难,我实在怀疑搞了这个我还能不能考研了;但这个东西当简历项目实在太合适了。思考这些让我神经挺紧张的,因为把时间算一下就知道真的不够。于是这个问题只能搁置几天,完成xv6lab后会做一段时间的准备工作,评估一下是否可行。说到xv6我要搁置最后一个lab因为是驱动,而copy-on-write吧......这几天一直在写这个,莫名其妙的bug太多了,而且调都不知道怎么调,该死的中断让我backtrace都看不到,scause出了12我都不知道这问题怎么来的。
lab6 跟nju os libco几乎一模一样,甚至更简单。这下只剩3个了。
#3 - 2024-3-19 17:49
(咕咕咕)
(这样看两周一层回复效果不错)
Tues. 3.19
报了os赛写内核,在做前期准备。由于我校在底层方面风气不佳,加上我实在也没有几个认识的搞这方面的同好,加上我自己不善交际,比赛只能单走,导致工作量压力目前看来很大。这几天也是狠狠的翻去年先辈们留下的开放仓库找灵感,基本上确定是可以在xv6的架构基础上做(可能很多?)修改的。bootloader这种东西似乎是能够直接由opensbi生成的,而实现的比如内存管理和调度算法,大家的原理都差不多的。因此只需要确定具体结构。初赛不看性能,而我的目标就是过了初赛就行。
但我Makefile还不会写。所以今天在学这个。正在把xv6的.c和.h分开。
实话说这几天精神上一直处于一种有点不知所措的地步,太大以至于我不知道怎么下手。如果让我从零开始写,估计我一没时间二没能力三没精力吧。就算我现在找到大概方向了也肉眼可见有一堆的困难。xv6lab写个hard题尚且要调试半天,何况这个呢。
学考研数学真的比这个在精神上舒服多了,什么目标啊规划啊成果评估啊都是确定的,也没有什么不可见的意外。好几次我发个神都怀疑自己是不是有病才报这个鬼东西。然后想了想报了还是报了吧。
Sun. 3.31
哈哈,都这么久没写了啊。可能是寒假长时间没写导致的,少了写这个的习惯,这两周就想不起来写了。
但是实际上也没什么好写的。这两周整体上就是:上周周六之前在调makefile,周六周日研究内存结构,这周一周二写内存,周三周四写proc,周五周日写杂项和trap.......今天写trap,但是大部分都是抄原xv6的,能改的部分真的不多,虽说改了用sscratch存,整个省下了trapframe和trampoline的单独映射,挺好。
倒也不是完全没得写。本着虽然抄xv6但是不能全抄的原则,我得进行一些根本性的改革,就是内存结构。改成了共享内核页表的形式,只有这样系统调用才用不到去切换页表并刷新TLB。然后这一点让我想了好久怎么去实现,而且还涉及到切换页表后,实地址运行时采用的全局变量和函数在启用内核虚拟地址下不能用的问题(就是编译时用的pa,启用页表后就变成了va,而这个va没有映射不能用,所以这些变量函数一引用就炸)。最后想到了动态链接教我的PIC(位置无关代码)才解决这个问题。
这两周感想就是,其一,当年误入ACM歧途的我面对指针神不以为然甚至妄自诋毁,而现在真香,我改悔了,针门。(指针是地址这一点实在太有用了)当然这个问题可能还是舆论风向一直说什么“你学懂指针才算学懂C”,但是不懂底层地址概念的指针是没有灵魂的。ACM的确不用指针也不好用,但学懂C根本上还是学懂汇编和底层逻辑。这个还真是呢,这句话其实应该说成“你学懂地址才学懂C”吧。但是指针就是地址,所以问题还是出现了啊。。最终结果就是这句话说起来没问题,但是直接去对着指针的概念去啃却啃不出个所以然,也挺怪的。
其二吧,我自己对C的理解高了不少,一个学期前完全看不到jyy网站实验前言里说的用C写对象的那段代码啥意思,现在则完全理解了。very good。
其三,我依然觉得时间不够用,尤其是两周时间我只写了个基础内核服务的大概,而api(syscall)、fs、驱动、用户程序依然没有动。更重要的是,写好的部分还没有调试,因为现在的完成度不好调试。整个4月我基本上没有什么时间写这个项目了,仅仅一个5月能否写完不能定论。数学也没多少时间看,任重而道远。
但是还挺开心的,或者说没有特别大的负面情绪波动。还好吧。
#4 - 2024-3-31 19:41
(咕咕咕)
Period 6  2024 CSC-OS
实际上已经开了两周了呢。而且4月份我要稍稍准备一下蓝桥后再看两周数学。这样的话它剩下的时间还有5周。
这个本质上也不算一个自学课程了,但是本着仪式感的原则我就把它挂上去了,所以描述和位置也就很草率啦。
这里大概就是记录一下我项目的工作情况吧。
#5 - 2024-4-10 16:29
(咕咕咕)
Wed.4.10
又是好久没写了,是这样的,我是打算稍稍准备一下蓝桥,能混进决赛是最好的。而事实上,去年我就做了很多准备想要打cpp进决赛,但是被高难度(三道蓝两道紫是什么东西??)爆杀而且由于没有做暴力骗分的准备而导致连暴力分都没拿到,非常惨不忍睹。今年我吸取教训决定不跟acm人竞争,直接去换成java来降低难度。
但是java写算法真不好用。而且我现在早就没了写算法的动力了,现在所做的也就仅仅把java蓝桥省赛爱玩的那些b数论内容看了看,然后记一下并查集和树状数组了。说也搞笑,我打过的几次比赛几乎都没有怎么用高级算法,这次在时间和水平均不如上一次的情况下更不指望写个什么线段树。暴力就完了。而且他8道题能出4道数论,至少三道都离不开什么质数因数欧拉函数阶乘乘法逆元这些玩意。
#6 - 2024-4-13 14:04
(咕咕咕)
望周知,傻逼蓝桥狗都不考,oi赛制毒瘤中的毒瘤,把我73分上限的代码干到38。
怎么干到的?样例不好好给,还没评测,我一个组合数的代码步骤巨长,最后栽在忘了忘了除m的阶乘(用乘法逆元)。什么我怎么过的样例?当然是因为m在样例的值是1啊。你是懂出样例的。
有评测十分钟解决的问题,没评测要搞二十分钟而且还不保证对,这就是蓝桥。

最后果不其然喜提省二中游,300白交了。
#7 - 2024-4-16 22:35
(咕咕咕)
Tues. 4.16
文件系统难死了。真的比别的模块都难,码量又大又复杂。唯一一点好的就是实现方式比较确定,但是这一点也得建立在我会写的前提上。
Thurs. 4.25
又是好久没写,我是真的想不起来写这个哈哈。到现在实际上也都没什么好说的了,不过是两线齐推罢了。花了一周多(里面的大部分时间)去写文件系统,现在基本上是写了个大概了,只算.c数了一下有1000行出头,但有几个功能还没写,写完预估1400行左右?只不过由于内容过于繁杂,很多事情我也说不好。写这东西的过程是真的几乎没有头绪,照着别人写好的模块和文档一点点分析结构甚至可以说照着抄了。但即便是照着抄仍然抄不太快。不过好在我写完文件系统后就只需要补进程系统调用的功能就可以出初版了。
然后吧另一线是数学。唉还是放弃不掉考研的候选项但是我实在是分不出来多少时间给它。进度慢的我都不知道该说什么好了。大概可以认为我过去一个月每天一小时。而这个速度预估也还会持续一段时间。因为我从上学期养成的大约每天3.5h的习惯虽然在当时是很赚的,但是现在完全感觉不够用了。这还跟数学这玩意的特点有关系,看这个并没有像我上学期的3.5的内容费脑子,因此堆时间就有用起来了,但是我堆不出来。
暂且先写这么多。等到五一假先。