嵌入式实时操作系统的设计与开发New(六)

news2024/11/15 23:51:10

aCoral的优先级与数字大小成反比,即:数字越大,优先级越低。

#define MAX_PRIO_NUM ((CFG_MAX_THREAD+1) & 0xff)
#define MINI_PRIO CFG_MAX_THREAD //最低优先级40

typedef enum{
	ACORAL_INIT_PRIO; //init线程独有的0优先级
	ACORAL_MAX_PRIOL; //最高优先级是1
	ACORAL_HARD_RT_PRIO_MAX; //硬实时任务最高优先级
	ACORAL_HARD_RT_PRIO_MIN = ACORAL_HARD_RT_PRIO MAX+CFG_HARD_RT_PRIO_NUM; 

	ACORAL_NOHARD_RT_PRIO_MAX; //非硬实时任务最高优先级
	
	DAEMON_PRIO = MINI_PRIO - 2; //回收线程优先级
	ACORAL_NONHARD_RT_PRIO_MIN,
	ACORAL_IDLE_PRIO; //空闲线程优先级
}acoralPrioEnum;
#define CFG_MEN2 1 //任意大小内存分配系统是否启用
#define CFG_MEM2_SIZE (1024000) //任意大小内存分配系统的大小,从伙伴系统管理的堆内存中拿出的一部分

acoral_list_t主要用来将线程结构挂到相应链表队列,它是一个双向链表。

struct acoral_list{
	strcut acoral_list *next,*prev;
}
typedef strcut acoral_list acoral_list_t;

以就绪队列ready为例,当用户调用了acoral_rdy_thread或acoral_resume_thread接口时,就会将线程挂到就绪队列acoral_ready_queue上,也就是将就绪队列ready成员挂到这个链表上。

在这里插入图片描述
这种方式的优点是:可以用相同的数据处理方式来描述所有双向链表,不用再单独为各个链表编写各种函数。

线程优先级

就绪队列采用的是优先级链表,每个优先级是一个链表,相同优先级的线程挂在该链表上。

对于RTOS而言,几乎都是采用了基于优先级的抢占调度策略。

就绪队列

#define PRIO_BITMAP_SIZE ((ACORAL_MAX_PRIO_NUM+31)/32)

typedef struct{
	unsigned int num; //就绪的线程数
	unsigned int bitmap[PRIO_BITMAP_SIZE]; //优先级位图,每一位对应一个优先级,为1表示这个优先级有就绪线程。
	acoral_list_t queue[ACORAL_MAX_PRIO_NUM]; //每一个优先级都有独立的队列
}

优先级位图数组bitmap[PRIO_BITMAP_SIZE],用来标识某一优先级是否有就绪队列,这样才能确保以O(1)复杂度找出最高优先级的线程。

在这里插入图片描述

每个变量从右到左每一位依次代表一个优先级,为0表示该位对应的优先级没有任务就绪。

acoral_list_t queue[ACORAL_MAX_PRIO_NUM];优先级链表数组
每个CPU都有一个。

调度策略

把线程相关的操作统称为线程调度,将调度分为两层,上层为策略,下层为机制,采用策略与机制分离的设计原则,这样可以灵活方便地扩展调度策略,而不改变底层的调度机制。

调度策略就是如何确定线程的CPU、优先级等参数,线程按哪种策略来调度,然后根据相应操作初始化线程。
一种策略对应一种线程。

调度机制就是负责调度策略的具体实施,即根据给定调度策略来安排任务的具体执行。

当用户创建线程时,需要指定某种调度策略,并找到该调度策略对应的策略控制块,再为TCB成员赋值。

  1. 普通线程(通用策略创建的线程),需要人为指定CPU,优先级信息。
  2. 周期线程(周期策略创建的线程),这种线程需要每隔一个固定时间就要执行一次。

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

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

相关文章

如何刷新 DNS 缓存 (macOS, Linux, Windows)

如何刷新 DNS 缓存 (macOS, Linux, Windows) Unix Linux Windows 如何刷新 DNS 缓存 (macOS, FreeBSD, RHEL, CentOS, Debian, Ubuntu, Windows) 请访问原文链接:https://sysin.org/blog/how-to-flush-dns-cache/,查看最新版。原创作品,转载…

论文解读|基于平面双关节机器人的相机姿态分析与评估

原创 | 文 BFT机器人 01 研究内容 论文的主要研究内容是基于平面双关节机器人的相机姿态分析和评估。研究旨在分析相机的位置调整和一般数据分析,讨论人体姿势的平衡、关节运动的控制以及相机速率的估计和控制。 通过有限相机技术的应用,有效解决平面摄影…

【虚拟机数据恢复】XenServer虚拟机磁盘数据被破坏的数据恢复案例

虚拟机数据恢复环境: 一台某品牌720服务器,4块STAT硬盘通过RAID卡组建raid10磁盘阵列。部署的XenServer虚拟化平台Windows Server操作系统,共两个虚拟磁盘:数据盘系统盘。服务器作为Web服务器使用,上层部署ASP SQL Se…

Chrome插件开发_V3_浏览器扩展插件基础教程

文章目录 一、简介二、核心介绍三、自定义页面背景色三、设置页面背景图(web_accessible_resources)四、设置徽章(Badge)五、桌面通知六、消息通信七、自定义右键菜单(添加、更新、删除)八、Omnibox九、浏览…

JVM基础知识

JVM 一次编译终身运行1.1 JVM和java的体系结构1.1.1 虚拟机与JAVA虚拟机1.1.2 JVM的位置1.1.3 JVM的整体执行流程1.1.4 JAVA代码的执行流程1.1.5 JVM架构模型1.1.6 JVM的生命周期1.1.7 Sun Classic Vm1.1.8 Exact VM1.1.9 Hotspot VM1.1.10 BEA的JRockit1.1.11 IBM的 J91.1.12 …

云渲染是什么?如何挑选云渲染平台

在影视动画、建筑设计、游戏开发等领域,渲染是一个非常重要的环节,它可以将场景、模型、纹理、材质等元素综合起来,生成逼真的图像或视频。然而,渲染也是一个非常耗时和耗能的过程,它需要大量的计算资源和硬件设备&…

Intel base instruction -- Jcc

检查EFLAGS寄存器中一个或多个状态标志(CF、of、PF、SF和ZF)的状态,如果这些标志处于指定状态(条件),则执行跳转到目标操作数指定的目标指令。条件代码(cc)与每个指令相关联&#xf…

实用干货-汇总篇

_ 实用干货 _ 11.实用干货-基因&基因组知识回顾 (qq.com)22.实用干货—解惑NGS可能引入的错误突变 (qq.com)33.临床肿瘤NGS的常规检测流程 (qq.com)44.实用干货—DNA甲基化相关知识点整理 (qq.com)55.实用干货-NGS的QC质控和突变结果复核 (qq.com)65.实用干货-你可能没…

patch 报错 can‘t find file to patch at input line 4

错误现象&#xff1a; 解决 -p3 patch -p3 < ../speccpu2006-kylinv10-aarch64.patch

问题总结,web自动化测试元素无法操作?shadowDOM节点元素解决......

前言 web自动化遇到shadowDOM你会操作吗&#xff1f; 之前在做web自动化的时候&#xff0c;发现页面上有些元素&#xff0c;在selenium中无法通过xpath来定位&#xff0c;各种原因找了半天都没找到解决方案&#xff0c;最后发现元素在一个叫做shadow-root的节点下面&#xff…

消息通知系统设计

编辑导语&#xff1a;消息通知可以将内容实时送达用户手机页面&#xff0c;但是泛滥的消息通知会引起用户的反感&#xff0c;也违背了这个设计的初衷。如何理解以及设计消息通知&#xff0c;作者作了简单的分享&#xff0c;我们一起来看看吧。 消息通知可以及时地将状态、内容…

开发之路,穷且益坚,不坠青云之志(入门开发者共勉)

引言 2023毕业季&#xff0c;距离笔者毕业已过2年有余。 互联网从业环境由盛转衰&#xff0c;互联网从业者数量剧增&#xff0c;市场竞争异常激烈&#xff0c;原本的利润空间被不断挤压&#xff0c;以至于很多开发者对互联网已经失去了信心与激情。 互联网的市场份额依旧是占…

全志科技T507-H工业核心板规格书(4核ARM Cortex-A53,主频1.416GHz)

1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板&#xff0c;主频高达1.416GHz。核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案&#xff0c;国产化率100%。 核心板通过邮票孔连接方式引出MIPI C…

6 应用层-6.1【实验】【计算机网络】

6 应用层-6.1【实验】【计算机网络】 前言推荐6 应用层6.1 Web服务与FTP服务配置0 搭建拓扑图1 Web演示2 FTP演示6.1.1实验章节测验 最后 前言 2023-6-25 14:35:53 以下内容源自《创作模板三》 仅供学习交流使用 推荐 4端到端协议-4.3【实验】【计算机网络】 6 应用层 6.…

【Java|多线程与高并发】阻塞队列以及生产者-消费者模型

文章目录 1. 前言2. 阻塞队列3. 实现阻塞队列4. 生产者-消费者模型5. 总结 1. 前言 阻塞队列(BlockingQueue)常用于多线程编程中&#xff0c;可以实现线程之间的同步和协作。它可以用来解决生产者-消费者问题&#xff0c;其中生产者线程将元素插入队列&#xff0c;消费者线程从…

《网络安全0-100》自学误区和陷阱

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员(以编程为基础的学习)再开始学习 我在之前的回答中&#xff0c;我都一再强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而且实际向安全过渡后可用到…

今天面了个腾讯拿 28K 出来的,让我见识到了软件测试的天花板

已经6月底了&#xff0c;你们是在职呢还是待业呢&#xff1f; 今年的春招结束了&#xff0c;而秋招也马上要开始了&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里…

如何清除浏览器的 DNS 缓存 (Chrome, Firefox, Safari)

如何清除浏览器的 DNS 缓存 (Chrome, Firefox, Safari) Chrome Chromium Edge Firefox Safari clear DNS Cache, flush DNS cache 请访问原文链接&#xff1a;https://sysin.org/blog/clear-browser-dns-cache/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。…

java版工程管理系统源码,企业级工程项目可视化管理平台

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示1…

Linux 设备驱动程序(四)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序&#xff08;一&#xff09; Linux 设备驱动程序&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;三&#xff09; Linux 设备驱动程序&#xff08;四&#xff09; Linux设备驱动开发详解 …