一种基于中标麒麟操作系统的内核动态执行网络的实现方法和装置与流程

文档序号:11707390阅读:278来源:国知局
一种基于中标麒麟操作系统的内核动态执行网络的实现方法和装置与流程

本发明涉及计算机技术领域,并且更具体地涉及一种基于中标麒麟操作系统的内核动态执行网络的实现方法和装置。



背景技术:

中标麒麟操作系统是一套类unix操作系统,是一个基于posix和unix的多用户、多任务、支持多线程和多cpu的操作系统。它能运行主要的unix工具软件、应用程序和网络协议,支持32位和64位硬件。中标麒麟操作系统继承了unix网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

然而中标麒麟操作系统是一个非常复杂的多人合作操作系统,在2.0版本内核代码就已经超过40万行。一方面,用户追求系统的可靠性,希望系统功能稳定全面,另一方面,稳定性带来了复杂性,且两者之间的关系相互联系又相互制约。然而,操作系统的复杂性不仅表现为自身规模庞大、内部控制多样,同时动态的应用执行环境也为系统引入了新的复杂性,且动态执行的过程中,系统行为会因随机数、异步操作、错误状态等原因出现某些不确定性,这就使得linux内核动态执行时具有一定的内在随机性。加之cpu为了提高计算能力,引入了超标量、分支预测、虚拟化,以及多核运算等技术,使得处理器在动态运行时其状态也具有一定的不确定性。以系统调用为例,其编译过程的执行树是单一确定的,但当系统运行时对其追踪,执行树的追踪结果往往呈现出多样化。因此基于操作系统的动态数据构建内核动态执行网络不但工程庞大难以实现,而且综合成本高昂。

目前,建立linux内核函数调用图对其进行研究的方法主要是针对编译内核过程中产生的函数调用关系,即记录每个内核原文件在编译过程中生成的调用树。然后,结合所有函数调用关系构建内核网络,生成linux内核全局函数调用关系图。使用上述方法产生的调用关系图包含了内核的所有基本功能模块,但是,这种方法属于静态获取函数间调用关系,因此研究范围被限定在对内核演化及结构稳定性等特征的挖掘上,不能反应操作系统的动态执行行为。



技术实现要素:

针对上述现有技术中存在的问题,本发明的目的在于提供一种基于中标麒麟操作系统的内核动态执行网络的实现方法和装置,基于追踪系统调用数据的内核动态执行网络,将多次执行过程抽象为有向加权网络并从中研究系统内核动态行为特征,从而揭示系统内部规律的过程,具有工程相对简单、综合成本相对低的特点。

根据本发明,提供一种基于中标麒麟操作系统的内核动态执行网络的实现方法,该方法包括以下步骤:

步骤s01:基于所述中标麒麟操作系统的开源posix,利用ftrace工具自动追踪系统调用以收集动态数据;

步骤s02:基于所述系统调用,构建所述内核动态执行网络;

步骤s03:统计分析所述内核动态执行网络的基本特征。

进一步地,步骤s01包括以下步骤:

步骤s011:运行开源posixtestsuite测试集;

步骤s012:使用ftrace追踪所述测试集中可执行文件的系统调用和所述系统调用的函数执行图谱,并保存追踪结果;

步骤s013:对所述追踪结果进行过滤以删除多余的信息。

进一步地,步骤s02包括以下步骤:

步骤s021:构建单一系统调用的有向图;

步骤s022:基于所述单一系统调用,进行100次追踪以建立所述单一系统调用的有向加权图;

步骤s023:去除所述追踪中的无效追踪,合并所有所述单一系统调用的有向加权图以构建所述系统调用的全局内核动态执行网络。

进一步地,基本特征包含所述内核动态执行网络的平均度、平均路径长度、聚类系数、连通性中的一个或多个。

根据本发明,还提供一种基于中标麒麟操作系统的内核动态执行网络的实现装置,该装置包括:

基于所述中标麒麟操作系统的开源posix,利用ftrace工具自动追踪系统调用以收集动态数据的装置;

基于所述系统调用,构建所述内核动态执行网络的装置;

统计分析所述内核动态执行网络的基本特征的装置。

进一步地,利用ftrace工具自动追踪系统调用以收集动态数据的装置包括:

运行开源posixtestsuite测试集的装置;

使用所述ftrace工具追踪所述测试集中可执行文件的系统调用和所述系统调用的函数执行图谱,并保存追踪结果的装置;

对所述追踪结果进行过滤以删除多余的信息的装置。

进一步地,构建所述内核动态执行网络的装置包括:

构建单一系统调用的有向图的装置;

基于所述单一系统调用,进行100次追踪以建立所述单一系统调用的有向加权图的装置;

去除所述追踪中的无效追踪,合并所有所述单一系统调用的有向加权图以构建所述系统调用的全局内核动态执行网络的装置。

进一步地,基本特征包含所述内核动态执行网络的平均度、平均路径长度、聚类系数、连通性中的一个或多个。

根据本发明,还提供一种计算机可读存储介质,其上存储有计算机程序(指令),用于实现基于中标麒麟操作系统的内核动态执行网络,当程序(指令)被处理器执行时,实现基于中标麒麟操作系统的内核动态执行网络的实现方法的步骤。

本发明基于中标麒麟操作系统,通过追踪系统调用构建内核动态执行网络,从而揭示系统内部规律的过程。与现有的内核动态执行网络构建方法相比,本发明具有构建内核动态执行网络相对简单、综合成本相对较低的优点。

附图说明

图1为根据本发明的一个实施例的动态数据收集架构示意图;

图2为根据本发明的另一个实施例的内核动态执行网络构建及分析流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

为了研究国产化linux系统的实际运行情况,并对系统失效做出预测,内核执行网络的建立必须依赖于系统的实际执行过程。然而linux作为一个通用的复杂操作系统,无法人为的对操作系统的所有执行过程和状态进行逐一研究,因此需要把工作限定在一个特定的环境下,在保证该环境具有代表性、通过性的前提下,又必须是可获取的操作系统的子集,进而对这个子集进行研究来代替全局性的研究。

与先前研究和软件相关的复杂网络特性不同,本发明主要研究基于追踪系统调用数据的内核动态执行网络,将多次执行过程抽象为有向加权网络并从中研究系统内核动态行为特征,从而揭示系统内部规律的过程。内核动态执行网络是指在内核运行过程中根据实际需求产生的动态函数调用关系而构建的网络,本发明以linux内核函数实体为网络节点,将函数调用关系看作是节点间的有向边,进而将linux内核的动态行为实例化为网络。

根据本发明的一个实施例,首先,设计内核动态数据收集架构,换言之,基于中标麒麟操作系统,将工作范围限定在开源posixtestsuite测试集,利用ftrace工具实现自动追踪系统调用。然后,基于追踪结果,构建内核动态执行网络,主要包括将内核动态行为抽象成有向加权网络。最后,对内核动态执行网络中的网络特征进行统计分析,即从度、权值、聚类系数等角度对内核动态执行网络中的关键节点和重要路径进行深入挖掘,参照追踪结果中的时间信息并结合内核函数定义,分析关键函数、关键路径对系统性能和稳定性的影响。具体实现方式如下:

首先,在用户空间运行开源posixtestsuite测试集,主要是利用开源posixtestsuite测试集中的测试用例在执行过程中会触发系统调用。使用ftrace对测试过程中的系统调用进行追踪,即利用ftrace工具的“kernelfunctiontracer”功能追踪测试集中所有可执行文件用到的全部系统调用,并将系统调用的名称保存到相应文件中。例如:测试集中包含有名称为“threads#schedule#1-2.test”的可执行文件,执行该文件过程中,将触发的所有系统调用的名称保存到“threads#schedule#1-2.test#called_syscall”文件中,然后再以这些系统调用名为接口函数格式化追踪到的内核函数执行路径,为了保证追踪到的同一系统调用的执行环境相同,所有追踪结果都是尽可能通过执行同一个测试文件完成,如果两次追踪的函数调用路径完全相同,则认为是同一个执行树。最后,追踪所有被触发的系统调用的函数执行图谱、保存追踪结果并筛选系统调用以及相关的内核函数。

其次,构建内核动态执行网络。首先,以单一系统调用为基础构建其有向图,然后,针对该单一系统调用进行100次追踪以建立该单一系统调用的有向加权图,接着,进行数据过滤以除去无效追踪,最后,合并所有单一系统调用的有向加权图以构建全局内核动态执行网络。

最后,利用pajek复杂网络分析工具对内核动态执行网络的平均度、平均路径长度、聚类系数、连通性等基本特征进行了统计分析。该pajek复杂网络分析工具是由vladimirbatagelj和andrejmrvar共同编写的,主要是基于图论、网络分析及可视化软件发展而来,可以免费提供给非商业用途的用户。

图1示出了根据本发明的一个实施例的动态数据收集架构示意图。如图1所示,运行posixtestsuite测试程序集合,其中部分测试会调用系统调用以获取linux内核提供的服务或者资源。利用ftrace工具追踪可执行文件触发的系统调用和这些系统调用在内核态中的函数执行图谱,并将追踪结果经过格式化处理保存到数据库中以实现动态数据的收集。ftrace工具的追踪结果除了包含指定系统调用的执行树外,还包括追踪过程中的一些其它信息,在数据处理过程中,将删除多余的信息只保存有效信息。在对已经追踪到的数据进行过滤时,需要注意以下几点:

(1)获取执行测试文件而触发的系统调用只需要匹配sys_*开头的语句即可。

(2)获取系统调用的执行树需要保证执行树内容的完整性,这里通过匹配{}来完成,ftrace工具的“function_graph”追踪器对于追踪到的每一个内核函数都是以“{”开始,以“}”结束。

(3)在对比执行树的过程中,首先对所有被追踪到的系统调用的执行树进行格式化处理,然后逐个对比两棵执行树是否一致,一致则合并。然后根据合并后的结果计算出追踪结果中有多少棵相同的执行树和不同的执行树。

图2示出了根据本发明的另一个实施例的内核动态执行网络构建及分析流程图。根据本发明,将中标麒麟操作系统的内核函数作为网络节点,将函数调用关系作为节点间的有向边,进而将linux内核的动态行为实例化为网络g。实例化后的网络g可用二元组g=<v,w>进行描述,其中,vi={v1,v2,…,vm}是网络节点的集合,wij={w12,w13,…,wnn}是网络的节点间有向加权边的集合,wij表示网络中带有指向及其权重的边。在此使用邻接矩阵w表示函数间调用关系的集合,矩阵w中的元素wij的值表示节点i指向节点j的权重,i为节点i所在矩阵的行号,j为节点j所在矩阵的列号。如图2所示,内核动态执行网络的构建和分析方法的步骤具体如下:

步骤1:构建单次系统调用执行网络。首先,搭建posixtestsuite测试环境,执行posixtestsuite测试集并追踪测试过程中调用的系统调用,将追踪结果保存在数据库中,然后对数据库中的数据(诸如系统调用名等)进行格式化,并对执行过程中用到的函数名进行除重操作,最后求出函数指向关系集合,用python实现的关键代码如下:

vertices_unique=list(set(vertices))

vertices_unique.sort(key=vertices.index)

上式中,vertices表示原始节点列表,vertices_unique表示除重后的结果列表,除重后的数据保持原节点列表的排序方式。

采用邻接矩阵算法编写脚本,计算g=<v,e>的表征该单一系统调用的有向图,并生成.net文件,然后利用pajek工具绘出函数间调用关系(即调用树),具体代码实现如下:

步骤2:构建单一系统调用的有向加权网络。对于系统调用而言,由于多次执行的路径可能并非完全一致,基于这样的特性,为了研究内核动态执行的真实情况,在此以100次执行为基数考查系统调用的调用树,来近似全部的系统调用执行路径。基于定义的有向加权网络对单一系统调用的调用树进行合并,得出内核函数的节点集合,并求出其邻接矩阵。在布局时,在不考虑边长的情况下,以kamada和kawai算法对节点进行布局,进而绘出单一系统调用的有向加权网络。

步骤3:数据过滤并构建内核动态执行网络。在步骤2中,得到单一系统调用的调用树和与调用树相对应的动态执行网络。由于操作系统在运行过程中系统环境是动态变化的,一些系统调用因其自身特性导致100次执行的调用树会出现很大差异,需要对数据进行过滤,以确定哪些追踪结果可以用于内核动态执行网络构建,哪些结果必须舍去。通过kamada-kawai分离组件算法布局,以对步骤2中的单一系统调用进行合成以生成全局内核动态执行网络。

步骤4:利用pajek复杂网络分析工具,进行网络度量和分析,具体包括网络结构特征分析和关键节点行为分析,诸如内核动态执行网络的平均度、平均路径长度、聚类系数、连通性等基本特征。

关于这里所述的过程、系统、方法等,应理解的是虽然这样的过程等的步骤描述为按照一定的顺序排列发生,但这样的过程可以采用以这里描述的顺序之外的顺序完成的描述的步骤实施操作。进一步应该理解的是,某些步骤可以同时执行,可以添加其他步骤,或者可以省略这里所述的某些步骤。换言之,这里的过程的描述提供用于说明某些实施例的目的,并且不应该以任何方式解释为限制要求保护的发明。

相应地,应理解的是上面的描述的目的是说明而不是限制。在阅读上面的描述时,除了提供的示例外许多实施例和应用都是显而易见的。本发明的范围应参照所附权利要求以及与权利要求所要求的权利等效的全部范围而确定,而不是参照上面的说明而确定。可以预期的是这里所讨论的领域将出现进一步的发展,并且所公开的系统和方法将可以结合到这样的未来的实施例中。总之,应理解的是本发明能够进行修正和变化。

还应当理解的是,任何所述的过程或所述过程中的步骤可以与其它公开的过程或步骤组合以形成本公开范围内的结构。本文公开的示例性结构、和过程是为了说明的目的,而不应被解释为限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1