提交 cff55107 编写于 作者: Y Yifan Wu

Small Fix

上级 98cb75da
......@@ -216,7 +216,7 @@
操作系统如果要建立页表,首先要能管理整个系统的物理内存,这就需要知道哪些物理内存放了内核代码,哪些物理内存是空闲的等各种事情。所以需要了解整个系统的物理内存空间的范围,并用以页为单位的页帧来进行物理内存分配的管理,具体实现主要集中在 ``os/src/mm/frame_allocator.rs`` 中。
页表中的页表项的索引其实是虚拟地址中的虚拟页号,页表项的重要内容是物理地址的物理页帧号。为了能够灵活地在虚拟地址、物理地址、虚拟页号、物理页号之间进行各种转换,在 ``os/src/mm/frame_allocator.rs`` 中实现了各种转换函数。
页表中的页表项的索引其实是虚拟地址中的虚拟页号,页表项的重要内容是物理地址的物理页帧号。为了能够灵活地在虚拟地址、物理地址、虚拟页号、物理页号之间进行各种转换,在 ``os/src/mm/address.rs`` 中实现了各种转换函数。
完成上述工作后,基本上就做好了建立页表的前期准备。我们就可以开始建立页表,这主要涉及到页表项的数据结构表示,以及多级页表的起始物理页帧位置和整个所占用的物理页帧的记录。具体实现主要集中在 ``os/src/mm/page_table.rs`` 中。
......@@ -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`` 中。
......
......@@ -18,11 +18,6 @@ Rust 中的动态内存分配
考虑到我们是用Rust来编程的,为了在接下来的一些操作系统的实现功能中进一步释放 Rust 语言的强表达能力来减轻我们的编码负担,本节我们尝试在内核中支持动态内存分配以可以使用各种需要动态内存支持的Rust功能,如Vec、HashMap等。
.. note::
静态与动态内存分配
----------------------------------------------
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册