买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统_哈尔滨理工大学_201710291208.7 

申请/专利权人:哈尔滨理工大学

申请日:2017-04-28

公开(公告)日:2020-03-31

公开(公告)号:CN107103253B

主分类号:G06F21/62(20130101)

分类号:G06F21/62(20130101)

优先权:

专利状态码:失效-未缴年费专利权终止

法律状态:2022.04.08#未缴年费专利权终止;2017.09.22#实质审查的生效;2017.08.29#公开

摘要:本发明提供一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统,包括:S1、获得模式字符集,指定的扫描目录,文件数据分块和AC算法自动机的信息;S2、在多核处理器架构中的系统主进程建立MPI执行环境,动态查询处理器的工作状态,分配数据块给从进程实现数据敏感信息的并行查找;S3、多核处理器的从进程中并行地执行确定的有限自动机匹配算法,记录敏感信息的位置,并动态报告处理器工作状态。本发明能够通过MPI有效地利用多核处理器的计算资源,提高了AC串匹配算法执行性能,特别适合信息安全领域对大容量的计算机磁盘敏感信息进行快速扫描,以及适用于信息安全检查的防护与预警系统。

主权项:1.一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统,其特征在于,包括:Part1、获得模式字符集,指定的扫描目录,文件数据分块和Aho-Corasick算法(AC算法)自动机的信息;Part2、在多核处理器架构中的系统主进程建立MPI执行环境,动态查询处理器的工作状态,分配数据块给从进程实现数据敏感信息的并行查找;Part3、多核处理器的从进程中并行地执行确定的有限自动机匹配算法,记录敏感信息的位置,并动态报告处理器工作状态;在上述步骤Part1中,系统初始化步骤包括:第一步,建立模式字符串集合文件;第二步,计算模式字符串集合中模式字符串的最大长度MaxPattern;第三步,用户设定扫描磁盘的目录;第四步,设定扫描文件的数据分块的最大长度MaxBlock,MaxBlock的值需要满足:MaxBlock3*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(DeterministicFiniteAutomaton)的状态节点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_Executei,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+MaxBlockLen_File并且Len_File–CurLoc–MaxBlockMaxBlock,则设定: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+MaxBlockLen_File并且Len_File–CurLoc–MaxBlock=MaxBlock,则设定:ArrBlock[N_Block].Begin=CurLoc,ArrBlock[N_Block].End=Len_File-1,S5_BlockPart、结束。

全文数据:基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统技术领域[0001]本发明涉及数据信息安全技术领域,尤其涉及一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统。背景技术[0002]随着计算机技术的不断发展,信息技术对人们的日常生活的影响日益密切。作为信息的载体,计算机的磁盘中大量存储着国家机关、企事业单位和个人等的敏感信息,而这些信息一旦泄露或者遭到黑客的攻击,对单位和个人会造成一定程度的损失。因此,管理人员对磁盘敏感信息的定期扫描能够一定程度上预防和警告相关人员保护这些信息,以加强对敏感信息的安全防护意识。[0003]磁盘敏感信息扫描系统是计算机安全管理人员对单位或者个人的计算机进行安全检查的一种安全防护与预警系统。该系统利用一定的计算机模式匹配算法,针对存储在磁盘中的敏感信息进行扫描,并报告在计算机的文件中存储的敏感信息的位置。磁盘敏感信息扫描系统的典型应用列举如下。[0004]案例1,张经理是某公司的一名高管,正在与A公司进行一项商业合同的谈判;张经理把一份公司的重要的有关谈判的内部会议纪要下载到个人手提电脑中进行查阅,而阅后忘记按照保密规定删除会议纪要。在例行的安全检查中,计算机安全管理员利用磁盘敏感信息扫描系统检查张经理的手提电脑时,发现该份会议纪要,并提醒张经理,从而避免了对公司的利益造成损失。[0005]案例2,王女士由于公司业务变化,需要离开母公司长期到外地子公司工作,王女士需要上交本人使用的公司电脑;在王女士的公司电脑中存储着王女士的个人账户信息和密码等个人敏感数据,王女士利用磁盘敏感信息扫描系统扫描了公司电脑中的个人敏感信息,并及时删除了存储在磁盘中的个人敏感信息,从而避免了个人隐私信息的泄露。[0006]此外,2015年美国前国务卿希拉里•克林顿的“邮件门”丑闻被曝光,有关其使用私人电子邮箱,而非官方电子邮箱进行与他人的通信,可能导致美国外交情报的泄密。以上事件更加引起人们对存储在计算机中的数据信息安全的关注。[0007]磁盘敏感信息扫描系统使用计算机的模式匹配算法进行信息的筛选。在计算机的模式匹配算法中,经典的Aho-Corasick算法是多模式串匹配算法,是AlfredV.Aho和MargaretJ.Corasick于1975年提出的,因此,习惯上简称为AC算法。AC多模式串匹配算法以模式集合创建模式匹配的自动机,能够实现在线性时间内对输入的文本进行模式匹配过程。[0008]随着计算机硬件技术的飞速发展,计算机处理器步入多核时代,磁盘存储器的容量得到了很大提升。磁盘敏感信息扫描系统主要对磁盘中存储的文件进行扫描,并报告文件包含的敏感信息的位置。由于磁盘的容量的迅速增加,存储在磁盘中的文件数量巨大。因此,快速地处理大量的文件信息是磁盘敏感信息扫描系统的关键。[0009]当计算机进入多核处理器时代,计算机的计算能力和数据处理能力得到了很大的提高。计算机处理器的架构发生了革命性的变革。单独处理器主频的提升达到了极限,一个主要因素是处理器在主频提升之后难以解决芯片的散热问题。因此,多核架构的提出使计算机的计算性能和数据处理能力得到了巨大的提升。简单地说,一个计算机处理的任务可以被分配到两个甚至更多的处理器核心上进行并行的处理,从而加快了任务处理的速度,缩短了处理时间。随着2〇06年7月英特尔公司酷睿处理器的正式发布,以及随后个人电脑的多核处理器的发布,代表着多核处理器时代的来临。多核处理器相对于单核处理器的优势在于,处理器的性能提升的同时,其功耗大大降低。[0010]计算机硬件技术的发展,对于计算机软件却提出了巨大的挑战。由于传统的计算机算法都设计在单核处理器上,难以实现在多核平台下的多任务处理方式。例如:对AC算法进行数据并行,存在的一个核心的问题是数据块边缘的匹配问题。因此,对传统的计算机算法改进,使其适应多核平台是一项艰巨的任务。[0011]目刖流行的并行程序设计的接口分为:OpenMulti-ProcessingOpenMP和MessagePassingInterfaceMPIhOpenMP是一种面向共享内存的多处理器并行程序接口。消息传递接口(MPI是一种基于消息传递的并行程序接口。基于MPI的每个进程具有独立的运行空间,每个进程可以独立地执行,进程之间可以通过消息进行数据的交换。MPI不仅可以实现在共享内存的多核处理器中,而且也可以实现在分布式并行系统中。因此,MPI比OpenMP在并行程序设计上具有更大的灵活性。发明内容[0012]一)要解决的技术问题本发明的目的是提出一种有效地解决AC算法在实现并行化的过程中所存在的数据分块的边缘匹配问题,并实现该方法在磁盘敏感信息扫描系统中。[0013]二)技术方案为了解决上述技术问题,本发明提供了一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统,包括:Parti、获得模式字符集,指定的扫描目录,文件数据分块和ac算法自动机的信息;Part2、在多核处理器架构中的系统主进程建立MPI执行环境,动态查询处理器的工作状态,分配数据块给从进程实现数据敏感信息的并行查找;Part3、多核处理器的从进程中并行地执行确定的有限自动机匹配算法,记录敏感信息的位置,并动态报告处理器工作状态。[00M]在Part1中,系统初始化步骤包括:第一步,建立模式字符串集合文件。[0015]弟一步,计算fe式字符串集合中検式字符串的最大长度MaxPattern。[0016]第三步,用户设定扫描磁盘的目录。[0017]弟四步,设走扫描文件的数据分块的最大长度MaxBlock,MaxBlock的值需要满足:MaxBlock3*MaxPattern并且MaxBlock=用户设定的数值默认值为200。[0018]第五步,定义数据块信息表Block_Info,包括如下数据项:数据项1:扫描文件的名称,记为FileName;数据项2:扫描文件被划分的数据块的总数,记为N_Block;数据项3:数据块数组,记为ArrBlock,数组的起始下标为1,最大值SN_Block。[0019]数据块数组ArrBlock包含的数据项为:数据项1:数据块在文件中开始的位置,记为Begin,Begin的开始值设定为0;数据项2:数据块在文件中结束的位置,记为End。[0020]第六步,定义数据块i的长度,记为Len_Bl〇ck,Len_Block=ArrBlock[i].End-ArrBlock[i].Begin+1;第七步,定义Aho-Corasick算法AC算法)的确定的有限自动机DFADeterministicFiniteAutomaton的状态节点StateNode,StateNode的结构为包含256个元素的数组ArrData[256],数组ArrData的起始下标为〇,最大值为255,数组ArrData的每个元素结构包含2个数据项,数据项1:匹配模式函数FoundOut,如果FoundOut为真,则该函数输出匹配的模式字符串,函数初始值设定为假;数据项2:指向自动机下一个状态节点的指针NextState,NextState的初始值为空;定义自动机的第一个状态节点为根节点Root。[0021]第八步,读取当前磁盘目录下的子文件夹和文件,并建立目录树,对目录树中不包含文件的空文件夹进行删除,使得目录树中的叶子节点均为文件;目录树的根定义为第0层,叶子节点从第1层开始,目录树的深度定义为目录树中包含的最大层数,如果目录树的深度等于〇,定义为目录树不包含任何文件。对目录树的按层次遍历定义为从第1层开始,遍历第一层的每个叶子节点,以此类推,直到目录树的最后一层。[0022]定义扫描文件遍历队对目录树进行按层次遍历,并把叶子节点插入Q_File队列。[0023]在Part2中,包括:建立DFA自动机的过程:51、建立DFA自动机的根节点Root;52、打开模式集合文件;53、读取文件当前行字符串StrLine,并把文件指针移动到下一行;54、如果读入的字符串StrLine的长度Len_StrLine的值为0,则转到S8,否则,转到S5;55、StateNode_Pre代表自动机中当前状态节点的前一个状态节点,StateNode_Pre的初始值为Root;56、假设i为循环变量,代表字符串StrLine的第i个位置,i的取值从1至StrLine的最后一个位置,i的初值设定为1;561、创建新的状态节点,记为StateNode_New;562、获得StrLine的第i个字符的ASCII码值为Value_i,并把StateNode_Pre的ArrData[Value—i]的NextState赋值为StateNode_New;563、如果i等于Len_StrLine,设定StateNode_New的FoundOut为真,并输出字符串StrLine;564、将StateNode_New赋值给StateNode_Pre;365、丨的值增加1;S66、如果i的值小于等于Len_StrLine,转到S61,否则,转到S7;57、转到S3;58、DFA建立过程结束。[0024]函数BlockPart的实现过程包括:51、获得文件File的长度为Len_File,定义文件当前位置为CurLoc,设定初始值为0,设定数据块信息表Bl〇Ck_Infc^^]N_Bl〇Ck的初始值等于1,初始化数据块信息表Bl〇ck_Info的数据项FileName,52、如果Len_File小于MaxBlock,则设定数据块信息表Block_Infc^N_Block=l,设定数据块数组ArrBlock的第一个元素ArrBlock[l]的开始位置为ArrBlock[l].Begin=0,设定ArrBlock[l]_End=Len_File_l,转到S5;53、如果(CurLoc+MaxBlockMaxBlock,则设定:ArrBlock[N_Block]•Begin=CurLoc,ArrBlock[N_Block].End=CurLoc+MaxBlock-1,N_Block的值增加UPN_Block=N_Block+l,ArrBlock[N_Block].Begin=CurLoc+MaxBlock-MaxPattern+1,ArrBlock[N_Block].End=CurLoc+MaxBlock+MaxPattern-2,CurLoc=CurLoc+MaxBlock,N_Block的值增加UPN_Block=N_Block+l,转到S3;54、如果(CurLoc+MaxBlock〈Len—File并且(Len_File-CurLoc-MaxBlockMaxBlock,由此可得:(500-0-200=300200,因此可得:ArrBlock[N_Bl°ck].Begin=CurLoc,IP,ArrBlock[l].Begin=0ArrBlock[N_Block].End=CurLoc+MaxBlock-1,艮|3,ArrBlock[l].End=0+200—1=199,N_Block的值增加lJPN_Block=N_Block+l二2,ArrBlock[N—Block].Begin=CurLoc+MaxBlock-MaxPattern+l,艮P,ArrBlock[2].Begin=0+200-10+1=191,ArrBlock[N_Block].End=CurLoc+MaxBlock+MaxPattern-2,即,ArrBlock[2].End=0+200+10-2=208,CurLoc=CurLoc+MaxBlock,即,CurLoc=0+200=200N_Block的值增加1,即N_Block=3。[0060]转到S3;在S3步骤,(CurLoc+MaxBlockMaxBlock,由此可得:(500-200-200=100〈200,因此,第二个条件不满足。[0061]S4、如果CurLoc+MaxBlockLen_File,即,(200+200500,并且(Len_File-CurLoc_MaxBlock=MaxBlock,即,(500-200-200=100=200,则设定:,ArrBlock[N_Block].Begin=CurLoc,即,ArrBlock[3]_Begin=200ArrBlock[N_Block].End=Len—File-1,即,ArrBlock[3].End=500-1=499。[0062]S5、结束。[0063]由此可得,数据分块为:ArrBlock[l].Begin=0ArrBlock[l].End=199,ArrBlock[2]_Begin=191,ArrBlock[2].End=208,ArrBlock[3].Begin=200ArrBlock[3].End=499。[0064]数据分块2AirBl〇Ck[2]有效地覆盖了数据分块1和3之间的边缘地带,解决了Ac算法由于并行引起的数据块边缘的匹配问题。函数BlockPartO能够充分利用最大模式长度和用户指定的块的大小,动态划分数据块,避免了AC算法的重复匹配导致的多余时间开销,提高了AC算法的并行执行效率。特别是在大容量的磁盘扫描中,算法性能的显著提高可以大大缩短磁盘扫描的时间。[0065]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

权利要求:1.一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统,其特征在于,包括:Parti、获得模式字符集,指定的扫描目录,文件数据分块和Ah〇_c〇rasick算法^算法)自动机的信息;Part2、在多核处理器架构中的系统主进程建立MPIi行环境,动态查询处理器的工作状态,分配数据块给从进程实现数据敏感信息的并行查找;Part3、多核处理器的从进程中并行地执行确定的有限自动机匹配算法,记录敏感信息的位置,并动态报告处理器工作状态;在上述步骤Part1中,系统初始化步骤包括:第一步,建立模式字符串集合文件;第一步,计算申吴式字符串集合中模式字符串的最大长度MaxPattern;第三步,用户设定扫描磁盘的目录;第四步,设定扫描文件的数据分块的最大长度1^1151〇〇1^,1^»131〇〇13*MaxPattern并且MaxBlock=用户设定的数值默认值为200;第五步,定义数据块信息表Block_Info,包括如下数据项:数据项1,扫描文件的名称,记为Fi1eName;数据项2,扫描文件被划分的数据块的总数,记为N_Block;数据项3,数据块数组,记为ArrBlock,数组的起始下标为1,最大值SN_Block;数据块数组ArrBlock包含的数据项为:数据项1,数据块在文件中开始的位置,记为Begin,Begin的开始值设定为0;数据项2,数据块在文件中结束的位置,记为End;第六步,定义数据块i的长度,记为Len_Block,Len_Block=ArrBlock[i].End-ArrBlock[i].Begin+1;弟七步,定义AC算法的确定的有限自动机DFA①eterministicFiniteAutomaton的状态节点StateNode,StateNode的结构为包含256个元素的数组ArrData[256],数组ArrData的起始下标为0,最大值为255,数组ArrData的每个元素结构包含2个数据项:数据项1,匹配模式函数FoundOut,如果FoundOut为真,则该函数输出匹配的模式字符串,函数初始值设定为假;数据项2,指向自动机下一个状态节点的指针NextState,NextState的初始值为空;定义自动机的第一个状态节点为根节点Root;第八步,读取当前磁盘目录下的子文件夹和文件,并建立目录树,对目录树中不包含文件的空文件夹进行删除,使得目录树中的叶子节点均为文件;目录树的根定义为第0层,叶子节点从第1层开始,目录树的深度定义为目录树中包含的最大层数,如果目录树的深度等于〇,定义为目录树不包含任何文件;对目录树的按层次遍历定义为从第1层开始,遍历第一层的每个叶子节点,以此类推,直到目录树的最后一层;定义扫描文件遍历队列0_卩11£3,对目录树进行按层次遍历,并把叶子节点插入Q_File队列;在上述步骤Part2中,包括:建立DFA自动机的过程:S1、建立DFA自动机的根节点Root;52、打开模式集合文件;53、读取文件当前行字符串StrLine,并把文件指针移动到下一行;54、如果读入的字符串StrLine的长度Len_StrLine的值为0,则转到S8,否则,转到S5;55、StateNode_Pre代表自动机中当前状态节点的前一个状态节点,StateN〇de_Pre的初始值为Root;56、假设i为循环变量,代表字符串StrLine的第i个位置,i的取值从1至StrLine的最后一个位置,i的初值设定为1;561、创建新的状态节点,记为StateNode_New;562、获得StrLine的第i个字符的ASCII码值为Value_i,并把StateNode_Pre的ArrData[Value_i]的NextState赋值为StateNode_New;563、如果i等于Len_StrLine,设定StateNode_New的FoundOut为真,并输出字符串StrLine;564、将StateNode_New赋值给StateNode_Pre;365、1的值增加1;S66、如果i的值小于等于Len_StrLine,转到S61,否则,转到S7;57、转到S3;58、DFA建立过程结束;系统主进程为:51、MPI运行环境初始化,加载MPI系统函数库,MPI版本信息,系统核心处理器和硬件信息;52、获取计算机系统核心处理器数量N_Procs,由系统核心处理器数量设定进程编号,系统核心处理器最低数量限定为二核,核心处理器〇号设定为主进程,记为Master,其它核心处理器依次设定为从进程,记为Slave,依次设定进程编号为Slave_l至Slave_N_Procs-1;53、建立DFA自动机;54、Master发送给每个Slave进程DFA自动机;55、获得当前队列*Q_File的文件File,当前队列头节点出队;56、函数BlockPart对文件File进行数据块的划分;57、设定循环变量i,i的值从1至分块的数量N_Block,i的初始值设定为1;58、查询Slave进程的工作状态;581、如果Slave有空闲,分配ArrBlock[i]给一个空闲的Slave进行处理;582、接收Slave的匹配结果和当前工作状态;583、如果Slave无空闲,贝!J转到S8;39、1的值增加1;510、如果i的值小于等于N_Block,转到S8,否则,转到S11;511、文件File匹配过程结束;512、如果Q_File的队列为空,则转到S13,否则,转到S5;513、汇总Slave的扫描文件的结果,写入结果文件;514、MPI结束;在上述步骤Part3中,包括:DFA_Execute位置i,数据块的长度过程:51、获得当前数据块的第i个位置的字符的ASCII码值,记为Value_i;52、设定CurState为指向DFA自动机中当前状态节点的指针;53、查询DFA自动机中Root的数组ArrData的下标为Value—i的元素ArrData[Value_i]的NextState的值,并把该值赋值给CurState,如果CurState为空,则转向S8,否则,转向S4;54、假设j为循环变量,j的初值设定为〇;55、获得当前数据块的第i+j个位置的字符的ASCII码值Value_ij;551、如果CurState的ArrData[Value_ij]的FoundOut为真,则传送当前数据块编号,数据块的起始位置,数据块内位置信息(i+j和匹配的模式字符串给Master;552、如果CurState的ArrData[Value—ij]的NextState为空,则转到S8;553、如果CurState的ArrData[Value—ij]的NextState不为空,则把NextState赋值给CurState;36、』的值增加1;57、如果i+j的值小于等于Len_Block,转到S5,否则,转到S8;58、过程结束;ACJFA匹配过程:51、设定数据块的长度为Len_Block;52、假设i代表数据块的第i个位置,i的值变化从1至Len_Block,i的初值设定为1;53、函数DFA_Executei,Len_Block执行在数据块的第i个位置的模式匹配过程;34、1的值增加1;55、如果i的值小于等于Len_Block,转到S3,否则,转到S6;56、AC_DFA匹配过程结束;Slave从进程包括:51、接收Master传送的DFA自动机;52、发送给Master本进程编号的工作状态为忙;53、接收Master传送的文件的数据块,并记录数据块编号;54、执行AC_DFA匹配过程;55、发送给Master本进程编号的工作状态为空闲;一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统中,函数BlockPart的实现过程包括:51、获得文件File的长度为Len_File,定义文件当前位置为CurLoc,设定初始值为0,设定数据块彳目息表131〇〇1^_11^〇的1\1_131〇〇1MaxBlock,则设定:ArrBlock[N—Block].Begin=CurLoc,ArrBlock[N—Block].End=CurLoc+MaxBlock-1,N_Block的值增加UPN_Block=N_Block+l,ArrBlock[N—Block].Begin=CurLoc+MaxBlock_MaxPattern+l,ArrBlock[N—Block].End=CurLoc+MaxBlock+MaxPattern-2,CurLoc=CurLoc+MaxBlock,N_Block的值增加UPN_Block=N_Block+l,转到S3;54、如果(CurLoc+MaxBlock〈Len—File并且(Len—File-CurLoc-MaxBlock〈=MaxBlock,则设定:ArrBlock[N—Block].Begin=CurLoc,ArrBlock[N—Block].End=Len—File-1,55、结束。

百度查询: 哈尔滨理工大学 基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。