[发明专利]基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统有效
申请号: | 201710291208.7 | 申请日: | 2017-04-28 |
公开(公告)号: | CN107103253B | 公开(公告)日: | 2020-03-31 |
发明(设计)人: | 刘嘉辉;马翠平;宋大华 | 申请(专利权)人: | 哈尔滨理工大学 |
主分类号: | G06F21/62 | 分类号: | G06F21/62 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 150080 *** | 国省代码: | 黑龙江;23 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 mpi ac 匹配 并行 算法 磁盘 敏感 信息 扫描 系统 | ||
1.一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统,其特征在于,包括:
Part1、获得模式字符集,指定的扫描目录,文件数据分块和Aho-Corasick算法(AC算法)自动机的信息;
Part2、在多核处理器架构中的系统主进程建立MPI执行环境,动态查询处理器的工作状态,分配数据块给从进程实现数据敏感信息的并行查找;
Part3、多核处理器的从进程中并行地执行确定的有限自动机匹配算法,记录敏感信息的位置,并动态报告处理器工作状态;
在上述步骤Part1中,系统初始化步骤包括:
第一步,建立模式字符串集合文件;
第二步,计算模式字符串集合中模式字符串的最大长度MaxPattern;
第三步,用户设定扫描磁盘的目录;
第四步,设定扫描文件的数据分块的最大长度MaxBlock,MaxBlock的值需要满足:
MaxBlock > 3*MaxPattern 并且 MaxBlock >= 用户设定的数值,默认值为200;
第五步,定义数据块信息表Block_Info,包括如下数据项:
数据项1,扫描文件的名称,记为FileName;
数据项2,扫描文件被划分的数据块的总数,记为N_Block;
数据项3,数据块数组,记为ArrBlock,数组的起始下标为1,最大值为N_Block;
数据块数组ArrBlock包含的数据项为:
数据项1,数据块在文件中开始的位置,记为Begin,Begin的开始值设定为0;
数据项2,数据块在文件中结束的位置,记为End;
第六步,定义数据块i的长度,记为Len_Block,
Len_Block = ArrBlock[i].End - ArrBlock[i].Begin+1;
第七步,定义AC算法的确定的有限自动机DFA(Deterministic Finite Automaton)的状态节点StateNode,StateNode的结构为包含256个元素的数组ArrData[256],数组ArrData的起始下标为0,最大值为255,数组ArrData的每个元素结构包含2个数据项:
数据项1,匹配模式函数FoundOut(),如果FoundOut()为真,则该函数输出匹配的模式字符串,函数初始值设定为假;
数据项2,指向自动机下一个状态节点的指针NextState,NextState的初始值为空;
定义自动机的第一个状态节点为根节点Root;
第八步,读取当前磁盘目录下的子文件夹和文件,并建立目录树,对目录树中不包含文件的空文件夹进行删除,使得目录树中的叶子节点均为文件;目录树的根定义为第0层,叶子节点从第1层开始,目录树的深度定义为目录树中包含的最大层数,如果目录树的深度等于0,定义为目录树不包含任何文件;对目录树的按层次遍历定义为从第1层开始,遍历第一层的每个叶子节点,以此类推,直到目录树的最后一层;
定义扫描文件遍历队列Q_File,对目录树进行按层次遍历,并把叶子节点插入Q_File队列;
在上述步骤Part2中,包括:
建立DFA自动机的过程:
S1_part2_pro1、建立DFA自动机的根节点Root;
S2_part2_pro1、打开模式字符串集合文件;
S3_part2_pro1、读取文件当前行字符串StrLine,并把文件指针移动到下一行;
S4_part2_pro1、如果读入的字符串StrLine的长度Len_StrLine的值为0,则转到S8_part2_pro1,否则,转到S5_part2_pro1;
S5_part2_pro1、StateNode_Pre代表自动机中当前状态节点的前一个状态节点,StateNode_Pre的初始值为Root;
S6_part2_pro1、假设i为循环变量,代表字符串StrLine的第i个位置,i的取值从1至StrLine的最后一个位置,i的初值设定为1;
S61_part2_pro1、创建新的状态节点,记为StateNode_New;
S62_part2_pro1、获得StrLine的第i个字符的ASCII码值为Value_i,并把StateNode_Pre的ArrData[Value_i]的NextState 赋值为StateNode_New;
S63_part2_pro1、如果i等于Len_StrLine,设定StateNode_New的FoundOut()为真,并输出字符串StrLine;
S64_part2_pro1、将StateNode_New赋值给StateNode_Pre;
S65_part2_pro1、i的值增加1;
S66_part2_pro1、如果i的值小于等于Len_StrLine,转到S61_part2_pro1,否则,转到S7_part2_pro1;
S7_part2_pro1、转到S3_part2_pro1;
S8_part2_pro1、DFA建立过程结束;
系统主进程为:
S1_part2_pro2、MPI运行环境初始化,加载MPI系统函数库,MPI版本信息,系统核心处理器和硬件信息;
S2_part2_pro2、获取计算机系统核心处理器数量N_Procs,由系统核心处理器数量设定进程编号,系统核心处理器最低数量限定为二核,核心处理器0号设定为主进程,记为Master,其它核心处理器依次设定为从进程,记为Slave,依次设定进程编号为Slave_1至Slave_(N_Procs-1);
S3_part2_pro2、建立DFA自动机;
S4_part2_pro2、Master发送给每个Slave进程DFA自动机;
S5_part2_pro2、获得当前队列头Q_File的文件File,当前队列头节点出队;
S6_part2_pro2、函数BlockPart()对文件File进行数据块的划分;
S7_part2_pro2、设定循环变量i,i的值从1至分块的数量N_Block,i的初始值设定为1;
S8_part2_pro2、查询Slave进程的工作状态;
S81_part2_pro2、如果Slave有空闲,分配ArrBlock[i]给一个空闲的Slave进行处理;
S82_part2_pro2、接收Slave的匹配结果和当前工作状态;
S83_part2_pro2、如果Slave无空闲,则转到S8_part2_pro2;
S9_part2_pro2、i的值增加1;
S10_part2_pro2、如果i的值小于等于N_Block,转到S8_part2_pro2,否则,转到S11_part2_pro2;
S11_part2_pro2、文件File匹配过程结束;
S12_part2_pro2、如果Q_File的队列为空,则转到S13_part2_pro2,否则,转到S5_part2_pro2;
S13_part2_pro2、汇总Slave的扫描文件的结果,写入结果文件;
S14_part2_pro2、MPI结束;
在上述步骤Part3中,包括:
DFA_Execute(位置i,数据块的长度)过程:
S1_part3_pro1、获得当前数据块的第i个位置的字符的ASCII码值,记为Value_i;
S2_part3_pro1、设定CurState为指向DFA自动机中当前状态节点的指针;
S3_part3_pro1、查询DFA自动机中Root的数组ArrData的下标为Value_i 的元素ArrData[Value_i]的NextState的值,并把该值赋值给CurState,如果CurState为空,则转向S8_part3_pro1,否则,转向S4_part3_pro1;
S4_part3_pro1、假设j为循环变量,j的初值设定为0;
S5_part3_pro1、获得当前数据块的第(i+j)个位置的字符的ASCII码值Value_ij;
S51_part3_pro1、如果CurState的ArrData[Value_ij]的FoundOut()为真,则传送当前数据块编号,数据块的起始位置,数据块内位置信息(i+j)和匹配的模式字符串给Master;
S52_part3_pro1、如果CurState的ArrData[Value_ij]的NextState为空,则转到S8_part3_pro1;
S53_part3_pro1、如果CurState的ArrData[Value_ij]的NextState不为空,则把NextState赋值给CurState;
S6_part3_pro1、j的值增加1;
S7_part3_pro1、如果i+j的值小于等于Len_Block,转到S5_part3_pro1,否则,转到S8_part3_pro1;
S8_part3_pro1、过程结束;
AC_DFA()匹配过程:
S1_part3_pro2、设定数据块的长度为Len_Block;
S2_part3_pro2、假设i代表数据块的第i个位置,i的值变化从1至Len_Block,i的初值设定为1;
S3_part3_pro2、函数DFA_Execute(i,Len_Block)执行在数据块的第i个位置的模式匹配过程;
S4_part3_pro2、i的值增加1;
S5_part3_pro2、如果i的值小于等于Len_Block,转到S3_part3_pro2,否则,转到S6_part3_pro2;
S6_part3_pro2、AC_DFA匹配过程结束;
Slave从进程包括:
S1_part3_pro3、接收Master传送的DFA自动机;
S2_part3_pro3、发送给Master本进程编号的工作状态为忙;
S3_part3_pro3、接收Master传送的文件的数据块,并记录数据块编号;
S4_part3_pro3、执行AC_DFA()匹配过程;
S5_part3_pro3、发送给Master本进程编号的工作状态为空闲;
一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统中,函数BlockPart()的实现过程包括:
S1_BlockPart、获得文件File的长度为Len_File,定义文件当前位置为CurLoc,设定初始值为0,设定数据块信息表Block_Info的N_Block的初始值等于1,初始化数据块信息表Block_Info的数据项FileName,
S2_BlockPart、如果Len_File小于MaxBlock,则设定数据块信息表Block_Info的N_Block=1, 设定数据块数组ArrBlock的第一个元素ArrBlock[1]的开始位置为ArrBlock[1].Begin=0,设定ArrBlock[1].End=Len_File-1,转到S5_BlockPart;
S3_BlockPart、如果(CurLoc+MaxBlock)<Len_File并且(Len_File–CurLoc–MaxBlock)> MaxBlock,则设定:
ArrBlock[N_Block].Begin=CurLoc,
ArrBlock[N_Block].End= CurLoc+MaxBlock-1,
N_Block的值增加1,即N_Block = N_Block+1,
ArrBlock[N_Block].Begin=(CurLoc+MaxBlock-MaxPattern+1),
ArrBlock[N_Block].End= CurLoc+MaxBlock+ MaxPattern-2,
CurLoc=CurLoc+MaxBlock,
N_Block的值增加1,即N_Block = N_Block+1,转到S3_BlockPart;
S4_BlockPart、如果(CurLoc+MaxBlock)<Len_File并且(Len_File–CurLoc–MaxBlock)<= MaxBlock,则设定:
ArrBlock[N_Block].Begin=CurLoc,
ArrBlock[N_Block].End= Len_File -1,
S5_BlockPart、结束。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨理工大学,未经哈尔滨理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710291208.7/1.html,转载请声明来源钻瓜专利网。
- 上一篇:头戴式显示装置
- 下一篇:音视频连接线接头(7)