当前位置: 首页 > news >正文

江苏城市建设档案馆网站桂林搭建公司

江苏城市建设档案馆网站,桂林搭建公司,响应云网站模板下载,网站建站建设的公司一、前言 OpenAtom OpenHarmony#xff08;以下简称“OpenHarmony”#xff09;是由开放原子开源基金会#xff08;OpenAtom Foundation#xff09;孵化及运营的开源项目#xff0c;目标是面向全场景、全连接、全智能时代#xff0c;基于开源的方式#xff0c;搭建一个…一、前言 OpenAtom OpenHarmony以下简称“OpenHarmony”是由开放原子开源基金会OpenAtom Foundation孵化及运营的开源项目目标是面向全场景、全连接、全智能时代基于开源的方式搭建一个智能终端设备操作系统的框架和平台促进万物互联产业的繁荣发展。 作为面向全场景、全连接、全智能的分布式泛终端操作系统OpenHarmony通过将各类不同终端设备的能力进行整合实现硬件互助、资源共享为用户提供流畅的全场景体验。为了能适应各种硬件OpenHarmony提供了LiteOS、Linux内核并基于这些内核形成了不同的系统类型同时又在这些系统中构建了一套统一的系统能力。 OpenHarmony LiteOS-M内核是面向IoT领域构建的轻量级物联网操作系统内核LiteOS-M核为任务间通信提供了多种机制包括队列、事件、互斥锁和信号量。各机制涉及到哪些关键数据结构这些数据结构又是如何工作的接下来我将从队列、事件、互斥锁、信号量几个内核对象出发为大家讲解内核IPC机制的数据结构。 二、数据结构–队列 队列又称消息队列是一种常用于任务间通信的数据结构可以在任务间传递消息内容或消息的地址。内核用队列控制块来管理消息队列同时又使用双向环形链表来管理控制块。 队列控制块管理具体消息队列的数据块内核初始化时调用OsQueueInit()创建并依次挂载到双向环形链表g_freeQueueList中此时控制块状态为OS_QUEUE_UNUSED队列控制块用来保存队列的状态队列长度、消息长度、队列ID、队列头尾位置和等待读写的任务列表内核就是根据这些信息来管理消息队列和任务完成对消息读写等操作。 typedef struct {UINT8 *queue;UINT16 queueState;UINT16 queueLen;UINT16 queueSize;UINT16 queueID;UINT16 queueHead;UINT16 queueTail;UINT16 readWriteableCnt[OS_READWRITE_LEN];LOS_DL_LIST readWriteList[OS_READWRITE_LEN];LOS_DL_LIST memList;}LosQueueCB;  初始化后队列控制块的组织方式如下 创建队列队列用于存放具体的消息内容任务可以调用LOS_QueueCreate()来创建队列此时内核会根据入参指定的队列长度和消息大小申请内存创建队列并从g_freeQueueList中分配一个控制块来管理队列被分配的队列控制块状态为OS_QUEUE_INUSED。分配队列控制块时总是从头节点开始如下图控制块首先被分配用于管理新创建的队列。 写队列内核支持两种写队列方式从尾部写入LOS_QueueWrite()和 从头部写入LOS_QueueWriteHead() 读队列读队列只有一种方式从队列头部读LOS_QueueRead()读取之后head指向下个节点。 删除队列当不再使用队列时可以使用LOS_QueueDelete()来删除队列此时会归还队列控制块到g_freeQueueList中并释放消息队列 三、数据结构–事件 事件用于实现任务间的同步但事件通信只能是事件类型的通信无数据传输事件控制块由任务申请内核负责维护。 事件控制块事件控制块用来记录事件和管理等待读取事件的任务。uwEventID总共32bit代表31个事件bit25保留stEventList事件控制块的双向环形链表当有任务读取事件但事件还没发生时任务会被挂载链表中当事件发生时系统唤醒等待事件的任务此时任务就会被摘出链表。 typedef struct tagEvent {UINT32 uwEventID; LOS_DL_LIST stEventList; } EVENT_CB_S, *PEVENT_CB_S;事件初始化事件控制块由任务创建然后调用LOS_EventInit()进行初始化初始化后的状态如下 事件读当事件没有发生时读事件操作会引发系统调度把当前任务挂起并加入到stEventList链表下图中事件1发生任务Task1读取事件2但是事件2没有发生导致Task1被挂起。 事件写当事件2发生时任务Task2把事件2写入uwEventID此时任务Task1被调度读取事件成功事件2对应bit位被清0也可以不清0Task1从链表stEventList中被摘出。 事件删除事件控制块是由任务创建的内核不负责控制块的删除但是任务可以调用LOS_EventClear来清除事件。 四、数据结构–互斥锁 互斥锁又称互斥型信号量是一种特殊的二值性信号量用于实现对共享资源的独占式处理。任意时刻互斥锁的状态只有开锁或闭锁当有任务持有时互斥锁处于闭锁状态任务获得该互斥锁的所有权当该任务释放它时互斥锁被开锁任务失去该互斥锁的所有权当一个任务持有互斥锁时其他任务将不能再对该互斥锁进行开锁或持有。 互斥锁控制块互斥锁控制块资源由内核创建和维护内核初始化时会调用函数OsMuxInit()对锁资源进行初始化。等待互斥锁的任务会被挂载到muxList中。 typedef struct {UINT8 muxStat; /** State OS_MUX_UNUSED,OS_MUX_USED */UINT16 muxCount; /** Times of locking a mutex */UINT32 muxID; /** Handle ID */LOS_DL_LIST muxList; /** Mutex linked list */LosTaskCB *owner; /** The current thread that is locking a mutex */UINT16 priority; /** Priority of the thread that is locking a mutex */ } LosMuxCB;初始化时内核会申请LOSCFG_BASE_IPC_MUX_LIMIT个锁资源并把各资源块挂载到双向环形链表g_unusedMuxList中全局变量g_allMux指向锁资源内存首地址后续根据首地址加ID方式快速查找对应的控制块 互斥锁创建任务调用LOS_MuxCreate()创建互斥锁内核会从g_unusedMuxList的头部分配一个锁资源给任务。 互斥锁申请任务调用LOS_MuxPend()申请互斥锁如果锁被其它任务持有则任务在muxList上排队。 互斥锁释放任务调用LOS_MuxPost()释放互斥锁如果有其它任务排队则触发调度释放锁给排队任务。 互斥锁删除任务调用LOS_MuxDelete()删除互斥锁如果删除成功锁资源被归还到g_unusedMuxList中。 五、数据结构–信号量 信号量实现任务之间同步或临界资源的互斥访问的一种同步机制常用于协助一组相互竞争的任务来访问临界资源。在多任务系统中各任务之间需要同步或互斥实现临界资源的保护信号量功能可以为用户提供这方面的支持。通常一个信号量的计数值用于对应有效的资源数表示剩下的可被占用的互斥资源数。 信号量控制块信号量控制块资源由内核创建和维护内核初始化时会调用函数OsSemInit()对信号量资源进行初始化。初始化时申请LOSCFG_BASE_IPC_SEM_LIMIT个信号量控制块g_allSem指向信号量控制块的首地址创建好的信号量控制块会挂载到空闲链表g_unusedSemList中。申请信号量的任务会在控制块的链表semList上排队semCount指示可以被访问的资源数。 typedef struct {UINT16 semStat; /** Semaphore state */UINT16 semCount; /** Number of available semaphores */UINT16 maxSemCount; /** Max number of available semaphores */UINT16 semID; /** Semaphore control structure ID */LOS_DL_LIST semList; /** Queue of tasks that are waiting on a semaphore */} LosSemCB;信号量创建任务调用LOS_SemCreate()创建信号量并指定同一时刻访问此资源的最大任务数目。内核从g_unusedSemList的头部分配一个信号量控制块并初始化。 信号量申请任务调用LOS_MuxPend()申请信号量如果有资源可以访问则申请成功否则在semList上排队等候。 信号量释放任务调用LOS_SemPost()释放信号量如果有其它任务排队则触发调度使排队任务访问资源。 信号量删除任务调用LOS_SemDelete()删除信号量如果删除成功锁资源被归还到g_unusedSemList的头部。 六、总结 本篇文章通过数据结构的队列、事件、互斥锁、信号量四大方面对内核IPC机制数据结构进行解析希望以上的讲解能给大家建立一个IPC机制的整体认识。 为了帮助到大家能够更有效的学习OpenHarmony 开发的内容下面特别准备了一些相关的参考学习资料 OpenHarmony 开发环境搭建https://qr18.cn/CgxrRy 《OpenHarmony源码解析》https://qr18.cn/CgxrRy 搭建开发环境Windows 开发环境的搭建Ubuntu 开发环境搭建Linux 与 Windows 之间的文件共享…… 系统架构分析https://qr18.cn/CgxrRy 构建子系统启动流程子系统分布式任务调度子系统分布式通信子系统驱动子系统…… OpenHarmony 设备开发学习手册https://qr18.cn/CgxrRy OpenHarmony面试题内含参考答案https://qr18.cn/CgxrRy
http://www.pierceye.com/news/205671/

相关文章:

  • 做网站需要工商证吗app软件开发价格
  • 做足球原创短视频网站网站建设永远在路上
  • 做seo为什么要了解网站苏州做网站公司
  • 这几年做哪些网站能致富网站开发账务处理
  • 网站的版权信息做阿里巴巴网站卖货咋样
  • 找项目去哪个网站成都哪里有做网站的公司
  • 网站推广的方法及特点国外专门做童装的网站
  • 企业网站开发模型图wordpress 侧边导航
  • 济南网站系统优化网站建设属于什么专业
  • 114啦建站程序页面效果好的网站
  • 龙华网站建设-信科网络电子商务网站建设和技术现状
  • 网站备案有效期wordpress 评论图片
  • 搭建网站需要哪些步骤wordpress 主题使用
  • 网站怎么发布做微商天眼官方网站
  • qq群网站制作异常网站服务器失去响应
  • aspnet网站开发模板紫光华宇拼音输入法官方下载
  • 东莞网站设计价格wordpress的配置dns
  • 韶关网站建设公司电子商务网站建设考试重点
  • 网站左侧 导航小红书广告投放平台
  • 资阳住房和城乡建设厅网站重庆建设网站建站
  • 网站制作厂家电话多少女生学网络工程难吗
  • 网站建设要经历哪些步骤?网站建设岗位周计划
  • 贵阳网站制作工具福步外贸论坛网首页
  • 网站大全app下载任务发布平台
  • 专业商城网站建设哪家便宜河南做外贸网站的公司
  • seo博客网站东莞网络推广运营企业
  • 定制网站建设公司哪家好嘉兴网站建设多少时间
  • 快三竞猜网站建设wordpress 整站打包
  • 珠海好的网站制作平台微信音乐音频怎么关闭
  • asp.net 网站计数器响应式设计