Skip to content

Commit

Permalink
report updated
Browse files Browse the repository at this point in the history
  • Loading branch information
Alkaild_Lu committed Nov 9, 2024
1 parent 05036db commit 7f388a2
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions reports/lab2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@

# 2024-autumn-rCore-ch4

## 编程作业

**对于前一个章节的sys_task_info和sys_get_time两个函数,主要就是把虚拟地址转换为物理地址,加了一个translated_struct_ptr函数在os/src/mm/page_table.rs里,然后在os/src/syscall/process.rs里调用。**

**对于mmap和unmmap主要的两个函数在os/src/task/task.rs里,**

**完成了当前进程的mmap和munmap。其中mmap直接调用了当前进程的memoryset里的insert_framed_area方法。unmmap则是在memoryset里加了一个delete_framed_area方法完成的。**

## 简答作业

1. #### 页表项的数据结构抽象与类型定义

![../_images/sv39-pte.png](https://learningos.cn/rCore-Camp-Guide-2024A/_images/sv39-pte.png)

**上图为 SV39 分页模式下的页表项,其中 [53:10] 这 44 位是物理页号,最低的 8 位 [7:0] 则是标志位,它们的含义如下:**


* **仅当 V(Valid) 位为 1 时,页表项才是合法的;**
* **R/W/X 分别控制索引到这个页表项的对应虚拟页面是否允许读/写/取指;**
* **U 控制索引到这个页表项的对应虚拟页面是否在 CPU 处于 U 特权级的情况下是否被允许访问;**
* **G 我们不理会;**
* **A(Accessed) 记录自从页表项上的这一位被清零之后,页表项的对应虚拟页面是否被访问过;**
* **D(Dirty) 则记录自从页表项上的这一位被清零之后,页表项的对应虚拟页表是否被修改过。**
2. **缺页**

* 1. **页面缺失异常**:页表项指向的页面在交换空间(swap)中,因此需要从磁盘中加载。
2. **页面未映射异常**:访问的虚拟地址在页表中没有映射到物理内存(页表项为空)。
* **`stval` (Store Trap Value Register)**:保存导致缺页的虚拟地址。
**`scause` (Supervisor Cause Register)**:指明缺页异常的原因(例如是否因为权限或页面不存在)。
**`sepc` (Supervisor Exception Program Counter)**:保存导致异常的指令地址,便于处理完缺页后恢复执行。
* **节省内存和提高性能**:仅在实际访问页面时分配内存,减少不必要的物理内存占用。
**提高加载效率**:避免立即加载大段内存,如代码段在磁盘中的位置保存,第一次访问时才加载,从而加快程序启动速度。
**降低内存碎片**:仅按需分配,减少对内存的大块划分需求,使内存管理更有效。
* **10GB为2560000页(每页4kb),一个页表项大小为8字节,一页可包含512个条目,需要2560000/512≈5000页,20MB。(一级二级可省略)**
* **在内存分配时,不立即为用户进程分配物理页,而是仅分配虚拟地址空间,设置页表项为不可访问。当页面被访问时触发缺页异常,此时才进行实际的页面分配。**
* **页表项标记为无效,可能会有一个 **`swapped` 位指示页面已被换出。
3. **双页表与单页表**

* **不会更换页表。**
* **加一位U/S,以限制在用户模式或者内核模式可访问。**
* **单页表的优势包括:**
* **减少内存开销**:不需要为用户态和内核态维护两套页表。
* **性能优化**:切换上下文时不必频繁更新页表地址寄存器。
* **实现简单**:单页表设计较为直接,省去双页表间的复杂管理逻辑。
* **在双页表设计中,以下情况下需要更换页表:**
* **从用户态切换到内核态时,切换为内核页表。**
* **进程切换时,需要切换为新进程的用户态页表。**

# **荣誉准则**

**警告**

**请把填写了《你的说明》的下述内容拷贝到的到实验报告中。 否则,你的提交将视作无效,本次实验的成绩将按“0”分计。**

1. **在完成本次实验的过程(含此前学习的过程)中,我曾分别与 ****以下各位** 就(与本次实验相关的)以下方面做过交流,还在代码中对应的位置以注释形式记录了具体的交流对象及内容:
> *《你交流的对象说明》*
>
2. **此外,我也参考了 ****以下资料** ,还在代码中对应的位置以注释形式记录了具体的参考来源及内容:
> *《你参考的资料说明》*
>
3. **我独立完成了本次实验除以上方面之外的所有工作,包括代码与文档。 我清楚地知道,从以上方面获得的信息在一定程度上降低了实验难度,可能会影响起评分。**
4. **我从未使用过他人的代码,不管是原封不动地复制,还是经过了某些等价转换。 我未曾也不会向他人(含此后各届同学)复制或公开我的实验代码,我有义务妥善保管好它们。 我提交至本实验的评测系统的代码,均无意于破坏或妨碍任何计算机系统的正常运转。 我清楚地知道,以上情况均为本课程纪律所禁止,若违反,对应的实验成绩将按“-100”分计。**

0 comments on commit 7f388a2

Please sign in to comment.