From ecd37f1dd5eb1e1856b7d8a38dcf2b3a24707218 Mon Sep 17 00:00:00 2001 From: Zhiyuan Shao Date: Mon, 14 Dec 2020 15:05:15 +0800 Subject: [PATCH] interpage jump tag --- chapter1.md | 2 ++ chapter4.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/chapter1.md b/chapter1.md index addba71..d1f46b1 100644 --- a/chapter1.md +++ b/chapter1.md @@ -565,7 +565,9 @@ csrw medeleg, 1<<0 | 1<< 3 | 1<<8 | 1<<12 | 1<<13 | 1<<15 这段代码的作用是将M模式中interrupt中的1、5和9号,分别对应Supervisor software interrupt,Supervisor timer interrupt和Supervisor external interrupt代理出去,到S模式处理;再将M模式中的exception(或trap)中的0、3、8、12、13和15号,分别对应Instruction address misaligned,调试中断Breakpoint(3号),用户态系统调用Environment call from U-mode(8号),缺页或访存异常(12、13和15号)代理出去,到S模式处理。实际上,将这些重要的中断代理出去后,系统中产生的绝大部分中断事件将都在S模式处理。所以,在其后的PKE实验中,读者主要跟U模式以及S模式的代码打交道,除启动过程和一些简单的设置(如访存、中断代理等),实验也基本不涉及M模式的代码。 [//]:# (### 1.5 页式虚存管理) +[comment]: <> (### 1.5 页式虚存管理) +
###1.5 页式虚存管理 ### 我们知道,程序中的代码对数据进行访问(如使用load和store指令)时,采用的是数据的逻辑地址(即程序地址)。然而,将程序装入内存时,装载器无法保证数据的逻辑地址和物理地址(内存的编址)之间有完全相等的关系。实际上,由于操作系统往往是计算机装入物理内存的第一个程序,如果仔细规划逻辑地址空间,还能勉强建立(操作系统程序内部)逻辑地址到(其所装入的物理内存的)物理地址间的相等关系,但是这一点对于后续装入的应用程序,几乎是无法也不可能保证的。 diff --git a/chapter4.md b/chapter4.md index dd2a5fd..e6e36c6 100644 --- a/chapter4.md +++ b/chapter4.md @@ -110,7 +110,7 @@ Score: 20/20 计算机的存储结构可以抽象的看做由N个连续的字节组成的数组。想一想,在数组中我们如何找到一个元素?对了!是下标!!那么我们如何在内存中如何找打一个元素呢?自然也是‘下标’。这个下标的起始位置和位数由机器本身决定,我们称之为“物理地址”。 -至于物理内存的大小,由于我们的RISC-V目标机(也就是我们的pke以及app运行的环境,这里我们假设目标机为64位机,即用到了56位的物理内存编址,虚拟地址采用Sv39方案,参见[第一章RISC-V体系结构的内容](chapter1))是由spike模拟器构造的,构造过程中可以通过命令行的-m选项来指定物理内存的大小。而且,spike会将目标机的物理内存地址从0x8000-0000开始编制。例如,如果物理内存空间的大小为2GB(spike的默认值),则目标机的物理地址范围为:[0x8000-0000, 0x10000-0000],其中0x10000-0000已经超过32位能够表达的范围了,但是我们目标机是64位机!再例如,如果目标机物理内存空间大小为1GB(启动spike时带入-m1024m参数),则目标机的物理地址范围为:[0x8000-0000, 0xC000-0000]。在以下的讨论中,我们用符号PHYMEM_TOP代表物理内存空间的高地址部分,在以上的两个例子中,PHYMEM_TOP分别为0x10000-0000和0xC000-0000。在定义了PHYMEM_TOP符号后,物理内存的范围就可以表示为[0x8000-0000, PHYMEM_TOP]。 +至于物理内存的大小,由于我们的RISC-V目标机(也就是我们的pke以及app运行的环境,这里我们假设目标机为64位机,即用到了56位的物理内存编址,虚拟地址采用Sv39方案,参见[第一章RISC-V体系结构的内容](chapter1.md/#paging))是由spike模拟器构造的,构造过程中可以通过命令行的-m选项来指定物理内存的大小。而且,spike会将目标机的物理内存地址从0x8000-0000开始编制。例如,如果物理内存空间的大小为2GB(spike的默认值),则目标机的物理地址范围为:[0x8000-0000, 0x10000-0000],其中0x10000-0000已经超过32位能够表达的范围了,但是我们目标机是64位机!再例如,如果目标机物理内存空间大小为1GB(启动spike时带入-m1024m参数),则目标机的物理地址范围为:[0x8000-0000, 0xC000-0000]。在以下的讨论中,我们用符号PHYMEM_TOP代表物理内存空间的高地址部分,在以上的两个例子中,PHYMEM_TOP分别为0x10000-0000和0xC000-0000。在定义了PHYMEM_TOP符号后,物理内存的范围就可以表示为[0x8000-0000, PHYMEM_TOP]。 我们的PK内核的逻辑编址,可以通过查看pke.lds得知,pke.lds有以下规则: