目录 实验总结 0. 实验准备 0. 引用计数 1. 实现基于 cow 的 uvmcopy 2. 处理页面异常 4 & 5. 各种检查 实验总结 本次实验用时约 11 个小时。 收获是对 Copy-on-Write 机制 ...
代码在github上。总体来说如果理解了COW机制的话,这个实验的完成也没有很复杂。 这一个实验是要完成COW copy on write fork。在原始的XV 中,fork函数是通过直接对进程的地址空间完整地复制一份来实现的。但是,拷贝整个地址空间是十分耗时的,并且在很多情况下,程序立即调用exec函数来替换掉地址空间,导致fork做了很多无用功。即使不调用exec函数,父进程和子进程的代码段 ...
2021-01-31 12:19 0 1017 推荐指数:
目录 实验总结 0. 实验准备 0. 引用计数 1. 实现基于 cow 的 uvmcopy 2. 处理页面异常 4 & 5. 各种检查 实验总结 本次实验用时约 11 个小时。 收获是对 Copy-on-Write 机制 ...
虽然Copy-on-Write原理是很显而易见的,但是在具体实现中需要处理的细节特别多,经常会在莫名其妙的地方出现错误,再加上使用gdb调试内核本身就是一件不容易的事情 ...
前言 最近绝大多数的空闲时间都拿来锤15-445了,很久没动6.S081。前几天回头看了一下一个月前锤完的Lazy Allocation,自己写的代码几乎都不认识了.......看来总结之类的东西最好还是趁着热乎的时候写啊。 不过15-445的内容实在太多了,我只是为了锤Lab粗略的看了看课件 ...
代码在github上。 这一个实验是要利用缺页异常来实现懒分配(lazy allocation)。用户态程序通过sbrk系统调用来在堆上分配内存,而sbrk则会通过kalloc函数来申请内存页面,之 ...
实验的代码放在了Github上。 第二个实验是Lab: system calls。 这个实验主要就是自己实现几个简单的系统调用并添加到XV6中。 XV6系统调用 添加系统调用主要有以下几步: 在user/user.h中添加系统调用函数的定义。 在user/usys.pl中添加 ...
这一个实验主要是学习XV6的页表(分页机制),关于分页机制的相关内容已经写在XV6学习 (3)里面了。 代码放在Github上。 Print a page table (easy) 这一个就是要实现一个vmprint()函数来遍历页表并打印,可以仿照freewalk()函数来写。 在这里 ...
正在学习MIT的6.S081,把做的实验写一写吧。 实验的代码放在了Github上。 第一个实验是Lab util,算是一个热身的实验,没有涉及到系统的底层,就是使用系统调用来完成几个用户模式的小程序。 Boot xv6 (easy) 启动XV6,按照文档执行就ok了。 在XV6中 ...
这一个实验主要是对RISC-V的汇编、栈帧结构以及陷阱进行简单的了解,难度并不大。 代码放在github上。 RISC-V assembly (easy) Q1: Which registers ...