- 博客(5)
- 收藏
- 关注
原创 xv6 Lab: file system
一定要仔细阅读xv6book的file system部分 阅读关于file的代码。比如创建新的inode的create()调用后会持有返回inode的锁。这一部分我认为是比较难的 如果要写的比较严谨 要考虑的地方还是很多的。主要的细节在最初的bmap()中已经体现到了 照葫芦画瓢即可。要修改fs.h的结构体 fs.c中的bmap()函数。否则去测试的时候跟没修改过的bmap()是一样的。要注意块号bn与连续的块的索引到底是什么关系。但在测试的时候发现给的用例可能没有这么严谨。
2023-10-25 20:48:01
305
1
原创 xv6 Copy-on-Write Fork Lab
关于usertrap() 注意与lazy allocation 不同 我们得到r_stval()中的 va进而得到的pte是访问了不能写的页面触发的page fault。2.修改usertrap() 让它识别page fault 就是想写入一个未设置 PTE_W 的页面。1.修改 uvmcopy()函数 只是让子进程的pte映射到父进程的物理页面上 而不是分配页面。在kalloc()分配页面的时候就把引用计数加1 kree()会在引用计数为0时才释放页面。而且要把进程的pte上的PTE_W 取消。
2023-10-07 19:24:20
103
1
原创 xv6 lazy allocation
这部分的 hint其实只是给出遇到问题后去怎么解决 总体思路就是实现lazy allocation。只有lazy allocation 才能去unmap没有分配空间而导致pte无效的情况。这里是是把pte为0的情况 和pte无效的情况变成continue。这是跑测试用例的时候发现的 从别的函数中调用的mappages()我建议就是想到一个得修改的地方 写上 然后调试去找新的错误。这是write 和 read 系统调用的底层函数。注意我们这里的虚拟地址是具体的 一定不要舍入。但要考虑到传入的n是负数的情况。
2023-09-20 19:27:23
117
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人