提交 f2c97f8e 编写于 作者: chyyuu1972's avatar chyyuu1972

little fix on ch2-3

上级 e3fb75d5
......@@ -199,8 +199,8 @@ RISC-V的特权指令
在RISC-V中,会有两类低优先级U模式下运行高优先级S模式的指令:
- 指令本身是就高优先级的特权指令,如 ``sret`` 指令(表示从S模式返回到U模式)。
- 指令访问了高优先级的寄存器或内存,如表示S模式系统状态的 **控制状态寄存器** ``sstatus``等。
- 指令本身属于高特权级的指令,如 ``sret`` 指令(表示从S模式返回到U模式)。
- 指令访问了 :ref:`S模式特权级下才能访问的寄存器 <term-s-mod-csr>` 或内存,如表示S模式系统状态的 **控制状态寄存器** ``sstatus``等。
.. list-table:: RISC-V S模式特权指令
:align: center
......@@ -216,7 +216,7 @@ RISC-V的特权指令
* - sfence.vma
- 刷新TLB缓存。在U模式下执行会尝试非法指令异常
* - 访问S模式CSR的指令
- 通过访问sepc/stvec/scause/sscartch/stval/sstatus/satp等CSR改变系统状态。在U模式下执行会尝试非法指令异常
- 通过访问 :ref:`sepc/stvec/scause/sscartch/stval/sstatus/satp等CSR <term-s-mod-csr>` 来改变系统状态。在U模式下执行会尝试非法指令异常
在下一节中,我们将看到 :ref:`在U模式下的用户态应用程序 <term-csr-instr-app>` ,如果执行上述S模式特权指令指令,将会产生非法指令异常,从而看出RISC-V的特权模式设计在一定程度上提供了对操作系统的保护。
......
......@@ -278,12 +278,15 @@ Rust 中的 ``llvm_asm!`` 宏的完整格式如下:
.. note::
下载编译特权指令的应用需要获取
.. code-block:: console
$ git clone -bv4-illegal-priv-code-csr-in-u-mode-app git@github.com:chyyuu/os_kernel_lab.git
$ git clone -b v4-illegal-priv-code-csr-in-u-mode-app git@github.com:chyyuu/os_kernel_lab.git
$ cd os_kernel_lab/user
$ make build
我们先看看代码:
.. code-block:: rust
:linenos:
......@@ -312,6 +315,7 @@ Rust 中的 ``llvm_asm!`` 宏的完整格式如下:
在上述代码中,在显示 ``Hello, world`` 字符串后,会读写 ``sstatus`` 特权CSR。
.. code-block:: console
$ cd user
$ cd target/riscv64gc-unknown-none-elf/release/
$ ls
......@@ -331,6 +335,7 @@ Rust 中的 ``llvm_asm!`` 宏的完整格式如下:
看来RV64的特权级机制确实有用。那对于一般的应用程序,在 ``qemu-riscv64`` 模拟器下能正确执行吗?
.. code-block:: console
$ cd user
$ cd target/riscv64gc-unknown-none-elf/release/
$ ls
......
......@@ -9,6 +9,7 @@
-------------------------------
目前本章设计的批处理操作系统--泥盆纪“邓式鱼”操作系统,还没有文件/文件系统的机制与设计实现,所以还缺少一种类似文件系统那样的松耦合灵活放置应用程序和加载执行应用程序的机制。这就需要设计一种简洁的程序放置和加载方式,能够在批处理操作系统与应用程序之间建立联系的纽带。这主要包括两个方面:
- 静态编码:通过一定的编程技巧,把应用程序代码和批处理操作系统代码“绑定”在一起。
- 动态加载:基于静态编码留下的“绑定”信息,操作系统可以找到应用程序文件二进制代码的起始地址和长度,并能加载到内存中运行。
......
......@@ -33,6 +33,9 @@ RISC-V特权级切换的执行流
触发 Trap 之前 CPU 运行在哪个特权级;以及 CPU 需要切换到哪个特权级来处理该 Trap 并在处理完成之后返回原特权级。但本章中我们仅考虑
当 CPU 在 U 特权级运行用户程序的时候触发 Trap,并切换到 S 特权级的批处理操作系统的对应服务代码来进行处理。
.. _term-s-mod-csr:
在 RISC-V 架构中,关于 Trap 有一条重要的规则:在 Trap 前后特权级不会下降。因此如果触发 Trap 之后切换到 S 特权级(下称 Trap 到 S),
说明 Trap 发生之前 CPU 只能运行在 S/U 特权级。但无论如何,只要是 Trap 到 S,硬件就会使用 S 特权级与 Trap 相关的 **控制状态寄存器** (CSR, Control and Status Register) 来辅助 Trap
处理。我们在编写运行在 S 特权级的批处理操作系统中的 Trap 处理相关代码的时候,也需要使用它们。
......
......@@ -147,5 +147,5 @@
这样,我们的二叠纪“锯齿螈”操作系统就算是实现完毕了。
--
..
chyyuu:有一个ascii图,画出我们做的OS。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册