OS - Lab1实验报告

归档于2025年7月8日。

思考题

1.1

先回答objdump的参数作用:

  • -D:显示所有反汇编结果。
  • -S:在源码可以找到的情况下,将源码与反汇编结果一同输出:
阅读更多

OS - LA32R移植报告

这一部分由我与另一位同学共同完成。我主要完成的是SD卡部分的工作。仅此向Lab4就已探索出前三个Lab移植的他表示敬意…

指令集适配

这一部分只介绍较为关键的改动。有关Makefile中编译选项的修改,指令名称、格式变动引起的修改,在此不多加赘述。

例外有关

LA32R需要在状态控制寄存器(CSR)中,配置EENTRYTLBRENTRY两项,分别对应普通例外的入口地址,以及TLB重填例外的入口地址。不难注意到,LA32R的TLB重填例外,是与其他例外分开处理的。

此外,由于触发 TLB 重填例外之后,处理器核将进入直接地址翻译模式,TLBRENTRY处所填入口地址应当是物理地址EENTRY不受影F响。

阅读更多

OS - Lab2实验报告

归档于2025年7月8日。

杂记

Pasted image 20250410155839.png

我们需要回顾一下内存空间相关的知识。

  • kuseg:用户态空间,需要通过TLB和Cache
  • kseg0:过Cache,不过TLB;MMU拉低最高位(-0x8000_0000)得物理地址
  • kseg1:Cache和TLB都不过;MMU拉低高三位得物理地址
  • kseg2:过TLB和Cache

还有,MIPS通过MMIO (Memory Mapped IO)进行外设访问。显然外设处在固定的物理地址上,我们肯定想到kseg1

TLB需要软件初始化,故内核最开始自然放在不用TLB的kseg0上。kseg1暂时认为是访问IO设备专用。

阅读更多

OS - Lab3实验报告

归档于2025年7月8日。

思考题

3.1

  • UVPT指示的是整个页表空间的起始位置。
  • 在页表自映射的设计下, e->env_pgdir[PDX(UVPT)]访问了页目录中,指向页目录自身的页目录项
  • 将这一页目录项赋值为PADDR(e->env_pgdir) | PTE_V,也就是在构建自映射,并让这一项有效,从而使得页目录可被正确访问。
阅读更多

OS - Lab4实验报告

归档于2025年7月8日。

感觉开始上强度了。

我需要从头理一些东西。

杂记

syscall的处理

debugf()为例:

  • 处理参数,随后调用vdebugf()
  • vdebugf()中调用熟悉的vprintfmt,用debug_output作为后端
  • 随后还调用了debug_flush(),调用出syscall_print_cons
  • syscall_print_cons()调用msyscall(),传入信号参数SYS_print_cons,指示之
阅读更多

OS - Lab5实验报告

归档于2025年7月8日。

思考题

5.1

这跟Cache的更新策略有一些关系。

若Cache采用了写回策略,则:由kseg0写设备,向设备传递的数据会被存入Cache,而不会真正到达设备;仅在对应Cache块被清除掉时,向设备传输的数据才能到达设备。这会导致设备的延迟响应,甚至不响应。

Cache的更新策略,也与这个问题有关。如果Cache中缓存了设备的状态寄存器,那么:众所周知,设备的状态往往实时变化,若要保持Cache与设备状态寄存器的一致,我们必须时刻更新Cache,其性能开销极大,完全背离了Cache的设计本意;不维持一致性,则在Cache中读出的设备状态信息与实际的设备状态往往不符,会引起程序逻辑的问题。

这样做对不同设备的影响当然是不同的。对于IDE硬盘,可能是一次读/写请求迟迟不响应,导致程序长时间阻塞;对于显示设备(串口输出/显示器/…),可能是迟迟不显示该显示的内容。

阅读更多