CN111966383B - 一种操作系统内核兼容性量化分析方法、系统和介质 - Google Patents
一种操作系统内核兼容性量化分析方法、系统和介质 Download PDFInfo
- Publication number
- CN111966383B CN111966383B CN202010915757.9A CN202010915757A CN111966383B CN 111966383 B CN111966383 B CN 111966383B CN 202010915757 A CN202010915757 A CN 202010915757A CN 111966383 B CN111966383 B CN 111966383B
- Authority
- CN
- China
- Prior art keywords
- kernel
- version
- module
- compatibility
- updated version
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种操作系统内核兼容性量化分析方法、系统和介质,本发明包括获取针对Linux操作系统内核进行编译得到的初始版本V1和更新版本V2;将内核模块划分为初始版本独有、更新版本独有、共有三类;确定独有的内核模块的兼容率为0,针对共有的内核模块根据差异计算对应的兼容率MCP,得到任意共有的内核模块i的兼容率MCP[i]。本发明能够针对Linux操作系统内核进行全模块编译得到的初始版本V1和更新版本V2通过比较内核模块版本间升级前后的模块数量、模块构成、模块内接口函数差异和数据差异,给出内核版本之间的兼容性的量化结果,通过定量分析内核版本间的兼容程度,保证内核升级的可控性。
Description
技术领域
本发明涉及Linux操作系统内核兼容性分析技术,具体涉及一种操作系统内核兼容性量化分析方法、系统和介质。
背景技术
Linux操作系统采用大内核结构,设备驱动、文件系统等扩展功能采用内核模块的方式实现,与进程管理、内存管理等核心功能协同完成管理硬件设备以及向应用提供服务的功能。内核模块之间以及与核心功能之间通过函数调用来实现数据流和计算流的传递。
内核由一系列功能函数和数据构成,功能函数是实现功能逻辑的程序代码。为了降低单个函数实现复杂性,往往会将一个大的功能拆分成多个函数实现,主函数调用这些函数,完成复杂功能。一个功能往往会拆分成多个函数,并且封装在多个内核模块中。其中封装了进程管理、内存管理、进程间通信等核心功能函数的内核模块比较特殊,它需要最先被加载,为核心模块,在Linux中称为vmlinuz。文件管理、设备驱动等具有独立功能的函数则封装在各种文件系统、块设备、字符设备、网络设备等模块中,表现为以ko为后缀的文件。随着内核功能的日益丰富,内核模块的数量逐渐增长,目前Linux内核模块数量在6000+以上。
由于修补缺陷或者是功能升级的原因,内核模块的实现会随着时间而发生变化,这些变化包括函数增减、函数参数和返回值等语法改变以及一些函数语义改变。当内核模块中的函数发生改变后,调用该函数的其他内核模块函数将会受到影响,出现无法执行或者执行异常的情况,上述的情况就是内核模块兼容性问题。
解决内核模块兼容性问题的最直接的方法是保持内核模块外部接口的后向兼容性,另外一个途径是修改受到函数接口变化影响的内核模块,使其保持与新接口一致。这两种方法都需要的一个前提是对外部接口进行检查和监控,找出差异量。在实际的系统升级时,内核版本间实现差异决定了内核升级时兼容的工作量,量化出差异可以为兼容工作指出的具体方向和工作内容。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种操作系统内核兼容性量化分析方法、系统和介质,本发明能够针对Linux操作系统内核进行全模块编译得到的初始版本V1和更新版本V2通过比较内核模块版本间升级前后的模块数量、模块构成、模块内接口函数差异和数据差异,给出内核版本之间的兼容性的量化结果,通过定量分析内核版本间的兼容程度,保证内核升级的可控性。
为了解决上述技术问题,本发明采用的技术方案为:
一种操作系统内核兼容性量化分析方法,包括:
1)获取针对Linux操作系统内核根据配置文件Config进行编译得到的初始版本V1和更新版本V2;
2)按照名称将初始版本V1和更新版本V2中的内核模块划分为初始版本独有、更新版本独有、共有三类;
3)确定初始版本独有、更新版本独有的内核模块的兼容率为0,针对共有的内核模块根据其在初始版本V1和更新版本V2之间的差异计算对应的兼容率MCP,得到任意共有的内核模块i在初始版本V1和更新版本V2之间的兼容率MCP[i]。
可选地,步骤3)中任意共有的内核模块i在初始版本V1和更新版本V2之间的兼容率MCP[i]的计算步骤包括:
3.1)针对目标内核模块i分别扫描初始版本V1和更新版本V2的符号表,得到初始版本V1中的函数集合{F1}和更新版本V2中的函数集合{F2};
3.2)比较初始版本V1中的函数集合{F1}和更新版本V2中的函数集合{F2}之间的差异,得到初始版本V1中的函数集合{F1}相对于更新版本V2中的函数集合{F2}的函数增加数FIN、函数减少个数FDN、以及共有函数集合{F1}^{F2};
3.3)针对共有函数集合{F1}^{F2}中的函数,根据函数重构情况划分为未重构、存在重构的两个子集,得到重构函数个数FMN和未重构函数个数FUN;
3.4)根据MCP[i]=FUN/(FIN+FDN+FMN+FUN)计算得到目标内核模块i的兼容率MCP[i]。
可选地,步骤3)之后还包括针对任意目标内核模块i计算其在初始版本V1和更新版本V2之间的后向兼容率MBCP[i]的下述步骤:
A1)针对目标内核模块i分别扫描初始版本V1和更新版本V2的符号表,得到初始版本V1中的内部调用函数集合{F1}IF、更新版本V2中的内部调用函数集合{F2}IF、初始版本V1中的外部调用函数集合{F1}CF、更新版本V2中的外部调用函数集合{F2}CF;
A2)比较初始版本V1中的内部调用函数集合{F1}IF、更新版本V2中的内部调用函数集合{F2}IF的构成差异,得到初始版本V1中的内部调用函数集合{F1}IF相对于更新版本V2中的内部调用函数集合{F2}IF的函数减少数IFDN,以及初始版本V1中的内部调用函数集合{F1}IF、更新版本V2中的内部调用函数集合{F2}IF之间的内部共有函数集合{F1}IF^{F2}IF;比较初始版本V1中的外部调用函数集合{F1}CF、更新版本V2中的外部调用函数集合{F2}CF的构成差异,得到初始版本V1中的外部调用函数集合{F1}CF相对于更新版本V2中的外部调用函数集合{F2}CF的函数增加数CFIN,以及初始版本V1中的外部调用函数集合{F1}CF、更新版本V2中的外部调用函数集合{F2}CF之间的外部共有函数集合{F1}CF^{F2}CF;
A3)针对内部共有函数集合{F1}IF^{F2}IF、外部共有函数集合{F1}CF^{F2}CF中的函数,比较其在初始版本V1中的函数集合{F1}和更新版本V2中的函数集合{F2}之间的差异,划分为未重构和存在重构的两个子集,得到重构函数个数ICFMN和未重构函数个数ICFUN;
A4)根据MBCP[i]=ICFUN/(CFIN+IFDN+ICFMN+ICFUN)计算得到目标内核模块i在初始版本V1和更新版本V2之间的后向兼容率MBCP[i]。
可选地,步骤3)之后还包括计算初始版本V1和更新版本V2之间的内核版本差异性的下述步骤:
B1)针对初始版本V1,根据所有内核模块之间的依赖关系建立所有内核模块的全模块依赖图,根据全模块依赖图确定各个内核模块的权重Wdep[i],且全模块依赖图中所有内核模块构成的节点的权重之和为1;其中权重Wdep[i]=Ndep/DN,Ndep为依赖该内核模块i的模块数量,DN内核模块依赖数的总和;
B2)根据计算得到计算初始版本V1和更新版本V2之间的内核版本差异性,其中MN为全模块依赖图中的总节点数量,MCP[i]表示内核模块i在初始版本V1和更新版本V2之间的兼容率。
可选地,步骤3)之后还包括计算初始版本V1和更新版本V2之间的内核版本兼容率KCP的下述步骤:
C1)针对初始版本V1,根据所有内核模块之间的依赖关系建立所有内核模块的全模块依赖图,根据全模块依赖图确定各个内核模块的权重Wdep[i],且全模块依赖图中所有内核模块构成的节点的权重之和为1;
C2)根据计算得到计算初始版本V1和更新版本V2之间的内核版本兼容率KCP,其中MN为全模块依赖图中的总节点数量,MCP[i]表示内核模块i在初始版本V1和更新版本V2之间的兼容率。
可选地,步骤3)之后还包括计算初始版本V1和更新版本V2之间的内核版本向后兼容率KBCP的下述步骤:
D1)针对初始版本V1,根据所有内核模块之间的依赖关系建立所有内核模块的全模块依赖图,根据全模块依赖图确定各个内核模块的权重Wdep[i],且全模块依赖图中所有内核模块构成的节点的权重之和为1;其中权重Wdep[i]=Ndep/DN,Ndep为依赖该内核模块i的模块数量,DN内核模块依赖数的总和;
D2)根据计算得到计算初始版本V1和更新版本V2之间的内核版本兼容率KCP,其中MN为全模块依赖图中的总节点数量,MBCP[i]表示内核模块i在初始版本V1和更新版本V2之间的后向兼容率。
可选地,步骤1)之前还包括针对Linux操作系统内核的初始版本V1和更新版本V2进行全模块编译的步骤,且全模块编译得到的初始版本V1和更新版本V2的格式分别为MV1={vmlinuz-1,*-1.ko}和MV2={vmlinuz-2,*-2.ko},其中vmlinuz-1封装了初始版本V1的核心功能,*-1.ko封装了初始版本V1的所有可选功能模块,vmlinuz-2封装了更新版本V2的核心功能,*-1.ko封装了更新版本V2的所有可选功能模块,其中*为表示任意字符的通配符。
此外,本发明还提供一种操作系统内核兼容性量化分析系统,包括计算机设备,该计算机设备被编程或配置以执行所述的操作系统内核兼容性量化分析方法的步骤。
此外,本发明还提供一种操作系统内核兼容性量化分析系统,包括计算机设备,该计算机设备的存储器中存储有被编程或配置以执行所述的操作系统内核兼容性量化分析方法的计算机程序。
此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行所述的操作系统内核兼容性量化分析方法的计算机程序。
和现有技术相比,本发明具有下述优点:本发明包括获取针对Linux操作系统内核进行全模块编译得到的初始版本V1和更新版本V2;将内核模块划分为初始版本独有、更新版本独有、共有三类;确定独有的内核模块的兼容率为0,针对共有的内核模块根据差异计算对应的兼容率MCP,得到任意共有的内核模块i的兼容率MCP[i]。本发明能够针对Linux操作系统内核进行全模块编译得到的初始版本V1和更新版本V2通过比较内核模块版本间升级前后的模块数量、模块构成、模块内接口函数差异和数据差异,给出内核版本之间的兼容性的量化结果,通过定量分析内核版本间的兼容程度,保证内核升级的可控性。
附图说明
图1为本发明实施例方法的基本流程示意图。
图2为本发明实施例方法的整体步骤示意图。
具体实施方式
如图1所示,本实施例操作系统内核兼容性量化分析方法包括:
1)获取针对Linux操作系统内核进行全模块编译得到的初始版本V1和更新版本V2;
2)按照名称将初始版本V1和更新版本V2中的内核模块划分为初始版本独有、更新版本独有、共有三类;
3)确定初始版本独有、更新版本独有的内核模块的兼容率为0,针对共有的内核模块根据其在初始版本V1和更新版本V2之间的差异计算对应的兼容率MCP,得到任意共有的内核模块i在初始版本V1和更新版本V2之间的兼容率MCP[i]。
从实现角度看,内核由函数和数据组成,函数包含了实现功能的程序代码。为了降低单个函数实现复杂性,往往会将一个大的功能拆分成多个函数实现,主体函数调用这些函数,完成复杂功能。一个功能往往会拆分成多个函数,并且封装在多个内核模块中。从Linux内核功能组成看,内核包含了数千种内核功能,其中进程管理、内存管理等核心功能封装在称为vmlinuz的模块中,其余的一些可选附加功能可以通过编译和核心功能一样集成封装在vmlinuz中,也可以单独的封装在以ko为后缀的内核模块文件中。配置项是内核编译时的指导文件,它规定了哪些内核功能和开关需要被编译,包括哪些功能模块被编入进内核vmlinuz,哪些模块被编译为模块ko,以及内核参数的取值,包括数值和布尔值。在实际的生产系统中,配置项中决定了vmlinuz内函数的实际组成和数据的取值以及内核模块ko的组成个数等,为了比较两个版本的内核在某类生产系统中的差异,在编译时需要采用该生产系统的配置项。除了上述指定配置项,本实施例还在内核进行编译时,还采用将所有的可编译为内核模块的功能项全部以内核模块的方式编译的方式,最大限度的编译出所有的内核。在实现时,Linux内核编译系统支持allmodconfig选项,可以将所有的可选功能模块以ko的方式编译并封装,在本实施例中称为全模块编译。本实施例中并且为了满足兼容检测的要求,在编译选项的配置时需要将dwarf调试信息编译到内核中去。通过上述方法,本实施例步骤1)之前还包括针对Linux操作系统内核的初始版本V1和更新版本V2进行全模块编译的步骤,且全模块编译得到的初始版本V1和更新版本V2的格式分别为MV1={vmlinux-1,*-1.ko}和MV2={vmlinux-2,*-2.ko},其中vmlinux-1封装了初始版本V1的核心功能,*-1.ko封装了初始版本V1的所有可选功能模块,vmlinux-2封装了更新版本V2的核心功能,*-1.ko封装了更新版本V2的所有可选功能模块,其中*为表示任意字符的通配符。其中,vmlinuz也是一种内核模块,具有与ko相同的封装形式,本实施例后续不再区分。
从内核组成的角度看,内核由实现各类功能的内核模块组成。模块由于功能升级和缺陷修复等的原因,内核模块的数量和内核模块构成始终演化之中:主体会保持相对的稳定,但会通过增加或减少部分内核模块的方式来对功能进行取舍。Linux内核模块名称表明了功能,可作为内核模块的ID。步骤2)按照名称将初始版本V1和更新版本V2中的内核模块划分为初始版本独有、更新版本独有、共有三类之后,可进一步计算出共有模块在总模块中的占比,以及V1独有和V2独有在总模块中的占比。
本实施例中,步骤3)中任意共有的内核模块i在初始版本V1和更新版本V2之间的兼容率MCP[i]的计算步骤包括:
3.1)针对目标内核模块i分别扫描初始版本V1和更新版本V2的符号表,得到初始版本V1中的函数集合{F1}和更新版本V2中的函数集合{F2};
3.2)比较初始版本V1中的函数集合{F1}和更新版本V2中的函数集合{F2}之间的差异,得到初始版本V1中的函数集合{F1}相对于更新版本V2中的函数集合{F2}的函数增加数FIN、函数减少个数FDN、以及共有函数集合{F1}^{F2};
3.3)针对共有函数集合{F1}^{F2}中的函数,根据函数重构情况划分为未重构、存在重构的两个子集,得到重构函数个数FMN和未重构函数个数FUN;
3.4)根据MCP[i]=FUN/(FIN+FDN+FMN+FUN)计算得到目标内核模块i的兼容率MCP[i]。
目标内核模块i的兼容率MCP[i]表示模块版本间的兼容率,即未发生变化的函数在总函数中的比率。函数的兼容率越高,兼容性越好。
从实现角度看,内核模块由函数和数据组成,函数包含实现功能的程序代码。为了降低单个函数实现复杂性,往往会将一个大的功能拆分成多个函数实现,主体函数调用这些函数,完成复杂功能。一个功能往往会拆分成多个函数,并且封装在多个内核模块中。因此跨模块之间的函数调用非常普遍。按照功能的不同,内核模块中的函数包括两类,一种是内核模块功能函数,本文中称之为InFun,它是实现体均在内核模块中函数,按照是否被其他模块引用,更加细致的划分IFInFun和INInFun,其中IFInFun是显式的允许被外部函数引用的,INInFun则是仅仅在模块内部引用的函数;一种是内核调用函数,本文中称为CallFun,它是实现体在其他内核模块中,而被本模块中的函数调用的函数。在一个内核模块的版本更迭中,InFun和CallFun两类函数均可能会发生变化,变化可分为函数语法和函数语义两类改变。其中函数语法的改变包括函数增减、函数中输入参数、输出参数的类型、数量、取值范围,这些从语法形式上就可以识别的变化,函数语义的变化则是指函数在实现过程中对系统状态的影响发生了变化。对于一个内核模块,版本间函数增加和函数减少可通过扫描内核模块的符号表节,比较两个版本间的函数符号的差异获得。函数的输入参数、输出参数的类型、数量、取值范围等变化类型,可以在内核模块编译时加入额外dwarf调试信息中得到。函数语义的改变,涉及到函数的内部实现,仅从二进制文件的符号表等结构信息上无法获得,直观得看需要比较函数实现体的差异来获取。从兼容的角度看,任何的函数改变都可能影响到系统的兼容性。从后向兼容角度看,CallFun函数的减少和InFun函数的增加以及INInFun函数的改变对模块的后向兼容性并没有实际的影响。CallFun函数的增加、IFInFun函数的减少和这两类函数实现接口参数和返回值的变化(函数重构)则是影响后向兼容性的主要因素。
根据变化的类型对兼容性的影响,给出如下的量化加权值。
函数变化类型 | 后向兼容影响的量化加权 | 兼容影响的量化加权 | |
1 | IFInFun增加/CallFun减少 | 0 | 1 |
2 | IFInFun减少/CallFun增加 | 1 | 1 |
3 | IFInFun/CallFun函数语法改变 | 1 | 1 |
4 | IFInFun/CallFun函数语义改变 | 1 | 1 |
5 | INInFun增减和改变 | 0 | 1 |
由上述的分析,版本差异性检测可以分函数增加、减少、函数语法改变、函数语义改变四类。由于这些改变对系统兼容性的影响各有不同,本实施例给出了针对后向兼容性的一个量化加权的参考值。针对同一内核模块版本之间的这些变化,扫描内核模块编译后的二进制文件,通过对二进制文件中的符号表、调试信息表的扫描和解析,可以获得部分函数变化信息。需要说明的是,Linux内核编译之后生成的二进制模块是以elf格式文件组织存放,elf格式的文件包含了若干节,其中符号表节_ksymtab中包含内核模块中所有export函数名,这些export函数就是可以被其他模块调用的IFInFun函数。dwarf调试信息表中有具体的函数参数和返回值信息。函数的实现体中会包含函数的语义信息。
参见图2,本实施例步骤3)之后还包括针对任意目标内核模块i计算其在初始版本V1和更新版本V2之间的后向兼容率MBCP[i]的下述步骤:
A1)针对目标内核模块i分别扫描初始版本V1和更新版本V2的符号表,得到初始版本V1中的内部调用函数(IFInFun)集合{F1}IF、更新版本V2中的内部调用函数(CallFun)集合{F2}IF、初始版本V1中的外部调用函数集合{F1}CF、更新版本V2中的外部调用函数集合{F2}CF;
A2)比较初始版本V1中的内部调用函数集合{F1}IF、更新版本V2中的内部调用函数集合{F2}IF的构成差异,得到初始版本V1中的内部调用函数集合{F1}IF相对于更新版本V2中的内部调用函数集合{F2}IF的函数减少数IFDN,以及初始版本V1中的内部调用函数集合{F1}IF、更新版本V2中的内部调用函数集合{F2}IF之间的内部共有函数集合{F1}IF^{F2}IF;比较初始版本V1中的外部调用函数集合{F1}CF、更新版本V2中的外部调用函数集合{F2}CF的构成差异,得到初始版本V1中的外部调用函数集合{F1}CF相对于更新版本V2中的外部调用函数集合{F2}CF的函数增加数CFIN,以及初始版本V1中的外部调用函数集合{F1}CF、更新版本V2中的外部调用函数集合{F2}CF之间的外部共有函数集合{F1}CF^{F2}CF;
A3)针对内部共有函数集合{F1}IF^{F2}IF、外部共有函数集合{F1}CF^{F2}CF中的函数,比较其在初始版本V1中的函数集合{F1}和更新版本V2中的函数集合{F2}之间的差异,划分为未重构和存在重构的两个子集,得到重构函数个数ICFMN(包含IFInFun/CallFun函数重构数)和未重构函数个数ICFUN(包含IFInFun/CallFun函数未重构数);
A4)根据MBCP[i]=ICFUN/(CFIN+IFDN+ICFMN+ICFUN)计算得到目标内核模块i在初始版本V1和更新版本V2之间的后向兼容率MBCP[i]。
后向兼容率MBCP[i]表示模块版本间的后向兼容率,未发生变化的接口函数在总接口函数中的比率。函数的后向兼容率越高,兼容性越好。
参见图2,本实施例步骤3)之后还包括计算初始版本V1和更新版本V2之间的内核版本差异性的下述步骤:
B1)针对初始版本V1,根据所有内核模块之间的依赖关系建立所有内核模块的全模块依赖图,根据全模块依赖图确定各个内核模块的权重Wdep[i],且全模块依赖图中所有内核模块构成的节点的权重之和为1;其中权重Wdep[i]=Ndep/DN,Ndep为依赖该内核模块i的模块数量(依赖图中该模块的入度),DN内核模块依赖数的总和(依赖图中的总入度数);
B2)根据计算得到计算初始版本V1和更新版本V2之间的内核版本差异性,其中MN为全模块依赖图中的总节点数量,MCP[i]表示内核模块i在初始版本V1和更新版本V2之间的兼容率。
全模块依赖图的构建方法为:生成所有内核模块构成的节点,然后针对存在调用关系的内核模块,在其对应的节点之间构建发起调用的内核模块指向被调用的内核模块的有向边,从而得到有节点和有向边构成的全模块依赖图。
本实施例中,全模块依赖图中各个内核模块的权重Wdep[i]为Ndep/DN,其中Ndep为该内核模块的入度,DN为全模块依赖图中的总入度数。
内核版本表现为多个内核模块集合,这些内核模块中的所有外部可访问函数IFInFUN集合构成了内核版本的函数可访问API,内核模块的重要程度表现为依赖它的其他内核模块,在本实施例中,定义直接依赖于该内核模块的数量为该内核模块的依赖加权值。依赖于该内核模块的模块数量越多,表明该模块的重要性越大,它的改变对于系统的影响也会越大。将内核模块作为节点,如果内核模块A调用了内核模块B中的函数,就称A依赖于B,存在节点A指向B的一个有向边,对内核中的所有模块执行以下操作,由此可建立一个有向图G。该有向图G即为前文提及的全模块依赖图。
参见图2,本实施例步骤3)之后还包括计算初始版本V1和更新版本V2之间的内核版本兼容率KCP的下述步骤:
C1)针对初始版本V1,根据所有内核模块之间的依赖关系建立所有内核模块的全模块依赖图,根据全模块依赖图确定各个内核模块的权重Wdep[i],且全模块依赖图中所有内核模块构成的节点的权重之和为1;
C2)根据计算得到计算初始版本V1和更新版本V2之间的内核版本兼容率KCP,其中MN为全模块依赖图中的总节点数量,MCP[i]表示内核模块i在初始版本V1和更新版本V2之间的兼容率。
参见图2,本实施例步骤3)之后还包括计算初始版本V1和更新版本V2之间的内核版本向后兼容率KBCP的下述步骤:
D1)针对初始版本V1,根据所有内核模块之间的依赖关系建立所有内核模块的全模块依赖图,根据全模块依赖图确定各个内核模块的权重Wdep[i],且全模块依赖图中所有内核模块构成的节点的权重之和为1;其中权重Wdep[i]=Ndep/DN,Ndep为依赖该内核模块i的模块数量(依赖图中该模块的入度),DN内核模块依赖数的总和(依赖图中的总入度数);
D2)根据计算得到计算初始版本V1和更新版本V2之间的内核版本兼容率KCP,其中MN为全模块依赖图中的总节点数量,MBCP[i]表示内核模块i在初始版本V1和更新版本V2之间的后向兼容率。
综上所述,为了实现内核版本间的差异性量化,本实施例对于内核模块版本V1和V2,通过比较内核模块版本间升级前后的模块数量、模块构成、模块内接口函数差异和数据差异,给出内核版本之间的兼容性的量化方法。本实施例方法涉及Linux类操作系统内核以及内核模块升级时的版本兼容性保证技术领域,通过对内核以及内核模块的实现进行检测扫描,当某一内核版本升级后,比较内核版本升级前后内核模块版本间实现的差异,包括内核模块个数、模块构成,模块函数的实现差异,确定发生变化的内核模块集合和模块内的函数或接口函数变化集合;对发生变化的内核模块集合中的每一个模块,检查单个模块版本间的实现差异,给出内核模块两个版本间的兼容量化值,并加权扩展到全内核模块集合,从而给出内核两个版本间的内核兼容量化值,定量分析内核版本间的兼容程度,保证内核升级的可控性。
此外,本实施例还提供一种操作系统内核兼容性量化分析系统,包括计算机设备,该计算机设备被编程或配置以执行前述的操作系统内核兼容性量化分析方法的步骤。
此外,本实施例还提供一种操作系统内核兼容性量化分析系统,包括计算机设备,该计算机设备的存储器中存储有被编程或配置以执行前述的操作系统内核兼容性量化分析方法的计算机程序。
此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行前述的操作系统内核兼容性量化分析方法的计算机程序。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (7)
1.一种操作系统内核兼容性量化分析方法,其特征在于,包括:
1)获取针对Linux操作系统内核根据配置文件Config进行全模块编译得到的初始版本V1和更新版本V2;
2)按照名称将初始版本V1和更新版本V2中的内核模块划分为初始版本独有、更新版本独有、共有三类;
3)确定初始版本独有、更新版本独有的内核模块的兼容率为0,针对共有的内核模块根据其在初始版本V1和更新版本V2之间的差异计算对应的兼容率MCP,得到任意共有的内核模块i在初始版本V1和更新版本V2之间的兼容率 MCP[i];
步骤3)中任意共有的内核模块i在初始版本V1和更新版本V2之间的兼容率 MCP [i]的计算步骤包括:
3.1)针对目标内核模块i分别扫描初始版本V1和更新版本V2的符号表,得到初始版本V1中的函数集合{F1}和更新版本V2中的函数集合{F2};
3.2)比较初始版本V1中的函数集合{F1}和更新版本V2中的函数集合{F2}之间的差异,得到初始版本V1中的函数集合{F1}相对于更新版本V2中的函数集合{F2}的函数增加数FIN、函数减少个数FDN、以及共有函数集合{F1}^{F2};
3.3)针对共有函数集合{F1}^{F2}中的函数,根据函数重构情况划分为未重构、存在重构的两个子集,得到重构函数个数FMN和未重构函数个数FUN;
3.4)根据MCP[i]=FUN/(FIN+FDN+FMN+FUN)计算得到目标内核模块i的兼容率MCP[i];
步骤3)之后还包括针对任意目标内核模块i计算其在初始版本V1和更新版本V2之间的后向兼容率MBCP[i]的下述步骤:
A1)针对目标内核模块i分别扫描初始版本V1和更新版本V2的符号表,得到初始版本V1中的内部调用函数集合{F1}IF、更新版本V2中的内部调用函数集合{F2}IF、初始版本V1中的外部调用函数集合{F1}CF、更新版本V2中的外部调用函数集合{F2}CF;
A2)比较初始版本V1中的内部调用函数集合{F1}IF、更新版本V2中的内部调用函数集合{F2}IF的构成差异,得到初始版本V1中的内部调用函数集合{F1}IF相对于更新版本V2中的内部调用函数集合{F2}IF的函数减少数IFDN,以及初始版本V1中的内部调用函数集合{F1}IF、更新版本V2中的内部调用函数集合{F2}IF之间的内部共有函数集合{F1}IF^{F2}IF;比较初始版本V1中的外部调用函数集合{F1}CF、更新版本V2中的外部调用函数集合{F2}CF的构成差异,得到初始版本V1中的外部调用函数集合{F1}CF相对于更新版本V2中的外部调用函数集合{F2}CF的函数增加数CFIN,以及初始版本V1中的外部调用函数集合{F1}CF、更新版本V2中的外部调用函数集合{F2}CF之间的外部共有函数集合{F1}CF^{F2}CF;
A3)针对内部共有函数集合{F1}IF^{F2}IF、外部共有函数集合{F1}CF^{F2}CF中的函数,比较其在初始版本V1中的函数集合{F1}和更新版本V2中的函数集合{F2}之间的差异,划分为未重构和存在重构的两个子集,得到重构函数个数ICFMN和未重构函数个数ICFUN;
A4)根据MBCP [i]=ICFUN/(CFIN+IFDN+ICFMN+ICFUN) 计算得到目标内核模块i在初始版本V1和更新版本V2之间的后向兼容率MBCP[i];
步骤3)之后还包括计算初始版本V1和更新版本V2之间的内核版本兼容率KCP的下述步骤:
C1)针对初始版本V1,根据所有内核模块之间的依赖关系建立所有内核模块的全模块依赖图,根据全模块依赖图确定各个内核模块的权重Wdep[i],且全模块依赖图中所有内核模块构成的节点的权重之和为1;
C2)根据计算得到计算初始版本V1和更新版本V2之间的内核版本兼容率KCP,其中MN为全模块依赖图中的总节点数量,MCP[i]表示内核模块i在初始版本V1和更新版本V2之间的兼容率。
2.根据权利要求1所述的操作系统内核兼容性量化分析方法,其特征在于,步骤3)之后还包括计算初始版本V1和更新版本V2之间的内核版本差异性的下述步骤:
B1)针对初始版本V1,根据所有内核模块之间的依赖关系建立所有内核模块的全模块依赖图,根据全模块依赖图确定各个内核模块的权重Wdep[i],且全模块依赖图中所有内核模块构成的节点的权重之和为1;其中权重Wdep[i] =Ndep/DN,Ndep为依赖该内核模块i的模块数量,DN内核模块依赖数的总和;
B2)根据计算得到计算初始版本V1和更新版本V2之间的内核版本差异性,MN为全模块依赖图中的总节点数量,MCP[i]表示内核模块i在初始版本V1和更新版本V2之间的兼容率。
3.根据权利要求1所述的操作系统内核兼容性量化分析方法,其特征在于,步骤3)之后还包括计算初始版本V1和更新版本V2之间的内核版本向后兼容率KBCP的下述步骤:
D1)针对初始版本V1,根据所有内核模块之间的依赖关系建立所有内核模块的全模块依赖图,根据全模块依赖图确定各个内核模块的权重Wdep[i],且全模块依赖图中所有内核模块构成的节点的权重之和为1;其中权重Wdep[i] =Ndep/DN,Ndep为依赖该内核模块i的模块数量,DN内核模块依赖数的总和;
D2)根据计算得到计算初始版本V1和更新版本V2之间的内核版本兼容率KCP,其中MN为全模块依赖图中的总节点数量,MBCP[i]表示内核模块i在初始版本V1和更新版本V2之间的后向兼容率。
4.根据权利要求1所述的操作系统内核兼容性量化分析方法,其特征在于,步骤1)之前还包括针对Linux操作系统内核的初始版本V1和更新版本V2进行全模块编译的步骤,且全模块编译得到的初始版本V1和更新版本V2的格式分别为MV1={vmlinuz-1,*-1.ko}和MV2={vmlinuz-2,*-2.ko},其中vmlinuz-1封装了初始版本V1的核心功能,*-1.ko封装了初始版本V1的所有可选功能模块,vmlinuz-2封装了更新版本V2的核心功能,*-1.ko封装了更新版本V2的所有可选功能模块,其中*为表示任意字符的通配符。
5.一种操作系统内核兼容性量化分析系统,包括计算机设备,其特征在于,该计算机设备被编程或配置以执行权利要求1~4中任意一项所述的操作系统内核兼容性量化分析方法的步骤。
6.一种操作系统内核兼容性量化分析系统,包括计算机设备,其特征在于,该计算机设备的存储器中存储有被编程或配置以执行权利要求1~4中任意一项所述的操作系统内核兼容性量化分析方法的计算机程序。
7.一种计算机可读存储介质,其特征在于,该计算机可读存储介质中存储有被编程或配置以执行权利要求1~4中任意一项所述的操作系统内核兼容性量化分析方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010915757.9A CN111966383B (zh) | 2020-09-03 | 2020-09-03 | 一种操作系统内核兼容性量化分析方法、系统和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010915757.9A CN111966383B (zh) | 2020-09-03 | 2020-09-03 | 一种操作系统内核兼容性量化分析方法、系统和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111966383A CN111966383A (zh) | 2020-11-20 |
CN111966383B true CN111966383B (zh) | 2023-08-15 |
Family
ID=73393569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010915757.9A Active CN111966383B (zh) | 2020-09-03 | 2020-09-03 | 一种操作系统内核兼容性量化分析方法、系统和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111966383B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220147636A1 (en) * | 2020-11-12 | 2022-05-12 | Crowdstrike, Inc. | Zero-touch security sensor updates |
CN112860267B (zh) * | 2021-04-23 | 2021-07-30 | 武汉深之度科技有限公司 | 一种内核裁剪方法及计算设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567068A (zh) * | 2011-12-13 | 2012-07-11 | 曙光信息产业(北京)有限公司 | 一种解决内核mmap调用失败的系统和方法 |
CN103699389A (zh) * | 2013-12-30 | 2014-04-02 | 北京大学 | 一种基于编译选项的Linux内核模块关系提取方法 |
CN111008152A (zh) * | 2019-12-26 | 2020-04-14 | 中国人民解放军国防科技大学 | 一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质 |
-
2020
- 2020-09-03 CN CN202010915757.9A patent/CN111966383B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567068A (zh) * | 2011-12-13 | 2012-07-11 | 曙光信息产业(北京)有限公司 | 一种解决内核mmap调用失败的系统和方法 |
CN103699389A (zh) * | 2013-12-30 | 2014-04-02 | 北京大学 | 一种基于编译选项的Linux内核模块关系提取方法 |
CN111008152A (zh) * | 2019-12-26 | 2020-04-14 | 中国人民解放军国防科技大学 | 一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111966383A (zh) | 2020-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20190324772A1 (en) | Method and device for processing smart contracts | |
US8209703B2 (en) | Apparatus and method for dataflow execution in a distributed environment using directed acyclic graph and prioritization of sub-dataflow tasks | |
US8799878B2 (en) | Multi level virtual function tables | |
CN111966383B (zh) | 一种操作系统内核兼容性量化分析方法、系统和介质 | |
US7788658B2 (en) | Computer code partitioning for enhanced performance | |
US10747638B2 (en) | Computing memory health metrics | |
US9280350B2 (en) | Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments | |
US7853927B2 (en) | Methods and tools for executing and tracing user-specified kernel instructions | |
US7028293B2 (en) | Constant return optimization transforming indirect calls to data fetches | |
WO2020253117A1 (zh) | 一种数据处理方法及装置 | |
US11947941B2 (en) | Dynamic computation offloading to graphics processing unit | |
US11714618B2 (en) | Streaming compiler for automatic adjoint differentiation | |
US20090144752A1 (en) | Unmanaged-to-managed aggregation | |
CN113282541B (zh) | 文件调用方法、装置和电子设备 | |
CN114611500A (zh) | 表达式处理方法、装置、电子设备及计算机可读存储介质 | |
CN114168439A (zh) | 一种集群内服务的压测控制方法、装置、存储介质及终端 | |
CN116113927A (zh) | 用于函数调用中可重复使用和相对索引的寄存器资源分配的方法和装置 | |
CN102063308A (zh) | 一种用于地震勘探资料处理流程控制的方法 | |
CN110275710A (zh) | 一种Java本地接口一致性检查方法及系统、存储介质及终端 | |
CN111538491A (zh) | 数据事件处理方法、装置、设备和存储介质 | |
CN116048978B (zh) | 一种软件服务性能自适应测试方法、系统、终端及介质 | |
CN111274109B (zh) | 一种基于请求处理模拟的系统软硬件拓扑的评估方法及系统 | |
CN117555550A (zh) | 应用于异构系统的编译方法、装置、电子设备及存储介质 | |
CN116257331A (zh) | 基于字节码的程序分配方法、系统、终端以及存储介质 | |
CN112905181A (zh) | 一种模型编译、运行方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |