[发明专利]基于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、结束。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨理工大学,未经哈尔滨理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201710291208.7/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top