北航操作系统-OS-lab2-实验报告
1. 思考题 在编写的 C 程序中,指针变量中存储的地址被视为虚拟地址,MIPS 汇编程序中 lw 和 sw 指令使用的地址也被视为虚拟地址。CPU访问的都是虚拟地址,通过MMU来转换成对应的物理地址,最后访问内存中的数据。 首先,用宏来处理链表可以化简链表的操作,通过将特定功能的代码封装在宏定义中,可以在实现特定功能时简化操作,增加代码可读性和可维护性。其次,当链表的操作需要修改时,由于该操作会被大量复用,如果逐一修改工作量太大,而用宏则可以只修改宏定义,方便更改。最后,很多种类的链表都包含相似的操作,只要这些链表结构相同,就都可以用这些宏定义来实现相似的操作,只是传入的参数不同,方便了众多链表的使用。 在实验环境中,有单向链表、双向链表、单向队列、双向队列、循环队列。 ...
北航操作系统-OS-lab1-实验报告
1. 思考题 首先利用如下简单C语言程序(hello.c)来研究x86工具链和mips工具链的区别 先利用x86工具链编译并反汇编目标文件代码,并观察 12gcc -c hello.c -o hello.oobjdump -DS hello.o > text.txt 最终text.txt内容如下: 再利用mips工具链编译后反汇编: 12mips-linux-gnu-gcc -c hello.c -o hello.omips-linux-gnu-objdump -DS hello.o > text.txt 最终输出如下: 之后再让x86的gcc把hello.c编译成可执行文件,之后再反汇编,代码如下: 12gcc hello.c -o helloobjdump -DS hello > text.txt 结果如下: 可以看到call指令后面填充了 puts@plt,说明在链接的时候这块函数地址被填上了。 再用mips工具链重复以上步骤: 12mips-linux-gnu-gcc hello.c -o...
北航操作系统-OS-lab0-实验报告
1. 思考题 ==不一样==。在第一次 git add 之前文件 README.txt 属于未跟踪的文件,此时 git 是无法管理这个文件的,因此 git status 显示未跟踪的文件;而在 git add 并 git commit 之后,git 开始管理这个文件,此时再修改后其状态就会变成已修改未暂存的文件。==其根本原因就是 git 是否管理了这个文件==。如果 git 不管理这个文件,那么这个文件的状态一直都是 untracked ,一旦 git 管理了这个文件,那么经过修改后就会变成 changes not staged for commit ,git add 之后就都是 changes to be committed。 图中,add the file 对应指令 git add,stage the file 对应指令 git add,commit 对应 git commit。 当删除了 print.c 后,可以用 git restore print.c / git...
北航计算机组成原理-CO-CPU-P7-设计报告
1. 分析指令集 经过分类,指令共包含R型指令和I型指令 列出其对应的32位机器码,寻找共性差异 R型指令: Type Op Rs Rt Rd Shamt Func 解释 add 000000 (5) (5) (5) 00000 100000 相加(rs+rt->rd) sub 000000 (5) (5) (5) 00000 100010 相减(rs-rt->rd) and 000000 (5) (5) (5) 00000 100100 rs & rt -> rd or 000000 (5) (5) (5) 00000 100101 rs | rt -> rd slt 000000 (5) (5) (5) 00000 101010 rs < rt ? 1 : 0(signed) sltu 000000 (5) (5) (5) 00000 101011 rs < rt ? 1 : 0(unsigned) mfhi 000000 00000 00000 (5) 00000 010000 HI...
北航计算机组成原理-CO-CPU-P6-设计报告
1. 分析指令集 经过分类,指令共包含R型指令和I型指令 列出其对应的32位机器码,寻找共性差异 R型指令: Type Op Rs Rt Rd Shamt Func 解释 add 000000 (5) (5) (5) 00000 100000 相加(rs+rt->rd) sub 000000 (5) (5) (5) 00000 100010 相减(rs-rt->rd) and 000000 (5) (5) (5) 00000 100100 rs & rt -> rd or 000000 (5) (5) (5) 00000 100101 rs | rt -> rd slt 000000 (5) (5) (5) 00000 101010 rs < rt ? 1 : 0(signed) sltu 000000 (5) (5) (5) 00000 101011 rs < rt ? 1 : 0(unsigned) mfhi 000000 00000 00000 (5) 00000 010000 HI...
北航 OO 面向对象 第四单元
转眼间,这趟面向对象程序设计的奇幻漂流也迎来了尾声。从第一单元初入茅庐的“表达式解析”,到第二单元扑朔迷离的“多线程电梯风云录”,再到第三单元严谨到令人发指的“JML”,直至本单元的图书馆怪谈“UML”,我历经了风雨的洗礼,变得更强、更稳、更有经验了。这篇博客是对第四单元和整个OO旅程的一次深度复盘与未来展望。 ✨ 我的OO航海日志·珍藏版索引 ✨ 第一站:表达式求导的OO启蒙——递归下降与多项式的爱恨情仇 第二站:多线程电梯与并发设计的狂想曲——锁与调度的极致拉扯 第三站:JML规格与社交网络图的精妙构建——在规格的镣铐中起舞 一、本单元所实践的正向建模与开发第四单元主要是设计UML图,并利用画好的UML图来实现一个图书馆管理系统。其中,我们应当采取正向建模的方式来完成作业。 **正向建模的核心奥义:“先有蓝图,再盖大楼”,在本单元的图书馆建设中体现得淋漓尽致: 解读指导书内容: 首先,要得把图书馆的规则理解透彻:书籍如何分类、学生如何借阅、预约、还书,信用分又是如何计算的,以及图书馆每日开闭馆时那套庄严的仪式(open() 和...
北航 OO 面向对象 第三单元
本单元重点学习了JML规格代码的书写、阅读,以及体验规格化设计实现。本单元学习的内容可谓是金刚钻,也许将来在工作的时候不一定会用到,但是掌握一项高专业化的能力不是一件坏事,况且一旦用到了那我们便能得心应手的应对,因此也是要好好对待JML的! 1. 测试过程1.1 单元测试单元测试指的是,对软件中的函数、方法或类进行正确性验证。通过验证程序的函数是否正确,能够尽早发现代码逻辑错误,隔离缺陷,方便代码重构。单元测试过程自动化程度高,执行速度快,定位问题准确,成本最低。在我的程序中,我使用JUnit来进行单元测试,测试函数行为。 1.2 **功能测试功能测试是指,基于软件需求规格说明书对软件功能进行验证。关注“软件做什么”,而不是“怎么做”。主要以黑盒测试为主,根据需求文档设计测试用例。在自动化测试的同时也包含大量手动测试,需要手搓一些极端样例来保证代码在极端情况下的健壮性。在我的程序中,我手搓了很多极端数据来保证函数功能的正确实现。 1.3 集成测试...



![北航2026软件工程作业 [I.1] 个人作业:阅读和提问](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/cover4.jpg)