一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种多进程AWG访问控制的优化方法与流程

2022-02-25 18:52:10 来源:中国专利 TAG:

一种多进程awg访问控制的优化方法
技术领域
1.本发明涉及多进程pcie设备访问控制技术领域,具体地说是一种多进程awg访问控制的优化方法。


背景技术:

2.awg(arbitary waveform generator,任意波形发生器)作为一种信号发生设备,能够产生复杂的时变多路信号,在军事领域能够为复杂雷达、电子侦察、敌我识别等装备的性能指标进行测量,提供多种数字调制信号;在科学研究领域也得到了广泛应用。
3.当计算机通用板卡上插入awg板卡,利用fpga的pcie驱动,安装anaconda和jupyter notebook web应用,并在web界面编程指定机箱板卡的槽位号,即可实现对相应板卡的控制,并成功发送期望波形数据;但是当用户打开多个web界面,并且对同一个awg板卡进行操作时,会造成资源访问冲突,并导致设备运行状态紊乱。
4.如何克服多进程对于同一设备的访问冲突,是需要解决的技术问题。


技术实现要素:

5.本发明的技术任务是针对以上不足,提供一种多进程awg访问控制的优化方法,来解决如何克服多进程对于同一设备的访问冲突的技术问题。
6.本发明的一种多进程awg访问控制的优化方法,通过标记web界面应用的进程号实现多进程的设备访问,所述优化方法包括如下步骤:
7.目标web应用通过进程调用目标awg板卡时,下发板卡状态请求报告,所述状态请求包括所述目标awg板卡所在机箱的机箱号和槽位号;
8.基于板卡状态请求,判断是否存在与所述目标awg板卡对应的目录文件,所述目录文件的目录以其对应awg板卡所在机箱的机箱号和槽位号命名,所述目录文件记录访问对应awg板卡进程的进程号;
9.如果存在与所述目标awg板卡对应的目录文件,且所述目录文件中记录的进程号与当前进程的进程号不一致,将之前的进程杀死释放资源后删除原目录文件,创建一个新的目录文件并将当前进程的进程号记录至新的目录文件;
10.如果存在与所述目标awg板卡对应的目录文件,且所述目录文件中记录的进程号与当前进程的进程号一致,将当前进程的进程号记录至所述目录文件;
11.如果不存在与所述目标awg板卡对应的目录文件,创建一个新的目录文件并通过所述新的目录文件记录当前进程的进程号,所述新的目录文件的目录以所述目标awg板卡所在机箱的机箱号和槽位号命名。
12.作为优选,所述目录文件的目录为以其对应awg板卡所在机箱的机箱号和槽位号命名的二级目录,机箱号作为第一级目录,槽位号作为第二级目录。
13.作为优选,判断是否存在与所述目标awg板卡对应的目录文件,如果不存在与所述目标awg板卡对应的目录文件,执行如下操作:
14.判断是否存在以所述awg板卡所在机箱的机箱号命名的目录;
15.如果存在,判断所述目录下是否存在以awg板卡所在机箱的槽位号命名的第二级目录,如果不存在,在所述目录下创建以awg板卡所在机箱的槽位号命名的第二级目录,并在所述第二级目录下创建一个新的目录文件,通过所述新的目录文件存储当前进程的进程号;如果存在,但是所述目录下不存在目录文件,创建一个新的目录文件并通过所述新的目录文件存储当前进程的进程号;
16.如果不存在,以所述目标awg板卡所在机箱的机箱号命名创建一个目录作为第一级目录,并在所述第一级目录下以所述目标awg板卡所在机箱的槽位号命名创建第二级目录,并在所述二级目录下创建一个新的目录文件,通过所述新的目录文件存储当前进程的进程号。
17.作为优选,基于板卡状态请求,通过stat函数判断是否存在与所述目标awg板卡对应的目录文件。
18.作为优选,基于板卡状态请求,通过access函数创建目录。
19.作为优选,通过fopen_s接口、以只写的形式创建目录文件。
20.作为优选,通过fgets获取目录文件中的字符,所述字符即为上次调用目标awg板卡的进程的进程号,并且通过_getpid()来获取当前调用目标awg板卡的进程的进程号,将两个进程号进行比对,若进程号不同,则进一步调用killprocess(current_board_pid)接口,将上次调用进程杀死,并释放上次调用进程对目标awg板卡的控制权。
21.更优的,所述优化方法包括还如下步骤:
22.创建工作环境,安装anaconda、qulab的python库以及awg的python驱动,并打开上层web的应用界面;
23.利用get_devices()接口,获取当前机箱上插入的awg板卡的数量;
24.调用check_device_exist()接口,检测指定槽位号是否存在awg板卡;
25.调用createfile()接口,打开目标awg板卡,并返回目标awg板卡句柄,以实现web应用目标awg板卡的正确访问和控制。
26.更优的,所述优化方法包括还如下步骤:
27.编写底层动态链接库,通过update_board_status()函数接口发送板卡状态请求,所述update_board_status()函数中参数为awg板卡所在机箱的机箱号和槽位号。
28.本发明的一种多进程awg访问控制的优化方法具有以下优点:当web应用通过进程调用awg板卡时,下发板卡状态请求以判断该awg板卡是否被其它进行调用,判断方法为首选判断是否存在一个目录文件,该目录文件的目录是基于目标awg板卡所在的机箱的机箱号和槽位号命名的,该目录文件记录调用该目标awg进程的进程号,如果目录文件中记录的进程号与当前进程的进程号不一致,则杀死上次调用进程并创建一个目录文件记录当前进程的进程号,从而可解决同一个设备的访问冲突,避免设备运行状态紊乱。
附图说明
29.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些
附图获得其他的附图。
30.下面结合附图对本发明进一步说明。
31.图1为实施例一种多进程awg访问控制的优化方法的流程框图。
具体实施方式
32.下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
33.本发明实施例提供一种多进程awg访问控制的优化方法,用于解决如何克服多进程对于同一设备的访问冲突的技术问题。
34.实施例:
35.本发明一种多进程awg访问控制的优化方法,通过标记web界面应用的进程号实现多进程的设备访问,该优化方法包括如下步骤:
36.首先,目标web应用通过进程调用目标awg板卡时,下发板卡状态请求报告,状态请求包括所述目标awg板卡所在机箱的机箱号和槽位号;
37.然后,基于板卡状态请求,判断是否存在与所述目标awg板卡对应的目录文件,目录文件的目录以其对应awg板卡所在机箱的机箱号和槽位号命名,目录文件记录访问对应awg板卡进程的进程号;
38.如果存在与目标awg板卡对应的目录文件,且目录文件中记录的进程号与当前进程的进程号不一致,将之前的进程杀死释放资源后删除原目录文件,创建一个新的目录文件并将当前进程的进程号记录至新的目录文件;
39.如果存在与目标awg板卡对应的目录文件,且目录文件中记录的进程号与当前进程的进程号一致,将当前进程的进程号记录至目录文件;
40.如果不存在与目标awg板卡对应的目录文件,创建一个新的目录文件并通过新的目录文件记录当前进程的进程号,新的目录文件的目录以所述目标awg板卡所在机箱的机箱号和槽位号命名。
41.其中,本实施例中目录文件的目录为以其对应awg板卡所在机箱的机箱号和槽位号命名的二级目录,机箱号作为第一级目录,槽位号作为第二级目录。
42.判断是否存在与所述目标awg板卡对应的目录文件,如果不存在与所述目标awg板卡对应的目录文件,执行如下操作:
43.判断是否存在以所述awg板卡所在机箱的机箱号命名的目录;
44.如果存在,判断所述目录下是否存在以awg板卡所在机箱的槽位号命名的第二级目录,如果不存在,在所述目录下创建以awg板卡所在机箱的槽位号命名的第二级目录,并在所述第二级目录下创建一个新的目录文件,通过所述新的目录文件存储当前进程的进程号;如果存在,但是所述目录下不存在目录文件,创建一个新的目录文件并通过所述新的目录文件存储当前进程的进程号;
45.如果不存在,以所述目标awg板卡所在机箱的机箱号命名创建一个目录作为第一级目录,并在所述第一级目录下以所述目标awg板卡所在机箱的槽位号命名创建第二级目录,并在所述二级目录下创建一个新的目录文件,通过所述新的目录文件存储当前进程的
进程号。
46.在具体执行时,基于板卡状态请求,通过stat函数判断是否存在与所述目标awg板卡对应的目录文件,通过access函数创建目录,通过fopen_s接口、以只写的形式创建目录文件。
47.windows10环境下,当计算机通用板卡上插入awg板卡,利用fpga的pcie驱动(pcie xilinx dma),安装anaconda和jupyter notebook web应用,并在web界面编程指定机箱板卡的槽位号,即可实现对相应板卡的控制,并成功发送期望波形数据;但是当用户打开多个web界面,并且对同一个awg板卡进行操作时,会造成资源访问冲突的问题。本实施例上述优化方法可解决上述冲突。具体执行步骤为:
48.1)安装上层软件anaconda,创建工作环境,安装qulab的python库,安装关于awg的python驱动,最后执行命令conda activate awg,jupyter notebook即可打开上层web的应用界面;
49.2)底层动态链接库的编写。首先通过步骤1,将机箱号和槽位号传给底层,此处以chassis0和slot2为例进行描述。通过update_board_status(chassis0,slot2)接口进行板卡状态更新。
50.3)在步骤2的基础上,首先判断最终目录(

\chassis0\slot2)的文件(board_status)是否存在,若不存在,则说明该设备之前没有进程在调用它,执行步骤4,否则执行步骤8;
51.4)判断..\chassis0目录是否存在,若不存在则执行步骤5.否则目录存在执行步骤6;
52.5)创建文件目录..\chassis0,执行步骤6,经过上述步骤,肯定存在了(..\chassis0目录)
53.6)说明..\chassis0目录已经存在,判断..\chassis0\slot2目录是否存在,若不存在,执行步骤7,存在目录(..\chassis0\slot2但该目录下没有(board_status文件)执行步骤10;
54.7)创建文件目录..\chassis0\slot2,执行步骤10,经过上述步骤,肯定存在了(..\chassis0\slot2目录);
55.8)文件(board_status)存在,说明之前有进程调用过该机箱号和槽位号上的板卡,打开该文件(..\chassis0\slot2\board_status),读取文件中的数据(上次调用该库的进程pid值),判断该值与getpid值是否相同,若不同则执行步骤9,相同不操作,执行10(未有新进程打开);
56.9)杀死之前占用资源的该线程,释放该线程占用的资源,并且删除之前board_status的文件(存储之前pid进程号),执行10;
57.10)打开(新建一个)board_status文件,并将当前进程的pid写入文件中;
58.11)通过上述过程,即可保证上层web应用只用一个进程能够访问到awg板卡。
59.其中,判断文件是否已经存在通过如下代码实现:
60.snprintf(board_status_file,max_board_status_len-1,board_status_template,chassis,slot);
61.if(-1==stat(board_status_file,&board_status_stat))
62.board_status_file为文件绝对路径名,并通过stat函数来判断该文件是否已存在。
63.创建文件目录通过如下代码实现:
64.snprintf(board_status_path,max_board_status_len-1,"d:\\awg\\chassis%d",chassis);
65._access(board_status_path,0)
66.board_status_path为文件目录名,并通过_access函数来创建文件目录。
67.创建文件通过如下代码实现:
68.error_code=fopen_s(&fp_write,board_status_file,"w");
69.利用fopen_s接口,以只写的形式创建步骤1中提到board_status_file文件。
70.判断进程号通过方法实现:利用fgets获取board_status_file文件中的字符,此字符即为上次调用该设备的进程号,并且利用_getpid()来获取当前调用该设备的进程号,然后将两个进程号进行比对,若进程号不同,则进一步调用killprocess(current_board_pid)接口,将上次调用进程杀死,并释放对设备的控制权。
71.在上述具体实施过程中,利用get_devices()接口,获取当前机箱上插入的板卡数量;调用check_device_exist()接口,检测指定槽位号是否存在awg板卡;最后调用createfile()接口,打开该pcie设备,并返回该设备句柄即可实现web应用对该设备的正确访问和控制,避免了多进程对设备的资源竞争问题。
72.上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献