
linux
计组和数电都挺有趣,模电简直让人头疼。
以下是两张无冒险的流水线CPU布线图(Lab5)。

Python
且谈操作系统。Lab1:linux入门实践,包括虚拟机配置、内核阅读及编译操作。Lab2:简单Shell与系统调用。通过代码填空实现一个Shell,自行设计并完成类似top功能的系统调用。Lab3:实现显式空闲链表控制的双堆内存分配器,探索动态链接库的创建与使用方法。Lab4为鸿蒙基础实验,包含编译内核、烧录工具使用、添加子系统及交叉编译程序,通过hdc让开发板运行程序。Lab5:基于FUSE实现一个FAT文件系统首试未果再努力快速通读二十多页操作系统实验文档,一周掌握linux入门知识,包括安装、配置、常用命令与Shell脚本编写,同时了解BusyBox、linux内核及QEMU等相关内容。
之后参考助教的测试脚本(顺带学会用Python多进程实现倒计时),加入循环逻辑,调整其他函数,将其改造成刷题脚本。
第二次实验为期两周,内容就是这个。
Shell实现较为简单,包含内置命令 cd、kill 和 exit(在主进程执行),其他指令通过 execvp 实现。支持单管道(匿名管道)、重定向和多命令(以 ; 分隔)处理,但未实现多管道功能。最简单的测试样例如下:先在bash中启动自制Shell,再按顺序执行以下命令。系统调用部分内容略多,但不算太难。以下是我的执行流程:主系统调用(部分内容已被移除,留给下一届同学参考(笑))运行后效果如下,默认每秒刷新一次,可使用参数-d自定义刷新间隔(通过另启进程倒计时,时间到自动刷新)。
理解后,设计其实很简单,这次实验重点并非考察C语言程序设计能力。
助教提供的宏操作与定义,我添加了些注释,先分享一下,近期时间较为紧张。在网上浏览时,遇到优秀的网页,我会用F12查看并复制源代码。有空的时候,就修改内容、更换样式,放到自己用GitHub搭建的个人网站上。现在我的网站已有近十个功能较完善的页面,包括个人简历、主页、博客、跳转页、404错误页等(还有很多没上线,上线的基本都是开源的)。此外,还有一些有趣的小玩意儿,比如电子木鱼、赛博烟花等。如果发现有人写代码时,屏幕上文字较多,右边还留着一片空白的A4纸区域,那他很可能在写Markdown或LaTeX,而且大概率是在用Markdown。每周还有代数结构、概统(作业超多,一周十几题)、数理逻辑、量子物理(实在难懂)和毛泽东思想概论等课程。这学期本选了Java编程,我已自学完Java,但课程需用JavaFX,上了一周后,我便毅然退课了。其他内容会慢慢更新,预计七八月完成。别太在意排版,这个有点费时,慢慢来吧。今天是2024年4月22日,刚完成COD Lab5的报告,接下来这周验收后,就得全力备战量子物理期中考试了(28号考试,平时没怎么学,上课都没听讲,作业也是临时抱佛脚,准备用半周时间速成)。不过,其他科目也堆积了不少作业(目前还没下达),只能等考试结束后再赶了。下面回顾一下最近这段时间的生活状态。恭喜lzwl速通成功,特此告知大家。前个周日阅读OS文档。上周我在学习的同时,完成了上上周代数结构和数理逻辑基础的作业,难度适中,毕竟是大一课程。周二周三集中精力,完成OS实验速通。周四休息后,晚上及周五早上重新测试了操作系统两个代码,运行无误。周五下午在计算机组成原理课上完成作业,感觉很舒畅。毛泽东思想概论课上边学边做概率统计作业,用两小时完成了三题。晚上检查操作系统实验内容,之后又写了三题,目前还剩八题未完成。周六九点起床,刷抖音一小时,午饭后开始写概统,直到傍晚五点完成。七点左右用餐休息,之后边学边整理上周的代数结构与数理逻辑笔记。完成后观看美剧迷离时空,精彩至极,看到一点多才入睡。周日十一点起床,吃过午饭后,下午开始阅读COD文档,同时追剧并编写基础代码,完成段间寄存器部分。晚上花费整晚时间重构CPU布线,加入段间寄存器与FLUSH功能,最终通过代码编译,随后休息。早上起床后,OS课上我专注于完善CPU模块的逻辑设计。除了优化代码格式(如对齐处理等),还仔细检查是否有低级错误遗漏。下午计组课进行仿真时,遇到一个报错问题困扰了一节课。突然灵光一闪,发现问题所在:写优先逻辑有误,导致写入0号寄存器的值被直接读出。修正后,无分支测试样例顺利通过。计算机导论课上,在仿真过程中又发现b指令存在问题。苦思冥想许久,直至下课仍无头绪。离开教室前,鬼使神差地打开NPC_AUX模块,总觉得这里可能隐藏着问题。果然,经过一番仔细查看,发现接收的pCADd4信号并不属于当前传递过来的指令。于是新增了一个接口,调整了跳转指令的基地址,并同步修改了FLUSH的逻辑和接口以匹配改动。抱着试一试的心态再次仿真,结果大获成功!所有测试完美通过。心情舒畅之下,我关上电脑,愉快地去吃饭了。晚上回来,重新进行仿真、上板、比对,撰写报告。完成后觉得应留下记录,于是将内容分享到网络。上上周我完成了COD的Lab3,还提前搞定Lab4,为OS预留了一周时间。我简单阅读了OS文档,几乎写完了所有作业,只留下两份最简单的放到上周一完成。现在回想,这个安排相当明智。你问这么多干啥?上周事情确实不少,但早已胸有成竹。写完这个就要开始复习(预习)lzwl了,考完试完成这周的作业(目前还没布置),接着就是五一。五一期间要写计算机导论的结课论文、OS的Lab3(涉及内存分配,可能是实现一个malloc,听说有点难,但我还没看文档),还有COD的Lab6。另外还不知道有没有其他任务。这个五一假期过得真充实。写代码的生活真是充实又有趣。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号