一种Linux系统下的PISA管理器实现方式的制作方法

文档序号:29627716发布日期:2022-04-13 14:56阅读:732来源:国知局
一种Linux系统下的PISA管理器实现方式的制作方法
一种linux系统下的pisa管理器实现方式
技术领域
1.本发明属于金融自助设备技术领域,具体涉及一种linux系统下的pisa管理器实现方式。


背景技术:

2.目前,绝大部分金融终端设备,如自助类设备等,均遵循基于windows操作系统的cen/xfs(the european committee for standardization/extensions for financial services)规范,cen/xfs规范为欧洲标准化委员会制定的金融服务扩展规范,与windows系统密切相关,具有较强的操作系统绑定特性,无法直接迁移至其他系统。
3.随着linux系统逐渐应用于越来越多的领域,现已出现了以linux系统为基础的xfs实现方式,实现大多的都采用直接调用的方式,但这种方式导致设备不能支持多进程访问,而且设备服务跟应用有强的耦合性。因此有必要开发一种linux系统下的pisa管理器实现方式,用于解决linux系统下开发设备服务所存在的诸多困难。


技术实现要素:

4.本发明提供一种linux系统下的pisa管理器实现方式,可以支持多进程访问金融自助设备的设备服务。
5.为实现上述技术目的,本发明采用如下技术方案:
6.一种linux系统下的pisa管理器实现方式,所述pisa管理器用于管理api层跨进程调用spi层,包括服务句柄管理、服务请求id管理、内存管理、同步调用实现和异步调用实现管理;每个api层调用spi层,均生成系统唯一的服务句柄;api每次调用spi层,均生成系统唯一的服务请求id;通过文件映射共享内存和跨进程锁,保存pisa管理器生成的服务句柄和服务请求id、api层的调用进程数和调用进程句柄。
7.进一步地,生成系统唯一的服务句柄和系统唯一的服务请求id的实现方式为:
8.s01:当api层调用spi层时,api层初始化pisa管理器,pisa管理器映射到共享内存文件中;如果共享内存的文件不存在,执行步骤s02,如果共享内存的文件存在,执行步骤s03;
9.s02:生成共享内存文件,文件中包括共享内存跨进程锁、服务句柄、服务请求id、调用进程数以及调用进程列表,重置调用管理器的进程数为零,并跳转执行步骤s05;
10.s03:读取共享内存文件中的共享内存跨进程锁、服务句柄、服务请求id、调用进程数以及调用进程列表,执行步骤s04;
11.s04:轮询共享内存文件中的调用进程列表,判断列表中的进程编号是否有效,如果进程编号无效,则调用进程数减1;执行步骤s05;
12.s05:判断调用进程数是否为零,如果为零,则重置服务句柄以及服务请求id;执行步骤s06;
13.s06:共享内存的文件中保存的调用进程数加1,并在调用进程列表中增加节点。
14.进一步地,pisa管理器对服务句柄和服务请求id的管理方法为:
15.s11:当api层调用spi层时,pisa管理器锁定共享内存跨进程锁;
16.s12:若api层调用连接建立指令,则执行步骤s13,否则执行步骤s14;
17.s13:共享内存文件中的服务句柄数增加1;
18.s14:共享内存文件中的服务请求id增加1;
19.s15:释放共享内存跨进程锁。
20.进一步地,所述内存管理通过共享内存的方式,即api层与spi层文件共享同时映射到同一个内存地址,完成跨进程的api层与spi层通讯;
21.其中,跨进程内存操作包括分配、增加、释放三种操作,内存的分配和释放需要跨进程锁互斥内存的分配和释放,并通过链表管理内存分配,采用列表的方式把增加的内存链接在链表中,释放空间直接释放链表上的所有节点;
22.内存管理的节点包括:跨进程的锁资源、内存列表的数量、共享内存链表数组、共享内存的地址指针首地址,其中的共享内存链表数组包括:暂用该地址的进程编号、共享内存是否使用、指向共享内存的地址指针、共享内存的大小;
23.链表节点包括:本节点内存的长度、内存的初始化方式、指向下一个节点指针和共享内存数组。
24.进一步地,进程加载共享内存进行如下操作,完成共享内存的初始化:
25.s21:读取指定地址的共享内存的配置文件,获取共享内存的映射地址、共享内存的共享大小、共享内存文件位置;
26.s22:判断该共享内存文件是否存在,若不存在则执行步骤s23,若存在则执行步骤s24;
27.s23:创建共享文件,并设置文件大小为共享管理的节点加上共享内存块的大小,初始化跨进程锁,执行步骤s25;
28.s24:打开共享文件,设置共享内存的大小;
29.s25:锁定管理的节点中的跨进程锁;
30.s26:若管理的节点的共享内存的指针地址不等于共享内存的地址空间,则执行步骤s27,否则执行步骤s28;
31.s27:初始化管理的节点,设置管理的节点中的链表数为1,指针地址指向共享内存地址,并初始化共享内存数组的第一个元素;
32.s28:删除管理节点内存数组中无效进程暂用的元素,如果该节点状态为已暂用,并且进程编号为无效进程,则执行删除节点过程;
33.s29:释放管理的节点中的跨进程锁。
34.进一步地,进程分配共享内存和增加共享内存的执行步骤包括:
35.s31:若过程为增加共享内存,则执行步骤s32;若过程为分配共享内存,则执行步骤s33;
36.s32:通过父节点地址找到链表中节点指针地址,通过链表找到尾节点;
37.s33:申请共享内存地址块为申请内存加上链表节点的空间大小;
38.s34:锁定管理的节点中的跨进程锁;
39.s35:内存管理节点通过列表数,从共享内存链表数组中找到一块满足申请空间大
小节点;如果链表数大于申请空间的大小,则执行步骤s36,否则执行步骤s37。
40.s36:拆分两个节点,内存管理节点链表数加1,原始位置记录申请的空间链表,记录分配空间的进程编号、空间大小、空间首地址,设置已使用标识;共享内存链表数组链表数节点位置增加一个新节点,设置空间未使用和空间首地址,返回空间地址;执行步骤s38;
41.s37:设置进程编号以及已使用标识,返回空间地址;
42.s38:释放管理的节点中的跨进程锁;
43.s39:空间地址初始化;设置空间大小和初始化标志;初始化内存数组;如果是增加共享内存,尾节点链表指向该节点,返回内存数组地址的首地址为分配空间的地址和结果。
44.进一步地,释放共享内存的执行步骤包括:
45.s41:通过释放内存地址找到链表中节点指针地址;
46.s42:判断链表的内存分配方式是否合法,如果不合规则返回失败,否则继续;
47.s43:锁定管理的节点中的跨进程锁;
48.s44:内存管理节点通过列表数找到链表地址空间;如果未找到,跳转执行步骤s49;
49.s45:设置数组节点空间未使用,并把数组的最后一个节点移动到该节点位置,内存管理节点链表数减1;
50.s46:轮询整个数组节点,判断是否可以跟一个未使用的块合并,如果能合并执行步骤s47,否则执行s48;
51.s47:把首地址联合,共享内存大小合并;执行s49;
52.s48:数组节点最后一个节点增加这个未使用的块;执行s49;
53.s49:释放管理的节点中的跨进程锁。
54.进一步地,异步调用实现方式为:api层通过服务句柄、逻辑名生成一个消息队列名,api层把这个消息队列名直接发送给spi层;spi完成指令调度后,会根据消息回调消息队列名,发送完成消息;api层获取到完成消息后,直接处理消息,把消息结果给上层应用。
55.同步调用实现方式为:api层通过pisa管理器调用同步动作,pisa管理器内部生成一个消息队列名,pisa管理器把消息队列名发送给spi层,并等待消息队列返回的消息;spi层执行指定调度后,把消息回调给消息队列名,发送完成消息;pisa管理器接收到完成消息后,直接发消息结果返回给api层。
56.有益效果
57.本发明具有以下优点:
58.1、本发明提供了pisa管理器的内部实现,方便后续开发者完成linux下管理器的开发。
59.2、本发明提供的跨进程共享内存实现方式,为后续在跨进程共享内存实现提供一种实现思路。
60.3、本发明提供的跨进程消息通讯的实现方式,为其他跨进程通讯提供了一种思路。
附图说明
61.图1是本技术实施例中所述的基础设施体系架构pisa的结构模型图;
62.图2是本技术实施例进程加载共享内存的流程图。
具体实施方式
63.下面对本发明的实施例作详细说明,本实施例以本发明的技术方案为依据开展,给出了详细的实施方式和具体的操作过程,对本发明的技术方案作进一步解释说明。
64.本实施例提供一种linux系统下的pisa管理器实现方式,应用于智能机具标准架构协议(pisa,protocol for intelligence terminal standards architecture),一种智能终端(包括金融终端)的标准体系架构,主要包括pisa管理器、配置信息和设备服务程序,结构模型见图1。
65.其中的pisa管理器用于管理api层跨进程调用spi层,因此pisa管理器实现方式主要包括服务句柄管理、服务请求id管理、内存管理、同步调用实现和异步调用实现管理。
66.pisa管理器需要管理api层调用的spi层请求服务句柄和服务请求编号(即服务请求id),服务句柄和服务请求id均需要本系统是唯一的,因此:每个api层调用spi层,均生成系统唯一的服务句柄;api每次调用spi层,均生成系统唯一的服务请求id;通过文件映射共享内存和跨进程锁,保存pisa管理器生成的服务句柄和服务请求id、api层的调用进程数和调用进程句柄。
67.生成系统唯一的服务句柄和系统唯一的服务请求id的实现方式为:
68.s01:当api层调用spi层时,api层初始化pisa管理器,pisa管理器映射到共享内存文件中;如果共享内存的文件不存在,执行步骤s02,如果共享内存的文件存在,执行步骤s03;
69.s02:生成共享内存文件,文件中包括共享内存跨进程锁、服务句柄、服务请求id、调用进程数以及调用进程列表,重置调用管理器的进程数为零,并跳转执行步骤s05;
70.s03:读取共享内存文件中的共享内存跨进程锁、服务句柄、服务请求id、调用进程数以及调用进程列表,执行步骤s04;
71.s04:轮询共享内存文件中的调用进程列表,判断列表中的进程编号是否有效,如果进程编号无效,则调用进程数减1;执行步骤s05;
72.s05:判断调用进程数是否为零,如果为零,则重置服务句柄以及服务请求id;执行步骤s06;
73.s06:共享内存的文件中保存的调用进程数加1,并在调用进程列表中增加节点。
74.以上步骤实现服务句柄和服务请求编号在系统调用中的唯一性,同时保证没有调用者的情况下,服务句柄和编号会变重置。
75.pisa管理器对服务句柄和服务请求id的管理方法为:
76.s11:当api层调用spi层时,pisa管理器锁定共享内存跨进程锁;
77.s12:若api层调用连接建立指令,则执行步骤s13,否则执行步骤s14;
78.s13:共享内存文件中的服务句柄数增加1;
79.s14:共享内存文件中的服务请求id增加1;
80.s15:释放共享内存跨进程锁。
81.内存管理主要要完成跨进程api层跟spi层通讯的结构体相对复杂,需要通过共享内存的方式完成api和spi层消息通讯。api层跟spi通过地址映射的方式共享内存空间。一
方申请共享内存,修改内存的地址,并把地址传递给另一层。另一层直接通过地址就可以访问对应的内容。本发明实现的方式是文件共享同时映射到同一个内存地址的方式。
82.内存地址的分配需要分配、增加、释放三种操作方式,内存分配和释放需要跨进程支持,需要跨进程锁互斥内存的分配和释放。共享内存需要支持增加操作,本发明的处理方式是通过链表管理内存分配。内存管理的节点包含如下内容:跨进程的锁资源、内存列表的数量、共享内存链表数组、共享内存的地址指针首地址。共享内存链表数组包括:暂用该地址的进程编号、共享内存是否使用、指向共享内存的地址指针、共享内存的大小。
83.共享内存要支持增加功能,所以需要一部分空间来管理分配空间和增加空间节点的内存,本发明采用列表的方式把增加的内存链接在链表中,释放空间直接释放链表上的所有节点即可,链表节点(list)包含如下内容:本节点内存的长度、内存的初始化方式、指向下一个节点指针和共享内存数组。
84.进程加载共享内存进行如下操作,完成共享内存的初始化:
85.s21:读取指定地址的共享内存的配置文件,获取共享内存的映射地址、共享内存的共享大小、共享内存文件位置;
86.s22:判断该共享内存文件是否存在,若不存在则执行步骤s23,若存在则执行步骤s24;
87.s23:创建共享文件,并设置文件大小为共享管理的节点加上共享内存块的大小,初始化跨进程锁,执行步骤s25;
88.s24:打开共享文件,设置共享内存的大小;
89.s25:锁定管理的节点中的跨进程锁;
90.s26:若管理的节点的共享内存的指针地址不等于共享内存的地址空间,则执行步骤s27,否则执行步骤s28;
91.s27:初始化管理的节点,设置管理的节点中的链表数为1,指针地址指向共享内存地址,并初始化共享内存数组的第一个元素;
92.s28:删除管理节点内存数组中无效进程暂用的元素,如果该节点状态为已暂用,并且进程编号为无效进程,则执行删除节点过程;
93.s29:释放管理的节点中的跨进程锁。
94.进程分配共享内存和增加共享内存的执行步骤包括:
95.s31:若过程为增加共享内存,则执行步骤s32;若过程为分配共享内存,则执行步骤s33;
96.s32:通过父节点地址找到链表中节点指针地址,通过链表找到尾节点;
97.s33:申请共享内存地址块为申请内存加上链表节点的空间大小;
98.s34:锁定管理的节点中的跨进程锁;
99.s35:内存管理节点通过列表数,从共享内存链表数组中找到一块满足申请空间大小节点;如果链表数大于申请空间的大小,则执行步骤s36,否则执行步骤s37。
100.s36:拆分两个节点,内存管理节点链表数加1,原始位置记录申请的空间链表,记录分配空间的进程编号、空间大小、空间首地址,设置已使用标识;共享内存链表数组链表数节点位置增加一个新节点,设置空间未使用和空间首地址,返回空间地址;执行步骤s38;
101.s37:设置进程编号以及已使用标识,返回空间地址;
102.s38:释放管理的节点中的跨进程锁;
103.s39:空间地址初始化;设置空间大小和初始化标志;初始化内存数组;如果是增加共享内存,尾节点链表指向该节点,返回内存数组地址的首地址为分配空间的地址和结果。
104.释放共享内存的执行步骤包括:
105.s41:通过释放内存地址找到链表中节点指针地址;
106.s42:判断链表的内存分配方式是否合法,如果不合规则返回失败,否则继续;
107.s43:锁定管理的节点中的跨进程锁;
108.s44:内存管理节点通过列表数找到链表地址空间;如果未找到,跳转执行步骤s49;
109.s45:设置数组节点空间未使用,并把数组的最后一个节点移动到该节点位置,内存管理节点链表数减1;
110.s46:轮询整个数组节点,判断是否可以跟一个未使用的块合并,如果能合并执行步骤s47,否则执行s48;
111.s47:把首地址联合,共享内存大小合并;执行s49;
112.s48:数组节点最后一个节点增加这个未使用的块;执行s49;
113.s49:释放管理的节点中的跨进程锁。
114.异步调用实现方式为:api层通过服务句柄、逻辑名生成一个消息队列名,api层把这个消息队列名直接发送给spi层;spi完成指令调度后,会根据消息回调消息队列名,发送完成消息;api层获取到完成消息后,直接处理消息,把消息结果给上层应用。
115.同步调用实现方式为:api层通过pisa管理器调用同步动作,pisa管理器内部生成一个消息队列名,pisa管理器把消息队列名发送给spi层,并等待消息队列返回的消息;spi层执行指定调度后,把消息回调给消息队列名,发送完成消息;pisa管理器接收到完成消息后,直接发消息结果返回给api层。
116.以上实施例为本技术的优选实施例,本领域的普通技术人员还可以在此基础上进行各种变换或改进,在不脱离本技术总的构思的前提下,这些变换或改进都应当属于本技术要求保护的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1