RISC-V (九)抢占式多任务

news2024/11/16 1:29:11

主要的思想:借用定时器中断实现。设置定时器寄存器,系统自动触发定时器中断时会跳到trap handler这个函数里。借用这个函数做上下文的切换,从而实现了抢占式多任务。

定时器中断:跳到trap handler函数,同时系统自动将下一条指令的地址存到mepc中。执行完trap handler函数,遇到mret指令,系统根据mepc寄存器的值跳到了原先程序的下一条指令继续执行。

抢占式多任务:改写trap handler函数,跳到trap handler函数,首先是保存上下文文,即将32个寄存器的值存起来,同时将mepc的值也存起来。执行switch函数,恢复taskB的上下文,包括恢复任务B的mepc寄存器值。遇到mret跳到任务B的下一条指令继续执行。等待下一次的定时器中断再次发生,保存任务B的上下文,包括保存mepc值,调用switch函数,回复任务A的上下文,包括回复mepc值......

抢占式多任务:抢占式多任务就是定时器中断+处理中断的函数中加了个shedule函数。因为是中断,所以用的是mret指令。 

软件中断:跟抢占式多任务类似。抢占式多任务是事先配置好定时器中断的相关寄存器,事件触发跳到trap handler函数,这个函数内部有个shedule函数,从而实现任务的切换。软件中断,是任务执行的函数内部去配置MSIP寄存器,从而触发硬件的软件中断行为,跳到trap handler函数中,从而进入到shedule函数,实现任务的切换。


抢占式多任务

        抢占式多任务:抢占式环境下,操作系统完全决定任务调度方案,操作系统可以剥夺当前任务对处理器的使用,将处理器提供给其它任务。

       

软件中断

        软件中断:用的还是CLINT这个设备,这个设备既可以产生定时器中断也可以产生软件中断。(PLIC和CLIT都是外设)

        MSIP寄存器:最低位映射到mip.MSIP,这个是软终端的pending位,用来提示中断是否发生。

        对MSIP寄存器写入1时触发software interrupt,写入0表示对该中断进行应答,也就是通知CLINT中断处理完了。如果不写0的话这个中断就会一直产生。

        软件中断就是在函数内部通过写MSIP寄存器的方式去触发中断,这个时候程序跳到了trap_handler中,在trap_handler中去执行shedule函数,实现了任务的切换。注意在执行shedule函数中要记得对MSIP寄存器写0,避免死循环。

       

思考

         如何做扩展,增加任务的优先级,任务的睡眠?

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

清华计算几何--凸Polygon的相交问题

凸Polygon和相交定义 本节只讨论凸Polygon的问题,不涉及凹Polygon. 相交包含了边相交和完全包含。 凸Polygon相交的两个问题 Detection(检测) 判断两个凸Polygon是否相交,至于相交部分是什么不关心. Construction(构造) 求出两个凸Polygon具体相交…

Linux_kernel移植rootfs10

一、动态更改内核 1、low level(静态修改) 【1】将led_drv.c拷贝到kernel/drivers/char/目录中 【2】修改当前目录下的Makefile文件 obj-y led_drv.o #将新添加的驱动文件加入到Makefile文件中 【3】退回kernel目录,执行make uImage …

熬夜后补救措施

人体的肝功能问题 直接体现在体态和容颜上 伤肝 三大坏行为 熬夜后补救 *补充养b族、口、、锌、硒 加强代谢 能力 (1)另外熬夜后一定要多喝水 提升身体代谢能力 (2)谷肤甘肽清肝 肝脏排毒,减轻负拒 (3)水飞前含量高点 (4)熬夜出更多油 容易长痘 需要清…

标准库标头 <filesystem> (C++17)学习之文件类型

本篇介绍filesystem文件库的文件类型API。 文件类型 is_block_file (C17) 检查给定的路径是否表示块设备 (函数) is_character_file (C17) 检查给定的路径是否表示字符设备 (函数) is_directory (C17) 检查给定的路径是否表示一个目录 (函数) is_empty (C17) 检查给定的路径是…

STM32G474之使用DAC1和DAC2测试模拟比较器

STM32G474使用DAC1和DAC2的输出作为比较器输入,测试模拟比较器,方法如下: PA1的附加功能为COMP1_INP,无需映射,直接将它配置为模拟功能,就可以使用了。 将COMP1_OUT引脚映射到PA0; 采用DAC2_OUT1输出电压给…

【大疆 SDR 图传 P1 】 功能拆解,通信功能剖析

大疆 SDR 图传 P1 拆解视频P1 SoC1、哲酷2、小米3、大疆(文章主角) 一、为什么说SDR技术1、sdr 软件无线电2、影视博主的测评方法3、第一个说自己SDR的还是这个老登 二、大疆的图传发展历程1、FPGA AD93632、 P1 自研1、2个DSP和一个CPU A72、音频子系统…

SpringMVC;MVC模式;Spring环境搭建;

一,介绍MVC模式: MVC模式: 1.M:model 模型,业务模型和数据模型. 2.C:controller 控制器 3.V:view 视图 优点: 使用控制器C把视图V和业务模型M分离,从而使同一个程序可以使用不同的表现形式 使用场景: 中大型项目 核心: 控制器 二…

828华为云征文 | 基于Docker与Jenkins实现自动化部署

需要了解 本文章主要讲述在 华为云Flexus X 实例上使用docker快速部署持续集成工具 Jenkins,通过插件来自动化CI/CD过程中的各种琐碎功能。选择合适的云服务器: 本文采用的是 华为云服务器 Flexus X 实例(推荐使用)连接方式&#…

【自动驾驶】决策规划算法 | 数学基础(三)直角坐标与自然坐标转换Ⅰ

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

【有啥问啥】数字孪生(Digital Twin)技术在人工智能中的应用

数字孪生技术在人工智能中的应用 在当今的数字化转型过程中,“数字孪生”技术逐渐成为热门话题,并且在各个行业中展现出巨大的潜力。作为一种新兴技术,数字孪生(Digital Twin)不仅仅是物理对象的虚拟复制品&#xff0…

MATLAB算法实战应用案例精讲-【人工智能】大数据审计(概念篇)

目录 前言 大数据审计发展历程 1.初级阶段:验证型逻辑占据主导地位 2.发展阶段:挖掘型逻辑突出重围 3.成熟阶段:基于验证和挖掘的预测型逻辑发展 算法原理 什么是大数据审计 特征 事项审计 大数据审计的方法 (一)大数据审计的一般思路 (二)大数据审计的关键技术…

【开发工具】探索IntelliJ IDEA插件——JSON Parser,让JSON处理变得轻松高效

开发过程中,遇到一个字符串,需要判断是否是JSON格式,或者是需要将Json字符串美化展示,是否还在打开百度搜JSON在线格式化(https://www.bejson.com/),是否还在写个main方法将字符串转成JSON格式并输出。这篇文章&#x…

【Linux】全面讲解 Shell 变量的那些事

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 Linux 专栏 | Docker 专栏 | Kubernetes 专栏 往期精彩文章 【Docker】(全网首发)Kyl…

python中的循环结构

注意:range()函数 累加和: 注意:if 下面如果有好几行,只执行一行 print必须和 for 开头相同格数 例题:水仙花数 注意在print语句中,一句好“ 。。。。。 ”后面必须有逗号然后再写变…

(八) 初入MySQL 【主从复制】

案例概况 在企业应用中,成熟的业务通常数据量都比较大 单台MySQL在安全性、 高可用性和高并发方面都无法满足实际的需求 ,所以需要配置多台主从数据库服务器以实现读写分离来满足需求 一、主从复制原理 1.1、 MySQL的复制类型 基于语句的复制(STATEME…

C++11 的继续学习

1.lambda 我们如果想要给一个自定义的元素排序,那么应该怎么排呢 先举个例子: struct Goods {string _name; // 名字double _price; // 价格int _evaluate; // 评价Goods(const char* str, double price, int evaluate):_name(str), _price(price),…

等额本息等额本金

1、贷款计算器 2024年最新版房贷利率计算器_LPR利率计算器 (K JSON) 贷款计算器 2、等额本息 接下来,我们可以用Python编写一个函数来计算每月还款额: import pandas as pddef amortization_schedule(principal, annual_interest_rate, years):"…

MySQL事务执行过程

一、MySQL一个查询语句执行过程如下图🔽 MySQL客户端查询,经过查询缓存、解析器、查询优化器、查询执行引擎,通过API接口查询,经过存储引擎,获取数据返回给客户端。 二、事务执行过程如下图🔽 1、MySQL客户…

【生日视频制作】F900xr宝马摩托车提车交车仪式AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程F900xr宝马摩托车提车交车仪式AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 AE模板套用改图文教程↓↓: 怎么如何做的【生日视频制作】F900xr宝马摩托车提车交车仪式AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&a…

【变化检测】基于IFN建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下: 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、IFN模型训练与预测 4、Onnx运行及可视化 运行环境:Python3.8,torch1.12.0cu113 likyoo变化检测源码:https://github.com/likyoo/open-cd 使用情况:代…