From e9922045472369b5a8143542ff03ce3f01a76250 Mon Sep 17 00:00:00 2001 From: Chengyuan <1136427613@qq.com> Date: Mon, 10 Jan 2022 00:31:07 +0800 Subject: [PATCH] fix some comments --- chapter4_memory.md | 4 ++-- chapter5_process.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/chapter4_memory.md b/chapter4_memory.md index 2fb5c22..2f5a585 100644 --- a/chapter4_memory.md +++ b/chapter4_memory.md @@ -305,7 +305,7 @@ load_user_program()函数对于应用进程逻辑空间的操作可以分成以 - uint64 lookup_pa(pagetable_t pagetable, uint64 va); -查找逻辑地址va所对应的物理地址pa。如果没有与va对应的物理页面,则返回NULL;否则,返回va对应的物理地址。 +查找逻辑地址va所在虚拟页面地址(即va将低12位置零)对应的物理页面地址。如果没有与va对应的物理页面,则返回NULL;否则,返回va对应的物理页面地址。 @@ -774,7 +774,7 @@ System is shutting down with exit code 0. 这里,我们找到了之前运行./obj/app_sum_sequence出错的地方,我们只需要改正这一错误实现缺页处理,使得程序获得正确的输出就好。实现缺页处理的思路如下: -- 通过输入的参数stval(存放的是发生缺页异常时,程序想要访问的逻辑地址)判断缺页的逻辑地址在用户进程逻辑地址空间中的位置,看是不是比USER_STACK_TOP更大,且比我们预设的可能的用户栈最大空间小(这里,我们可以给用户栈一个上限,例如20个4KB的页面); +- 通过输入的参数stval(存放的是发生缺页异常时,程序想要访问的逻辑地址)判断缺页的逻辑地址在用户进程逻辑地址空间中的位置,看是不是比USER_STACK_TOP小,且比我们预设的可能的用户栈的最小栈底指针要大(这里,我们可以给用户栈空间一个上限,例如20个4KB的页面),若满足,则为合法的逻辑地址(本例中不必实现此判断,默认逻辑地址合法)。 - 分配一个物理页,将所分配的物理页面映射到stval所对应的虚拟地址上。 diff --git a/chapter5_process.md b/chapter5_process.md index cc769c3..6cfebb9 100644 --- a/chapter5_process.md +++ b/chapter5_process.md @@ -559,7 +559,7 @@ user/app_naive_fork.c --> user/user_lib.c --> kernel/strap_vector.S --> kernel/s 该函数使用第172--202行的循环来拷贝父进程的逻辑地址空间到其子进程。我们看到,对于trapframe段(case CONTEXT_SEGMENT)以及堆栈段(case CODE_SEGMENT),do_fork()函数采用了简单复制的办法来拷贝父进程的这两个段到子进程中,这样做的目的是将父进程的执行现场传递给子进程。 -然而,对于父进程的代码段,子进程应该如何“继承”呢?通过第185--190行的注释,我们知道对于代码段,我们不应直接复制(减少系统开销),而应通过映射的办法,将子进程中对应的逻辑地址空间映射到其父进程中装载代码段的物理页面。这里,就要回到[实验2内存管理](chapter4_memory.md#pagetablecook)部分,寻找合适的函数来实现了。 +然而,对于父进程的代码段,子进程应该如何“继承”呢?通过第185--190行的注释,我们知道对于代码段,我们不应直接复制(减少系统开销),而应通过映射的办法,将子进程中对应的逻辑地址空间映射到其父进程中装载代码段的物理页面。这里,就要回到[实验2内存管理](chapter4_memory.md#pagetablecook)部分,寻找合适的函数来实现了。注意对页面的权限设置(可读可执行)。