Giter Club home page Giter Club logo

blog's Introduction

BlogFile

my blog raw file

blog's People

Contributors

lighklife avatar

Watchers

 avatar

blog's Issues

ch2-RISC-V寄存器

image

寄存器组 保存者 功能
a0~a7( x10~x17 ) 调用者保存 用来传递输入参数。其中的 a0 和 a1 还用来保存返回值。
t0~t6( x5~x7,x28~x31 ) 调用者保存 作为临时寄存器使用,在被调函数中可以随意使用无需保存。
s0~s11( x8~x9,x18~x27 ) 被调用者保存 作为临时寄存器使用,被调函数保存后才能在被调函数中使用。

剩下的 5 个通用寄存器情况如下:

  • zero( x0 ) 之前提到过,它恒为零,函数调用不会对它产生影响;
  • ra( x1 ) 是被调用者保存的。被调用者函数可能也会调用函数,在调用之前就需要修改 ra 使得这次调用能正确返回。因此,每个函数都需要在开头保存 ra 到自己的栈帧中,并在结尾使用 ret 返回之前将其恢复。栈帧是当前执行函数用于存储局部变量和函数返回信息的内存结构。
  • sp( x2 ) 是被调用者保存的。这个是之后就会提到的栈指针 (Stack Pointer) 寄存器,它指向下一个将要被存储的栈顶位置。
  • fp( s0 ),它既可作为s0临时寄存器,也可作为栈帧指针(Frame Pointer)寄存器,表示当前栈帧的起始位置,是一个被调用者保存寄存器。fp 指向的栈帧起始位置 和 sp 指向的栈帧的当前栈顶位置形成了所对应函数栈帧的空间范围。
  • gp( x3 ) 和 tp( x4 ) 在一个程序运行期间都不会变化,因此不必放在函数调用上下文中。它们的用途在后面的章节会提到。

进入 S 特权级 Trap 的相关 CSR

CSR 名 该 CSR 与 Trap 相关的功能
sstatus SPP 等字段给出 Trap 发生之前 CPU 处在哪个特权级(S/U)等信息
sepc 当 Trap 是一个异常的时候,记录 Trap 发生之前执行的最后一条指令的地址
scause 描述 Trap 的原因
stval 给出 Trap 附加信息
stvec 控制 Trap 处理代码的入口地址

satp Supervisor Address Translation and Protection Register

image

ch1-程序内存布局与编译流程

内存布局

image

segment desc
.text 代码段
.rodata 已初始化,全局数据,只读
.data 已初始化,全局数据,可读写
.bss 未初始化,全局数据,可读写

未初始化数据段 .bss 保存程序中那些未初始化的全局数据,通常由程序的加载者代为进行零初始化,即将这块区域逐字节清零

编译流程

image

Linker 需要做:

  • 第一件事情是将来自不同目标文件的段在目标内存布局中重新排布
  • 第二件事情是将符号替换为具体地址
    image

参考:
[1]: https://rcore-os.cn/rCore-Tutorial-Book-v3/chapter1/3first-instruction-in-kernel1.html

ch2-RISC-V 特权限等级

四种模式

级别 编码 名称
0 00 用户/应用模式 (U, User/Application)
1 01 监督模式 (S, Supervisor)
2 10 虚拟监督模式 (H, Hypervisor)
3 11 机器模式 (M, Machine)

程序运行环境与接口

image

  • ABI:Application Binary Interface(System Call)
  • SBI:Supervisor Binary Interface
  • SEE:Supervisor Execution Environment(如加载操作系统的 Bootloader RUST-SBI)

特权级别切换

image

RISC-V S模式特权指令

在 RISC-V 中,会有两类属于高特权级 S 模式的特权指令:

  • 指令本身属于高特权级的指令,如 sret 指令(表示从 S 模式返回到 U 模式)。
  • 指令访问了 S模式特权级下才能访问的寄存器 或内存,如表示S模式系统状态的 控制状态寄存器 sstatus 等。
指令 含义
sret 从 S 模式返回 U 模式:在 U 模式下执行会产生非法指令异常
wfi 处理器在空闲时进入低功耗状态等待中断:在 U 模式下执行会产生非法指令异常
sfence.vma 刷新 TLB 缓存:在 U 模式下执行会产生非法指令异常
访问 S 模式 CSR 的指令 通过访问 sepc/stvec/scause/sscartch/stval/sstatus/satp等CSR 来改变系统状态:在 U 模式下执行会产生非法指令异常

进入 S 特权级 Trap 的相关 CSR

CSR 名 该 CSR 与 Trap 相关的功能
sstatus SPP 等字段给出 Trap 发生之前 CPU 处在哪个特权级(S/U)等信息
sepc 当 Trap 是一个异常的时候,记录 Trap 发生之前执行的最后一条指令的地址
scause 描述 Trap 的原因
stval 给出 Trap 附加信息
stvec 控制 Trap 处理代码的入口地址

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.