12 2024 档案
摘要:主要是一个内核调度alarm,定时中断并输出alarm。 任务一:backtrace 首先取出内核栈栈顶指针fp,对应到xv6的寄存器名是s0。 static inline uint64 r_fp() { uint64 x; asm volatile("mv %0, s0" : "=r" (x) )
阅读全文
摘要:这个和cow实验联系很紧密,并且cow比这个实验恶心一些的样子。 任务一:sbrk假分配 在sbrk中取消随栈指针变化对内存的分配/回收,只变化相应的栈指针。 这个比较简单,进入sbrk调用的growproc中去掉uvmalloc与uvmdealloc的部分即可。 任务二:Lazy allocati
阅读全文
摘要:这次实验的内容比较杂,但是简单。 任务一:Uthread:switching(线程切换) 为thread添加context来保存寄存器上下文: struct context { uint64 ra; uint64 sp; // callee-saved uint64 s0; uint64 s1; u
阅读全文
摘要:锁实验。锁算是比较简单的一个实验,之前了解过openmp就有了一个类似窃取的概念,那在这个实验里同样也是窃取,只需要对于每个CPU分配的内存块/ cache块进行维护即可。 kmem: 将一个kmem freelist 拓展为 NCPU 个即可。 修改init部分:一个初始化改为NCPU个初始化。
阅读全文
摘要:比较简单的一项实验 大索引(bigfile): xv6的单文件索引有13个,其中只有一个二级索引,文件最大块数目是256+12 = 268块。 现在要给文件索引改成一个二级带一个三级索引,最大块数目就是11+256+256*256 = 65803块,可以容纳下很大的文件了。 先在fs.h中进行相应的
阅读全文
摘要:实现两个功能:分别是mmap与munmap,将文件映射到内存当中,并为一个线程记录他管理的文件所在的页表目录。 函数原型如下: char* mmap( char* addr, int len, int prot, int flags,int fd, int off); int munmap( cha
阅读全文
阅读目录(Content)
此页目录为空