!4 修改了部分措辞

Merge pull request !4 from zcy/master
pull/5/MERGE
syivester 3 years ago committed by Gitee
commit a0751c801e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F

@ -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所对应的虚拟地址上。

@ -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_SEGMENTdo_fork()函数采用了简单复制的办法来拷贝父进程的这两个段到子进程中,这样做的目的是将父进程的执行现场传递给子进程。
然而对于父进程的代码段子进程应该如何“继承”呢通过第185--190行的注释我们知道对于代码段我们不应直接复制减少系统开销而应通过映射的办法将子进程中对应的逻辑地址空间映射到其父进程中装载代码段的物理页面。这里就要回到[实验2内存管理](chapter4_memory.md#pagetablecook)部分,寻找合适的函数来实现了。
然而对于父进程的代码段子进程应该如何“继承”呢通过第185--190行的注释我们知道对于代码段我们不应直接复制减少系统开销而应通过映射的办法将子进程中对应的逻辑地址空间映射到其父进程中装载代码段的物理页面。这里就要回到[实验2内存管理](chapter4_memory.md#pagetablecook)部分,寻找合适的函数来实现了。注意对页面的权限设置(可读可执行)。

Loading…
Cancel
Save