详解FreeRTOS:嵌入式多任务系统的任务等待和唤醒机制(理论篇—8)

news/2024/11/7 21:45:29/

当任务在试图访问IPC对象时,经常会因为运行条件不足而失败,被迫返回或者阻塞在该IPC对象的任务阻塞队列。而当有任务释放资源从而使得资源条件可以满足时,操作系统将会唤醒IPC对象上的阻塞任务,使得被唤醒任务继续运行。不同的访问等待机制和唤醒机制是各种操作系统的重要区别。

IPC对象是活动在内核级别的一种进程间通信的工具。存在的IPC对象通过它的标识符来引用和访问,这个标识符是一个非负整数,它唯一的标识了一个IPC对象,这个IPC对象可以是消息队列或信号量或共享存储器中的任意一种类型。

用于任务访问IPC对象的等待机制主要有3种:

  • 直接返回结果:任务直接返回访问结果,成功或者失败,注意因为中断不像任务那样能够被阻塞,所以中断必须采用本模式;
  • 阻塞等待模式:任务如果访问IPC对象失败,则进入该IPC对象的等待队列,直到明确得到处理;
  • 时限等待模式:任务如果得不到IPC对象,则进入等待状态并开始计时。如果在等待期间得到了IPC对象则返回操作成功;如果当计时结束时任务仍然没有成功,那么它并不会继续等下去,而是返回失败的结果。

操作系统唤醒机制主要有以下3种模式:

  • 当资源可使用时,唤醒该资源的全部等待任务。让这些任务与系统中的其他任务平等竞争资源。这种策略会使系统瞬间繁忙,在参与竞争资源的所有任务中,最终只有一个任务获取到资源,没有得到资源的任务将再次进入资源的等待队列;
  • 将该资源等待队列中的一个合适的任务唤醒。这个任务将和系统中可能访问该资源的其他任务一起竞争这个资源。如果这个任务最终没有竞争到资源,它会再次进入该资源的等待队列;
  • 操作系统从等待队列中找到一个最佳的任务并立刻把资源交给它,这样该任务直接从释放资源的那个任务那里获得资源。

目前主流的嵌入式多任务系统都采用第3种方案。


http://www.ppmy.cn/news/85253.html

相关文章

又一神器开源!无需服务器支持!打通手机,浏览器的Web LLM!

大家好,我是千与千寻,大家可以叫我“千寻哥”,之前和大家分享了两篇关于ChatGPT的技术文章,ChatGPT毫无疑问是现在最大的风口,各个行业都在集成ChatGPT的API接口以及各类的应用插件,这么多人的应用&#xf…

第一章.The Learning Problem

第一章.The Learning Problem 1.1 The Learning Problem 1.机器学习的概念: 机器学习就是机器从数据中总结经验。从数据中找出某种规律或者模型,并用他来解决某种实际问题。 2.机器学习的应用场景 1).事物本身存在某种潜在规律 2).某些问题难以使用普…

Elastic Stack

一、简介 ELK是一个免费开源的日志分析架构技术栈总称,官网https://www.elastic.co/cn。包含三大基础组件,分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析,它还可以支持其它任何数据搜索、分析和收集的场景&#…

Android 之MPAndroidChart图表案例

一 简介 1.1 图表用于直观的分析数据的分布情况,用于对比数据的大小和趋势。 1.2 图表的类型也非常多,常见的有折线,柱状,饼状,其它的有面积,散点,股价,雷达,仪表盘&am…

6. 实现简单的线程池

本文以营业厅为例子,实现简单的线程池 一、线程池介绍 现在的企业客户端数以百万,如果某一时刻同时向服务器发消息,那么服务器要处理这些消息是同时开百万个线程吗??当然不行!! 根据posix标准&…

AWS VPC 配置指南:快速创建和设置你的虚拟私有云

文章目录 一、前言二、创建 VPC2.1 进入 AWS VPC 服务2.2 创建 VPC2.3 选择所要创建的 VPC 资源2.4 输入 VPC 名称2.5 设置 IPv4 CIDR block(IPv4 CIDR 块)2.6 选择可用区2.7 选择公有子网的数量2.8 设置 NAT 网关和 VPC 终端节点2.9 完成创建 VPC2.10 查…

消息中间件 - RabbitMQ篇之入门及进阶

这里写自定义目录标题 一. RabbitMQ简介1.1. 消息中间件1.1.1.什么是消息中间件1.1.2.消息中间件的传递模式1. 1.2.1 点对点1. 1.2.2 发布订阅模式 1.1.3 消息中间件种类1.1.4 消息中间件的作用 2. RabbitMQ介绍2.1.RabbitMQ的起源2.2.RabbitMQ的安装及简单使用 3. RabbitMQ的简…

Java原来是值传递?

先说结论,Java就是值传递。 01 在Java中,所有的参数都是按值传递的,即方法得到的是所有参数值的一个副本,而不是原始参数。当我们将一个对象的引用作为参数传递给一个方法时,实际上传递的是该对象的引用的副本。 下…