# 引言 - Open-Source-OS-Tutorial-Summer-of-Code-2022 文档

Hide navigation sidebar
Hide table of contents sidebar
Toggle table of contents sidebar

# 引言

## 本章导读

本章中内核将实现虚拟内存机制，这注定是一趟艰难的旅程。

## 实践体验

注解

基于github classroom的开发方式

基于github classroom，可方便建立开发用的git repository，并可基于github的 codespace （在线版ubuntu +vscode）在线开发使用。整个开发环境仅仅需要一个网络浏览器。

1. 在网络浏览器中用自己的 github id 登录 github.com

2. 接收 第二个实验(os4)的github classroom在线邀请 ，根据提示一路选择OK即可。

3. 完成第二步后，你的第二个实验的 github repository 会被自动建立好，点击此github repository的链接，就可看到你要完成的第一个实验了。

4. 在你的第二个实验的网页的中上部可以看到一个醒目的 code 绿色按钮，点击后，可以进一步看到 codespace 标签和醒目的 create codesapce on main 绿色按钮。请点击这个绿色按钮，就可以进入到在线的ubuntu +vscode环境中

5. 再按照下面的环境安装提示在vscode的 console 中安装配置开发环境：rustc，qemu等工具。

6. 在vscode的 console 中执行 make setupclassroom_test4 （该命令仅执行一次）配置githubclassroom 自动评分功能。

7. 然后就可以基于在线vscode进行开发、运行、提交等完整的实验过程了。

上述的3，4，5步不是必须的，你也可以线下本地开发。

本章应用运行起来效果与上一章基本一致。

获取本章代码：

    $ git clone https://github.com/LearningOS/rust-based-os-comp2022.git
    $ cd rust-based-os-comp2022/
    $ make setupclassroom_test4  //注意：这一步很重要，是用于github classroom自动评测你的工作。这一步只需在首次克隆项目仓库时执行一次，以后一般就不用执行了，除非 .github/workflows/classroom.yml发生了变化。

在 qemu 模拟器上运行 lab2(os4)参考框架: ：

    $ cd os4-ref
    $ make run

## lab2(os4)参考框架:

     1├── os4-ref
     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 os4-ref
    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 -------------------------------------------------------------------------------