Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Miykael_xxm
RCore Tutorial Book V3
提交
cff55107
R
RCore Tutorial Book V3
项目概览
Miykael_xxm
/
RCore Tutorial Book V3
与 Fork 源项目一致
Fork自
rcore-os / RCore Tutorial Book V3
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
RCore Tutorial Book V3
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
cff55107
编写于
3月 23, 2021
作者:
Y
Yifan Wu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Small Fix
上级
98cb75da
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
2 addition
and
7 deletion
+2
-7
source/chapter4/0intro.rst
source/chapter4/0intro.rst
+2
-2
source/chapter4/1rust-dynamic-allocation.rst
source/chapter4/1rust-dynamic-allocation.rst
+0
-5
未找到文件。
source/chapter4/0intro.rst
浏览文件 @
cff55107
...
@@ -216,7 +216,7 @@
...
@@ -216,7 +216,7 @@
操作系统如果要建立页表,首先要能管理整个系统的物理内存,这就需要知道哪些物理内存放了内核代码,哪些物理内存是空闲的等各种事情。所以需要了解整个系统的物理内存空间的范围,并用以页为单位的页帧来进行物理内存分配的管理,具体实现主要集中在 ``os/src/mm/frame_allocator.rs`` 中。
操作系统如果要建立页表,首先要能管理整个系统的物理内存,这就需要知道哪些物理内存放了内核代码,哪些物理内存是空闲的等各种事情。所以需要了解整个系统的物理内存空间的范围,并用以页为单位的页帧来进行物理内存分配的管理,具体实现主要集中在 ``os/src/mm/frame_allocator.rs`` 中。
页表中的页表项的索引其实是虚拟地址中的虚拟页号,页表项的重要内容是物理地址的物理页帧号。为了能够灵活地在虚拟地址、物理地址、虚拟页号、物理页号之间进行各种转换,在 ``os/src/mm/
frame_allocator
.rs`` 中实现了各种转换函数。
页表中的页表项的索引其实是虚拟地址中的虚拟页号,页表项的重要内容是物理地址的物理页帧号。为了能够灵活地在虚拟地址、物理地址、虚拟页号、物理页号之间进行各种转换,在 ``os/src/mm/
address
.rs`` 中实现了各种转换函数。
完成上述工作后,基本上就做好了建立页表的前期准备。我们就可以开始建立页表,这主要涉及到页表项的数据结构表示,以及多级页表的起始物理页帧位置和整个所占用的物理页帧的记录。具体实现主要集中在 ``os/src/mm/page_table.rs`` 中。
完成上述工作后,基本上就做好了建立页表的前期准备。我们就可以开始建立页表,这主要涉及到页表项的数据结构表示,以及多级页表的起始物理页帧位置和整个所占用的物理页帧的记录。具体实现主要集中在 ``os/src/mm/page_table.rs`` 中。
...
@@ -234,7 +234,7 @@
...
@@ -234,7 +234,7 @@
));
));
}
}
完成到这里,我们就可以使能分页机制了。且我们应该有更加方便的机制来给支持应用运行。在本章之前,都是把应用程序转换成 ``binary`` 格式来执行,这其实把编译器生成的 ``ELF`` 执行文件中大量有用的信息给去掉了,比如各种属性的代码段,数据段,程序的入口地址等。既然有了给应用运行提供虚拟地址空间的能力,我们就可以利用 ``ELF`` 执行文件中的各种信息来灵活构建应用运行所需要的虚拟地址空间。
具体实现主要集中在 ``os/src/loader.rs`` 中
。
完成到这里,我们就可以使能分页机制了。且我们应该有更加方便的机制来给支持应用运行。在本章之前,都是把应用程序转换成 ``binary`` 格式来执行,这其实把编译器生成的 ``ELF`` 执行文件中大量有用的信息给去掉了,比如各种属性的代码段,数据段,程序的入口地址等。既然有了给应用运行提供虚拟地址空间的能力,我们就可以利用 ``ELF`` 执行文件中的各种信息来灵活构建应用运行所需要的虚拟地址空间。
在 ``os/src/loader.rs`` 中可以看到如何获取一个应用的 ELF 执行文件,而在 ``os/src/mm/memory_set`` 中的 ``MemorySet::from_elf`` 可以看到如何通过解析 ELF 来创建一个应用地址空间
。
对于有了虚拟地址空间的 ``任务`` ,我们可以把它叫做叫做 ``进程`` 了。操作系统为此需要扩展任务控制块 ``TaskControlBlock`` 的管理范围,使得操作系统能管理拥有独立页表和虚拟地址空间的应用程序的运行。相关主要的改动集中在 ``os/src/task/task.rs`` 中。
对于有了虚拟地址空间的 ``任务`` ,我们可以把它叫做叫做 ``进程`` 了。操作系统为此需要扩展任务控制块 ``TaskControlBlock`` 的管理范围,使得操作系统能管理拥有独立页表和虚拟地址空间的应用程序的运行。相关主要的改动集中在 ``os/src/task/task.rs`` 中。
...
...
source/chapter4/1rust-dynamic-allocation.rst
浏览文件 @
cff55107
...
@@ -18,11 +18,6 @@ Rust 中的动态内存分配
...
@@ -18,11 +18,6 @@ Rust 中的动态内存分配
考虑到我们是用Rust来编程的,为了在接下来的一些操作系统的实现功能中进一步释放 Rust 语言的强表达能力来减轻我们的编码负担,本节我们尝试在内核中支持动态内存分配以可以使用各种需要动态内存支持的Rust功能,如Vec、HashMap等。
考虑到我们是用Rust来编程的,为了在接下来的一些操作系统的实现功能中进一步释放 Rust 语言的强表达能力来减轻我们的编码负担,本节我们尝试在内核中支持动态内存分配以可以使用各种需要动态内存支持的Rust功能,如Vec、HashMap等。
.. note::
静态与动态内存分配
静态与动态内存分配
----------------------------------------------
----------------------------------------------
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录