Skip to content

Commit

Permalink
lab3
Browse files Browse the repository at this point in the history
  • Loading branch information
jtysxtm committed Oct 29, 2023
1 parent f84945e commit 0035de8
Showing 1 changed file with 7 additions and 10 deletions.
17 changes: 7 additions & 10 deletions lab3/lab3.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,24 +127,21 @@

#### 如果ucore的缺页服务例程在执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情?

1. 将当前的程序状态(包括PC、寄存器等)保存到内核栈中。
1. 当出现页访问异常时,硬件首先会将错误的相关信息保存在相应寄存器中,并且将执行流程转交给中断处理程序。
scause寄存器会记录对应的错误原因, sepc寄存器记录触发中断的指令地址,stval寄存器记录中断处理所需的辅助信息,如指令获取,访存,缺页异常,记录发生问题的目标地址或出错的指令,以便中断处理程序处理。

2. 将缺页异常的异常向量号写入异常代码寄存器cause的低8位
2. 将控制权转交给操作系统内核,跳转到内核中的缺页异常处理函数(do_pgfault())进行处理

3. 将正在执行的指令的地址(也就是产生缺页异常的地址)写入EPC寄存器
3. 在缺页异常处理函数中,根据缺页地址和进程的页表信息,从磁盘或交换分区中读取相应页面的内容,并建立虚拟地址和物理地址的映射关系,并设置访问权限

4. 跳转到内核中的缺页异常处理函数(do_pgfault())进行处理
4. 如果需要,将被替换的页面写回到磁盘或交换分区中

5. 在缺页异常处理函数中,根据缺页地址和进程的页表信息,从磁盘或交换分区中读取相应页面的内容,并建立虚拟地址和物理地址的映射关系。

6. 如果需要,将被替换的页面写回到磁盘或交换分区中。

7. 恢复之前保存的程序状态,返回到产生缺页异常的指令处重新执行。
5. 恢复之前保存的程序状态,返回到产生缺页异常的指令处重新执行。

#### 数据结构Page的全局变量(其实是一个数组)的每一项与页表中的页目录项和页表项有无对应关系?如果有,其对应关系是啥?

- 数据结构Page的每一项表示一个物理页,保存了该物理页的状态信息,包括是否被占用、是否可交换等。
- 页目录项和页表项存储了物理页的地址和权限信息,通过映射将虚拟地址与物理地址关联起来
- 页表反映了一个从虚拟地址到物理地址的映射关系,页表项(这里是狭义上最小的页的页表项)记录了物理页编号,对应这每一个pages中的物理页。page的vaddr属性存储了页面虚拟地址,通过虚拟地址可以获得页目录项和页表项

### 练习4:补充完成Clock页替换算法(需要编程)

Expand Down

0 comments on commit 0035de8

Please sign in to comment.