2022/07/xv6_lab6_record/ #5
Replies: 5 comments 5 replies
-
请问:PG_REFCNT等宏定义在哪一个文件定义呀? |
Beta Was this translation helpful? Give feedback.
2 replies
-
我是在kalloc中定义的,已经正常运行了。你的博客写得真好!非常感谢!:-D
另外想请问一下:为什么做cow的实验不能基于lazy allocation实验呢?我自己做完cow lab后,尝试将sbrk内存分配改为懒加载,并将trap等处理好了,cowtests测试可以过但是usertests部分用例与lazytests就过不了了
| |
Quan
***@***.***
|
…---- 回复的原邮件 ----
| 发件人 | ***@***.***> |
| 日期 | 2022年09月20日 05:24 |
| 收件人 | ***@***.***> |
| 抄送至 | ***@***.******@***.***> |
| 主题 | Re: [ttzytt/ttzytt.github.io] 2022/07/xv6_lab6_record/ (Discussion #5) |
抱歉,因为我 git 用的不是特别熟,上传 github 之前也没咋检查,好像是把一个文件漏掉了 (kalloc_macros.h),然后这文件应该放了所有需要的宏。
刚刚我在本地检查了一遍,发现也没找到这个文件,不知道是为啥,所以直接把博客里写的这些宏复制进去了。具体可以看我新 push 到 github 的版本。这次上传前我又跑了一遍 make grade 所以应该没问题了。
其实用到这个宏的文件应该只有 kalloc.c,所以直接写在 kalloc.c 应该也没问题。
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.Message ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
3 replies
-
谢谢大佬😁
| |
Quan
***@***.***
|
…---- 回复的原邮件 ----
| 发件人 | ***@***.***> |
| 日期 | 2022年09月22日 06:14 |
| 收件人 | ***@***.***> |
| 抄送至 | ***@***.******@***.***> |
| 主题 | Re: [ttzytt/ttzytt.github.io] 2022/07/xv6_lab6_record/ (Discussion #5) |
不过这些代码已经有段时间没看了,所以也不太确定这些说的对不对。
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.Message ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
0 replies
-
应该是mkfs文件夹没有上传成功😥
| |
Quan
***@***.***
|
…---- 回复的原邮件 ----
| 发件人 | ***@***.***> |
| 日期 | 2022年09月22日 05:39 |
| 收件人 | ***@***.***> |
| 抄送至 | ***@***.******@***.***> |
| 主题 | Re: [ttzytt/ttzytt.github.io] 2022/07/xv6_lab6_record/ (Discussion #5) |
谢谢,我刚刚 clone 了一下你的代码发现 make qemu 失败了,代码如下:
make: *** No rule to make target 'mkfs/mkfs.c', needed by 'mkfs/mkfs'.
所以不知道具体出错的是哪里。起初我还以为可能有些页会同时被当成 lazy 和 cow 的页帧,但是仔细看了以后发现这两种的 PTE_V 肯定是不一样的。
这样看看不出来也正常,可能需要用 gdb 调试一下。
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.Message ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
0 replies
-
这确实提醒我了:usertests的第一个测试是MAXVAplus,这个测试无法通过,错误原因是无法杀掉子进程。里面的测试内容与你说的基本一致,父进程申请超大内存然后再fork子进程。大概就是无法trap异常处理错误导致的。如果我将第一个实验删掉,usertests可以通过一部分
| |
Quan
***@***.***
|
…---- 回复的原邮件 ----
| 发件人 | ***@***.***> |
| 日期 | 2022年09月22日 06:07 |
| 收件人 | ***@***.***> |
| 抄送至 | ***@***.******@***.***> |
| 主题 | Re: [ttzytt/ttzytt.github.io] 2022/07/xv6_lab6_record/ (Discussion #5) |
我刚刚又想了一下,可能是有这样的情况:
在 fork 的时候,父进程有一些完全没使用的懒分配页,也被当成了 COW 页映射给了子进程。处理这两种页缺页错误的策略是不一样的。对于 COW 页,我们需要把原本的父进程页复制过来,但是懒分配页只要 kalloc 一个新页就行了。
这就造成了,lazytest 可能会申请很大的内存,然后 fork 出一个子进程。再让这个子进程去访问某些父进程里分配过的内存。那么就算访问的是父进程里的懒分配页,里面完全没有东西,因为被当成了 COW 页,还是需要完整的把这个页帧复制一遍。
而在正常的 lazy lab 实现中,可以直接给这个子进程分配一个页(毕竟对应的父进程页里啥也没有)。
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.Message ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
2022/07/xv6_lab6_record/
upd@2022/9/14:最近把实验的代码放到 github 上了,如果需要参考可以查看这里: https://github.com/ttzytt/xv6-riscv 里面不同的分支就是不同的实验。 Lab6: Copy-on-Write Fork for xv6 这个 lab 的描述属实是简洁,其实他主要的描述在前面: The problem The fork() system ca
https://ttzytt.com/2022/07/xv6_lab6_record/
Beta Was this translation helpful? Give feedback.
All reactions