Skip to content

Commit

Permalink
deploy: a20176c
Browse files Browse the repository at this point in the history
  • Loading branch information
rcy17 committed Feb 28, 2024
1 parent 5c7d219 commit c49e70a
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 5 deletions.
13 changes: 12 additions & 1 deletion _sources/chapter2/0intro.rst.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,15 @@

.. note::

如果测例仓库有所更新或者你切换了代码仓库的分支,你可能需要清理掉测例仓库原版的编译结果,此时需要执行
在你切换代码仓库的分支前,请务必先清理代码仓库原分支的编译结果,此时需要执行

.. code-block:: console
$ make clean
如果你没有清理编译结果便切换了分支,可能出现清理后也无法跑通 base 的情况,此时请尝试切换回原分支并执行清理指令。

如果测例仓库有所更新,你可能需要清理掉测例仓库原版的编译结果,此时需要执行

.. code-block:: console
Expand All @@ -58,6 +66,9 @@
$ make clean
$ cd ..
注意,在 lab3 之前单独清理测例仓库可能导致 os 无法正常启动,遇到该问题时请执行代码仓库的编译结果清理。


我们可以通过 ``make user`` 生成用户程序,最终将 ``.bin`` 文件放在 ``user/target/bin`` 目录下。

.. code-block:: console
Expand Down
2 changes: 1 addition & 1 deletion _sources/chapter2/1rv-privilege.rst.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

为确保操作系统的安全,对应用程序而言,需要限制的主要有两个方面:
- 应用程序不能访问任意的地址空间(这个在第四章会进一步讲解,本章不会讲解)
- 应用程序不能执行某些可能破会计算机系统的指令(本章的重点)
- 应用程序不能执行某些可能破坏计算机系统的指令(本章的重点)

假设有了这样的限制,我们还需要确保应用程序能够得到操作系统的服务,即应用程序和操作系统还需要有交互的手段。使得低特权级软件都只能做高特权级软件允许它做的,且低特权级软件的超出其能力的要求必须寻求高特权级软件的帮助。在这里的高特权级软件就是低特权级软件的软件执行环境。

Expand Down
8 changes: 7 additions & 1 deletion chapter2/0intro.html
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,12 @@ <h2>实践体验<a class="headerlink" href="#id3" title="永久链接至标题">
<p>上面的指令会将测例仓库克隆到代码仓库下并命名为 <code class="docutils literal notranslate"><span class="pre">user</span></code> ,注意 <code class="docutils literal notranslate"><span class="pre">/user</span></code> 在代码仓库的 <code class="docutils literal notranslate"><span class="pre">.gitignore</span></code> 中,因此不会出现 <code class="docutils literal notranslate"><span class="pre">.git</span></code> 文件夹嵌套的问题,并且你 <code class="docutils literal notranslate"><span class="pre">checkout</span></code> 代码仓库时也不会影响测例仓库的内容。</p>
<div class="admonition note">
<p class="admonition-title">注解</p>
<p>如果测例仓库有所更新或者你切换了代码仓库的分支,你可能需要清理掉测例仓库原版的编译结果,此时需要执行</p>
<p>在你切换代码仓库的分支前,请务必先清理代码仓库原分支的编译结果,此时需要执行</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>make clean
</pre></div>
</div>
<p>如果你没有清理编译结果便切换了分支,可能出现清理后也无法跑通 base 的情况,此时请尝试切换回原分支并执行清理指令。</p>
<p>如果测例仓库有所更新,你可能需要清理掉测例仓库原版的编译结果,此时需要执行</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>make -C user clean
</pre></div>
</div>
Expand All @@ -318,6 +323,7 @@ <h2>实践体验<a class="headerlink" href="#id3" title="永久链接至标题">
<span class="gp">$ </span><span class="nb">cd</span> ..
</pre></div>
</div>
<p>注意,在 lab3 之前单独清理测例仓库可能导致 os 无法正常启动,遇到该问题时请执行代码仓库的编译结果清理。</p>
</div>
<p>我们可以通过 <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">user</span></code> 生成用户程序,最终将 <code class="docutils literal notranslate"><span class="pre">.bin</span></code> 文件放在 <code class="docutils literal notranslate"><span class="pre">user/target/bin</span></code> 目录下。</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>git checkout ch2
Expand Down
2 changes: 1 addition & 1 deletion chapter2/1rv-privilege.html
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ <h2>特权级的软硬件协同设计<a class="headerlink" href="#id3" title="
所以,计算机专家就想到一个方法,能否让相对安全可靠的操作系统不受到应用程序的破坏,运行在一个安全的执行环境中,而让应用程序运行在一个无法破坏操作系统的执行环境中?</p>
<p>为确保操作系统的安全,对应用程序而言,需要限制的主要有两个方面:
- 应用程序不能访问任意的地址空间(这个在第四章会进一步讲解,本章不会讲解)
- 应用程序不能执行某些可能破会计算机系统的指令(本章的重点)</p>
- 应用程序不能执行某些可能破坏计算机系统的指令(本章的重点)</p>
<p>假设有了这样的限制,我们还需要确保应用程序能够得到操作系统的服务,即应用程序和操作系统还需要有交互的手段。使得低特权级软件都只能做高特权级软件允许它做的,且低特权级软件的超出其能力的要求必须寻求高特权级软件的帮助。在这里的高特权级软件就是低特权级软件的软件执行环境。</p>
<p>为了完成这样的特权级需求,需要进行软硬件协同设计。一个比较简洁的方法就是,处理器设置两个不同安全等级的执行环境:用户态特权级的执行环境和内核态特权级的执行环境。且明确指出可能破会计算机系统的内核态特权级指令子集,规定内核态特权级指令子集中的指令只能在内核态特权级的执行环境中执行,如果在用户态特权级的执行环境中执行这些指令,会产生异常。处理器在执行不同特权级的执行环境下的指令前进行特权级安全检查。</p>
<p>为了让应用程序获得操作系统的函数服务,采用传统的函数调用方式(即通常的 <code class="docutils literal notranslate"><span class="pre">call</span></code><code class="docutils literal notranslate"><span class="pre">ret</span></code> 指令或指令组合)将会直接绕过硬件的特权级保护检查。所以要设计新的指令:执行环境调用(Execution Environment Call,简称 <code class="docutils literal notranslate"><span class="pre">ecall</span></code> )和执行环境返回(Execution Environment Return,简称 <code class="docutils literal notranslate"><span class="pre">eret</span></code> )):</p>
Expand Down
2 changes: 1 addition & 1 deletion searchindex.js

Large diffs are not rendered by default.

0 comments on commit c49e70a

Please sign in to comment.