SylixOS 唤醒链

SylixOS 调度浅析 每个 CPU 如果需要被调度,即进行 CPU 任务上下文切换,有两种情况:主动调度、被动调度对于多核 CPU 来说,如何通知某个 CPU,它需要被调度?通过 IPI 中断如下图所示。上面的解释中有优先级卷绕如果原先候选表 CAND_ptcbCand 中已经存有线程,而又出现有一个优先级高于“候选表中线程”的线程就绪,会产生优先级卷绕并将 CPU 的优先级卷绕标志位设置为 1并且替换候选表中的线程,把原先存于候选表中的线程放回到就绪表中。 阅读详情

SylixOS唤醒链简介

对于任何系统timer中断就像系统的心跳,不断地更新着系统的时间,同时也不断地更新着基于RR调度策略的时间片,以及持续的计算睡眠线程的睡眠时间等等。SylixOS唤醒链将SylixOS中所有需要睡眠等待的线程进行了一个统一管理,使得在使用上更加方便。SylixOS唤醒链基于差分链的原理,使得在效率上更加高效。

SylixOS唤醒链原理

相关结构

SylixOS唤醒链由下面两个结构体管理:

typedef struct {
    LW_LIST_LINE        WUN_lineManage;          /*  扫描链表                    */
    BOOL                  WUN_bInQ;              /*  是否在扫描链中               */
    ULONG                 WUN_ulCounter;         /*  相对等待时间                 */
} LW_CLASS_WAKEUP_NODE;

typedef struct {
    LW_LIST_LINE_HEADER   WU_plineHeader;
    PLW_LIST_LINE         WU_plineOp;
} LW_CLASS_WAKEUP;

LW_CLASS_WAKEUP_NODE结构体定义了一个唤醒节点:

  • WUN_lineManage指向下一个节点;
  • WUN_bInQ标示是否在链中;
  • WUN_ulCounter等待时间计数。

LW_CLASS_WAKEUP结构体定义了唤醒链的类型如:_K_wuDelay、_K_wuWatchDog等

  • WU_plineHeader是唤醒链节点头;
  • WU_plineOp指向下一个要操作的节点。

对唤醒链的操作SylixOS使用差分时间链,基本原理如下:

假设现在有3个节点A、B、C,A节点需要3个时间点就应被激活,B节点需要6个时间点应被激活,C节点需要10个时间点应被激活,那么它们在链上的顺序应该如下图所示:

这里写图片描述

这种结构保证了不用每次遍历链表去找相应的节点进行减操作,只需减最左边的节点,当节点计数减到1时,表示时间到,删除该节点即可。
添加一个新的节点,需要对链表进行一次遍历,例如:插入节点D是9个时间点,首先判断第一个节点3小于9,这时我们需要9-3然后向后继续找,第2个节点3小于6说明还要向后继续找,依次类推找到C节点处因此此时6-3=3 < 4因此应该插到B和C之间。

相关函数

VOID  _WakeupAdd(PLW_CLASS_WAKEUP  pwu, PLW_CLASS_WAKEUP_NODE  pwun);

此函数向指定的唤醒链中增加一个节点

VOID  _WakeupDel(PLW_CLASS_WAKEUP  pwu, PLW_CLASS_WAKEUP_NODE  pwun);

此函数将指定的节点从链上删除。

VOID  _WakeupStatus (PLW_CLASS_WAKEUP  pwu, PLW_CLASS_WAKEUP_NODE  pwun, ULONG  *pulLeft);

此函数获得指定节点的状态。

[华中科技计组实验]logisim完成单周期5级流水MIPS CPU [华中科技计组实验]logisim完成单周期5级流水MIPS32 CPU hu~,终于完成了,真是费劲呐 支持24条指令,5级流水线,可以对分支指令处理,寄存器冲突处理,指令ROM为1K,数据RAM为1M,32位MIPS指令集CPU 但是… 大量使用比较器造成硬件开销巨大,测试一下发现这尼玛真是个老爷车还没单周期跑的快,自己电脑cpu占百分之八九十只能跑到20多赫兹,一个走马灯跑了半天,可优化空间太大了,写了那么多天造成这个破样,有点悲剧。。。 先放个图大伙参考就行了,要是有人想听思路的话接下来再更 . 阅读详情

相关推荐

网络安全实战:从Wireshark到BurpSuite的抓包技巧解析

本文深入解析了Wireshark和BurpSuite在网络安全抓包中的实战技巧,从基础对比到高级过滤、核心模块应用及安全测试避坑指南。通过详细的操作步骤和案例分析,帮助读者掌握数据包抓取与分析的核心技能,提升网络安全防护能力。

weixin_29207533的博客 573

降低管理开销的好方法--差分链表

    编程中链表不可或缺,但链表也是空间耗费的大户,因此对于给链表"减负"很必要。近段时间看linux的时间管理,发现对于存储在某方面具有连续性联系的各项(如在时间上存在先后关系),差分链表很有用。以差分时间链为例:   在差分时间链中,每个表项所包含的计时值并非当前时刻到表项激活时刻的绝对计数,而是该表项和先于它的所有表项的计数值之和。这些表达不太清楚,下面有些图做说明。 

wl_haanel的专栏 1724

Lane、PHY和Preset Value Bit

每个Lane支持不同的传输速度和带宽,例如PCIe 3.0中,一个Lane的传输速度可以达到8 GT/s(Giga Transfers per second),也就是1 GB/s(GigaBytes per second)。Preset Value Bit(预置值位)是在PCIe 3.0的Lane上新引入的一种机制,用于优化信号传输质量。PCIe设备可以包含多个Lane,例如x1、x4、x8、x16等,表示该设备同时使用的Lane数目,比如x16表示该设备采用了16个Lane,具有更高的传输速度和带宽。

weixin_58083606的博客 1297

SylixOS中的线程【18】--- 线程看门狗

概念 接口 用法

ScilogyHunter的博客 614

全新YOLOv11一文弄懂 | YOLOv11网络结构解读 、yolov11.yaml配置文件详细解读与说明、模型训练参数详细解析 | 通俗易懂!入门必看系列!

本文全面介绍了YOLOv11目标检测算法,包含网络结构解析、yaml配置文件详解及训练教程。YOLOv11通过改进的C3k2f模块、SPPF和C2PSA注意力机制等创新设计,在COCO数据集上实现了比YOLOv8更优的性能。文章详细解读了yolov11.yaml配置文件的参数设置、主干网络(backbone)和头部网络(head)结构,并提供了完整的训练代码示例和参数说明。训练部分涵盖了模型选择、参数设置及优化技巧,包括epochs、batch size、学习率等关键参数的调整建议。最后总结了YOLOv11

Ai缝合怪、助力小伙伴高效发论文 3万+

Vue和Vue-Element-Admin(六):集成中的CORS(跨域资源共享)问题

在vue-element-admin登录集成时候碰到跨域资源共享问题,CORS(Cross-origin resource sharing)是浏览器的技术规范,浏览器可以发起跨域请求但Javascript脚本不能,传统的ajax只能获取在同域名下的资源,但Html5允许ajax发起跨域请求,解决方案有:JSONP、Flash、IFrame、CORS。 一、CORS(跨域资源共享)问题 针对vue-element-admin的登录模块的后端接口完成后,前端调用时候出现报错,因为前端的端口是9527而后.

叶子叶来 9615

UCOSII操作系统 第5课—时间管理

1、UCOSII的定时中断 (1)绝大多数的内核要求提供定时中断,以实现延时与超时控制等功能。这个定时中断叫做时钟节拍。 (2)时钟的中断子程序ISR和时钟节拍函数OSTimeTick()该函数用于通知UCOSII,发生了时钟的节拍中断。 2、UCOSII的5个关键的时钟函数 (1)OSTimeDly(); 后面的4个函数可以根据需要进行配置使用 (2)OSTimeHMSM(); (3)OSTimeDlyResume(); (4)OSTimeGet(); (5)OSTimeSet(); 3、关键的时钟延时函

ALong_Lj的博客 427

RAG面试内容整理-8. 文档分块策略(滑动窗口、语义切分)

RAG系统通常面对长文档或整篇知识库资料的检索需求,但大模型一次处理的文本长度有限,向量索引也需固定大小的文本片段。因此,将长文档拆分成合适片段是必不可少的步骤,被称为文档分块(chunking)策略。

不务正业的猿 691

嵌入式系统 - 时间管理

教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社 嵌入式系统开发时间管理时间管理一般具有以下功能: 维持日历时间; 任务有限等待的计时; 软定时器的定时管理; 维持系统时间片轮转调度 硬件时钟设备实时时钟(real time clock,RTC) 一般靠电池供电,即使系统断电,也可以维持日期和时间。 实时时钟独立于操作系统,所以也被称为硬件时钟,为整个系统提供一个计时标准 定时器

Sunlight的博客 2439

Windows 11 安装 JDK 11:下载、安装、配置环境变量、验证

本文详细介绍了在 Windows 11 系统中安装 JDK 11 的完整流程,包括从 Oracle 官网下载压缩包、解压到自定义目录、配置 JAVA_HOME 与 Path 环境变量,并验证安装是否成功。文章还包含一个专为 JDK 11 新特性设计的测试程序,涵盖 Lambda 表达式 var 语法、HTTP 客户端 API、字符串增强方法等,帮助读者确认安装版本正确无误,适合初学者和需要多版本 JDK 共存的开发者参考。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2781

全球气候模式降尺度方法总结及其代码实现

简介总结各类型气候模式降尺度方法

WW、forever的博客 1万+

SylixOS里的时间【9】--- 等待唤醒链表

概述 在sylixos中延时,软件定时,事件超时等功能都是要依赖于等待唤醒链表来实现的。每一个等待线程都是一个节点,需要等待时将加入队列,等待时间到或中途取消则从队列中删除,且要根据需要等待的时间长短按升序排列,因此需要在任意位置插入或删除节点,也就必须要使用双链表而不是单链表实现。等待唤醒链表另一个主要特点是,每个节点里的等待时间,不是绝对时间,而是减去它之前所有项的相对时间。 综上,等待唤醒链表是一个差分时间的双向链表。 数据类型 等待唤醒链表控制对象结构体 typedef struct { L

ScilogyHunter的博客 449

链路状态路由协议 OSPF (一)

本章将会学习链路状态路由协议OSPF,理解OSPF的基本概念,工作原理,掌握OSPF配置基本命令。本章重点,OSPF的基本概念,OSPF配置。

yj11290301的博客 3475

SylixOS 中 select 原理及使用分析

select 是操作系统多路 I/O 复用技术实现的方式之一。select 函数允许程序监视多个文件描述符,等待所监视的一个或者多个文件描述符变为“准备好”的状态。所谓的”准备好“状态是指:文件描述符不再是阻塞状态,可以用于某类 IO 操作了,包括可读,可写,发生异常三种。

日常学习记录 1134

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SylixOS中的线程【9】--- 线程睡眠及唤醒

线程延时或线程睡眠就是让线程让出CPU并处于睡眠状态,从而调度器可以调度其他线程,当线程睡眠结束后,重新恢复运行。

ScilogyHunter的博客 799

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SylixOS vutex

SylixOS 引入了与 Linux futex 类似的(vitual user mutex)(SylixOS 习惯称为“”);vutex 包括两个操作:pend 和 post,pend 操作用于等待期望值得到满足,post 操作用于设置期望值,并唤醒等待的线程。vutex 通过一个变量地址(整形变量)管理线程间的“锁”,该变量地址为用户空间地址,因此在同一个进程中,vutex 的 pend 与 post 操作使用同一个虚拟地址(内核通过该虚拟地址对应的物理地址进行期望值的管理);

ScilogyHunter的博客 1028

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SylixOS里的时间【3】--- 系统tick实现

概要 SylixOS心跳(tick)中断服务时SylixOS时间相关最核心的实现,中断驱动本身在bsp中实现,回调函数执行固定通用的操作又系统内核实现。 SylixOS心跳中断服务核心流程如下图,这里忽略了一些条件编译,条件执行,保护锁等操作: 中断服务中首先要清楚中断标志,否则会一直进中断,这个是特定平台的驱动相关操作。然后更新一些时间变量和耗时统计,更新线程时间片。最后是处理三个等待唤醒链表,这部分也可以放到线程中去执行,但要求执行线程优先级最高。 说明 SylixOS心跳中断服务函数,位于bsp\b

ScilogyHunter的博客 653

SylixOS里的时间【7】--- 延时功能如何实现

基本原理 SylixOS里延时接口主要依赖于TOD时间接口,等待唤醒链表接口,线程控制接口和信号控制接口实现。 基本原理就是,在延时接口函数中,计算延时时间,将当前线程从就绪表中删除,添加线程到延时等待唤醒链表(_K_wuDelay)中,退出关中断状态并尝试调度,此时当前线程就让出CPU进入休眠状态了。系统心跳中断会不断检查延时等待唤醒链表,对于计时已到的项,将对应线程添加到就绪表中,中断退出时进行线程调度,此时延时已到的线程就被重新调度运行了。 源码分析 SylixOS里延时功能实现源码主要位于libsy

ScilogyHunter的博客 801

SylixOS中select原理及使用分析

1. select接口简介 1.1 select接口使用用例 select是操作系统多路I/O复用技术实现的方式之一。 多路I/O复用技术大致使用场景为:构造一张感兴趣的文件描述符列表,然后调用多路复用的IO接口,在接口中进行阻塞,直到这些描述符中的一个已准备好进行I/O时,该函数才返回。 select在应用中使用的例子如下段代码所示。 #include &lt;sys/sele...

贴吧尚书的博客 667

SylixOS 延时工作队列实现原理详解

这里的延时工作队列其实就是系统工作队列中具备延时时的实现,系统工作队列中还有简单工作队列的实现,为了便于讲解,这里只列出延时工作队列实现的代码。 类型定义 /********************************************************************************************************* 带有延迟属性作业队列控制结构 *****************************************************

ScilogyHunter的博客 617

SylixOS里的时间【12】--- 事件超时是如何实现的

基本原理 在请求信号量,消息队列,事件集,信号等事件时,如果获取失败当前线程就会被阻塞,有时为了方式线程一直被阻塞就会设置一个超时时间,这样即便一段时间后得不到硬件的事件资源,也会应为超时而退出阻塞。那事件超时是如何实现的呢? 事件超时功能也是通过添加节点到延时等待唤醒链表(_K_wuDelay)实现的。基本原理就是当事件获取失败时,要添加当先线程到事件等待列表,还要添加到延时等待唤醒链表(_K_wuDelay)。如果超时计时到之前已获取资源则将节点从延时等待唤醒链表上删除,这样也就不会有超时响应。如果一直

ScilogyHunter的博客 488

SylixOS里的信号量

信号量 信号量(Semaphore) 又称为信号灯、旗语等,本质是一个无符号整形变量象,用于多线程之间同步或资源保护。 对信号量最核心的是两个操作pend(等待)和post(释放)。对一个信号量pend时,如果信号量大于0则获取信号量成功,信号量减一,正常退出后程序继续运行;如果为0,则要将当前线程挂起,直到其他线程释放信号量使得当前线程可以获取时才能被唤醒继续执行。对一个信号量post时,则会使得信号量加一,如果有阻塞线程因此可获得信号量,则可能会执行线程调度。 信号量有些像裸机程序里常用的标志(flag

ScilogyHunter的博客 883

SylixOS里的时间【11】--- 软件定时器实现详解

基本原理 SylixOS里的软件定时器是通过普通定时器等待唤醒链表和高速定时器等待唤醒链表来实现的,所有操作都是围绕这两个链表进行,不同的是普通定时器等待唤醒链表是在线程上下文中判定时间和回调的,而高速定时器等待唤醒链表是在系统心跳中断中进行的,他俩的最小有效定时器精度也可以分别设置。 定时器控制块结构体 /*****************************************************************************************************

ScilogyHunter的博客 763

SylixOS 系统工作队列

1、概述 在内核代码中,经常希望将部分工作推迟到将来的某个时间执行,这样做的原因有很多,比如: 在持有锁的情况下做耗时操作; 希望将工作集中起来以获取批处理的性能; 调用了可能导致睡眠的函数。 SylixOS 内核提供了一种机制来提供延迟执行的功能,即工作队列。工作队列是将操作延期执行的一种手段。工作队列可以把工作推后,交由一个内核线程去执行,并且工作队列是执行在进程上下文中,因此工作队列可以被重新调度和抢占甚至睡眠。工作队列的应用场景有很多:比如需要在中断(下半部)里面要做很多的耗时操作,这时就可以把

ScilogyHunter的博客 876
上一篇: SylixOS xinput 系统
下一篇: SylixOS信号系统(1)
flags_s
博客等级 码龄11年 15粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值