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);

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

PyWxDump实战:解密微信PC端本地数据库,实现聊天记录备份与分析 数据加密是保护敏感信息(如聊天记录)的核心技术,它通过特定算法将明文转换为密文,确保数据在存储和传输过程中的机密性。SQLCipher作为SQLite的加密扩展,采用AES-256算法对数据库文件进行页级加密,广泛应用于移动端和桌面端应用的数据保护。其技术价值在于,在保障用户隐私的前提下,为合规的数据备份、归档与分析提供了底层支持。在数据恢复、司法取证或合规审计等场景中,获取并解析此类加密数据是关键步骤。PyWxDump正是针对微信PC端本地SQLCipher加密数据库设计的工具,它通过逆向工程分析内存结构 阅读详情

相关推荐

Apache Hop集成Spring Boot实战:从配置到执行HPL文件

本文详细介绍了将Apache Hop集成到Spring Boot应用中的完整实战方案。通过配置核心依赖、初始化Hop环境、编写服务层逻辑,实现了在Java应用中程序化执行HPL管道文件,从而将可视化ETL能力无缝嵌入微服务架构,提升数据处理的自动化与可维护性。

blue42的博客 476

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

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

wl_haanel的专栏 1724

华为设备OSPF配置全流程:从邻居关系到区域划分实战指南

本文详细介绍了华为设备上OSPF协议的完整配置流程,从基础概念到实战操作,包括邻居关系建立、多区域划分及高级特性配置。特别针对华为设备的特有语法和验证命令进行了重点讲解,帮助网络工程师快速掌握OSPF在华为环境中的部署与优化技巧,提升网络配置效率。

weixin_29299807的博客 251

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

概念 接口 用法

ScilogyHunter的博客 614

从BSCAN到BAP:深度解析Tessent MBIST逻辑的协同工作机制与设计考量

本文深入解析了Tessent MBIST逻辑中BSCAN Interface、Logic Group Def、Controller与BAP模块的协同工作机制。文章以一条测试指令的完整路径为例,详细阐述了数据流与控制流如何跨模块、跨时钟域协同工作,并重点探讨了MBIST BAP在协议转换与流量管理中的核心桥梁作用,为芯片内建自测试的集成与调试提供了关键的设计考量和实战技巧。

kappa的博客 482

告别图像畸变:手把手教你用HALCON的`gen_image_to_world_plane_map`做高精度视觉测量

本文详细解析了HALCON的`gen_image_to_world_plane_map`算子在工业视觉测量中的应用,通过精确的几何变换消除透视畸变,提升测量精度。文章涵盖相机标定、世界坐标系建立、实战应用及性能优化,适用于液晶屏质检、金属板检测等场景,帮助工程师实现高精度视觉测量。

weixin_28718487的博客 424

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

半导体设备系列(2) 半导体设备与工厂控制仿真器Demo编写

基于C/S架构用C++编写半导体设备仿真器与工厂控制仿真器

追赶时代的博客 610

嵌入式系统 - 时间管理

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

Sunlight的博客 2439

uniapp [全端兼容] - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、摄像头控制,实时推流、回放、放大缩小画面、视频画面截图、截屏抓拍及播放器解决延迟教程

uniapp,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,vue,海康威视,海康监控,摄像头监控,实时监控画面,海康插件,无法连接,报错,uniApp对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,对接海康监控设备

🏆 前端领域优质创作者 1万+

Milvus 向量数据库部署方案全景指南:从单机开发到生产级高可用集群

本文系统介绍了Milvus向量数据库的四大部署方案:嵌入式开发利器Milvus Lite、单机简易部署Standalone模式、生产级高可用Cluster模式以及全托管SaaS服务Zilliz Cloud。针对不同应用场景(开发测试、小型应用、大规模生产环境),详细分析了各模式的适用条件、资源配置要求和部署步骤,并提供了关键配置示例。文章强调正确选择部署方案对系统性能至关重要,帮助开发者根据向量规模、QPS和高可用需求,选择最优部署方式,实现资源优化与稳定运行。

reset2021的博客 385

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

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

ScilogyHunter的博客 449

一文吃透 ABAP CDS SELECT:语法全景、关联与去重、可运行示例与实战心法

摘要: 本文深入解析ABAP中CDS视图的SELECT语法,重点介绍两种等价写法、关联与路径表达式优化、DISTINCT去重逻辑及WHERE/GROUP BY/HAVING/UNION等子句的应用。通过可运行的业务伙伴角色去重、关联路径查询及多角色筛选示例,演示如何将CDS特性转化为项目实践。强调关联复用性优于传统JOIN,并指出DISTINCT的权限边界与误用场景,帮助开发者从行式思维转向图式数据建模。(150字) 关键词: ABAP CDS、SELECT语法、路径表达式、DISTINCT去重、关联复用

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 392

SylixOS 中 select 原理及使用分析

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

日常学习记录 1134

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

ScilogyHunter的博客 799

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SylixOS vutex

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

ScilogyHunter的博客 1028

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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、付费专栏及课程。

余额充值