CN110569131B - 一种信号量管理***及信号量管理方法 - Google Patents
一种信号量管理***及信号量管理方法 Download PDFInfo
- Publication number
- CN110569131B CN110569131B CN201910778944.4A CN201910778944A CN110569131B CN 110569131 B CN110569131 B CN 110569131B CN 201910778944 A CN201910778944 A CN 201910778944A CN 110569131 B CN110569131 B CN 110569131B
- Authority
- CN
- China
- Prior art keywords
- semaphore
- data structure
- linked list
- idle
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
本发明涉及一种信号量管理***及信号量管理方法,通过***管理信号量,可以充分利用信号量资源,不会浪费过多的***资源。当信号量资源使用较多时,OS***会继续创建信号量、并且分配使用;当创建的信号量资源过多,并且有部分信号量空闲未使用的情况下,OS***会自动回收空闲的信号量;而且由于***参与的因素信号量的使用者,可以以更加方便快捷的方式开发或使用***,因此在应用层开发时,无需再考虑创建和回收信号量的问题,也不需要再去记录信号量的句柄,只需要获取和释放时配置成对的id号即可,大大的减少了信号量使用的复杂性。
Description
技术领域
本发明涉及一种信号量管理***及信号量管理方法,属于信号***化控制技术领域。
背景技术
在多任务的嵌入式实时操作***中,会根据保护临界资源的需求,使用信号量来对程序进行控制,使用的正常流程包含创建信号量(生成信号量句柄)、获取和释放信号量(需要操作信号量句柄)。
任务中如要使用信号量,就必须创建专用的信号量,完成此信号量与特定资源的关联,并且获取和释放信号量的操作,还需要操作复杂的信号量句柄数据结构。最后还需要考虑回收信号量的问题,只有确定任务中所保护的临界资源在后续不再使用时,才能回收对应的信号量,然后信号量所占用的内存空间资源才能被***重新使用。
在多任务的嵌入式实时操作***中,会根据保护临界资源的需求,使用信号量来对程序进行控制,使用的正常流程包含创建信号量(生成信号量句柄)、获取和释放信号量(需要操作信号量句柄)。
任务中如要使用信号量,就必须创建专用的信号量,完成此信号量与特定资源的关联,并且获取和释放信号量的操作,还需要操作复杂的信号量句柄数据结构。最后还需要考虑回收信号量的问题,只有确定任务中所保护的临界资源在后续不再使用时,才能回收对应的信号量,然后信号量所占用的内存空间资源才能被***重新使用。现有的技术中,多任务访问受保护的临界资源时,会为每个受保护的临界资源都创建一个信号量,所以受保护的临界资源与信号量是一一对应的关系,在需要访问受保护的临界资源时通过对应的信号量去实现控制的。但是一般情况下在同一时刻访问多个临界资源的情况并不多见,所以大多数受保护的临界资源都是处于未操作的状态,因此所对应的信号量就处于空闲状态,这样就导致了信号量资源的浪费。而任务中要考虑信号量的回收问题,就会大大增加难度,因为不确定程序运行中受保护的临界资源的使用情况,就无法做到有效的信号量回收,并且回收信号量就要对所属资源做分析,这又会增加任务中代码的开发难度。由于上述的难度所在,所以一般应用层任务中不对信号量进行回收,就这就导致信号量的使用率低和空间资源的浪费问题。
现有信号量使用方法,任务中必须要先创建再操作句柄,操作时传入信号量句柄来实现信号量的功能,句柄是一个指针,指向一个复杂的数据结构,任务中使用信号量时就必须记录信号量句柄的信息。但是此处记录的句柄任务中并不需要去解析具体的数据结构,所以任务记录就成了多余的操作,这也就在无形之中给任务中的程序开发增加了额外的工作。并且在任务中创建信号量和操作句柄,在使用上对应用层有很多不方便。
发明内容
本发明所要解决的技术问题是提供一种信号量管理***,通过***自动分配和回收信号量,可以很好的解决信号量使用率低的问题;以及通过改变信号量使用方法,抛弃句柄结构,可以解决信号量使用复杂的问题。
本发明为了解决上述技术问题采用以下技术方案:本发明设计了一种信号量管理***,用于实现操作***与应用层之间的信号量管理,包括操作***所提供的信号量模块,以及基于信号量模块的信号量管理模块;其中,信号量管理模块基于信号量模块,用于初始化空闲信号量、用于获取特定类型的空闲信号量、以及用于释放未被资源占用的信号量;
初始化空闲信号量,包括创建不同类型信号量、并按其所对应各指定信号量属性进行标记记录;
获取特定空闲类型信号量,包括获得特定类型的空闲信号量、并进行使用状态标记,以及应用信号量模块实现信号量的获取;
释放未被资源占用的信号量,包括在释放信号量时、检测信号量是否被其它应用所使用,以及执行信号量回收。
作为本发明的一种优选技术方案:所述信号量管理模块,还用于根据信号量所对应的链表节点、信号量句柄、信号量计数值、以及符号id,构成信号量所对应的数据结构体;并通过该数据结构体记录信号量的当前使用状态,符号id用于记录当前使用信号量的资源id;
信号量管理模块结合信号量模块,基于信号量所对应的数据结构体,实现初始化空闲信号量、获取特定空闲类型信号量、以及释放未被资源占用的信号量。
与上述相对应,本发明还要解决的技术问题是提供一种基于信号量管理***的信号量管理方法,通过***自动分配和回收信号量,可以很好的解决信号量使用率低的问题;以及通过改变信号量使用方法,抛弃句柄结构,可以解决信号量使用复杂的问题。
本发明为了解决上述技术问题采用以下技术方案:本发明设计了一种基于信号量管理***的信号量管理方法,包括:
初始化空闲信号量的步骤:包括创建不同类型信号量、并按其所对应各指定信号量属性进行标记记录;
获取特定空闲类型信号量的步骤:包括获得特定类型的空闲信号量、并进行使用状态标记,以及应用信号量模块实现信号量的获取;
释放未被资源占用的信号量的步骤:包括在释放信号量时、检测信号量是否被其它应用所使用,以及执行信号量回收。
作为本发明的一种优选技术方案:所述方法还包括根据信号量所对应的链表节点、信号量句柄、信号量计数值、以及符号id,构建信号量所对应的数据结构体的步骤;所述数据结构体记录信号量的当前使用状态,所述符号id用于记录当前使用信号量的资源id。
作为本发明的一种优选技术方案:所述初始化空闲信号量的步骤包括:
步骤A1.信号量管理模块创建、并初始化各指定信号量类型分别所对应的信号量空闲链表和信号量使用链表,然后进入步骤A2;
步骤A2.分别针对各指定信号量类型,创建预设数量的指定信号量类型的信号量,然后进入步骤A3;
步骤A3.分别针对各指定信号量类型的各个信号量,申请信号量所对应的数据结构体,并针对其中的信号量计数值、以及符号id进行置零,然后进入步骤A4;
步骤A4.分别针对各指定信号量类型的各个信号量,更新信号量所对应数据结构体当中的信号量句柄,然后进入步骤A5;
步骤A5.分别针对各指定信号量类型的各个信号量,将信号量所对应数据结构体中的链表节点,添加至所对应指定信号量类型、对应的信号量空闲链表中,即完成空闲信号量的初始化。
作为本发明的一种优选技术方案:所述各指定信号量类型包括互斥信号量、二值信号量、计数信号量。
作为本发明的一种优选技术方案:所述获取特定空闲类型信号量的步骤,包括当信号量管理模块收到应用层的获取信号量请求时,执行以下步骤,其中,所述获取信号量请求中包含有待获取信号量的信号量类型和资源id;
步骤B1.根据所述信号量类型获取与之对应的空闲链表和使用链表,然后进入步骤B2;
步骤B2.关闭中断,判断所述使用链表中各链表节点所对应的信号量数据结构体中,是否存在与所述资源id相等的符号id,是则将该链表节点所对应的信号量数据结构体作为当前信号量数据结构体,并进入步骤B8;否则进入步骤B3;
步骤B3.判断所述空闲链表是否为空,是则进入步骤B10;否则进入步骤B4;
步骤B4.获取所述空闲链表中的第一个链表节点,作为当前链表节点,并在当前信号量空闲链表中删除该链表节点,然后进入步骤B5;
步骤B5.获取当前链表节点所对应的信号量数据结构体,作为当前信号量数据结构体,然后进入步骤B6;
步骤B6.将当前信号量数据结构体中的链表节点,添加至使用链表中,然后进入步骤B7;
步骤B7.将待获取信号量所对应资源id填入当前信号量数据结构体中的符号id中,然后进入步骤B8;
步骤B8.针对当前信号量数据结构体中的信号量计数值进行加1更新,然后打开中断,并进入步骤B9;
步骤B9.提取当前信号量数据结构体中的信号量句柄,执行信号量的获取操作,完成特定类型的空闲信号量的获取,结束;
步骤B10.创建所述信号量类型对应的数据结构体,并针对其中的信号量计数值、以及符号id进行置零,将新创建的信号量数据结构体作为当前信号量数据结构体,然后进入步骤B11;
步骤B11.将待获取信号量所对应的信号量句柄、填入当前信号量数据结构体中的信号量句柄中,然后进入步骤B6。
作为本发明的一种优选技术方案:所述步骤B9之后还包括,若获取成功,则向应用层返回获取操作成功信息;若获取不成功,则进入步骤B12;
步骤B12.针对当前信号量数据结构体中的信号量计数值进行减1操作,向应用层返回获取操作失败信息。
作为本发明的一种优选技术方案:所述释放未被资源占用的信号量的步骤,包括当信号量管理模块接收到应用层的释放信号量请求时,所述获取信号量请求中包含有待获取信号量的信号量类型和资源id,执行以下步骤:
步骤C1.根据所述信号量类型获取与之对应的空闲链表和使用链表,然后进入步骤C2;
步骤C2.判断所述使用链表中各链表节点所对应的信号量数据结构体中,是否存在与所述资源id相等的符号id,是则将该链表节点所对应的信号量数据结构体作为当前信号量数据结构体,并进入步骤C3;否则返回错误;
步骤C3.提取当前信号量数据结构体中的信号量句柄,执行信号量的释放操作,然后进入步骤C4;
步骤C4.针对当前信号量数据结构体中的信号量计数值进行减1更新,结束。
作为本发明的一种优选技术方案:所述步骤C4中,针对当前信号量数据结构体中的信号量计数值进行减1更新之后,进入步骤C5;
步骤C5.判断当前信号量数据结构体中的信号量计数值是否达到初值,是则结束信号量释放操作;否则进入步骤C6;
步骤C6.关中断,从所述使用链表中删除当前信号量数据结构体所对应的链表节点,然后进入步骤C7;
步骤C7.判断所述空闲链表中链表节点的数量,是否大于初始化空闲信号量操作中相应信号量类型所创建信号量的数量,是则进入步骤C8;否则将当前信号量数据结构体中的链表节点添加至所述空闲链表中,并打开中断,且结束信号量释放操作;
步骤C8.回收当前链表节点对应的信号量句柄,以及释放当前信号量数据结构体并打开中断,结束信号量释放操作。
本发明所述一种信号量管理***及信号量管理方法,采用以上技术方案与现有技术相比,具有以下技术效果:
本发明所设计信号量管理***及信号量管理方法,通过***管理信号量,可以充分利用信号量资源,不会浪费过多的***资源。当信号量资源使用较多时,OS***会继续创建信号量、并且分配使用;当创建的信号量资源过多,并且有部分信号量空闲未使用的情况下,OS***会自动回收空闲的信号量;而且由于***参与的因素信号量的使用者,可以以更加方便快捷的方式开发或使用***,因此在应用层开发时,无需再考虑创建和回收信号量的问题,也不需要再去记录信号量的句柄,只需要获取和释放时配置成对的id号即可,大大的减少了信号量使用的复杂性;如此,通过***自动分配和回收信号量,可以很好的解决信号量使用率低的问题;以及通过改变信号量使用方法,抛弃句柄结构,可以解决信号量使用复杂的问题。
附图说明
图1是本发明所设计信号量管理***的架构示意图;
图2是本发明所设计信号量管理***的模块示意图;
图3是本发明所设计基于信号量管理***应用方法中初始化空闲信号量的流程示意图;
图4是本发明所设计基于信号量管理***应用方法中获取特定空闲类型信号量的流程示意图;
图5是本发明所设计基于信号量管理***应用方法中释放已经使用过的信号量的流程示意图。
具体实施方式
下面结合说明书附图对本发明的具体实施方式作进一步详细的说明。
本发明设计了一种信号量管理***及信号量管理方法,用于实现操作***(OS)与应用层之间的信号量管理,如图1所示,包括操作***所提供的信号量模块,以及基于信号量模块的信号量管理模块。
其中如图2所示,信号量管理模块基于信号量模块,用于初始化空闲信号量、用于获取特定类型的空闲信号量、以及用于释放未被资源占用的信号量;
初始化空闲信号量,包括创建不同类型信号量、并按其所对应各指定信号量属性进行标记记录;
获取特定空闲类型信号量,包括获得特定类型的空闲信号量、并进行使用状态标记,以及应用信号量模块实现信号量的获取;
释放未被资源占用的信号量,包括在释放信号量时、检测信号量是否被其它应用所使用,以及执行信号量回收。
基于上述所设计信号量管理***,本发明进一步设计了基于此***的应用方法,所述信号量管理模块根据信号量所对应的链表节点、信号量句柄、信号量计数值、以及符号id,构成信号量所对应的数据结构体,如下所示。
通过该数据结构体记录信号量的当前使用状态,符号id用于记录当前使用信号量的资源id。
信号量管理模块,用于根据信号量所对应的链表节点、信号量句柄、信号量计数值、以及符号id,构成信号量所对应的数据结构体;并通过该数据结构体记录信号量的当前使用状态,符号id用于记录当前使用信号量的资源id;信号量管理模块结合信号量模块,基于信号量所对应的数据结构体,实现初始化空闲信号量、获取特定空闲类型信号量、以及释放未被资源占用的信号量
基于上述所设计信号量管理***,本发明进一步设计了基于信号量管理***的信号量管理方法,包括:
初始化空闲信号量的步骤:包括创建不同类型信号量、并按其所对应各指定信号量属性进行标记记录。
获取特定空闲类型信号量的步骤:包括获得特定类型的空闲信号量、并进行使用状态标记,以及应用信号量模块实现信号量的获取。
释放未被资源占用的信号量的步骤:包括在释放信号量时、检测信号量是否被其它应用所使用,以及执行信号量回收。
还包括根据信号量所对应的链表节点、信号量句柄、信号量计数值、以及符号id,构建信号量所对应的数据结构体的步骤;所述数据结构体记录信号量的当前使用状态,所述符号id用于记录当前使用信号量的资源id。
实际应用中,如图3所示,所述初始化空闲信号量的步骤包括如下步骤:
步骤A1.信号量管理模块创建、并初始化各指定信号量类型分别所对应的信号量空闲链表和信号量使用链表,然后进入步骤A2。实际应用中,各指定信号量类型设计包括互斥信号量、二值信号量、计数信号量。
步骤A2.分别针对各指定信号量类型,创建预设数量的指定信号量类型的信号量,然后进入步骤A3。
步骤A3.分别针对各指定信号量类型的各个信号量,申请信号量所对应的数据结构体,并针对其中的信号量计数值、以及符号id进行置零,然后进入步骤A4。
步骤A4.分别针对各指定信号量类型的各个信号量,更新信号量所对应数据结构体当中的信号量句柄,然后进入步骤A5。
步骤A5.分别针对各指定信号量类型的各个信号量,将信号量所对应数据结构体中的链表节点,添加至所对应指定信号量类型、对应的信号量空闲链表中,即完成空闲信号量的初始化。
如图4所示,所述获取特定空闲类型信号量的步骤包括如下步骤:
步骤B1.当收到应用层的获取信号量请求时,所述获取信号量请求中包含有待获取信号量的信号量类型和资源id,根据所述信号量类型获取与之对应的空闲链表和使用链表,然后进入步骤B2。
步骤B2.关闭中断,判断所述使用链表中各链表节点所对应的信号量数据结构体中,是否存在与所述资源id相等的符号id,是则将该链表节点所对应的信号量数据结构体作为当前信号量数据结构体,并进入步骤B8;否则进入步骤B3。
步骤B3.判断所述空闲链表是否为空,是则进入步骤B10;否则进入步骤B4。
步骤B4.获取所述空闲链表中的第一个链表节点,作为当前链表节点,并在当前信号量空闲链表中、删除该链表节点,然后进入步骤B5。
步骤B5.获取当前链表节点所对应的信号量数据结构体,作为当前信号量数据结构体,然后进入步骤B6。
步骤B6.将当前信号量数据结构体中的链表节点,添加至使用链表中,然后进入步骤B7。
步骤B7.将待获取信号量所对应资源id、填入当前信号量数据结构体中的符号id中,然后进入步骤B8。
步骤B8.针对当前信号量数据结构体中的信号量计数值进行加1更新,然后打开中断,并进入步骤B9。
步骤B9.提取当前信号量数据结构体中的信号量句柄,执行信号量的获取操作,完成特定类型的空闲信号量的获取,若获取成功,则向应用层返回获取操作成功信息;若获取不成功,则进入步骤B12。
步骤B10.创建所述信号量类型对应的数据结构体,并针对其中的信号量计数值、以及符号id进行置零,将新创建的信号量数据结构体作为当前信号量数据结构体,然后进入步骤B11。
步骤B11.将待获取信号量所对应的信号量句柄、填入当前信号量数据结构体中的信号量句柄中,然后进入步骤B6。
步骤B12.针对当前信号量数据结构体中的信号量计数值进行减1操作,向应用层返回获取操作失败信息。
如图5所示,所述释放已经使用过的信号量的步骤,包括如下步骤:
步骤C1.当接收到应用层的释放信号量请求时,所述获取信号量请求中包含有待获取信号量的信号量类型和资源id,根据所述信号量类型获取与之对应的空闲链表和使用链表,然后进入步骤C2。
步骤C2.判断所述使用链表中各链表节点所对应的信号量数据结构体中,是否存在与所述资源id相等的符号id,是则将该链表节点所对应的信号量数据结构体作为当前信号量数据结构体,并进入步骤C3;否则返回错误。
步骤C3.提取当前信号量数据结构体中的信号量句柄,执行信号量的释放操作,然后进入步骤C4。
步骤C4.针对当前信号量数据结构体中的信号量计数值进行减1更新,然后进入步骤C5。
步骤C5.判断当前信号量数据结构体中的信号量计数值是否达到初值,是则结束信号量释放操作;否则进入步骤C6。
步骤C6.关中断,从所述使用链表中删除当前信号量数据结构体所对应的链表节点,然后进入步骤C7。
步骤C7.判断所述空闲链表中链表节点的数量,是否大于初始化空闲信号量操作中、相应信号量类型所创建信号量的数量,是则进入步骤C8;否则将当前信号量数据结构体中的链表节点添加至所述空闲链表中,并打开中断,且结束信号量释放操作。
步骤C8.回收当前链表节点对应的信号量句柄,以及释放当前信号量数据结构体,并打开中断,结束信号量释放操作。
为了达到设计的完整性和安全性,在信号量管理模块中,对接口设计时,获取信号量和释放信号量两个特殊的接口,在操作链表临界资源时必须关中断以保证不会被重复访问及操作。同时信号量管理模块设计的接口不可以在中断服务函数中使用。
上述技术方案所设计信号量管理***及信号量管理方法,通过***管理信号量,可以充分利用信号量资源,不会浪费过多的***资源。当信号量资源使用较多时,OS***会继续创建信号量、并且分配使用;当创建的信号量资源过多,并且有部分信号量空闲未使用的情况下,OS***会自动回收空闲的信号量;而且由于***参与的因素信号量的使用者,可以以更加方便快捷的方式开发或使用***,因此在应用层开发时,无需再考虑创建和回收信号量的问题,也不需要再去记录信号量的句柄,只需要获取和释放时配置成对的id号即可,大大的减少了信号量使用的复杂性;如此,通过***自动分配和回收信号量,可以很好的解决信号量使用率低的问题;以及通过改变信号量使用方法,抛弃句柄结构,可以解决信号量使用复杂的问题。
上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。
Claims (7)
1.一种信号量管理***的信号量管理方法,其特征在于:基于信号量管理***,实现信号量管理方法;信号量管理***包括操作***所提供的信号量模块,以及基于信号量模块的信号量管理模块;其中,信号量管理模块基于信号量模块,用于初始化空闲信号量、用于获取特定类型的空闲信号量、以及用于释放未被资源占用的信号量;
初始化空闲信号量,包括创建不同类型信号量、并按其所对应各指定信号量属性进行标记记录;
获取特定空闲类型信号量,包括获得特定类型的空闲信号量、并进行使用状态标记,以及应用信号量模块实现信号量的获取;
释放未被资源占用的信号量,包括在释放信号量时、检测信号量是否被其它应用所使用,以及执行信号量回收;
所述信号量管理方法包括:
根据信号量所对应的链表节点、信号量句柄、信号量计数值、以及符号id,构建信号量所对应的数据结构体的步骤;所述数据结构体记录信号量的当前使用状态,所述符号id用于记录当前使用信号量的资源id;
初始化空闲信号量的步骤:包括创建不同类型信号量、并按其所对应各指定信号量属性进行标记记录,包括如下步骤A1至步骤A5:
步骤A1.信号量管理模块创建、并初始化各指定信号量类型分别所对应的信号量空闲链表和信号量使用链表,然后进入步骤A2;
步骤A2.分别针对各指定信号量类型,创建预设数量的指定信号量类型的信号量,然后进入步骤A3;
步骤A3.分别针对各指定信号量类型的各个信号量,申请信号量所对应的数据结构体,并针对其中的信号量计数值、以及符号id进行置零,然后进入步骤A4;
步骤A4.分别针对各指定信号量类型的各个信号量,更新信号量所对应数据结构体当中的信号量句柄,然后进入步骤A5;
步骤A5.分别针对各指定信号量类型的各个信号量,将信号量所对应数据结构体中的链表节点,添加至所对应指定信号量类型、对应的信号量空闲链表中,即完成空闲信号量的初始化;
获取特定空闲类型信号量的步骤:包括获得特定类型的空闲信号量、并进行使用状态标记,以及应用信号量模块实现信号量的获取;
释放未被资源占用的信号量的步骤:包括在释放信号量时、检测信号量是否被其它应用所使用,以及执行信号量回收。
2.根据权利要求1所述一种信号量管理***的信号量管理方法,其特征在于:所述各指定信号量类型包括互斥信号量、二值信号量、计数信号量。
3.根据权利要求1所述一种信号量管理***的信号量管理方法,其特征在于,所述获取特定空闲类型信号量的步骤,包括当信号量管理模块收到应用层的获取信号量请求时,执行以下步骤,其中,所述释放信号量请求中包含有待获取信号量的信号量类型和资源id;
步骤B1.根据所述信号量类型获取与之对应的空闲链表和使用链表,然后进入步骤B2;
步骤B2.关闭中断,判断所述使用链表中各链表节点所对应的信号量数据结构体中,是否存在与所述资源id相等的符号id,是则将该链表节点所对应的信号量数据结构体作为当前信号量数据结构体,并进入步骤B8;否则进入步骤B3;
步骤B3.判断所述空闲链表是否为空,是则进入步骤B10;否则进入步骤B4;
步骤B4.获取所述空闲链表中的第一个链表节点,作为当前链表节点,并在当前信号量空闲链表中删除该链表节点,然后进入步骤B5;
步骤B5.获取当前链表节点所对应的信号量数据结构体,作为当前信号量数据结构体,然后进入步骤B6;
步骤B6.将当前信号量数据结构体中的链表节点,添加至使用链表中,然后进入步骤B7;
步骤B7.将待获取信号量所对应资源id填入当前信号量数据结构体中的符号id中,然后进入步骤B8;
步骤B8.针对当前信号量数据结构体中的信号量计数值进行加1更新,然后打开中断,并进入步骤B9;
步骤B9.提取当前信号量数据结构体中的信号量句柄,执行信号量的获取操作,完成特定类型的空闲信号量的获取,结束;
步骤B10.创建所述信号量类型对应的数据结构体,并针对其中的信号量计数值、以及符号id进行置零,将新创建的信号量数据结构体作为当前信号量数据结构体,然后进入步骤B11;
步骤B11.将待获取信号量所对应的信号量句柄、填入当前信号量数据结构体中的信号量句柄中,然后进入步骤B6。
4.根据权利要求3所述一种信号量管理***的信号量管理方法,其特征在于:所述步骤B9之后还包括,若获取成功,则向应用层返回获取操作成功信息;若获取不成功,则进入步骤B12;
步骤B12.针对当前信号量数据结构体中的信号量计数值进行减1操作,向应用层返回获取操作失败信息。
5.根据权利要求1所述一种信号量管理***的信号量管理方法,其特征在于:所述释放未被资源占用的信号量的步骤,包括当信号量管理模块接收到应用层的释放信号量请求时,所述释放信号量请求中包含有待获取信号量的信号量类型和资源id,执行以下步骤:
步骤C1.根据所述信号量类型获取与之对应的空闲链表和使用链表,然后进入步骤C2;
步骤C2.判断所述使用链表中各链表节点所对应的信号量数据结构体中,是否存在与所述资源id相等的符号id,是则将该链表节点所对应的信号量数据结构体作为当前信号量数据结构体,并进入步骤C3;否则返回错误;
步骤C3.提取当前信号量数据结构体中的信号量句柄,执行信号量的释放操作,然后进入步骤C4;
步骤C4.针对当前信号量数据结构体中的信号量计数值进行减1更新,结束。
6.根据权利要求5所述一种信号量管理***的信号量管理方法,其特征在于:所述步骤C4中,针对当前信号量数据结构体中的信号量计数值进行减1更新之后,进入步骤C5;
步骤C5.判断当前信号量数据结构体中的信号量计数值是否达到初值,是则结束信号量释放操作;否则进入步骤C6;
步骤C6.关中断,从所述使用链表中删除当前信号量数据结构体所对应的链表节点,然后进入步骤C7;
步骤C7.判断所述空闲链表中链表节点的数量,是否大于初始化空闲信号量操作中相应信号量类型所创建信号量的数量,是则进入步骤C8;否则将当前信号量数据结构体中的链表节点添加至所述空闲链表中,并打开中断,且结束信号量释放操作;
步骤C8.回收当前链表节点对应的信号量句柄,以及释放当前信号量数据结构体并打开中断,结束信号量释放操作。
7.根据权利要求1所述一种信号量管理***的信号量管理方法,其特征在于:所述信号量管理模块,还用于根据信号量所对应的链表节点、信号量句柄、信号量计数值、以及符号id,构成信号量所对应的数据结构体;并通过该数据结构体记录信号量的当前使用状态,符号id用于记录当前使用信号量的资源id;
信号量管理模块结合信号量模块,基于信号量所对应的数据结构体,实现初始化空闲信号量、获取特定空闲类型信号量、以及释放未被资源占用的信号量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910778944.4A CN110569131B (zh) | 2019-08-22 | 2019-08-22 | 一种信号量管理***及信号量管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910778944.4A CN110569131B (zh) | 2019-08-22 | 2019-08-22 | 一种信号量管理***及信号量管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110569131A CN110569131A (zh) | 2019-12-13 |
CN110569131B true CN110569131B (zh) | 2022-03-15 |
Family
ID=68775812
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910778944.4A Active CN110569131B (zh) | 2019-08-22 | 2019-08-22 | 一种信号量管理***及信号量管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110569131B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102141932A (zh) * | 2010-12-14 | 2011-08-03 | 清华大学 | 大临界区保护方法 |
CN102567096A (zh) * | 2011-12-30 | 2012-07-11 | 中国科学院软件研究所 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
CN106462395A (zh) * | 2014-05-05 | 2017-02-22 | 谷歌公司 | 多线程处理器架构中的线程等待 |
CN106855845A (zh) * | 2015-12-09 | 2017-06-16 | 北京信威通信技术股份有限公司 | 堆空间的内存分配管理***及嵌入式芯片 |
CN107291558A (zh) * | 2016-03-30 | 2017-10-24 | 阿里巴巴集团控股有限公司 | 一种应用程序接口死锁监控方法和装置 |
CN108733473A (zh) * | 2018-05-11 | 2018-11-02 | 北京航天发射技术研究所 | 一种基于VxWorks的定位瞄准一体化设备任务的控制方法 |
CN109445957A (zh) * | 2018-09-26 | 2019-03-08 | 迪瑞医疗科技股份有限公司 | 一种同步和异步通信控制方法、***及装置 |
CN109508231A (zh) * | 2018-11-17 | 2019-03-22 | 中国人民解放军战略支援部队信息工程大学 | 异构多模处理器的等价体间的同步方法及装置 |
CN109542599A (zh) * | 2018-11-08 | 2019-03-29 | 南京理工大学 | 一种嵌入式操作***线程监视方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9489245B2 (en) * | 2012-10-26 | 2016-11-08 | Nvidia Corporation | Work-queue-based graphics processing unit work creation |
US10158585B2 (en) * | 2013-02-21 | 2018-12-18 | Intel Corporation | Packet processing with reduced latency |
CN104216767B (zh) * | 2014-09-18 | 2017-10-31 | 东软集团股份有限公司 | 多线程之间访问共享数据的方法及装置 |
CN106681836B (zh) * | 2016-12-28 | 2021-03-05 | 华为技术有限公司 | 一种信号量的创建方法及装置 |
-
2019
- 2019-08-22 CN CN201910778944.4A patent/CN110569131B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102141932A (zh) * | 2010-12-14 | 2011-08-03 | 清华大学 | 大临界区保护方法 |
CN102567096A (zh) * | 2011-12-30 | 2012-07-11 | 中国科学院软件研究所 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
CN106462395A (zh) * | 2014-05-05 | 2017-02-22 | 谷歌公司 | 多线程处理器架构中的线程等待 |
CN106855845A (zh) * | 2015-12-09 | 2017-06-16 | 北京信威通信技术股份有限公司 | 堆空间的内存分配管理***及嵌入式芯片 |
CN107291558A (zh) * | 2016-03-30 | 2017-10-24 | 阿里巴巴集团控股有限公司 | 一种应用程序接口死锁监控方法和装置 |
CN108733473A (zh) * | 2018-05-11 | 2018-11-02 | 北京航天发射技术研究所 | 一种基于VxWorks的定位瞄准一体化设备任务的控制方法 |
CN109445957A (zh) * | 2018-09-26 | 2019-03-08 | 迪瑞医疗科技股份有限公司 | 一种同步和异步通信控制方法、***及装置 |
CN109542599A (zh) * | 2018-11-08 | 2019-03-29 | 南京理工大学 | 一种嵌入式操作***线程监视方法 |
CN109508231A (zh) * | 2018-11-17 | 2019-03-22 | 中国人民解放军战略支援部队信息工程大学 | 异构多模处理器的等价体间的同步方法及装置 |
Non-Patent Citations (3)
Title |
---|
"Detecting Race Conditions in Parallel Programs that Use Semaphores";Klein;《Algorithmica》;20030430;第35卷(第4期);第321-345页 * |
"linux***编程之(一)信号量";linengier;《https://www.cnblogs.com/linengier/p/9399880.html》;20180801;第1-14页 * |
"面向同驻虚拟机的高效共享内存文件***";沙行勉;《计算机学报》;20190430;第42卷(第04期);第800-819页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110569131A (zh) | 2019-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20160292074A1 (en) | System and method for creating snapshots in openflame environment | |
CN105511969A (zh) | 一种跨进程的线程间进行互斥的方法 | |
EP1187017A2 (en) | File system locking | |
CN106575251B (zh) | 流数据的推测数据处理 | |
US8499298B2 (en) | Multiprocessing transaction recovery manager | |
CN103514298A (zh) | 一种实现文件锁的方法及元数据服务器 | |
CZ20011379A3 (cs) | Zařízení pro zpracování transakcí, způsob a počítačový program | |
CN112749178A (zh) | 一种保证数据一致性的方法及相关设备 | |
CN106776018B (zh) | 用于分布式***的主节点和从节点的并行处理方法和设备 | |
CN105160042A (zh) | 一种保持用户视图和数据模型内数据一致的方法和装置 | |
CN110569131B (zh) | 一种信号量管理***及信号量管理方法 | |
CN105391755A (zh) | 一种分布式***中数据处理方法、装置及*** | |
CN106775980A (zh) | 一种进程id管理方法、装置及计算机可读介质 | |
CN103559188A (zh) | 元数据管理方法及管理*** | |
US9563521B2 (en) | Data transfers between cluster instances with delayed log file flush | |
CN107391539B (zh) | 事务处理方法、服务器和存储介质 | |
CN110597499B (zh) | Unity环境下的跨平台GUI触摸事件解析方法 | |
CN115729642B (zh) | 基于状态机处理用户行为的方法、***、设备及存储介质 | |
US11137995B2 (en) | Updating firmware of a microcontroller | |
US7334015B1 (en) | Integration of legacy mainframe systems through data stream objectification into finite state machines | |
CN111465920A (zh) | 远程复制操作期间通过总线接口被写入存储控制器的数据的管理 | |
Ferreira et al. | Explicit representation of exception handling in the development of dependable component-based systems | |
KR102123616B1 (ko) | 충돌 페이지 리스트를 이용한 병렬 저널링 방법 및 그 장치 | |
CN110377298B (zh) | 一种分布式集群升级方法及分布式集群 | |
CN111752682A (zh) | 一种网络端口资源管理方法、装置及电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |