专利名称: | 一种多进程同步控制方法 | ||
专利名称(英文): | A multi-process synchronous control method | ||
专利号: | CN201610113440.7 | 申请时间: | 20160229 |
公开号: | CN105760216A | 公开时间: | 20160713 |
申请人: | 惠州市德赛西威汽车电子股份有限公司 | ||
申请地址: | 516006 广东省惠州市仲恺高新区和畅五路西103号 | ||
发明人: | 郭石玉 | ||
分类号: | G06F9/46; G06F9/50 | 主分类号: | G06F9/46 |
代理机构: | 广州三环专利代理有限公司 44202 | 代理人: | 温旭 |
摘要: | 本发明公开了一种多进程同步控制方法,包括:构建共享资源对应的共享变量,并对所述共享变量赋初值;当一进程需要访问共享资源,根据所述共享变量判断所述共享资源是否可以被立即访问,并对所述共享变量执行减一操作;若所述共享资源可以被立即访问,则由进程访问所述共享资源,否则,调用操作系统同步控制接口,使进程进入等待队列;当一进程需要结束对共享资源的访问,根据所述共享变量判断所述共享资源是否有其它等待访问的进程,并对所述共享变量执行加一操作;若不存在其它等待访问的进程,则直接释放所述共享资源,否则,调用操作系统同步控制接口,唤醒等待队列中最优先的进程访问所述共享资源。本发明技术方案,能够避免CPU性能浪费。 | ||
摘要(英文): | The present invention discloses a multi-process synchronization control method, including : constructing the shared resource corresponding to the shared variable, and that the initial value of the shared variable; when a process requires access to a shared resource, according to the shared variable judging whether the whether a shared resource can be immediate access to, and to the implementation of the shared variable a operation; if the shared resource is immediate access to, by the process to access the shared resource, otherwise, call operating system synchronization control interface, enter the waiting queue of the process; when a process requires the end of the access to shared resources, according to the shared variable judging whether said shared resource to whether there are other waiting for the process, and the implementation of the shared variable to plus one operation; if there is no other waiting for the process of the visit, the direct release of the shared resource, otherwise, call operating system synchronization control interface, wake-up waiting for the process of the highest priority in the queue to access the shared resources. The technical scheme of the invention, CPU performance waste can be avoided. |
1.一种多进程同步控制方法,其特征在于,包括: 构建共享资源对应的共享变量,并对所述共享变量赋初值;所述共享变量 为非负数时,标识所述共享资源当前可以被对应数目的进程访问,所述共享变 量为负数时,标识当前正在等待访问所述共享资源的进程数目; 当一进程需要访问共享资源,根据所述共享变量判断所述共享资源是否可 以被立即访问,并对所述共享变量执行减一操作;若所述共享资源可以被立即 访问,则由进程访问所述共享资源,否则,调用操作系统同步控制接口,使进 程进入等待队列; 当一进程需要结束对共享资源的访问,根据所述共享变量判断所述共享资 源是否有其它等待访问的进程,并对所述共享变量执行加一操作;若不存在其 它等待访问的进程,则直接释放所述共享资源,否则,调用操作系统同步控制 接口,唤醒等待队列中最优先的进程访问所述共享资源。
2.根据权利要求1所述的方法,其特征在于,所述减一操作和所述加一操 作均为原子操作。
3.根据权利要求1所述的方法,其特征在于,在进程访问所述共享资源之 后,所述方法还包括进程之间进行上下文切换的过程。
4.根据权利要求1所述的方法,其特征在于,所述调用操作系统同步控制 接口,使进程进入等待队列的步骤,包括: 调用wait函数,使进程进入等待队列。
5.根据权利要求1所述的方法,其特征在于,所述调用操作系统同步控制 接口,唤醒等待队列中最优先的进程访问所述共享资源的包括: 调用wake-up函数,使等待队列中最优先的进程访问所述共享资源。
6.根据权利要求1所述的方法,其特征在于,所述共享变量的初值为1。
1.一种多进程同步控制方法,其特征在于,包括: 构建共享资源对应的共享变量,并对所述共享变量赋初值;所述共享变量 为非负数时,标识所述共享资源当前可以被对应数目的进程访问,所述共享变 量为负数时,标识当前正在等待访问所述共享资源的进程数目; 当一进程需要访问共享资源,根据所述共享变量判断所述共享资源是否可 以被立即访问,并对所述共享变量执行减一操作;若所述共享资源可以被立即 访问,则由进程访问所述共享资源,否则,调用操作系统同步控制接口,使进 程进入等待队列; 当一进程需要结束对共享资源的访问,根据所述共享变量判断所述共享资 源是否有其它等待访问的进程,并对所述共享变量执行加一操作;若不存在其 它等待访问的进程,则直接释放所述共享资源,否则,调用操作系统同步控制 接口,唤醒等待队列中最优先的进程访问所述共享资源。
2.根据权利要求1所述的方法,其特征在于,所述减一操作和所述加一操 作均为原子操作。
3.根据权利要求1所述的方法,其特征在于,在进程访问所述共享资源之 后,所述方法还包括进程之间进行上下文切换的过程。
4.根据权利要求1所述的方法,其特征在于,所述调用操作系统同步控制 接口,使进程进入等待队列的步骤,包括: 调用wait函数,使进程进入等待队列。
5.根据权利要求1所述的方法,其特征在于,所述调用操作系统同步控制 接口,唤醒等待队列中最优先的进程访问所述共享资源的包括: 调用wake-up函数,使等待队列中最优先的进程访问所述共享资源。
6.根据权利要求1所述的方法,其特征在于,所述共享变量的初值为1。
翻译:技术领域
本发明涉及多进程嵌入式系统技术领域,特别是涉及一种多进程同步控制 方法。
背景技术
当前,在车载嵌入式系统,如汽车音响导航设备中,已采用多进程设计来 增强处理的实时性,从而提高系统的工作效率。在多程程系统中,被加载到内 存中执行的程序实例,称之为进程(process)。一个进程从建立到终止,全由操 作系统的核心掌握。操作系统的内部有一个进程队列,针对进程的状态和需求, 根据不同的算法安排执行的顺序。每个进程会分配一小段CPU时间,该时间结 束后CPU马上切换到其它进程执行,这种在各种进程之间切换执行,在计算机 术语上称为上下文切换(contextswitch)。
在多进程嵌入式系统中,多进程之间竞争访问共享资源(各个进程都可以 使用的资源,例如存储于内存单元中的某一数据)有时会造成数据不一致,从 而导致系统崩溃,因此在多进程系统中都需要实现进程的同步控制,防止各个 进程对共享资源的不安全访问。
传统技术中,多进程系统采用信号量机制来同步控制各个线程对共享资源 的访问。进程在访问共享资源时,都需要通过操作系统接口来调用信号量机制 相关的函数,例如当有一个进程试图获得一个已经被持有的信号量时,基于信 号量机制,操作系统会将该进城放入等待队列(例如通过调用wait函数),然后 让其睡眠,而当持有信号量的进程释放共享资源后,将等待队列中的进程唤醒 (如wake-up函数),从而使该进程能够访问共享资源。传统技术中,同步控制 都需要调用操作系统接口来完成,比较消耗CPU资源,然后实际中各个进程对 共享资源访问的频率和占用时间都不尽相同,频繁的调用来申请信号量和释放 信号量,会导致系统的性能浪费,降低效率。
发明内容
基于此,有必要提供一种多进程同步控制方法,针对多进程系统中不同进 程对共享资源访问和占用时间不同的情况,能够避免频繁地调用信号量机制的 相关函数,避免CPU性能浪费。
一种多进程同步控制方法,包括:
构建共享资源对应的共享变量,并对所述共享变量赋初值;所述共享变量 为非负数时,标识所述共享资源当前可以被对应数目的进程访问,所述共享变 量为负数时,标识当前正在等待访问所述共享资源的进程数目;
当一进程需要访问共享资源,根据所述共享变量判断所述共享资源是否可 以被立即访问,并对所述共享变量执行减一操作;若所述共享资源可以被立即 访问,则由进程访问所述共享资源,否则,调用操作系统同步控制接口,使进 程进入等待队列;
当一进程需要结束对共享资源的访问,根据所述共享变量判断所述共享资 源是否有其它等待访问的进程,并对所述共享变量执行加一操作;若不存在其 它等待访问的进程,则直接释放所述共享资源,否则,调用操作系统同步控制 接口,唤醒等待队列中最优先的进程访问所述共享资源。
在一个实施例中,所述减一操作和所述加一操作均为原子操作。
在一个实施例中,在进程访问所述共享资源之后,所述方法还包括进程之 间进行上下文切换的过程。
在一个实施例中,所述调用操作系统同步控制接口,使进程进入等待队列 的步骤,包括:
调用wait函数,使进程进入等待队列。
在一个实施例中,所述调用操作系统同步控制接口,唤醒等待队列中最优 先的进程访问所述共享资源的包括:
调用wake-up函数,使等待队列中最优先的进程访问所述共享资源。
在一个实施例中,所述共享变量的初值为1。
上述多进程同步控制方法,针对不同进程对共享资源访问和占用时间不同 的情况下来利用共享变量来标识共享资源的状态,避免频繁地调用操作系统接 口函数,减少进程进入传统的信号量机制处理的几率,从而避免CPU资源的浪 费。
附图说明
图1为一个实施例中的多进程同步控制方法的流程示意图;
图2为又一个实施例中的多进程同步控制方法的流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实 施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅 仅用以解释本发明,并不用于限定本发明。
参见图1,在一个实施例中,提供了一种多进程同步控制方法,该方法包括:
一种多进程同步控制方法,包括:
步骤101,构建共享资源对应的共享变量,并对共享变量赋初值。
具体的,共享变量为非负数时,标识共享资源当前可以被对应数目的进程 访问,共享变量为负数时,标识当前正在等待访问所述共享资源的进程数目。 共享变量的初值一般赋值为正整数,例如为1,标识该共享资源在某个时刻最多 被一个进程所访问。
步骤102,当一进程需要访问共享资源,根据共享变量判断共享资源是否可 以被立即访问,并对共享变量执行减一操作;若共享资源可以被立即访问,则 由进程访问所述共享资源,否则,调用操作系统同步控制接口,使进程进入等 待队列。
步骤103,当一进程需要结束对共享资源的访问,根据共享变量判断共享资 源是否有其它等待访问的进程,并对共享变量执行加一操作;若不存在其它等 待访问的进程,则直接释放共享资源,否则,调用操作系统同步控制接口,唤 醒等待队列中最优先的进程访问所述共享资源。
具体的,上述减一操作和所述加一操作均为原子操作,即具有不可分割性, 在执行减一操作或加一操作时,不会发生进程间的上下文切换。而在某个进程 访问共享资源后,在进程之间可以有进行上下文切换的过程。上述调用操作系 统同步控制接口,可以参照传统技术,例如包括调用wait函数,使进程进入等 待队列,或者调用wake-up函数,使等待队列中最优先的进程访问所述共享资 源。调用操作系统同步控制接口,涉及到信号量的申请和释放,需要耗费一定 的CPU计算资源。
上述实施例中的多进程同步控制方法,针对不同进程对共享资源访问和占 用时间不同的情况下来利用共享变量来标识共享资源的状态,避免频繁地调用 操作系统接口函数,减少进程进入传统的信号量机制处理的几率,从而避免CPU 资源的浪费。
参见图2,提供了一个多进程同步控制方法的具体应用场景。本例中首先初 始化共享资源对应的共享变量app_fast_semaphore,并赋值为1。本例中涉及到 三个进程A、B、C,A的频率为1S,B为4ms,C为随机性访问。
本例中以A先访问共享资源为例,首先判断共享资源是否可以被立即访问, 根据共享变量初值为1,标识该共享资源可以被立即访问,则A进程执行原子 性的减一操作atomic_dec_test(app_fast_semaphore)后,即将共享变量置为0,执 行对共享资源的访问。
假设A在访问共享资源的过程中,没有发生进程间的切换,则A在访问完 共享资源后,根据共享变量为0,判定出当前没有等待访问共享资源的其它进程, 则对共享变量执行原子性的加一操作atomic_inc_test(app_fast_semaphore),即将 共享变量置为1后,直接释放共享资源。由此可见,在这一场景下,A进程都 没有调用操作系统同步控制接口的情况,从而避免了CPU资源的浪费。
在另一种情况下,假设A在访问共享资源的过程中,发生了进程切换,例 如CPU切换执行进程B或C进程。这里仅以B为例,若B需要访问共享资源, B根据共享变量当前值为0,判定共享资源无法立即被访问,并对共享变量执行 原子性的减一操作(值置为-1),调用操作系统同步控制接口,具体调用wait函 数使得B进程进入等待队列。
B进入等待队列后,会发生进程间切换,例如,若切换回A进程,A在访 问共享资源之后,根据共享变量值为-1,判定等待队列中有一等待访问共享资源 的进程,则对共享变量执行加一操作(置为0),并调用wake-up函数使得B进 程访问共享资源。又例如,若切换为C进程,则依次类推,C进程会将共享变 量置为-2,并进入等待队列……直至切换为A进程,在A访问完成后,根据等 待队列中的优先顺序,唤醒等待中的进程。
由此可见,采用上述多进程同步控制方法,系统的多进程在执行中并不会 总是调用操作系统同步控制接口,避免了CPU资源的浪费。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细, 但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域 的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和 改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附 权利要求为准。