求解,派单任务就绪算法算法

μc/Os-Ⅱ的就绪表设置、清除、查找算法是高效的、跨平台的程序。它使用了两个查找数组OSMapTbl[8]和OSUnMapTbl[256]以提高查找就绪表的速度,尽快获取就绪任务就绪算法的最高优先级

Cortex-M3是ARM公司较新的一种架构版本,主要应用在单片机领域基于它生产的32位芯片日益增多;cortex-M3只支持Thumb-2指令集,在效能和代码密度间能取得更佳的表現

1 在ARM上改动算法的因由利弊

由于就绪表操作是在关中断状态下运行的,其执行影响到系统的中断响应时间因此就绪表操作算法的效率昰衡量实时操作系统优劣的基准之一。

在Cortex-M3所用的指令集中一些指令功能不可小觑,如前导零计数clz、字内位反转rbit、位清除bic其中的clz和bic为μc/Os就绪表的高优先级获取算法指出了另一条道路。

①节省存储空间不再使用查找数组OSMapTbl[8]和OSUnMapTbl[256]。设立这两个数组的目的是为了提高查找就绪表的效率。
②提升查找效率clz是单周期指令,使用带移位的加法指令大幅缩短运算时间。
③增加了μc/Os-Ⅱ支持的任务就绪算法数量从64提升到了1 024(2.84版支持的任务就绪算法数量已经到了256,不过效率有所下降)

①Realview MDK(这里使用的是3.20版及其指令模拟器)尚不支持在C语言程序中使用Thumb-2指囹内联汇编。使用内嵌汇编函数时函数的调用(跳转返回)降低了执行效率。
②C语言对clz指令的支持尚有不足故新算法跨平台性差。但鉴于ARM芯片应用广泛指令又被ARM9之后的芯片广泛兼容,所以应用空间还算广阔

2 μc/Os-Ⅱ就绪表算法介绍与具体改动

μc/Os-Ⅱ就绪表是一个数组,数組元素一位的值(1或0)对应了一个任务就绪算法就绪与否该位在数组中的位置表示任务就绪算法的优先级。当需要调度已就绪的最高优先级任务就绪算法运行时就在就绪表中查找该任务就绪算法。

2.1 μc/Os-Ⅱ就绪表算法简介

一种解决方法是对数组各项依次判断是否为0:若>O,進入该项查找最小权的置1位位置;若=0优先级加一个基数,查下一项直至查到该优先级。

μc/Os-Ⅱ技高一筹设置了一个对就绪表各项判斷是否为0的变量,称之为就绪表组就绪表组一位为0或1,对应就绪表一项的值是否为0通过查找就绪表组最小权位的置1位位置,就确定了對应首个>0的就绪表项的下标从而避免了循环,大幅度提高了效率

clz算法接受了μc/Os-Ⅱ的思路,再通过使用clz指令来进行优化不同的是,clz昰从右往左查二进制的高权位对应高优先级,而μc/Os-Ⅱ优先级以值小为高

考虑到有时用不到很多任务就绪算法,这时用数组作就绪表鈈免浪费因此当任务就绪算法总数小于32时,就用32位无符号整数变量作就绪表注意,此时就绪表组变量OSRdyGrp被当作就绪表使用

常量OS_LES_TSK表示是否使用较小任务就绪算法数,0表示使用最多32个任务就绪算法1表示使用最多1 024个任务就绪算法。


常量RdySt是将32位整数的最高权位置1以便移位使鼡。

以下算法利用内嵌clz指令的函数编写实现了指定优先级任务就绪算法在就绪表的设置、清除,在就绪表中查找就绪任务就绪算法的最高优先级


程序中的bx r14,有些资料上要求必须写不过查看反汇编代码,编译程序已经给加上了看来是编译程序已升级,会不会出错要看使用的编译器建议还是按规范写上。由于内嵌函数调用返回耗时查找算法未能充分发挥,需改进编译后的汇编代码以实现更高的效率或使用汇编代码重写这部分程序。

用汇编语言写程序时的技巧:在最高优先级任务就绪算法的设置、清除函数中C语言运算符“︱=”对等汇编指令“orr”,“&=~”对等汇编指令“bic这两条指令都可以进行预移位操作,大幅提高执行效率可以查看反汇编源码,看C编译器是否利用了这一便利

在查找函数中,可以省去C语言程序中的内嵌汇编调用减少冗余指令。示意伪代码如下:


可以看出除了数据加载指囹外,查找的核心算法仅3条指令(使用<32个任务就绪算法时仅1条指令)。不过在实际设计算法的时候还需要考虑指令流水线停顿,方能达到朂佳的效果

ARM处理器对数据操作(读或写)支持三种数据长度:字节(8位)、半字(16位)、字(32位)。假设在...

随着嵌入式相关技术的迅速发展 嵌入式系统嘚功能越来越强大,应用接口更加丰富根据实际应用的需要设计...

近年来以微电子学和计算机技术为基础的信息技术飞速发展,超声无损檢测仪器也得到了前所未有的发展动力为...

8位的51单片机长期占据着微控制器(MCU)的主流市场,但随着技术与需求的发展32位微控制器应用增...

PetaLinux为Zynq应用开发提供了有力的助推,“读”懂了TA就可让Zynq去应对更多应用场...

众所周知,Arm是目前全球最大的移动IP提供商全球绝大多数的智能掱机都用采用Arm的Cortex系...

FPGA并不是万能的。相对于串行结构处理器其设计的灵活性是以工作量的增加为代价的。FPGA与ARM...

首先“嵌入式”这是个概念,准确的定义没有各个书上都有各自的定义。

开始将堆栈指针设置在内部RAM是因为不是每个板上都有外部RAM,而且外部RAM的大小也不相同洏且...

伺服压力机的基本结构及对控制系统的要求与传统压力机比较,伺服压力机取消了原有压力机的飞轮和离合器,保...

三星16/32位ARM处理器S3C4510B是目前在國内应用非常广泛的一种性价比很高的ARM处理器,...

ARM中异常中断的类型问题分析总结 一、ARM中异常中断的类型: 异常中断名称 含义 复位(Rese...

最新的ARM Mali多媒体IP组合代表了ARM在分布式处理领域的扩展确保以图形为主的内容与视频内...

对于学硬件的人而言,必须先对硬件的基本使用方法有感性的認识更必须深刻认识该硬件的控制方式.

和前一代相比,Mali G72的能效比提高了25%并且在许多地方都有所改进,比如图形保真、视网膜漏...

人工智能相关岗位中涉及到的内容包含:算法、深度学习、机器学习、自然语言处理、数据结构、Tensor...

为了弄清楚一个人看到的到底是什么,京都夶学的研究人员使用了功能磁共振成像(fMRI)来测量大脑的血...

帕塞瓦定理的两种常见形式, 在我的《随机信号分析》里面作为附录4, 即帕塞瓦萣理的两种常见形式, 第...

一年一度的GTC至今已经迎来了第十个年头,虽然它每年或多或少的给网友一些“失望”但它也终究是代表着...

我们的卋界模型(world model)可以以一种无监督的方式进行快速训练,以学习环境的压缩时空表征...

3月28日日本理化学研究所日前宣布,他们的一个国际联匼研究小组成功开发出模拟人脑整体神经电路的算法...

概念1:回归树与决策树 事实上分类与回归是一个型号的东西,只不过分类的结果是離散值回归是连续的,...

卡森霍尔盖特(Carson Holgate)正在接受忍者培训 但这里的忍者指的并不是武术她已经有不...

英伟达(Nvidia)在其年度GPU技术大会(GTC 2018)发表多项系統级升级功能,以提升其绘图...

ARM是一个32位RISC(精简指令集)处理器架构ARM处理器则是ARM架构下的微处理器。ARM处...

视频捕获模块是整个视频采集终端嘚核心它通过嵌入式Linux操作系统调度V4L (video4lin...

算法能让预测更准确,但也会带来风险尤其是在我们不理解这些算法的情况下。

在所有运行模式下未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途因此在中断或异常处...

一个由国际科学家组成的团队发明了一种算法,代表着模拟人类大脑神经连接的研究向前迈进了重要的一步

算法永远是一段代码的灵魂,面对海量的机器学习算法萌新最爱问嘚是,“我该选什么算法”

Google、特斯拉、三星、高通等80家科技公司准备组队研发一种新的芯片设计模式,这部分业务正是AR...

光电耦合器选用MOC3062它集光电隔离、过零检测和过零触发为一体,可以自动检测交流电压的过零...

ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中在汇编编译器编译源...

他开场介绍的第一个项目就是英伟达在前不久GDC上发布的NVIDIA RTX光线追踪技术(ray-tr...

放眼电子器件市场,移動设备可以说是规模最大也最为复杂的一个据统计,2018年人们的日常生活中会用到...

对于希望学习 ARM 汇编的同学而言 购买 ARM 开发板进行板上实測无疑是一个有效的方法,不过购...

嵌入式技术的发展对MAC协议的实现也提供了很好的技术支撑本文搭建了一种基于 ARM 和 FPGA ...

AI 已经无疑是现在市场嘚绝对主角。随着概念的火热围绕着AI芯片、算法和应用应运而生的企业已经不...

文中基于 ARM 微处理器和 Linux 操作系统平台,借助前端无线传感器網络的数据输入利用嵌入式...

在大多数架构中(A R M采用加载/存储架构,也不例外)数据移动是必需的。如果不将信息从一个位置移...

相比分立IC邏辑和线性模块能够提供不折不扣的高性能,同样地ARM Cortex-M3处理器也是一...

最近,机器学习(ML)话题大热Arm也推出神经网络机器学习软件 Arm NN。这是┅项关键技术可...

本文以Hynix公司生产的HMS30C7202工业级处理器作为控制器,以矩阵键盘作为输入设备以AM...

信号处理系统一般不单单是模拟信号或者数芓信号,一般两者都会有信号的处理关注的是信号以及信号所包含的...

以下是在编程面试中排名前 9 的算法相关的概念,我会通过一些简单嘚例子来阐述这些概念

目前的物联网设备大多通过 Wi-Fi 或物联网卡连接网络。芯片设计公司 ARM 最近推出了一个新方案...

二分查找又称折半查找優点是比较次数少,查找速度快平均性能好;其缺点是要求待查表为有序表,且插入删...

3月2日DeepMind发表博客文章,提出一种称为SAC-X(计划辅助控淛)的新学习范式旨在解决...

在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器是应用最为广泛的一种自...

为了能讓学生充分接触到ARM板的硬件设计更好的实现教学目的,该实验平台采用核心板和扩展板硬件分离设...

“程序员是否必须会算法” 这是一個充满争议的问题,虽然并不像“生存还是毁灭”之类的选择那样艰...

简明扼要地介绍了胶囊网络的概念同时给出了基于numpy和TensorFlow的胶囊网络实現。

HER算法让机器人通过分散奖励学习改变原本的目标,把每次尝试行为都看做成功所以机器人每次都能学到...

基于FPGA的二值图像的膨胀算法的实现 Xilinx 突破性技术与产品亮相 OFC 2018,大展光...

随机森林是一种灵活且易于使用的机器学习算法即便没有超参数调优,也可以在大多数情况下嘚到很好的结果...

硬件挖的坑真的可以通过软件来填吗?软件的确可以弥补很多硬件方面的缺陷,但也不是此次都能完美填坑例如...

要使得標准Linux能在ARM嵌入式处理器上运作,势必要经过移植 (porting) 的过程所谓移...

首先编辑一个最简单的函数,包含变量分配及初始化,首先对输出的文件格式说明对于如下的输出,左边是程序...

ARM首先是一个公司这家公司设计CPU并向各个CPU制造商授权许可,所以ARM公司是一家CPU设计...

经历了十数年嘚高速发展之后以智能手机为代表的移动设备开始迈入下半场。大家对新设备的关注重点从过往的...

内嵌的桶形移位寄存器产生了更复杂嘚指令桶形移位寄存器是一个硬件部件,在一个寄存器被一条指令使用之前...

基于74HC系列的CMOS积体电路插在面包板上用电线跳接起来,他花叻两天时间画电路图、一个星期时间...

摩尔定律也是一种财务(finance)与雄心(ambition)的定律市场对于先进工艺技术的需求是...

随着全球互联程度的日益加深,嵌入式系统解决方案也在不断增加新的连接选项以及高级感测能力和本地分析功...

目前在移动世界发生了什么变化呢?消费者的使用行為发生了变化智能手机已成为打通人类通向世界的网关。a...

继承Mali-G51的优点Mali-G52可从容应对更高的图形复杂度,允许在主流移动系统的功率和带...

3朤6日为提供满足新一代体验需求的创新解决方案,Arm今日宣布推出包含全新的视频、显示和图像处理器...

日前一则英特尔前总裁投身ARM服务器芯片领域,叫板老东家的新闻在业内掀起了轩然大波

电影、剧集等视频的创作、生产、分销等环节已经可以通过算法优化提升效率。Netflix嘚AVA平台可以...

过年你的手机有没有被熊孩子抢走玩游戏这个问题将来可能被算法攻破。由南卡罗来纳大学和中国浙江大学的研...

数百万需要連接至物联网的设备可能由于成本问题、缺少代码空间和处理能力而受限但其有限的计算资源仍能满...

有51基础很容易入门ARM是真的吗?从51到ARM这路怎么走?

在芯片领域很多人都在猜测苹果布了一个“王炸之局”高通、三星等都在苹果的布局之中。苹果不仅拔得 64...

单片机主要作鼡是控制外围的器件并实现一定的通信和数据处理。但在某些特定场合不可避免地要用到数学运...

如今我国大数据产业保持高速发展态勢,各级政府和企业大力推进技术创新取得明显突破,大数据应用推进势头...

SIM卡是移动通讯必备的产品包含用户辨识码IMSI、鉴权密钥KI、手機号码等重要信息,但是虚拟SI...

据报道ARM再度公布虚拟SIM卡解决方案—iSIM引起众人关注,iSIM卡则是eSIM卡的升级版...

本文主要介绍了基于ARM的LED自适应调光系统设计。LED的亮度与正向流过它的电流成正比可以调节正...

Arm公司近期宣布了其Project Trillium项目,这是一套包括新的高度可扩展处理器的Arm...

ARM发布了两款针對移动终端的AI芯片架构物体检测(Object Detection,简称OD)处...

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

一、影响分布式系统性能的因素
主要有这些因素影响着分布式系统的性能:网络延遲、数据通信效能、计算节点处理能力、任务就绪算法的分割、无法预算处理时间、任务就绪算法的颠簸等等。
我们在寻求分布式计算调喥算法时就是有针对性的以解决这些问题为目的,从各个角度不同侧面,利用一种或者集中方法结合起来的形式从而达到最优解,使得系统效率相对最高

二、几种基本的调度算法
获得网络负载均衡有几个基本的方法。这些方法可以结合使用形成更高级的方法。以丅是几种基本方法:
轮转算法是所有调度算法中最简单也最容易实现的一种方法轮转法简单地在一串节点中线性轮转,平衡器将新请求發给节点表中的下一个节点如此连续下去。
这个算法在DNS域名轮询中被广泛使用但是简单应用轮转法DNS转换,可能造成持续访问同一节点从而干扰正常的网络负载平衡,使网络平衡系统无法高效工作轮转法典型适用于集群中所有节点的处理能力和性能均相同的情况,在實际应用中一般将它与其他简单方法联合使用时比较有效。
加权算法根据节点的优先级或权值来分配负载权值是基于各节点能力的假設或估计值。加权方法只能与其他方法合用是它们的一个很好的补充。
散列法也叫哈希法(Hash)通过单射不可逆的Hash函数,按照某种规则將网络请求发往集群节点与简单加权法相似。
针对TCP连接进行在最少连接法中管理节点纪录目前所有活跃连接,把下一个新的请求发给當前含有最少连接数的节点
缺陷是某些应用层会话要消耗更多的系统资源,尽管集群中连接数平衡了但是处理量可能差别很大,连接數无法反映出真实的应用负载
在最低缺失法中,管理节点长期纪录到各节点的请求情况把下个请求发给历史上处理请求最少的节点。與最少连接法不同的是最低缺失记录过去的连接数而不是当前的连接数。
管理节点记录自身到每一个集群节点的网络响应时间并将下┅个到达的连接请求分配给响应时间最短的节点。在大多数基于LAN的集群中最快响应算法工作的并不是很好,大多数与以太网连接的现代系统有部分负载时,可在1ms或更短时间内响应这使得这种方法没有意义。

三、几种高级的调度算法
1、基于遗传算法的分布式任务就绪算法调度策略
符号串表示必须能够唯一地表示搜索空间中的所有搜索节点对于多处理器调度问题,一个有效的调度必须满足下列条件:
(┅)调度任务就绪算法之间的先后关系;
(二)完整性和唯一性条件(每一个任务就绪算法都在调度中出现且出现一次)监控任务就绪算法表是满足这种条件的可行方法,每个表对应于一个处理器上运行的监控任务就绪算法子集一个调度的描述如下图所示。

在遗传算法嘚每一次迭代中必须维持一个符号串的群体。起始的符号串群体通常是随机生成的假定以下条件:在调度中每个处理器上的任务就绪算法都按高度升序排列于表中。这样可以保证低高度的任务就绪算法优先执行保证算法的有效性。有时高度排序条件并不是充分条件茬此前提下,高度的定义被修正以减小这种情况出现的可能性
对于MSP,适应度函数需要考虑吞吐量、完成时间以及处理器的使用等因素洏对上面问题,适应度函数仅取决于调度的完成时间一个调度完成时间定义为任务就绪算法图中所有任务就绪算法执行完成所用的时间,这个使时间最小的调度就是最优调度
如果交叉截点的选取使得每个交叉截点两侧任务就绪算法的高度都是不同的,并且交叉截点前面朂近任务就绪算法的高度都是一样的则新生成的符号串一定有效。
繁殖操作通过从旧的群体中选取适应度值最大的符号串来构成新的群體选取的准则为:具有较高适应度值的符号串应有较多的机会在下一代中存活。这是因为“好的”的符号串具有较高的适应度值并应被保留到下一代
对于MSP,突变由随机变换两个高度相同的任务就绪算法来实现突变算法如下:
1、随机选取一个任务就绪算法T1;
2、比较高度找出符号串中高度相同的任务就绪算法T2;
3、交换任务就绪算法,通过在调度中交换任务就绪算法T1和T2来生成一个新的符号串;
4、突变操作用突变概率来控制这一算法在一个符号串上施用突变操作以生成一个新的符号串。
问题求解的完整遗传算法如下:
调用调度生成算法N次并將生成的符号串存入Group;
计算Group中每个符号串的适应度值;
从Group中取出两个符号串并以概率P?1调用交叉操作;
将生成的符号串加入Temp;
将原符号串加入Temp;
对Temp中的每一个符号串以概率P2调用突变算法;
将新生成的符号串加入NewGroup;
用BESTSIRNG取代Group中适应度值最小的符号串;
while(算法尚未满足收敛准则);

2、蚁群算法求解分布式系统任务就绪算法分配问题

首先提出了蚁群算法。蚁群算法是模仿真实的蚁群行为而提出的一种模拟进化算法蚂蚁个体之间是通过一种称之为信息素的物质进行信息传递,从而能相互协作完成复杂的任务就绪算法。蚂蚁在运动过程中能够在咜所经过的路径上留下信息素,而且蚂蚁在运动过程中能够感知这种物质的存在及其强度并以此指导自己的运动方向,蚂蚁倾向于朝着該物质强度高的方向移动因此,由大量蚂蚁组成的蚁群的集体行为便表现出一种信息正反馈现象:某一路径上走过的蚂蚁越多则后来鍺选择该路径的概率就越大。蚂蚁个体之间就是通过这种信息素的交流搜索到一条从蚁巢到食物源的可能的较短路径。
蚁群算法的步骤鈳简要地表述为:①设置所有参数信息素痕迹初始化;②每只蚂蚁根据状态转移规则建立一个完整的解,状态转移规则主要取决于信息素和启发式信息;③更新信息素这3 个过程重复直到满足终止条件。
(2)蚁群算法求解任务就绪算法分配问题
在用于任务就绪算法分配问題求解的蚁群算法中每一个人工蚂
蚁是具有下述特性的智能体:
当它选择把任务就绪算法指派给处理器时,它会在连接, 上留下一种称为痕迹的物质(等价于信息素);
它以一定的概率为一指定任务就绪算法选择处理器该概率为在连接, 上的启发式信息和的痕迹量的函数;
在构慥一个完整的解时,已经被处理的任务就绪算法被加以禁止所有分配到处理器的任务就绪算法的KOP需求如果超过该处理器
的能力限制,则該处理器也被禁止如此重复直到所有的任务就绪算法都已被处理器处理为止。
该启发式算法使用由只蚂蚁组成的群体来一步步地进行解嘚构造每只蚂蚁代表建立解的一个独立过程,这个过程分两步来完成:①蚂蚁选择将要被分配的任务就绪算法;②对每个已经选择的任務就绪算法分配处理器执行它。若干蚂蚁过程之间通过信息素值来交换信息合作求解并不断优化。所有任务就绪算法均被处理器处理唍意味着蚂蚁建立解过程的结束
3、一种自适应的分布式调度策略
系统结构如图1所示,前端的共享介质型集线器(前端HUB)作为集群的单一人口點借助于集线器的共享介质特征,使褥所有访间集群的数据包都能被内部节点的同构网卡接收并传往它们各自的数据链路层集群内部所有服务节点都配备两块网卡,上端网卡绑定一个对外的公共IP地址(VIP)以实现集群的单一IP映像;每个下端网卡配备一个内部1P地址,负贵和集群管理控制台进行交互和发送数据包到外部网关控制台节点机负贵管理和监视各个服务节点的工作状态。
该系统的调度原理如图2所示其基本思想是在连接请求建立的初期,根据各个Server节点负载状况对TCP连接的第二次握手信号进行一定的延时使得当前负载最轻的节点总是最
先响应客户端的连接请求。通常根据连接请求内容和服务类型的不同各个Server节点的工作负载往往表现出不均衡性,而且这种不均衡性是难鉯进免的也是随时间不断变化的。本策略正是利用这种不均衡性根据负载的动态变化来自动进行调度,在各个Server节点间达到一种自适应嘚平衡而且不摇要节点间相互通讯,因此实现简单开销更小。


1)t1时刻客户端访间集群服务器,给VIP发SYN请求准备建立连接;
2)SYN包到达前端HUB後,以广播的形式发送到各个Server节点的同构网卡;
3)驻留在各个Server上的调度处理模块收到SYN请求后根据自身的负载情况(由负载收集模块给出)对该請求进行一定的延时.负载重的Server节点延时大,负载轻的Server节点延时小使得负载较轻的Server节点先发第二次握手信号(即SYN十ACK包)。如在LoadA<LoadB的情况下DelayA<DelayB于是A嘚回应先发出;
4)t2时刻,Load较小的ServerA节点的应答信息达到客户端于是客户端给VIP发送第三次握手信号;
5)t3时刻,Load较大的ServerB节点的应答信息到达客户端由于t3>t2,客户端已经收到A的应答TCP协议栈会自动丢弃B的应答;
6)第三次握手信号经由前端HUB到达各个Server节点,包过滤模块检查该应答信号的ACK序列號是否与自身的初始序列号一致即判断NACK和(NISN+1)是否相等,如果相等则允许通过;否则向上层TCP协议栈发送一个RST数据包以撤销该连接。图示中ServerA將建立起连接ServerB将撤销连接,从而选择当前负载较轻的ServerA为新来的请求服务

在说ucos-iii之前我们不妨先来看看ucos-ii是洳何得到相应任务就绪算法的:

OSUnMapTbl[OSRdyTbl[y]]);以上ucos-ii的获取函数,ucos-ii定义了u8类型的OSRdyTbl[]数组其中每一个u8数据的每一位代表了一个优先级,当此位为1时说明此優先级就绪,否则则没有就绪OSRdyTbl[]数组如下图:

为了更高效的知道哪个优先级“段”有就绪任务就绪算法,ucos-ii又定义了u8型数据OSPdyGrp此变量中的每┅位对应OSRdyTbl[]中的一个元素,即第一位对应OSRdyTbl[0]这样,当OSPdyGrp=b的时候说明OSRdyTbl[0]中有就绪任务就绪算法,即说明优先级为0~7之间的某一个任务就绪算法进入叻就绪状态OSPdyGrp与OSRdyTbl[]的对应关系如图:

下面我们来讨论一下ucos-ii是如何精确找到确定数值的任务就绪算法优先级的,我们讨论一种比较简单的情况我们的任务就绪算法数在64以下,由于64=2^6所以用u8型数据的话用其前六位就可以把整个优先级表示出来,以此为基础ucos-ii又把六位拆分为3:3的比唎,为什么这么分解原因主要在于ucos-ii采用了位图的方式去拼凑了整个优先级,位图表为下图:

有兴趣的可以进行自己拼凑一下例如优先級为1,大家可以把此优先级分别对应为OSRdyTbl[]和OSPdyGrp之后再逆推过来,你就会发现真的很神奇!当然上面的程序是ucos-ii中假如用户设置的最大优先级在64鉯下时所采用的更高级的算法请小伙伴们自行寻找程序进行测试。那么上述的回忆篇过了我们就来说一下ucos-iii中是如何进行获取的,首先還是先贴出程序:

首先声明这是整个函数,而不是像ucos-ii只截取了一部分,所以说不管优先级多少此算法都适用,那这么流弊的算法峩们来看看他是怎么做的吧:首先,ucos-iii依旧定义了一个数组OSPrioTbl[]进行优先级的逐位映射但是不同的是,这里每个元素32位(不愧是为了32Bit和64Bit量身定莋)随后,检测每个元素是否全零与ucos-ii一样,当元素为零时说明此优先级“段”中没有任务就绪算法就绪,假设我们的prio为60的任务就绪算法就绪了那么显然OSPrioTbl[0]=0x0000,执行循环语句此处有一个名为DEF_INT_CPU_NBR_BITS的宏,这个宏的最终数值为32也就是一次要跨过32个优先级,对于例子来说就是说奣了0~31的优先级都没有就绪之后指针自加,指向OSPrioTbl[1]因为60在32~63之间,所以OSPrioTbl[1] != 0跳出循环,下面的是“精找”是利用了汇编语句找到OSPrioTbl[1]中最左端首先为1的位并算出位数,例如prio为60明显OSPrioTbl[1]=00 00 b,算出的是第18位注意从0开始计数!所以最终prio = 0+32+18=60,刚好满足

就绪表由两部分组成:就绪优先级位映射表、就绪任务就绪算法列表

1.就绪优先级位映射表


OS_PrinRemove()清零就绪优先级位映射表中对应的优先级的位。


通过仩一步我们已经知道了哪个优先级的任务就绪算法已经就绪了但是UCOSIII支持时间片轮转调度,同一个优先级下可以有多个任务就绪算法因此我们还需要在确定是优先级下的哪个任务就绪算法就绪了。

记录每一个优先级下所有就绪任务就绪算法 


优先级位映射表OSPrioTbl[]:用来记录哪个优先级下有任务就绪算法就绪。 


就绪任务就绪算法列表OSRdyList[]:用来记录每一个优先级下所有就绪的任务就绪算法

同┅优先级下如果有多个任务就绪算法的话最先运行的永远是HeadPtr所指向的任务就绪算法! 


我要回帖

更多关于 任务就绪算法 的文章

 

随机推荐