澪妄之地

6.S081|第五章-中断与设备驱动

关于console的疑惑 我们知道当UART的缓冲区已满的时候,系统会sleep程序直到缓冲区里的东西被消费。于是我们开始疑惑,难道console只能输入不超过128(buffer),尝试了一下还真是,于是疑惑,为什么console的输出能超过128(因为报错的时候通常会打印很多字符)。 其实是因为输出的buffer被显示器消费了。 虽然你输入超过 128 个字符到控制台时,UART ...

6.S081|Lab5-Copy-on-Write Fork for xv6

Implement copy-on write (hard) cow(写时复制)机制不难,但是细节真的很容易出错TwT。不过做完这个lab也是收获满满,对虚拟内存的认识直接跨了一大步。 首先来介绍一下写时复制(copy on write)技术,懒得自己写了,直接摘抄大佬们的文章。 以下来自tzyt 在没有写时复制的系统中,调用 fork() 时,我们会把父进程的所有的内存都拷...

6.S081|第三章-页表

页式硬件 RISCV里执行的指令中的地址都是使用的虚拟地址(Q:为什么要用虚拟地址?A:为了隔离性和保护性),但是机器的物理内存是由物理地址索引的,所以我们需要一种映射机制来完成由虚拟地址到物理地址的转换。 虚拟地址空间是概念,页表是实现这个概念的数据结构。 在开始下面内容之前,我们需要知道xv6的内存管理机制是Sv39 RISC-V,这意味着我们只使用底部的39位,尽管虚拟地...