【游·品·悟】北京“柒”馆
【游·品·悟】北京“柒”馆
前言
大二升大三暑假的前半段几乎没有休息,在课程、竞赛、工作等忙结束之后,小女子已经精疲力竭了,虽然比上学期间轻松一些,但是就私心觉得自己假期亏了【懒癌犯了~ 就是要在假期玩~】,因此决定——我要出去疯玩啦啦啦~
原本计划与朋友相约去大理和成都游玩10天左右,但是由于我突然被通知要在8月份不定时开会,被迫需要保持”联络通畅“【简称——随时可以进入社畜工作状态】,不得已取消了原本的旅游计划。
被困北京的我,毅然而然决定在8月后半段,见缝插针畅游博物馆,在游旅中,消散忧郁,以下是我的简要计划图:
在12天之内参观北京的七个“馆”,这里简称北京“柒”馆~
中国美术馆
北京天文馆
自然博物馆
故宫博物院
首都博物馆
中国科技馆
国家博物馆
游旅
【来啦来啦~ 来更新我心心念念的博物馆游览啦~~——2023.10】
由于一些不可抗力因素(1. 被半路抓过去坐牢干活儿 2. 懒癌病症发作),原定的7个博物馆参观计划,最终只完成了5个博物馆,整体来说真的很值得留念,享受没有任何”推背感“的游览,走走停停,看看展品,瞧瞧游客,听听八卦,偷得浮生半日闲~ 【 ...
BUAA-OO-第四单元:UML建模
BUAA-OO-第四单元:UML建模
一、正向建模与开发
1、UML正向建模 ==> java程序开发
利用UML(统一建模语言)进行正向建模设计Java应用程序的流程通常包括以下几个步骤:
确定需求:
在所有任务开始之前,我们需要明确Java应用程序的需求和功能。这可能涉及与客户或利益相关者进行讨论,收集需求,并定义应用程序的范围和目标。
绘制类图:
类图是描述系统中类、接口、关系和属性的UML图表。
我们可以根据系统的概念设计创建类图,标识系统中的各个类、它们的属性和方法,并定义它们之间的关系,如继承、关联等。
绘制状态图:
状态图是一种UML图表,用于描述对象之间的状态切换。
我们可以根据类图创建状态图,展示在不同的操作或方法调用之间对象的交互状态切换流程。
绘制顺序图:
顺序图是一种UML图表,用于描述系统中的活动、流程和决策。
我们可以根据类图和系统的工作流程创建状态图,展示系统中的各个活动以及它们之间的关系和条件。
编写代码:
一旦我们完成了UML建模,就可以根据设计的结果开始编写Java代码。我们可以使用UML图表作为参考,根据类图中的类和方法编 ...
BUAA-OS-lab4-challenge
Lab4-challenge实验报告
由于课程改革,本学期OS课程的lab4挑战性任务与往年完全不一样,题目要求如下:Lab4 Challenge 题干。
附:
本学期所有指导书链接2023 OS 指导书【全】
小女子挑战性任务的PPT基本按照如下实验报告展开,但是由于答辩时间限制做了删减,所以仍然以实验报告为参考主体。
【想要看看小女子源码和PPT的友友们,可以在博客下面留言或者私信我,当然我的菜菜源码估计难以入眼,还望不要嫌弃~】
一、任务实现思路
1、概览
本任务我一共修改了12个文件,分别是:在include文件夹下的env.h、signal.h、syscall.h,kern文件夹下的env.c、genex.S、syscall_all.c、tlbex.c,在user文件夹下的include.mk,在user/include文件夹下的lib.h,在user/lib文件夹下的fork.c、signal.c、syscall_lib.c,整体实现思路仿照TLB_mod的异常处理思路完成,其中涉及到了用户态和内核态的切换及函数处理和跳转。
2、信号变量的定义
1)includ ...
BUAA-OS-lab5
Lab5实验报告
思考题
Thinking 5.1
如果通过 kseg0 读写设备,那么对于设备的写入会缓存到 Cache 中。这是一种错误的行为,在实际编写代码的时候这么做会引发不可预知的问题。
请思考:这么做这会引发什么问题?对于不同种类的设备(如我们提到的串口设备和 IDE 磁盘)的操作会有差异吗?可以从缓存的性质和缓存更新的策略来考虑。
解:
当外部设备产生中断信号或者更新数据时,此时Cache中之前旧的数据可能刚完成缓存,那么完成缓存的这一部分无法完成更新,则会发生错误的行为。
对于串口设备来说,读写频繁,信号多,在相同的时间内发生错误的概论远高于IDE磁盘。
Thinking 5.2
查找代码中的相关定义,试回答一个磁盘块中最多能存储多少个文件控制块?一个目录下最多能有多少个文件?我们的文件系统支持的单个文件最大为多大?
解:
1char f_pad[BY2FILE - MAXNAMELEN - (3 + NDIRECT) * 4 - sizeof(void *)];
文件控制块结构体中,有这样的一个属性 f_pad ,大小为 BY2FILE 即 2 ...
BUAA-OO-第三单元:规格化设计
BUAA-OO-第三单元:规格化设计
【小女子废话较多,总是“有感而发”地“抒情”,这些不重要的话用“【】”标注出来了,可以尽情跳过~】
前言
本单元的主题是“规格化设计”,要求我们学会理解 JMLJMLJML 规格语言,并能基于规格编写代码实现相应的功能。
在我看来,课程组在设置本单元的时候,初衷并不是要求我们完全掌握使用 JMLJMLJML 这一语言,毕竟 JMLJMLJML 只是一种特殊的规格化语言而已,还存在许多其他规格语言,例如:AAA 规格语言、 BBB 规格语言等等。相对而言,课程组的目的应该是让我们在“面向规格编程”的过程中感受到“契约式编程”的魅力——高可靠性、高可复用性、便于测试 …
从难度来看,本单元的三次作业都比前两个单元要简单很多,只需要根据课程组提供给的规格进行编程即可。但是,规格仅仅是一种契约,针对一种特定的规格可能会有很多实现方法,因此我们在编程时还需要特别注意代码运行的效率,否则很容易TLE。【非常令小女子心痛的是自己就出现了一次TLE,并且是较简单的思维盲区】
有关 JMLJMLJML 规格描述语言的简单学习见王浩羽大佬的整理 JMLLevel0简 ...
BUAA-OS-lab4
Lab4实验报告
思考题
Thinking 4.1
思考并回答下面的问题:
内核在保存现场的时候是如何避免破坏通用寄存器的?
系统陷入内核调用后可以直接从当时的 $a0-$a3 参数寄存器中得到用户调用 msyscall留下的信息吗?
我们是怎么做到让 sys 开头的函数“认为”我们提供了和用户调用 msyscall 时同样的参数的?
内核处理系统调用的过程对 Trapframe 做了哪些更改?这种修改对应的用户态的变化是什么?
解:
在 SAVE_ALL 中:
先 move k0,sp,先把通用寄存器的 spspsp 复制到 $k0\$k0$k0 ;
再 sw k0,TF_REG29(sp)、sw $2,TF_REG2(sp):保存现场需要使用 $v0\$v0$v0 作为协寄存器到内存的中转寄存器,写到内存时需要 spspsp ,所以在正式保存协寄存器和通用寄存器前先保存这两个寄存器。
可以。
从用户函数 syscall_*() 到内核函数 sys_*() 时,$a1−$a3\$a1-\$a3$a1−$a3 未改变,$a0\$a0$a0 在handle_sys() ...
BUAA-OS-lab3
Lab3实验报告
思考题
Thinking 3.1
请结合 MOS 中的页目录自映射应用解释代码中 e->env_pgdir[PDX(UVPT)] = PADDR(e->env_pgdir) | PTE_V 的含义。
解:
左边:
UVPT:用户页表的起始处的内核虚拟地址
PDX(UVPT):UVPT所处的页目录号(即 UVPT 处于第 PDX(UVPT) 个页目录项所映射的4MB空间;联系 UVPT 的含义,因此页目录也被第PDX(UVPT)映射)
右边:
e->env_pgdir:进程 e 的页目录的内核虚拟地址
PADDR(e->env_pgdir):进程 e 的页目录的物理地址
PADDR(e->env_pgdir) | PTE_V:页目录的物理基地址,加上权限位
页表基地址:UVPT
页目录基地址:UVPT+UVPT>>10
映射到页目录的页目录项的基地址:UVPT+UVPT>>10+UVPT>>20
该页表项处于第几个页目录项:(UVPT>>20) >> 2 = U ...
BUAA-OO-第二单元:电梯调度
BUAA-OO-第二单元:电梯调度
【小女子废话较多,总是“有感而发”地“抒情”,这些不重要的话用“【】”标注出来了,可以尽情跳过~】
前言
电梯调度问题是课程组为多线程学习设置的课下作业,是OO课程的重难点之一,对于第一次编写多线程的同学是一个巨大的挑战。【小女子非常悲催地被多线程攻击到了,hw5非常无奈创造了最低单次OO作业成绩】
建议寒假认真学习课程组的OO公众号(oolens)推送的关于“多线程学习”的文章,最好能有基本的编程多线程代码的练习经历。【只是眼睛看,而不上手操作真的是“镜花水月”“空中楼阁”,说多了都是泪哇~】
相比OO第一单元的表达式解析作业,本单元的代码编程量明显有大幅度下降,但是更多地需要思维分析,突破过去编程经历习惯的单线程思想,养成并行思维。同时,线程安全问题和CPU运行时间控制问题在编写代码时也是两个不容忽视的难点。【小女子就败在了CPU运行时间控制问题,哭唧唧~】
预习知识
如下依次给出几个我用的基本知识点学习的文章,仅供参考:【可以有其他更好的教程哇~ 欢迎留言浇浇小女子呀呀~ ...
BUAA-OS-lab2
Lab2实验报告
思考题
Thinking 2.1
请根据上述说明,回答问题:在编写的 C 程序中,指针变量中存储的地址 是虚拟地址,还是物理地址?MIPS 汇编程序中 lw 和 sw 使用的是虚拟地址,还是物理地址?
解:
在编写的 C 程序中,指针变量中存储的地址是虚拟地址;
MIPS 汇编程序中 lw 和 sw 使用的是虚拟地址。
Thinking 2.2
请思考下述两个问题:
• 从可重用性的角度,阐述用宏来实现链表的好处。
• 查看实验环境中的 /usr/include/sys/queue.h,了解其中单向链表与循环链表的实现,比较它们与本实验中使用的双向链表,分析三者在插入与删除操作上的性能差异。
解:
各类结构体都可以使用 queue.h 的宏简化代码量:
一开始写Exercise2.2的时候没有明白 field 字段设置的意义,觉得传入了 elm 参数以后, field 应该是作为 elm 的成员变量名,不应该作为可变参数传入,显得有点多此一举,忘记了宏定义除了可以替换成实参,还可以做字符串字面量的替换。
写到Exercise2.3 ...
铃•序曲
我建立博客的初心——听铃,聆听,浮生清欢
博客将会不定期更新一些细碎的内容,包括但不限于:学习心得、生活感悟