本发明专利技术公开了一种访问共享内存异常的系统及方法,访问共享内存异常的系统,包括:接收单元用以接收目标进程的访问请求;检测单元连接接收单元,用以检测信号量是否空闲;获取单元连接检测单元,当信号量空闲时,获取单元获取信号量,以使目标进程访问共享内存单元;判断单元连接检测单元,用以判断信号量的标志位是否为第一预设状态;处理单元分别连接判断单元和检测单元,提供一第一预设条件,当信号量的标志位为第一预设状态时,处理单元用以将第一预设状态转换为第二预设状态,并在第一预设条件下控制检测单元检测信号量是否空闲;调度控制单元连接判断单元,用以在信号量的标志位为第二预设状态时,释放信号量,以停止当前访问的进程。
【技术实现步骤摘要】
本专利技术涉及通信领域,尤其涉及一种应用于嵌入式系统上的访问共享内存异常的系统及方法。
技术介绍
共享内存是进程间通信的一种方式,允许两个独立的进程访问同一个逻辑内存,以实现进程之间数据的共享和传递。但共享内存并未提供同步机制,也就是说,在第一个进程结束对共享内存的写操作之前,没有自动机制可以阻止第二个进程开始对共享内存进行读取。目前在Linux系统中最常见的方式是采用信号量的“取锁”与“解锁”的机制来同步对共享内存的访问,以实现对共享内存的数据读取。信号量的“取锁”与“解锁”的机制可也称为检测机制,即通过某个临界值来判断锁是否异常,进程是否处于异常状态。这种临界值一般为经验值,没有经过严格推算和详细验证。由于进程对共享内存的访问是非常频繁的,因此需要频繁的检测信号量的持锁时间,通常检测机制的临界值普遍为经验值不能准确的判断锁是否正常,容易影响访问共享内存的工作效率。
技术实现思路
针对现有的信号量的检测机制存在的上述问题,现提供一种旨在实现可在一定的等待时间内让异常进程自行恢复,提高访问效率的访问共享内存异常的系统及方法。具体技术方案如下:—种访问共享内存异常的系统,应用于目标进程访问共享内存单元,提供一信号量以标识所述共享内存单元的当前状态,包括:—接收单元,用以接收所述目标进程的访问请求;—检测单元,连接所述接收单元,用以检测所述信号量是否空闲;—获取单元,连接所述检测单元,当所述信号量空闲时,所述获取单元获取所述信号量,以使所述目标进程访问所述共享内存单元;—判断单元,连接所述检测单元,用以判断所述信号量的标志位是否为第一预设状态;一处理单元,分别连接所述判断单元和所述检测单元,提供一第一预设条件,当所述信号量的标志位为第一预设状态时,所述处理单元用以将所述第一预设状态转换为第二预设状态,并在所述第一预设条件下控制所述检测单元检测所述信号量是否空闲;—调度控制单元,连接所述判断单元,用以在所述信号量的标志位为所述第二预设状态时,释放所述信号量,以停止当前访问的进程。优选的,所述处理单元提供一第二预设条件,用以在所述第二预设条件下控制所述目标进程访问所述共享内存单元。优选的,所述处理单元包括:—转换模块,用以将所述信号量的标志位从所述第一预设状态转换为状态为第二预设状态;—计时模块,连接所述转换模块,用以记录所述信号量的标志位处于第二预设状态的持续时间;—比较模块,连接所述计时模块,提供一阈值时间,用以比较所述持续时间是否大于或等于所述阈值时间;—处理模块,连接所述比较模块,当所述持续时间大于或等于所述阈值时间时,即为所述第一预设条件,所述处理模块用以在所述第一预设条件下输出控制指令,以控制所述检测单元检测所述信号量是否空闲。优选的,当所述持续时间小于所述阈值时间时,即为所述第二预设条件,所述处理模块用以在所述第二预设条件下控制所述目标进程访问所述共享内存单元。优选的,所述目标进程和所述当前访问的进程为同等优先级调度的进程。优选的,所述第一预设状态为等待状态。 优选的,所述第二预设状态为触发状态。—种访问共享内存异常的方法,应用于目标进程访问共享内存单元,提供一信号量以标识所述共享内存单元的当前状态,令所述信号量的标志位为等待状态,包括下述步骤:S1.接收所述目标进程的访问请求;S2.检测所述信号量是否空闲,若是,执行所述步骤S3 ;若否,执行所述步骤S4 ;S3.获取所述信号量,以使所述目标进程访问所述共享内存单元,结束;S4.判断所述信号量的标志位是否为所述等待状态,若是,执行步骤S5 ;若否,则所述信号量的标志位为触发状态,执行步骤S6 ;S5.将所述等待状态转换为所述触发状态,并在一第一预设条件下返回执行所述步骤S2 ;S6.释放所述信号量,以停止当前访问的进程。优选的,在所述步骤S5中,还包括在所述第二预设条件下控制所述目标进程访问所述共享内存单元。优选的,所述步骤S5的包括:S51.将所述信号量的标志位从所述等待状态转换为所述触发状态;S52.记录所述信号量的标志位处于所述触发状态的持续时间;S53.比较所述持续时间是否小于所述阈值时间,当所述持续时间大于或等于所述阈值时间时,即为所述第一预设条件,返回执行所述步骤S2 ;当所述持续时间小于所述阈值时间时,即为所述第二预设条件,执行步骤S54 ;S54.在所述第二预设条件下控制所述目标进程访问所述共享内存单元。优选的,所述目标进程和所述当前访问的进程为同等优先级调度的进程。上述技术方案的有益效果:在本技术方案中,在访问共享内存异常的系统中通过处理单元可在一定的等待时间内让异常进程自行恢复,而不是强制通过预设的时间值来触发处理流程,提高了访问效率,通过调度控制单元可强制停止异常进程,以防止异常进程长时间占用共享内存影响其他进程访问。访问共享内存异常的方法可在异常进程状态下,为进程提供自行恢复的时间,若进程可以自行恢复,就可避免强制停止异常进程的情形,提高了访问的效率。【附图说明】图1为本专利技术所述的访问共享内存异常的系统的一种实施例的模块图;图2为本专利技术所述的访问共享内存异常的方法的一种实施例的方法流程图;图3为本专利技术所述的访问共享内存异常的方法的另一种实施例的方法流程图。【具体实施方式】下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本专利技术保护的范围。需要说明的是,在不冲突的情况下,本专利技术中的实施例及实施例中的特征可以相互组合。下面结合附图和具体实施例对本专利技术作进一步说明,但不作为本专利技术的限定。如图1所示,一种访问共享内存异常的系统,应用于目标进程访问共享内存单元,提供一信号量以标识共享内存单元的当前状态,包括:—接收单元2,用以接收目标进程的访问请求;—检测单元3,连接接收单元2,用以检测信号量是否空闲;—获取单元1,连接检测单元3,当信号量空闲时,获取单元I获取信号量,以使目标进程访问共享内存单元;—判断单元6,连接检测单元3,用以判断信号量的标志位是否为第一预设状态;—处理单元4,分别连接判断单元6和检测单元3,提供一第一预设条件,当信号量的标志位为第一预设状态时,处理单元4用以将第一预设状态转换为第二预设状态,并在第一预设条件下控制检测单元3检测信号量是否空闲;一调度控制单元5,连接判断单元6,用以在信号量的标志位为第二预设状态时,释放信号量,以停止当前访问的进程。进一步地,第一预设状态为等待状态,第二预设状态为触发状态。在进程在获取信号量之前可将信号量的标志位设为等待状态。在本实施例中,在第一次判断信号量的标志位时,若是等待状态可通过处理单元4实现在一定的等待时间内让异常进程自行恢复,而不是强制通过预设的时间值来触发处理流程,提高了访问效率,若当判断单元6判断信号量的标志位是触发状态时,可通过调度控制单元5强制停止异常进程,以防止异常进程长时间占用共享内存影响其他进程访问。实现了在一定的等待时间内异常进程没有自行恢复时,通过调度控制单元5强制停止异常进程的目的。在优选的实施例中,处理单元4提供一第二预设条件,用以在本文档来自技高网...
【技术保护点】
一种访问共享内存异常的系统,应用于目标进程访问共享内存单元,提供一信号量以标识所述共享内存单元的当前状态,其特征在于,包括:一接收单元,用以接收所述目标进程的访问请求;一检测单元,连接所述接收单元,用以检测所述信号量是否空闲;一获取单元,连接所述检测单元,当所述信号量空闲时,所述获取单元获取所述信号量,以使所述目标进程访问所述共享内存单元;一判断单元,连接所述检测单元,用以判断所述信号量的标志位是否为第一预设状态;一处理单元,分别连接所述判断单元和所述检测单元,提供一第一预设条件,当所述信号量的标志位为第一预设状态时,所述处理单元用以将所述第一预设状态转换为第二预设状态,并在所述第一预设条件下控制所述检测单元检测所述信号量是否空闲;一调度控制单元,连接所述判断单元,用以在所述信号量的标志位为所述第二预设状态时,释放所述信号量,以停止当前访问的进程。
【技术特征摘要】
【专利技术属性】
技术研发人员:凌灵,
申请(专利权)人:上海斐讯数据通信技术有限公司,
类型:发明
国别省市:上海;31
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。