发明名称 基于Linux共享内存实现家庭网关数据通信的系统及方法
摘要 本发明公开了一种基于Linux共享内存实现家庭网关数据通信的系统及方法,涉及Linux数据通信技术领域。系统包括共享内存互斥访问单元、读共享内存数据单元、写共享内存数据单元和数据同步单元;共享内存互斥访问单元包括顺次连接的临界区互斥初始化子单元、临界区权限获取子单元和死锁重建子单元,临界区权限获取子单元与读共享内存数据单元、写共享内存数据单元连接;数据同步单元包括信号安装子单元、信号监听子单元和信号发送子单元,写共享内存数据单元与信号安装子单元连接,信号安装子单元与信号监听子单元、信号发送子单元连接。本发明能够保证家庭网关系统多进程之间业务配置数据安全,高效的进行共享访问,便于人们使用。
申请公布号 CN103731328A 申请公布日期 2014.04.16
申请号 CN201410002084.2 申请日期 2014.01.02
申请人 烽火通信科技股份有限公司 发明人 余仁春;祝振东
分类号 H04L12/28(2006.01)I;H04L12/66(2006.01)I;G06F12/02(2006.01)I 主分类号 H04L12/28(2006.01)I
代理机构 北京捷诚信通专利事务所(普通合伙) 11221 代理人 魏殿绅;庞炳良
主权项 一种基于Linux共享内存实现家庭网关数据通信的系统,其特征在于:包括共享内存互斥访问单元、读共享内存数据单元、写共享内存数据单元和数据更新同步通知单元;共享内存互斥访问单元包括顺次连接的临界区互斥初始化子单元、临界区权限获取子单元和死锁重建子单元,死锁重建子单元与临界区互斥初始化子单元连接,临界区权限获取子单元分别与读共享内存数据单元、写共享内存数据单元连接;数据更新同步通知单元包括信号安装子单元、信号监听子单元和信号发送子单元,写共享内存数据单元与信号安装子单元连接,信号安装子单元分别与信号监听子单元、信号发送子单元连接;临界区互斥初始化子单元,用于:预设业务数据,获取与业务数据对应的互斥信号量名称,发送初始化信号;接收初始化信号后,调用Linux系统函数;根据互斥信号量名称,通过Linux系统函数初始化互斥信号量,生成Linux系统函数的返回值;判定Linux系统函数的返回值为0,Linux内核将互斥信号量资源储存至信号量存储区,向临界区权限获取子单元发送权限获取信号;临界区权限获取子单元,用于:接收临界区互斥初始化子单元发送的权限获取信号后,预设获取互斥信号量的等待时间,预设获取互斥信号量的访问次数;预设Linux内核信号量资源访问函数调用失败的错误码,错误码内包括存在调用超时ETIMEDOUT信息;在信号量存储区中,通过Linux内核信号量资源访问函数,获取互斥信号量资源,生成Linux内核信号量资源访问函数的返回值;判断Linux内核信号量资源访问函数的返回值是否为0,若是,调用Linux系统函数,操作互斥信号量资源锁定共享内存数据存储临界区,生成Linux系统函数调用返回值;判定Linux系统函数调用返回值为0,通过共享内存数据读写单元接口,对共享内存数据存储临界区进行业务数据操作;释放共享内存数据存储临界区的操作权限;否则判定错误码是否为ETIMEDOUT信息,判断获取互斥信号量资源的获取次数是否大于访问次数,若是,向死锁重建子单元发送死锁重建信号,否则将访问次数加1,重新获取信号量资源;死锁重建子单元,用于:接收临界区权限获取子单元发送的死锁重建子单元发送死锁重建信号后,删除共享内存数据存储临界区原有的控制信号量,生成删除结果;读共享内存数据单元,用于:获取共享内存数据存储临界区的访问权限,生成获取共享临界区权限的返回值;判断获取共享临界区权限的返回值是否为0,若是,从共享内存数据存储临界区中读取所需的业务数据,释放共享内存数据存储临界区的操作权限;否则获取并记录共享内存数据存储临界区的访问权限获取失败的异常信息;写共享内存数据单元,用于:获取共享内存数据存储临界区的访问权限,生成获取共享临界区权限的返回值;判断获取共享临界区权限的返回值是否为0,若是,在共享内存数据存储临界区中写入配置业务数据,释放共享内存数据存储临界区的操作权限,通过调用信号发送单元提供的函数发送信号通知业务数据对应的业务功能模块,否则获取并记录共享内存数据存储临界区的访问权限获取失败的异常信息;信号安装子单元,用于:调用Linux系统函数初始化Linux信号,安装Linux信号接收处理程序,生成Linux系统函数的返回值;判断Linux系统函数的返回值是否为0,若是,定义Linux信号接收处理程序安装成功,否则获取并记录Linux信号接收处理程序安装失败的信息;信号监听子单元,用于:预设Linux信号接收的监听时间,预设Linux信号监听的超时时间,创建Linux信号监听线程,生成Linux系统函数的返回值;判断Linux系统函数的返回值是否为0,若不是,获取并记录Linux信号监听线程创建失败信息,否则在监听时间内循环监听Linux信号;判断信号到达全局标识是否为非0,若是,将信号到达全局标识加1,否则在超时时间内,判断信号到达全局标识是否为非0,若不是,继续在监听时间内循环监听Linux信号,否则从内存数据存储临界区内读取业务数据、并发送至相应的业务模块,将信号到达全局标识置为0,继续在监听时间内循环监听Linux信号;信号发送子单元,用于:收到外部调用接口发送的Linux系统命令后,根据与Linux系统命令对应的目标进程名称获取信号发送目标进程号,生成Linux系统函数的返回值;判定Linux系统函数的返回值为0,向目标进程发送Linux信号。
地址 430074 湖北省武汉市东湖开发区关东科技园东信路5号