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

文章目录

  • 强占式多任务
  • 流程
  • 代码具体流程
  • 兼容协作式多任务(软中断)
  • 寄存器 msip
  • 流程
  • 代码
  • 结果

强占式多任务

在这里插入图片描述

流程

抢占式多任务由计时器中断触发,最后在处理程序中切换到下一个进程
在这里插入图片描述

代码具体流程

上下文中增加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

结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636658.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测网络YOLO进化之旅

yolo系列网络在目标检测领域取得了巨大的成功, 尤其是在工程实践中, 以其出色的性能优势获得了广泛的应用落地。 YOLO的前3个版本是由同一个作者团队出品, 算是官方版本。 之后的版本都是各个研究团队自己改进的版本, 之间并无明…

带头循环双向链表专题

1. 双向链表的结构 带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨 的” “哨兵位”存在的意义: 遍历循环链表避免死循环。 2. 双向链表的实现 2.1双向链表结构 typedef int DataTyp…

word批量修改表格样式

利用宏,批量选中表格,然后利用段落和表设计来操作。 利用宏,批量选中表格,参考百度安全验证段落,表格里面的内容有空格,应该是有缩进,在段落中去掉缩进,即缩进-特殊,选择…

【IC设计】草履虫都能看懂的AXI入门博客(大量图文来袭,手把手教学,波形仿真)

文章目录 概述AXI的三类接口AXI的特点AXI的五个通道 AXI的时序AXI的握手机制AXI的读写流程写操作读操作 AXI-Full的接口信号1. 全局信号:2. 写地址通道信号3. 写数据通道信号4. 写响应通道信号5.读地址通道信号6.读数据通道信号 AXI-Full的读写时序时序图图例写时序…

web前端第二次作业

1,对象 let{ 属性 方法 } 2,闭包 只有函数内部的子函数才能读取局部变量,所以闭包可以理解成定义在一个函数内部的函数,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。 3,math console.log(Math.flo…

使用Docker搭建Redis主从集群

文章目录 ☃️前言☃️搭建❄️❄️架构❄️❄️实例说明❄️❄️搭建第一个服务器上的两个实例❄️❄️搭建第二个服务器上的一个实例 ☃️开启主从❄️❄️改配置❄️❄️重启从节点 ☃️验证 ☃️前言 单节点 Redis 的并发能力是有上限的,要进一步提高Redis的并…

项目管理-项目开发计划介绍

目录 一、内容总览 二、项目开发计划概述 2.1 概述 2.2 项自开发计划的目的和作用 2.3 项目开发计划的内容 2.3.1 工作计划 2.3.2 人员组织计划 2.3.3 设备采购和资源供应计划 2.3.4 配置管理计划 2.3.5 进度安排计划 2.3.6 成本投资计划 2.3.7 质量保证计划 2.3.8…

Json三方库介绍

目录 Json是干什么的Json序列化代码Json反序列化代码 Json是干什么的 Json是一种轻量级的数据交换格式,也叫做数据序列化方式。Json完全独立于编程语言的文本格式来存储和表述数据。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升…

STM32H750外设ADC之双重 ADC 模式

目录 概述 1 双重 ADC 模式介绍 1.1 双重 ADC模式 1.2 双重 ADC 模式的类型 2 双重 ADC 模式寄存器的配置 3 模式功能实现 3.1 注入同步模式 3.2 支持独立注入的常规同步模式 3.2.1 中断的方式 3.2.2 DMA 读取常规数据 3.3 支持独立注入的交替模式 3.3.1 中断触发…

企业车辆违章查询工具,批量查询企业名下车辆违章情况,专为网约车/出租车管理公司而生

功能介绍 功能分为:违章管理、车辆管理、任务管理 违章管理如图: 搜索条件为车牌号 筛选条件为:时间区间、企业选择、是否处理违章、是否缴纳罚款、所属车管员 车牌管理如图: 可以新增车牌 查询条件为:车牌信息、车…

24五一杯资料汇总!!!!

以下内容为23年五一杯内容,24年也将会按时更新资料!!! 问题1:给定建筑物数据,假设该建筑物内温度需要一直保持在18-26度,在温度不适宜的时候要通过电来调节温度,消耗一度电相当于0.…

最新网课交单平台源码 网课下单源码 网课平台搭建源码 网课对接平台搭建

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 网课交单平台源码最新修复全开源版本 去除论文编辑 去除强国接码 修复上级迁移 修复聚合登录 修复支付不回调 优化支付接口兼容码/易支付 优化MySQL表,提高网页加载…