Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Miykael_xxm
RCore Tutorial Book V3
提交
f2c97f8e
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 搜索 >>
提交
f2c97f8e
编写于
2月 02, 2021
作者:
chyyuu1972
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
little fix on ch2-3
上级
e3fb75d5
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
14 addition
and
5 deletion
+14
-5
source/chapter2/1rv-privilege.rst
source/chapter2/1rv-privilege.rst
+3
-3
source/chapter2/2application.rst
source/chapter2/2application.rst
+6
-1
source/chapter2/3batch-system.rst
source/chapter2/3batch-system.rst
+1
-0
source/chapter2/4trap-handling.rst
source/chapter2/4trap-handling.rst
+3
-0
source/chapter3/1multi-loader.rst
source/chapter3/1multi-loader.rst
+1
-1
未找到文件。
source/chapter2/1rv-privilege.rst
浏览文件 @
f2c97f8e
...
...
@@ -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的特权模式设计在一定程度上提供了对操作系统的保护。
...
...
source/chapter2/2application.rst
浏览文件 @
f2c97f8e
...
...
@@ -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
...
...
source/chapter2/3batch-system.rst
浏览文件 @
f2c97f8e
...
...
@@ -9,6 +9,7 @@
-------------------------------
目前本章设计的批处理操作系统--泥盆纪“邓式鱼”操作系统,还没有文件/文件系统的机制与设计实现,所以还缺少一种类似文件系统那样的松耦合灵活放置应用程序和加载执行应用程序的机制。这就需要设计一种简洁的程序放置和加载方式,能够在批处理操作系统与应用程序之间建立联系的纽带。这主要包括两个方面:
- 静态编码:通过一定的编程技巧,把应用程序代码和批处理操作系统代码“绑定”在一起。
- 动态加载:基于静态编码留下的“绑定”信息,操作系统可以找到应用程序文件二进制代码的起始地址和长度,并能加载到内存中运行。
...
...
source/chapter2/4trap-handling.rst
浏览文件 @
f2c97f8e
...
...
@@ -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 处理相关代码的时候,也需要使用它们。
...
...
source/chapter3/1multi-loader.rst
浏览文件 @
f2c97f8e
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录