Skip to content

Commit 4e8a910

Browse files
committed
deploy: 32d6eb1
1 parent abba044 commit 4e8a910

File tree

3 files changed

+6
-6
lines changed

3 files changed

+6
-6
lines changed

_sources/chapter6/3using-easy-fs-in-kernel.rst.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ Qemu 模拟器平台
113113
- 第 12 行,我们为虚拟机添加一块虚拟硬盘,内容为我们之前通过 ``easy-fs-fuse`` 工具打包的包含应用 ELF 的 easy-fs 镜像,并命名为 ``x0`` 。
114114
- 第 13 行,我们将硬盘 ``x0`` 作为一个 VirtIO 总线中的一个块设备接入到虚拟机系统中。 ``virtio-mmio-bus.0`` 表示 VirtIO 总线通过 MMIO 进行控制,且该块设备在总线中的编号为 0 。
115115

116-
**内存映射 I/O** (MMIO, Memory-Mapped I/O) 指的是外设的设备寄存器可以通过特定的物理内存地址来访问,每个外设的设备寄存器都分布在没有交集的一个或数个物理地址区间中,不同外设的设备寄存器所占的物理地址空间也不会产生交集,且这些外设物理地址区间也不会和RAM的物理内存所在的区间存在交集(注:在后续的外设相关章节有更深入的讲解)。从Qemu for RISC-V 64 平台的 `源码 <https://github.com/qemu/qemu/blob/master/hw/riscv/virt.c#L58>`_ 中可以找到 VirtIO 外设总线的 MMIO 物理地址区间为从 0x10001000 开头的 4KiB 。为了能够在内核中访问 VirtIO 外设总线,我们就必须在内核地址空间中对特定内存区域提前进行映射:
116+
**内存映射 I/O** (MMIO, Memory-Mapped I/O) 指的是外设的设备寄存器可以通过特定的物理内存地址来访问,每个外设的设备寄存器都分布在没有交集的一个或数个物理地址区间中,不同外设的设备寄存器所占的物理地址空间也不会产生交集,且这些外设物理地址区间也不会和RAM的物理内存所在的区间存在交集(注:在后续的外设相关章节有更深入的讲解)。从Qemu for RISC-V 64 平台的 `源码 <https://github.com/qemu/qemu/blob/f1dd640896ee2b50cb34328f2568aad324702954/hw/riscv/virt.c#L83>`_ 中可以找到 VirtIO 外设总线的 MMIO 物理地址区间为从 0x10001000 开头的 4KiB 。为了能够在内核中访问 VirtIO 外设总线,我们就必须在内核地址空间中对特定内存区域提前进行映射:
117117

118118
.. code-block:: rust
119119
@@ -558,7 +558,7 @@ K210 真实硬件平台
558558
path.as_str(),
559559
OpenFlags::from_bits(flags).unwrap()
560560
) {
561-
let mut inner = task.acquire_inner_lock();
561+
let mut inner = task.inner_exclusive_access();
562562
let fd = inner.alloc_fd();
563563
inner.fd_table[fd] = Some(inode);
564564
fd as isize
@@ -699,4 +699,4 @@ K210 真实硬件平台
699699
}
700700
}
701701
702-
操作系统都是通过文件描述符在当前进程的文件描述符表中找到某个文件,无需关心文件具体的类型,只要知道它一定实现了 ``File`` Trait 的 ``read/write`` 方法即可。Trait 对象提供的运行时多态能力会在运行的时候帮助我们定位到符合实际类型的 ``read/write`` 方法。
702+
操作系统都是通过文件描述符在当前进程的文件描述符表中找到某个文件,无需关心文件具体的类型,只要知道它一定实现了 ``File`` Trait 的 ``read/write`` 方法即可。Trait 对象提供的运行时多态能力会在运行的时候帮助我们定位到符合实际类型的 ``read/write`` 方法。

chapter6/3using-easy-fs-in-kernel.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ <h3>Qemu 模拟器平台<a class="headerlink" href="#qemu" title="永久链接
480480
<li><p>第 12 行,我们为虚拟机添加一块虚拟硬盘,内容为我们之前通过 <code class="docutils literal notranslate"><span class="pre">easy-fs-fuse</span></code> 工具打包的包含应用 ELF 的 easy-fs 镜像,并命名为 <code class="docutils literal notranslate"><span class="pre">x0</span></code></p></li>
481481
<li><p>第 13 行,我们将硬盘 <code class="docutils literal notranslate"><span class="pre">x0</span></code> 作为一个 VirtIO 总线中的一个块设备接入到虚拟机系统中。 <code class="docutils literal notranslate"><span class="pre">virtio-mmio-bus.0</span></code> 表示 VirtIO 总线通过 MMIO 进行控制,且该块设备在总线中的编号为 0 。</p></li>
482482
</ul>
483-
<p><strong>内存映射 I/O</strong> (MMIO, Memory-Mapped I/O) 指的是外设的设备寄存器可以通过特定的物理内存地址来访问,每个外设的设备寄存器都分布在没有交集的一个或数个物理地址区间中,不同外设的设备寄存器所占的物理地址空间也不会产生交集,且这些外设物理地址区间也不会和RAM的物理内存所在的区间存在交集(注:在后续的外设相关章节有更深入的讲解)。从Qemu for RISC-V 64 平台的 <a class="reference external" href="https://github.com/qemu/qemu/blob/master/hw/riscv/virt.c#L58">源码</a> 中可以找到 VirtIO 外设总线的 MMIO 物理地址区间为从 0x10001000 开头的 4KiB 。为了能够在内核中访问 VirtIO 外设总线,我们就必须在内核地址空间中对特定内存区域提前进行映射:</p>
483+
<p><strong>内存映射 I/O</strong> (MMIO, Memory-Mapped I/O) 指的是外设的设备寄存器可以通过特定的物理内存地址来访问,每个外设的设备寄存器都分布在没有交集的一个或数个物理地址区间中,不同外设的设备寄存器所占的物理地址空间也不会产生交集,且这些外设物理地址区间也不会和RAM的物理内存所在的区间存在交集(注:在后续的外设相关章节有更深入的讲解)。从Qemu for RISC-V 64 平台的 <a class="reference external" href="https://github.com/qemu/qemu/blob/f1dd640896ee2b50cb34328f2568aad324702954/hw/riscv/virt.c#L83">源码</a> 中可以找到 VirtIO 外设总线的 MMIO 物理地址区间为从 0x10001000 开头的 4KiB 。为了能够在内核中访问 VirtIO 外设总线,我们就必须在内核地址空间中对特定内存区域提前进行映射:</p>
484484
<div class="highlight-rust notranslate"><div class="highlight"><pre><span></span><span class="c1">// os/src/config.rs</span>
485485

486486
<span class="cp">#[cfg(feature = </span><span class="s">&quot;board_qemu&quot;</span><span class="cp">)]</span>
@@ -871,7 +871,7 @@ <h3>打开与关闭文件<a class="headerlink" href="#id10" title="永久链接
871871
<span class="w"> </span><span class="n">path</span><span class="p">.</span><span class="n">as_str</span><span class="p">(),</span>
872872
<span class="w"> </span><span class="n">OpenFlags</span>::<span class="n">from_bits</span><span class="p">(</span><span class="n">flags</span><span class="p">).</span><span class="n">unwrap</span><span class="p">()</span>
873873
<span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
874-
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">inner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">acquire_inner_lock</span><span class="p">();</span>
874+
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">inner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">inner_exclusive_access</span><span class="p">();</span>
875875
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">fd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">inner</span><span class="p">.</span><span class="n">alloc_fd</span><span class="p">();</span>
876876
<span class="w"> </span><span class="n">inner</span><span class="p">.</span><span class="n">fd_table</span><span class="p">[</span><span class="n">fd</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">inode</span><span class="p">);</span>
877877
<span class="w"> </span><span class="n">fd</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="kt">isize</span>

searchindex.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)