摘要:
TASK #1 - PAGE LAYOUTS 先看一下这张图片,留一个对extendible hashing的印象: 左边那个就是directory page,它有一个参数叫做global depth,1<<global depth为directory的大小。它存储了指向各个bucket page的 阅读全文
摘要:
这个实验的目的是要为Bustub设计一个缓存管理器BufferPoolManagerInstance来管理数据库的缓存池,还要实现多个缓存池的并行操作。之前写6.S081的时候实现过一个Buffer Node Layer,用来管理操作系统缓存在内存中的inode,和这个BufferPoolManag 阅读全文
摘要:
mmap mmap就是把指定的文件fd映射到进程内存空间的某一个部分,映射建立之后,进程读写这块内存就像是在读写文件一样。按照提示来做实验: Implement mmap: find an unused region in the process's address space in which t 阅读全文
摘要:
i-node xv6文件系统是使用inode来管理文件,先上一张图来解释一个文件的inode是怎么管理它的磁盘块的: xv6文件系统里定义了2个版本的inode。一个是硬盘上面存储的版本struct dinode,在fs.h里定义;另一个是内存里存储的版本struct inode,起到缓存的作用,在 阅读全文
摘要:
Memory allocator xv6是使用linked list来管理空余内存块,我们先看一下kalloc.c究竟是怎么工作的: 首先是2个结构体,匿名结构体kmem就是我们访问空余内存的凭据了,kmem里面有一个自旋锁和一个链表头部指针。struct run显然就是链表结构,里面唯一的成员就是 阅读全文
摘要:
这个实验也不太轻松,如果想要搞清楚uthread怎么完成的话就需要先搞清楚xv6里进程是怎么切换的。我们来梳理一下: xv6进程的切换 先总结进程切换的过程: 1.从进程1进入到内核中,保存用户进程的状态并运行进程1的内核线程。 2.从进程1的内核线程切换到进程2的内核线程,切换需要以CPU调度线程 阅读全文
摘要:
虽然Copy-on-Write原理是很显而易见的,但是在具体实现中需要处理的细节特别多,经常会在莫名其妙的地方出现错误,再加上使用gdb调试内核本身就是一件不容易的事情,所以这个Copy-on-Write实验还是很有难度的。首先来看一下什么是copy-on-write,两张图解释: 1.uvmcop 阅读全文
摘要:
RISC-V assembly Which registers contain arguments to functions? For example, which register holds 13 in main's call to printf? 第一道题目是RISC-V汇编的相关内容。课程网 阅读全文
摘要:
Speed up system calls 这个实验的目的是要“加速系统调用”,怎么加速呢?在内核和用户程序之间创建一个共享的只读页,这样内核往这个页里写入数据的时候,用户程序就可以不经复杂的系统调用直接读取它了。实验要求,把一个只读页从USYSCALL(memlayout.h中定义的一个虚拟地址) 阅读全文
摘要:
System call tracing 这个实验里我们要实现一个trace系统调用,要求是传入一个待追踪的系统调用的掩码,输出所有系统调用的名称和返回值。 首先我们回顾一下,当程序使用系统调用的时候操作系统会怎么做。执行系统调用的时候,操作系统要执行一个trap指令,也就是所谓trap to the 阅读全文