Update chapter1.md

pull/1/head
Zhiyuan Shao 4 years ago
parent 8de78a5a1b
commit 2bdfffd163

@ -145,11 +145,11 @@ clobbered_regs破坏描述部分
**汇编代码模板**:汇编语句模板由汇编语句序列组成,语句之间使用“;”、“\n”或“\n\t”分开。指令中的操作数可以使用占位符引用C语言变量操作数占位符最多10个名称如下%0%1…%9。指令中使用上述占位符表示的操作数占位符从%0起依次表示输出操作数、输入操作数。
**输出部分**描述输出操作数,可以有多个约束,不同的操作数描述符之间用逗号格开,每个约束用“=”开头,接着用字母表示操作数的类型。常用约束有:"=r",表示相应操作数可以使用一个通用寄存器,"=m",表示操作数存放在内存单元中。例如:"=m" (ret)在这里的ret是最终存放输出结果的C程序变量而“=m”则是限定字符串限定字符串表示了对它之后的变量的限制条件这样GCC就可以根据这些条件决定如何分配寄存器如何产生必要的代码处理指令以及如何处理操作数与C表达式或C变量之间的关系。“=”后面所跟的字母以及含义见表1.2。
**输出部分**描述输出操作数,可以有多个约束,不同的操作数描述符之间用逗号格开,每个约束用“=”开头,接着用字母表示操作数的类型。常用约束有:"=r",表示相应操作数可以使用一个通用寄存器,"=m",表示操作数存放在内存单元中。例如:"=m" (ret)在这里的ret是最终存放输出结果的C程序变量而“=m”则是限定字符串限定字符串表示了对它之后的变量的限制条件这样GCC就可以根据这些条件决定如何分配寄存器如何产生必要的代码处理指令以及如何处理操作数与C表达式或C变量之间的关系。“=”后面所跟的字母以及含义见表1.2。
**输入部分**输入部分与输出部分相似,但是没有“=”符号。
**输入部分**输入部分与输出部分相似,但是没有“=”符号。
**破坏描述部分**破坏描述符用于通知编译器我们使用了哪些寄存器或内存, 可以防止内嵌汇编在使用某些寄存器时导致错误。修改描述符是由逗号隔开的字符串组成的每个字符串描述一种情况一般是寄存器有时也会有“memory”。具体的意思就是告诉编译器在编译内嵌汇编的时候不能使用某个寄存器或者不能使用内存的空间。
**破坏描述部分**破坏描述符用于通知编译器我们使用了哪些寄存器或内存, 可以防止内嵌汇编在使用某些寄存器时导致错误。修改描述符是由逗号隔开的字符串组成的每个字符串描述一种情况一般是寄存器有时也会有“memory”。具体的意思就是告诉编译器在编译内嵌汇编的时候不能使用某个寄存器或者不能使用内存的空间。
表1.2 内联汇编常用约束
@ -632,7 +632,7 @@ csrw medeleg, 1<<0 | 1<< 3 | 1<<8 | 1<<12 | 1<<13 | 1<<15
地址变换机构首先获得逻辑地址va的VPN[2]在页目录的根目录根目录的地址由satp寄存器保存中查找对应的PDE依此得知以及页目录的PPN进而找到页目录实际存储的基础物理页再根据逻辑地址中的VPN[1]取得页目录内对应的PDE接着找到页表实际存储的基础物理页再根据逻辑地址中的VPN[0]取得页表内的PTE最后获得给定虚拟地址的物理地址对应的PPN再将PPN和虚拟地址中的page offset进行移位相加最终得到物理地址pa。
**需要注意的是图1.8中所示的地址变换过程是由RISC-V处理器硬件完成的但是页表的构造却是操作系统完成的**对于系统中运行的每个进程操作系统本身也可以看作是一个特殊的进程都应该有个一页表与其对应当处理器需要执行某个进程时就应该将satp指向想要执行的进程。另外对于一个进程而言例如我们的hello world程序它可能用不满全部虚拟地址空间Sv39的虚拟地址空间高达512GB这种情况下它的页表中可能只有非常少部分的PDE/PTE是有效的V位为1而其他PDE/PTE并不指向任何物理内存页面。
**需要注意的是图1.8中所示的地址变换过程是由RISC-V处理器硬件完成的但是页表的构造却是操作系统完成的**对于系统中运行的每个进程操作系统本身也可以看作是一个特殊的进程都应该有个一页表与其对应当处理器需要执行某个进程时就应该将satp指向想要执行的进程。另外对于一个进程而言例如我们的hello world程序它可能用不满全部虚拟地址空间Sv39的虚拟地址空间高达512GB这种情况下它的页表中可能只有非常少部分的PDE/PTE是有效的V位为1而其他PDE/PTE并不指向任何物理内存页面。
将一个进程的部分地址空间“共享”给另一个进程是操作系统中的常规操作例如将操作系统本身的地址空间部分开放给某用户进程。有了页表的帮助这种共享也非常便捷例如我们可以把某用户进程的PDE指向操作系统的PD或PT。但是这种共享必须考虑到权限问题例如将用户进程的PDE或PTE中的权限位进行相应的设置避免对操作系统代码可能的破坏如不允许写或执行。由于页面权限的限制用户进程的执行可能会碰到访存方面的exception如访问某个V=0的页面缺页异常或者执行X=0的页中的代码这些exception都会导致当前程序的中断并进入更高特权级如PKE操作系统运行的S模式中处理。

Loading…
Cancel
Save