首页 > 其他分享 >25、【OS】【Nuttx】最小系统初始化分析(3):任务调度(二)

25、【OS】【Nuttx】最小系统初始化分析(3):任务调度(二)

时间:2025-01-11 11:59:32浏览次数:3  
标签:nxsched 25 优先级 队列 Nuttx 任务 Ready 任务调度 Pending

背景

接上篇wiki
24、【OS】【Nuttx】最小系统初始化分析(3):任务调度(一)
继续分析 Ready 队列的更新

合并 Pending 队列

还是 nxsched_merge_pending,上篇wiki分析到了当前 head 任务被lock时,无法更新Ready队列。现在继续,当任务没被 lock 时,此时会遍历 Pending 队列,并逐一将 Pending 任务按优先级从高到低合并到 Ready 队列中
在这里插入图片描述
这里有位开发者评论:为什么不直接从 Pending 队列移除任务,然后通过 nxsched_add_readytorun 函数添加到 Ready 队列中来?
下面会分析向 Ready 队列添加任务的功能,这里个人认为没有必要,因为面向功能不一样,分开更体现单一职责的设计原则:

  • nxsched_merge_pending:目的主要用于清理 Pending 队列,把 Pending 队列直接合并到 Ready 队列中,可以一些关键调度点进行,或者起一个常周期的任务,定期清理 Pending 队列,而不需要关注 Pending 队列的更新
  • nxsched_add_readytorun:目的是向 Ready 队列添加一个任务,而不关注 Pending 队列的清理

在这里插入图片描述
将当前的 Pending 任务按优先级,在 Ready 队列中找一个合适位置塞进去(这个for循环写的是真丑…)
在这里插入图片描述

当插入的这个 Pending 任务前面没有任务时,意味着这个 Pending 任务的优先级最高,且当前执行的head任务可以被抢占,那么这个 Pending 任务可以直接抢占这个正在执行的任务去运行
在这里插入图片描述
如图所示,若当前的 Pending 任务优先级最高,会直接切换成 Running 状态
在这里插入图片描述
若当前的优先级不是最高,则添加到 Ready 队列中,等待执行,当前 Pending 队列遍历完后,所有的 Pending 任务已合入到 Ready 队列,此时清空 Pending 队列,返回状态
在这里插入图片描述
这里说下这个返回状态,当返回状态为true时,表示需要立刻切换上下文,状态为false,则不需要马上切换上下文。虽然函数接口注释已经说明,但其实该接口的设计违背了单一职责的设计原则,从接口功能来说,其主要目的是为了合并 Pending 队列,而非指示是否需要切换上下文。
在这里插入图片描述
将合并Pending队列和指示是否需要切换上下文分开,是更好的设计实践

在这里插入图片描述

向 Ready 队列添加一个任务

接下来分析上面提到的 nxsched_add_readytorun
首先看描述,首先这个接口的功能是将一个任务添加到 Ready 队列,从输入参数类型,可以看出,针对的是 blocked 任务,所以前面提到的 Revisit 注释,可以删掉了… 该接口输入对象针对的是 blocked 任务,而非 pending 任务…
如果当前执行的任务为不可抢占任务时且该任务会导致当前任务被抢占时,添加的任务会进入到 Pending 队列(Pending队列的来源)
在这里插入图片描述
这里的设计有点多此一举,如果当前任务不能被抢占,直接送入 Pending 队列即可,(因为后面在解锁时,会调用 nxsched_merge_pending 对 Pending 队列进行处理)这里还多判断了下 block 任务的优先级,其实可以不用,以减少程序复杂度。
在这里插入图片描述
同样的,这个接口承担的功能比较多,违反了单一职责原则
在这里插入图片描述

标签:nxsched,25,优先级,队列,Nuttx,任务,Ready,任务调度,Pending
From: https://blog.csdn.net/nobigdeal00/article/details/145072004

相关文章

  • THUPC 2025 初赛 部分题题解
    持续更新中,目前只有\(\texttt{A,D,G,H,I,M}\)题题解。A.骑行计划题目描述小Rei有\(n\)天的假期,第\(i\)天她要骑行\(s_i\)分钟,每分钟骑行费用为\(c\)元。有\(m\)种骑行卡,第\(i\)种骑行卡售价\(w_i\)元,有效期\(d_i\)天,免费时间\(t_i\)分钟。小Rei可以......
  • 2025年毕设ssm网上订餐论文+源码
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容选题背景随着互联网技术的飞速发展,网上订餐已成为现代生活的重要组成部分,极大地便利了人们的日常生活。关于网上订餐系统的研究,现有研究主要以电商平台和餐饮......
  • 2025年毕设ssm网上花店管理系统论文+源码
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容选题背景随着互联网的普及和电子商务的迅猛发展,网上购物已成为人们日常生活的一部分。花店作为传统零售业的一部分,也逐渐开始转型,通过线上平台拓展销售渠道。......
  • 2025年毕设ssm网上花店设计论文+源码
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容选题背景随着互联网技术的快速发展和电子商务的普及,网上购物已成为人们日常生活中不可或缺的一部分。网上花店作为电子商务的一种形式,近年来在国内外迅速发展......
  • Mac电脑如何安装 Audition 2025 Au音频编辑软件?
    Mac电脑如何安装Audition2025Au音频编辑软件?介绍AdobeAudition2025Mac版是一款功能强大的音频录制和编辑软件。具备出色的多轨录音和编辑功能,允许用户同时录制和编辑多个音频轨道。通过直观的界面和丰富的编辑工具,用户可以轻松实现音频的剪切、修剪、合并等操作,并获得精确......
  • 2025年1月10日随笔
    公司人员调整,从个人发展而言确实缘分尽了,努力奋斗了三年。自己也看不到最后的理想结局,青春终究是怀有遗憾的。收拾心情,开始准备接下来的招聘了。在这家公司主要是sass以及APP内嵌H5产品的成长,确实不是自己最合适的路子,自己在这家公司也是磨练综合能力为主。接下来要突破的事情......
  • 2024年总结及2025年目标之关键字【稳进】
    1.感受时光荏苒,都731天(2年时间)下来了,从第一年的【坚持】,到第二年的【提速】,定目标,现在回头看,还是那句话【事非经过不知难】,那又怎么样呢,再难不是也过来了吗:D,接下来就是【而今迈步从头越】!读书时间大增,尤其是读了大量的历史和哲学宗教书籍,更加平心静气了读书时间大增,养成......
  • Mac电脑如何安装 Audition 2025 Au音频编辑软件?
    Mac电脑如何安装Audition2025Au音频编辑软件?介绍AdobeAudition2025Mac版是一款功能强大的音频录制和编辑软件。具备出色的多轨录音和编辑功能,允许用户同时录制和编辑多个音频轨道。通过直观的界面和丰富的编辑工具,用户可以轻松实现音频的剪切、修剪、合并等操作,并获......
  • 鸿蒙面试 2025-01-10
    写了鉴权工具,你在项目中申请了那些权限?(常用权限)位置权限 :ohos.permission.LOCATION_IN_BACKGROUND:允许应用在后台访问位置信息。ohos.permission.LOCATION:允许应用访问精确的位置信息。ohos.permission.APPROXIMATELY_LOCATION:允许应用访问大致的位置信息。相机权限 :......
  • 【网络云SRE运维开发】2025第2周-每日【2025/01/11】小测-【第11章NAT理论和实操考试
    文章目录一、选择题二、理论题三、实操题【网络云SRE运维开发】2025第2周-每日【2025/01/11】小测-【第11章NAT理论和实操考试】解析一、选择题在H3C设备上,NAT技术主要用于()A.提高网络安全性B.实现不同网段的通信C.将内部私有IP地址转换为外部公有IP地址......