引言¶
本章导读¶
本章中内核将实现虚拟内存机制,这注定是一趟艰难的旅程。
实践体验¶
本章应用运行起来效果与上一章基本一致。
获取本章代码:
$ git clone https://github.com/LearningOS/rCore-Tutorial-Code-2024S.git
$ cd rCore-Tutorial-Code-2024S
$ git checkout ch4
$ git clone https://github.com/LearningOS/rCore-Tutorial-Test-2024S.git user
或许你之前已经克隆过了仓库,只希望从远程仓库更新,而非再克隆一次:
$ cd rCore-Tutorial-Code-2024S
# 你可以将 upstream 改为你喜欢的名字
$ git remote add upstream https://github.com/LearningOS/rCore-Tutorial-Code-2024S.git
# 更新仓库信息
$ git fetch upstream
# 查看已添加的远程仓库;应该能看到已有一个 origin 和新添加的 upstream 仓库
$ git remote -v
# 根据需求选择以下一种操作即可
# 在本地新建一个与远程仓库对应的分支:
$ git checkout -b ch4 upstream/ch4
# 本地已有分支,从远程仓库更新:
$ git checkout ch4
$ git merge upstream/ch4
# 将更新推送到自己的远程仓库
$ git push origin ch4
在 qemu 模拟器上运行本章代码:
$ cd os
$ make run
本章代码树¶
1├── os
2│ ├── ...
3│ └── src
4│ ├── ...
5│ ├── config.rs(修改:新增一些内存管理的相关配置)
6│ ├── linker.ld(修改:将跳板页引入内存布局)
7│ ├── loader.rs(修改:仅保留获取应用数量和数据的功能)
8│ ├── main.rs(修改)
9│ ├── mm(新增:内存管理的 mm 子模块)
10│ │ ├── address.rs(物理/虚拟 地址/页号的 Rust 抽象)
11│ │ ├── frame_allocator.rs(物理页帧分配器)
12│ │ ├── heap_allocator.rs(内核动态内存分配器)
13│ │ ├── memory_set.rs(引入地址空间 MemorySet 及逻辑段 MemoryArea 等)
14│ │ ├── mod.rs(定义了 mm 模块初始化方法 init)
15│ │ └── page_table.rs(多级页表抽象 PageTable 以及其他内容)
16│ ├── syscall
17│ │ ├── fs.rs(修改:基于地址空间的 sys_write 实现)
18│ │ ├── mod.rs
19│ │ └── process.rs
20│ ├── task
21│ │ ├── context.rs(修改:构造一个跳转到不同位置的初始任务上下文)
22│ │ ├── mod.rs(修改,详见文档)
23│ │ ├── switch.rs
24│ │ ├── switch.S
25│ │ └── task.rs(修改,详见文档)
26│ └── trap
27│ ├── context.rs(修改:在 Trap 上下文中加入了更多内容)
28│ ├── mod.rs(修改:基于地址空间修改了 Trap 机制,详见文档)
29│ └── trap.S(修改:基于地址空间修改了 Trap 上下文保存与恢复汇编代码)
30└── user
31 ├── build.py(编译时不再使用)
32 ├── ...
33 └── src
34 ├── linker.ld(修改:将所有应用放在各自地址空间中固定的位置)
35 └── ...
36
37 cloc os
38 -------------------------------------------------------------------------------
39 Language files blank comment code
40 -------------------------------------------------------------------------------
41 Rust 26 138 56 1526
42 Assembly 3 3 26 86
43 make 1 11 4 36
44 TOML 1 2 1 13
45 -------------------------------------------------------------------------------
46 SUM: 31 154 87 1661
47 -------------------------------------------------------------------------------