制作一个RISC-V的操作系统十三-抢占式多任务和兼容协作式多任务

文章目录

强占式多任务

流程

抢占式多任务由计时器中断触发,最后在处理程序中切换到下一个进程

代码具体流程

上下文中增加pc寄存器

寄存器保留上下文和切换,做调整

将mepc存到当前上下文的pc寄存器位置处

切换时将向下一个上下文的pc位置处的寄存器给mepc

兼容协作式多任务(软中断)

实现主动放弃CPU

依旧是由CLINT实现

寄存器 msip

RISC-V 规范定义了多种处理器模式,其中之一是 Machine 模式,这是一种最高权限模式,用于实现操作系统内核或 hypervisor 等核心功能。在 Machine 模式下,处理器提供了一系列 Memory-Mapped Control and Status Registers (CSRs),这些寄存器可以通过内存地址直接访问,就像普通的内存区域一样。

mip 即 Machine Interrupt Pending 寄存器,它是一个 CSR,用于指示哪些中断事件当前处于pending(待处理)状态。其中 mip.MSIP 是 Machine Software Interrupt Pending 位,专门用来表示机器级别的软件中断请求是否正在等待处理。

在RISC-V体系结构中,当一个hart(硬件线程)需要向另一个hart发送软件中断时,可以通过向另一个hart的MSIP位写入1来发起中断请求。MSIP映射到寄存器MSIP上的一个位,这个寄存器映射到内存上,即MSIP是memory-mapped的,这意味着可以通过内存访问指令(如load/store指令)来读写这个位,进而触发或清除中断。

具体而言,当mip.MSIP = 1时,表示有机器级别的软件中断待处理;当mip.MSIP = 0时,则表示没有此类中断待处理。通过这种方式,处理器能够在硬件级别支持高效的中断通信和管理。

流程

  1. 写入MSIP触发软中断,中断号为3

  2. 进入中断处理程序,然后切换上下文流程和抢占式多任务一样,就是触发切换的方式不同

代码

注意由于第一次切换上下文直接使用mret,此时mret会进行如下操作

  1. 通过mstatus的MPP恢复到当前的权限
  2. 通过mstatus中的pmie恢复mstatus中的pie

所以需要提前对mstatus做相应的设置

相关代码注意事项在代码注释中
https://github.com/FULLK/risllkos/tree/main/Fullkenerl8

结果

相关推荐
飞凌嵌入式3 小时前
飞凌嵌入式T113-i开发板RISC-V核的实时应用方案
人工智能·嵌入式硬件·嵌入式·risc-v·飞凌嵌入式
sinovoip3 小时前
Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计
人工智能·科技·物联网·开源·risc-v
杭州_燕十三3 天前
从零开始学习 sg200x 多核开发之 milkv-duo256 编译运行 sophpi
risc-v·sg2002
安全二次方security²5 天前
2024 RISC-V中国峰会 安全相关议题汇总
安全·虚拟化·risc-v·中国峰会·侧信道攻击·riscv optee·riscv hsm
安全二次方security²5 天前
2024 RISC-V 中国峰会 演讲幻灯片和视频回放 均已公开
视频·risc-v·中国峰会·risc-v安全·ppt·2024
杭州_燕十三6 天前
从零开始学习 sg200x 多核开发之 eth0 MAC 地址修改
risc-v·sg2002
Daydreamer109 天前
学习笔记——PLCT汪辰:开发RISC-V上的操作系统(持续更新)
笔记·学习·risc-v
YHPsophie10 天前
CSM32RV20:RISC-V核的低功耗MCU芯片,常用在智能门锁上
单片机·嵌入式硬件·risc-v·智能门锁·低功耗mcu芯片
飞凌嵌入式23 天前
FET113i-S核心板已支持RISC-V,打造国产化降本的更优解 -飞凌嵌入式
嵌入式硬件·嵌入式·risc-v·飞凌嵌入式
EVERSPIN23 天前
RISC-V单片机可快充手持电钻方案分享
单片机·嵌入式硬件·risc-v