BUAA_OO_Unit1_单元总结
OO - Unit1总结总览使用MetricsReload插件对我的项目进行分析,得到类的复杂度如下图所示,整体来看,主要复杂度高的地方在第二次作业和第三次作业迭代的地方,这也与我设计上有所欠缺有关。 架构优点 分类明确。每个类都处理好自己的工作,相互没有过多交集,所有的get方法我都是返回一个映射而非返回类成员本身,符合面向对象封装的思想。 可迭代性好。整体的迭代工作并不困难。 架构缺点 可读性差。在函数因子FuncFactor与函数定义FuncCall里面,在参数处理方面,我写了很大的if -...
BUAA_OS_Lab3_实验报告
思考题Thinking 3.1 请结合 MOS 中的页目录自映射应用解释代码中 e->env_pgdir[PDX(UVPT)] = PADDR(e->env_pgdir) | PTE_V 的含义。 e->env_pgdir 代表当前进程的页目录的基地址。在 MOS 中,每个进程都有自己的页目录,用于存储该进程的页表信息。 PADDR(e->env_pgdir) 代表这个函数获取页目录的物理地址。PADDR是一个宏,用于将内核虚拟地址转换为物理地址。 PTE_V :这是一个标志位,表示页表项有效。PADDR(e->env_pgdir) | PTE_V,表示给页目录的物理基地址加上权限位。 PDX(UVPT):这是一个宏,用于获取虚拟地址 UVPT 的页目录索引。 所以,这行代码的作用是将当前进程的页目录的物理地址映射到用户虚拟地址空间的UVPT地址处,并设置页表项为有效。这样,进程就可以在自己的地址空间中访问页表和页目录,提高了访问效率。 Thinking 3.2 elf_load_seg 以函数指针的形式,接受外部自定义的回调函数...
BUAA_OS_Lab2_实验报告
思考题Thinking 2.1 请根据上述说明,回答问题:在编写的 C 程序中,指针变量中存储的地址被视为虚拟地址,还是物理地址?MIPS 汇编程序中 lw 和 sw 指令使用的地址被视为虚拟地址,还是物理地址? C 语言中指针变量储存的地址是虚拟地址,汇编代码中 lw 和 sw 指令中使用的地址也是虚拟地址。 Thinking 2.2 从可重用性的角度,阐述用宏来实现链表的好处。 查看实验环境中的...
BUAA_OS_Lab1_实验报告
思考题Thinking 1.1 在阅读 附录中的编译链接详解 以及本章内容后,尝试分别使用实验环境中的原生 x86 工具链(gcc、ld、readelf、objdump 等)和 MIPS 交叉编译工具链(带有mips-linux-gnu- 前缀,如 mips-linux-gnu-gcc、mips-linux-gnu-ld),重复其中的编译和解析过程,观察相应的结果,并解释其中向 objdump 传入的参数的含义。 指导书中提到的objdump指令为 1objdump -DS 要反汇编的目标文件名 > 导出文本文件名 其中: -D表示:反汇编(Disassemble)那些预计包含指令的所有节区。 -S表示:在反汇编输出中,尽可能地将源代码(如果编译时包含了调试信息,通常是使用 gcc -g 编译)与汇编代码交错显示。这对于理解某段汇编代码对应哪行 C/C++ 源代码非常有帮助。通常需要与-d或-D一起使用。 -d表示:反汇编那些预计包含指令的代码节区。 首先,编写一个简单的程序helloworld.c,如下 12345#include...
我会构建健壮的多线程电梯评测机
我会构建健壮的多线程电梯评测机:smiley:已同步更新至本人blog,欢迎大家来参观:blush: 对于像电梯这样的复杂的、行为不确定的并发系统,构建自动化、系统化、能够进行状态跟踪和规则检查的测试框架,是确保程序正确性、提高开发效率的必备手段。直接手动测试覆盖面有限,且难以复现并发问题。因此,构建一个自动化的、能够生成有强度数据的、能够精确判定正确性的评测机就显得尤为必要。同学,你也不想你的代码被我们hack吧 在经历了 HW5 到 HW6 的迭代后,电梯系统的规则变得更加复杂。在此之前,我和舍友合力搭建了一套基于 Python 的自动化评测框架,希望能较为全面地测试电梯程序的健壮性和性能。经过了一次迭代,该评测机的性能和正确性能够做到更优。在此,我想分享一下这套评测机的核心思路和实现细节,希望能为大家提供一些参考 一、 核心组件概览我们的评测机主要由以下 Python 脚本构成: generate_data.py: 负责生成符合要求的、具有不同侧重点和强度的测试输入数据 (stdin.txt),包括乘客请求和临时调度 (SCHE) 请求 validator.py:...
BUAA_OS_Lab0_实验报告
思考题Thinking 0.1执行git status > Untracked.txt,是查询当前README.txt的文件状态,并将其记录在Untracked.txt文件中。后续两个命令同理。 执行完cat Untracked.txt后,显示出未跟踪的文件,说明文件刚刚新建的时候,其处于未跟踪的状态;执行cat Stage.txt后,显示出要提交的变更,说明修改了文件,并使用add命令之后,文件处于暂存的状态;执行cat Modified.txt之后,显示出尚未暂存以备提交的变更,说明文件再被修改之后,处于被修改状态。 Thinking 0.2add the file 对应的是git中的git add命令 stage the file 对应的也是git中的git add命令 commit 对应的是git中的git commit命令 Thinking 0.3 git checkout --print.c git reset HEAD print.c && git checkout --print.c git rm --cached...
BUAA_CO_pre_Logisim
北航计算机组成原理pre阶段Logisim知识分享 通过阅读本文,您大致可以学习到2024年秋季北航计算机组成原理课程pre阶段,关于Logisim知识的内容 Logisim是一个用来仿真模拟电路的软件 常用部件由于篇幅限制,这里不可能精讲所有部件,只是挑选一些笔者认为比较重要的部件进行介绍 Splitter又叫分线器。一般是用来把一条有多比特位数据的数据线分开成不同的几小条数据线,或者是把几条线的比特位合并到一条数据线中。在将来的CPU设计中,Splitter还经常用于从一个多位数据线上截取特定比特位,送给不同的部件 举个栗子 图中的Splitter A,把一个32位的数据分成了四份,每一份都是8位,而Splitter B,只取了32位数据的低20位。Splitter C则是把32位输入的低8位作为合并数据的低8位,把32位输入的低20位作为高20位,合并成了一个28位的输出 Logisim的左下角有这个部件的属性 Fan Out : 表示该Splitter有几个分支,即将数据分成了几路,或者将几路数据合并了 Bit Width In :...
第一篇文章
这是我的第一篇文章你好,当你看到这段文字的时候,证明我已经成功搭建出了自己的blog,真是十分甚至九分的感动口牙!今后我也会多多在这个blog上分享自己的学习心得、游戏心得、生活琐事等等!