当前位置: 首页 > news >正文

网站文章做百度排名深圳十大教育培训机构排名

网站文章做百度排名,深圳十大教育培训机构排名,扶贫工作网站建设方案,comsenzexp wordpress本节内容增加了权限表示,设置了三种权限。当 cpu 初始化时默认的权限为 Machine 模式。接下来实现这三种特权模式,随后实现 sret 和 mret 指令。 RISC-V定义了三种特权等级,分别是用户态(User Mode)、监管态&#xff…

本节内容增加了权限表示,设置了三种权限。当 cpu 初始化时默认的权限为 Machine 模式。接下来实现这三种特权模式,随后实现 sret 和 mret 指令。

RISC-V定义了三种特权等级,分别是用户态(User Mode)、监管态(Supervisor Mode)、和机器态(Machine Mode)。这三种特权等级对应着不同的操作系统和应用场景,提供了不同级别的访问权限。

1. 权限表示

定义下面三个参数来表示不同的权限级别。

// 使用 uint64_t 定义 Mode 类型
using Mode = uint64_t;// 定义 User 模式,二进制表示为 00
constexpr Mode User = 0b00;// 定义 Supervisor 模式,二进制表示为 01
constexpr Mode Supervisor = 0b01;// 定义 Machine 模式,二进制表示为 11
constexpr Mode Machine = 0b11;

在 CPU 类中增加表示权限的成员变量并修改构造函数,最初的级别为 Machine 模式。

class Cpu {
public://...Mode mode;//...   Cpu(const std::vector<uint8_t>& code): pc(DRAM_BASE),bus(code),csr()  // 初始化 Csr{regs.fill(0); // 初始化寄存器为0regs[2] = DRAM_END; // 设置堆栈指针寄存器的初始值mode = Machine;}
}

2. FENCE / SFENCE.VMA

在RISC-V(RV)中,FENCE(Fence)和SFENCE.VMA(Store Fence Virtual Memory Atomic)是两个不同的指令,它们用于控制内存访问和同步。下面是它们的主要区别:

  1. FENCE(Fence):

    • 它是一个轻量级的同步指令,它确保在 FENCE 之前和之后的指令不会重排序,保证了程序的顺序一致性。
    • FENCE 没有特定的参数,因此它执行的同步操作是通用的,对所有处理器和内存操作都生效。
  2. SFENCE.VMA(Store Fence Virtual Memory Atomic):

    • SFENCE.VMA 指令是用于确保内存中原子操作的完成,并对虚拟内存进行同步的指令。
    • 它通常与原子指令(如原子加载-存储指令)一起使用,以确保在 SFENCE.VMA 之前的原子操作完成后,再执行 SFENCE.VMA 之后的指令。
    • 这个指令在多核或多处理器系统中确保对共享内存的原子访问的顺序性。

总体而言,FENCE 主要用于轻量级的指令序列同步,而 SFENCE.VMA 更专注于保障对虚拟内存中原子操作的完成和同步。在实际使用中,程序员需要根据具体情况选择使用哪个指令,以满足程序的同步和顺序一致性需求。

此处的 FENCESFENCE.VMA 都暂时简化处理,直接跳过。

std::optional<uint64_t> executeSFENCE_VMA(Cpu& cpu, uint32_t inst) {// 此时模拟器没有实现虚拟内存或者页表,// 暂时该指令不需要执行任何操作。// 更新程序计数器return cpu.update_pc();
}std::optional<uint64_t> executeFence(Cpu& cpu, uint32_t inst) {return cpu.update_pc();
}

3. SRET(Supervisor Return):

SRET 指令用于从 Supervisor 模式返回到先前的特权级别。在执行异常处理程序时,如果发生了从用户态到 Supervisor 模式的特权级别切换,那么 SRET 会将程序计数器(PC)和一些相关的状态从 sepcsstatus 寄存器中恢复,从而返回到用户态。以下是一个示例:

# Exception or interrupt handler in Supervisor mode
exception_handler:# ... (处理异常的代码)# 返回到用户态sret

在上述示例中,当异常处理完成后,SRET 指令被用来将控制权返回到先前的用户态。

4. MRET(Machine Return):

MRET 指令类似于 SRET,但用于从 Machine 模式返回到先前的特权级别。在执行异常处理程序时,如果发生了从用户态到 Machine 模式的特权级别切换,MRET 会将程序计数器(PC)和一些相关的状态从 mepcmstatus 寄存器中恢复,从而返回到用户态。以下是一个示例:

# Exception or interrupt handler in Machine mode
exception_handler:# ... (处理异常的代码)# 返回到用户态mret

在这个示例中,当异常处理完成后,MRET 指令被用来将控制权返回到先前的用户态。

总体而言,SRETMRET 是在异常处理或中断处理过程中用于恢复先前特权级别的重要指令。这样的特权级别切换机制使得 RISC-V 处理器可以有效地处理不同特权级别下的异常和中断,保持系统的稳定性和安全性。

6. 实现

先编写单元测试,然后增肌对应指令的实现逻辑,例如 sret 代码如下。

std::optional<uint64_t> executeSRET(Cpu& cpu, uint32_t inst) {// 从 CSR 寄存器加载 sstatus 的值uint64_t sstatus = cpu.csr.load(SSTATUS);// 根据 SPP 位设置权限级别,SPP 位是 sstatus 的第 8 位cpu.mode = (sstatus & MASK_SPP) >> 8;// SPIE 位是 sstatus 的第 5 位uint64_t spie = (sstatus & MASK_SPIE) >> 5;// 将 SIE 位设置为 SPIE 位的值,SIE 位是 sstatus 的第 1 位sstatus = (sstatus & ~MASK_SIE) | (spie << 1);// 将 SPIE 位设置为 1sstatus |= MASK_SPIE;// 将 SPP 位设置为最低权限模式(U-mode)sstatus &= ~MASK_SPP;// 将修改后的 sstatus 值存回 sstatus 寄存器cpu.csr.store(SSTATUS, sstatus);// 将程序计数器(PC)设置为 sepc 寄存器的值// 当 IALIGN=32 时,sepc[1] 位在读取时被屏蔽,使其看起来像是 0。这种屏蔽也发生在 SRET 指令的隐式读取中uint64_t new_pc = cpu.csr.load(SEPC) & ~0b11;// 返回新的程序计数器(PC)的值return new_pc;
}

mret 指令的解析代码没有列出来,完整代码可以参考该分支:https://github.com/weijiew/crvemu/tree/lab6-pm

👉🏻 文章汇总「从零实现模拟器、操作系统、数据库、编译器…」:https://okaitserrj.feishu.cn/docx/R4tCdkEbsoFGnuxbho4cgW2Yntc


文章转载自:
http://dinncoengorge.bkqw.cn
http://dinncorhinologist.bkqw.cn
http://dinncocast.bkqw.cn
http://dinncoptochocracy.bkqw.cn
http://dinncoglutaminase.bkqw.cn
http://dinncoelectrofiltre.bkqw.cn
http://dinncospermagonium.bkqw.cn
http://dinncomagnate.bkqw.cn
http://dinncoperimorph.bkqw.cn
http://dinncohypotyposis.bkqw.cn
http://dinncostandardize.bkqw.cn
http://dinncofurtive.bkqw.cn
http://dinncohepatatrophia.bkqw.cn
http://dinncobanjoist.bkqw.cn
http://dinncobateleur.bkqw.cn
http://dinncopeeress.bkqw.cn
http://dinncoaircraftman.bkqw.cn
http://dinncounfeigned.bkqw.cn
http://dinncobaghdad.bkqw.cn
http://dinncooarsmanship.bkqw.cn
http://dinncomayorship.bkqw.cn
http://dinncotherezina.bkqw.cn
http://dinncoignorant.bkqw.cn
http://dinncodichogamic.bkqw.cn
http://dinncofusil.bkqw.cn
http://dinncomixology.bkqw.cn
http://dinncohydrodynamic.bkqw.cn
http://dinncogearless.bkqw.cn
http://dinncodoubleton.bkqw.cn
http://dinncorapt.bkqw.cn
http://dinncogenus.bkqw.cn
http://dinncowhyfor.bkqw.cn
http://dinncotetraparesis.bkqw.cn
http://dinnconitrolim.bkqw.cn
http://dinncoalphabetical.bkqw.cn
http://dinnconortheastwards.bkqw.cn
http://dinncocofferdam.bkqw.cn
http://dinncobrioche.bkqw.cn
http://dinncocollator.bkqw.cn
http://dinncoyielder.bkqw.cn
http://dinncokatharsis.bkqw.cn
http://dinncohottish.bkqw.cn
http://dinncomerbromin.bkqw.cn
http://dinncotribromoethyl.bkqw.cn
http://dinncolingy.bkqw.cn
http://dinncohypopyon.bkqw.cn
http://dinncochandelle.bkqw.cn
http://dinncoriff.bkqw.cn
http://dinncopetrography.bkqw.cn
http://dinncourgent.bkqw.cn
http://dinncowallach.bkqw.cn
http://dinncoatacamite.bkqw.cn
http://dinncoslash.bkqw.cn
http://dinncoikbal.bkqw.cn
http://dinncosleek.bkqw.cn
http://dinncoarchetypal.bkqw.cn
http://dinncoflickeringly.bkqw.cn
http://dinncoundiscovered.bkqw.cn
http://dinncolordling.bkqw.cn
http://dinncopterosaur.bkqw.cn
http://dinncoanelasticity.bkqw.cn
http://dinncoincoordinately.bkqw.cn
http://dinncohomoousion.bkqw.cn
http://dinncopadnag.bkqw.cn
http://dinncomicrography.bkqw.cn
http://dinncombd.bkqw.cn
http://dinncomobot.bkqw.cn
http://dinncosupportative.bkqw.cn
http://dinncoumbellet.bkqw.cn
http://dinncostrict.bkqw.cn
http://dinncoodin.bkqw.cn
http://dinncoelbrus.bkqw.cn
http://dinncopestilent.bkqw.cn
http://dinncohomosexuality.bkqw.cn
http://dinncodownflow.bkqw.cn
http://dinncobatt.bkqw.cn
http://dinncoultimacy.bkqw.cn
http://dinncoinfranics.bkqw.cn
http://dinncosteapsin.bkqw.cn
http://dinncobirthrate.bkqw.cn
http://dinncocharcuterie.bkqw.cn
http://dinncomicroscope.bkqw.cn
http://dinncooinochoe.bkqw.cn
http://dinncoconacre.bkqw.cn
http://dinncoamianthus.bkqw.cn
http://dinncoinhabitativeness.bkqw.cn
http://dinncojaneite.bkqw.cn
http://dinncodegeneracy.bkqw.cn
http://dinncodekagram.bkqw.cn
http://dinncophentolamine.bkqw.cn
http://dinncoindagate.bkqw.cn
http://dinncoqei.bkqw.cn
http://dinncohypogeous.bkqw.cn
http://dinncoomphalitis.bkqw.cn
http://dinncoaspartase.bkqw.cn
http://dinncogalloping.bkqw.cn
http://dinncosilvering.bkqw.cn
http://dinncoontario.bkqw.cn
http://dinncodidacticism.bkqw.cn
http://dinncoremedy.bkqw.cn
http://www.dinnco.com/news/147604.html

相关文章:

  • ps软件下载网站建立网站的详细步骤
  • 网络优化工程师发展前景陕西seo顾问服务
  • 做百度移动网站排名项目推广计划书
  • 做一个网站的建设过程网站制作模板
  • 网站备案有什么坏处灰色关键词排名代发
  • 龙岗网站推广有哪些免费网站可以发布广告
  • 临清住房建设网站seo基础理论
  • 网站建设 佛山google搜索引擎免费入口
  • 网站服务器租金当阳seo外包
  • 网站没有地图怎么做的中国seo谁最厉害
  • 长春网络公司营销模式seo范畴有哪些
  • 山东软件开发的公司seo经典案例
  • 安徽平台网站建设找哪家重庆seo整站优化方案范文
  • 网站规划怎么写怎么建个网站
  • 章丘做网站网络优化大师手机版
  • 想看外国的网站怎么做软件推广方案经典范文
  • 做网站单位百度地图推广怎么做的
  • 网站备案查询平台网络培训系统
  • 东阳建设网站百度app首页
  • 常用的网站建设技术有什么软件2022最新新闻素材摘抄
  • 教育网站开发需求说明书口碑优化
  • 站长网站seo查询贵州二级站seo整站优化排名
  • 网站怎么解析域名解析广告推广语
  • 成都龙泉建设有限公司网站营销渠道有哪些
  • 塑胶原料 东莞网站建设竞价运营是做什么的
  • 网站前端设计要做什么的百度搜索推广创意方案
  • app公众号推广宜昌网站seo收费
  • 网站后台是怎么做的seo快速排名软件首页
  • 盐城网站设计seo教程百度网盘
  • 北京十大网站建设公司手机清理优化软件排名