开发一个RISC-V上的操作系统(八)—— 抢占式多任务(Preemptive Multitasking)

这篇具有很好参考价值的文章主要介绍了开发一个RISC-V上的操作系统(八)—— 抢占式多任务(Preemptive Multitasking)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、抢占式多任务

二、代码实现

三、上板测试


本节的代码在仓库的 06_Preemptive_Muti_Task 目录下,仓库链接:riscv_os: 一个RISC-V上的简易操作系统

本文代码的运行调试会在前面开发的RISC-V处理器上进行,仓库链接:cpu_prj: 一个基于RISC-V指令集的CPU实现

在第五节的内容中,我们实现了协作式多任务,这一节我们要实现的是抢占式多任务。

一、抢占式多任务

我们先回忆一下协作式和抢占式多任务的概念。

  • 协作式多任务(Cooperative Mutitasking):协作式环境下,下一个任务被调度的前提是当前任务主动放弃处理器。
  • 抢占式多任务(Preemptive Multitasking):抢占式环境下,操作系统完全决定任务调度方案,操作系统可以剥夺当前任务对处理器的使用,并且将处理器提供给其他任务

可以看到,在协作式多任务中,需要用户程序主动放弃处理器,其他程序才能运行,这种调度方式十分不合理(万一有一个用户程序不懂谦让,那整个系统就乱了)。

而在抢占式多任务中,任务的调度完全由操作系统决定,采用统一的调度方式,这样就防止了某些用户程序不释放处理器。

在这一节,我们会利用第七节实现的硬件定时器来实现简单的抢占式调度(每个任务运行一个 tick 的时间)。

二、代码实现

大致步骤如下,当中断发生时,进入 trap_handler 函数,如果是定时器中断则进入 timer_handler 函数,在 timer_handler 函数中调用了 schedule 函数,从而实现任务切换的效果:

开发一个RISC-V上的操作系统(八)—— 抢占式多任务(Preemptive Multitasking),RISC-V上的操作系统设计,risc-v,linux

timer_handler 函数代码如下:

void timer_handler()
{
        timer_write_reg(TIMER_CTRL, (timer_read_reg(TIMER_CTRL) & ~(TIMER_INT_PENDING)));
        _tick++;
        printf("tick: %d\n", _tick);

        timer_load(TIMER_INTERVAL);

        schedule();
}

和之前不同的是,context 上下文还需要额外保存 mepc 值,switch_to 函数最后的返回由 ret 改成了 mret(这样switch_to 函数就不需要返回,直接通过 mret 跳转到下一个任务上下文的 mepc 处执行)。 

# void switch_to(struct context *next);
# a0: pointer to the context of the next task
.globl switch_to
.align 4
switch_to:
        # switch mscratch to point to the context of the next task
        csrw    mscratch, a0
        # set mepc to the pc of the next task
        lw      a1, 124(a0)
        csrw    mepc, a1

        # Restore all GP registers
        # Use t6 to point to the context of the new task
        mv      t6, a0
        reg_restore t6

        # Do actual context switching.
        # Notice this will enable global interrupt
        mret

.end

三、上板测试

将程序烧录到板子上后,打开串口调试助手,现象如下:

开发一个RISC-V上的操作系统(八)—— 抢占式多任务(Preemptive Multitasking),RISC-V上的操作系统设计,risc-v,linux

可以看到任务随着 tick 的增加而切换。文章来源地址https://www.toymoban.com/news/detail-646547.html

到了这里,关于开发一个RISC-V上的操作系统(八)—— 抢占式多任务(Preemptive Multitasking)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零学习开发一个RISC-V操作系统(四)丨RISC-V汇编语言编程

       本系列是博主参考B站课程学习开发一个RISC-V的操作系统的学习笔记,计划从RISC-V的底层汇编指令学起,结合C语言,在Ubuntu 20.04上开发一个简易的操作系统。一个目的是通过实践操作学习和了解什么是操作系统,第二个目的是为之后学习RISC-V的集成电路设计打下一定基础

    2024年01月25日
    浏览(63)
  • 从头开发一个RISC-V的操作系统(一)计算机系统漫游

    目标:通过这一个系列课程的学习,开发出一个简易的在RISC-V指令集架构上运行的操作系统。 这个系列的大部分文章和知识来自于:[完结] 循序渐进,学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春,以及相关的github地址。 在这个过程中,这个系列相当于是我的学习笔记,做

    2024年04月09日
    浏览(49)
  • 从头开发一个RISC-V的操作系统(三)编译与链接

    目标:通过这一个系列课程的学习,开发出一个简易的在RISC-V指令集架构上运行的操作系统。 这个系列的大部分文章和知识来自于:[完结] 循序渐进,学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春,以及相关的github地址。 在这个过程中,这个系列相当于是我的学习笔记,做

    2024年04月09日
    浏览(52)
  • xv6(RISC-V)操作系统源码分析第二节——操作系统组织

    一个操作系统至少需要满足以下三个要求: 多路复用 进程隔离 进程通信 硬件CPU的数量有限,且往往少于同时存在的进程数量。而操作系统需要支持进程的并发执行,所以操作系统应该能使多个进程分时共享计算机的资源。 一个进程的运行,应当具有一定的独立性,这个独

    2024年02月03日
    浏览(44)
  • RISC-V公测平台发布 · 数据库在RISC-V服务器上的适配评估

    前言 上一期讲到YCSB在RISC-V服务器上对MySQL进行性能测试(RISC-V公测平台发布 · 使用YCSB测试SG2042上的MySQL性能),在这一期文章中,我们继续深入讨论RISC-V+数据库的应用。本期就继续利用HS-2平台来测试数据库软件在RISC-V服务器上的兼容性。 参与此次实验的数据库如下: Red

    2024年02月12日
    浏览(40)
  • 在FPGA上运行轻量级Linux系统的RISC-V内核 FPGA开发

    随着嵌入式系统的发展,FPGA(现场可编程门阵列)在实现高性能和灵活性方面发挥着重要作用。RISC-V是一种基于开放指令集架构(ISA)的处理器架构,它在嵌入式系统中越来越受欢迎。本文将介绍如何在FPGA上实现一个轻量级Linux系统,其中包括RISC-V内核的开发。 为了在FPGA上

    2024年02月04日
    浏览(45)
  • RISC-V IOPMP实际用例-Rapid-k模型在NVIDIA上的应用

    安全之安全(security²)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明:本文参考RISC-V 2023中国峰会如下议题,版权归原作者所有。

    2024年02月11日
    浏览(93)
  • RISC-V公测平台发布 · 第一个WEB Server “Hello RISC-V world!”

    RISC-V公测平台Web Server地址:http://175.8.161.253:8081 Web Server是互联网应用的基础设施,无论是用户访问网站,还是后端服务提供商和开发者构建各种应用程序,Web Server都在其中扮演着至关重要的角色。 显而易见,对于RISC-V生态来说, Web Server也是不可缺少的一部分 。 接下来我们

    2024年02月14日
    浏览(52)
  • 简单介绍STM32上的FreeRTOS实时操作系统

    FreeRTOS是一款广泛使用的开源实时操作系统(RTOS),它为嵌入式系统提供了可靠的任务调度和并发管理。在嵌入式领域中,STM32微控制器广受欢迎,并且与FreeRTOS的结合使用可以提供强大的功能和灵活性。在本篇博客中,我们将深入探究STM32上的FreeRTOS,并了解其核心概念、任

    2024年02月16日
    浏览(61)
  • 浅谈 RISC-V 软件开发生态之 IDE

    软件开发者是芯片公司非常重要的资产,CPU做出来是不够的,要让更多的软件开发者用这颗芯片才是成功。国际大厂们都有一只较大的软件团队,在做面向开发者的软件工具和SDK等。--张先轶博士:为什么RISC-V需要共建软件生态? 目前RISC-V架构在全球发展迅猛,RISC-V花了差不多

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包