发明内容
本发明目的在于提供一种使用HVM特权虚拟机作为监控端,获取其他DomU内存信息的方法及其系统,其中,特权指的是该虚拟机具有与Xen的hypervisor通信的能力,内存地址形式主要是虚拟地址,DomU上安装的操作系统涉及32位与64位的Linux和windows操作系统,由于PAE模式已经使用得比较普遍,32位系统部分将默认采取PAE模式。
为了让HVM特权虚拟机能够使用Xen提供的Hypercall以及映射机制,我们在该特权虚拟机中添加IOCTL设备驱动,该设备驱动模拟Dom0与Xen的交互模式,提供给特权虚拟机与Xen进行交互的功能,该功能包括使用Xen提供的Hypercall以及映射机制。
本发明公开一种针对硬件虚拟化的内存监控方法,包括:
步骤1,建立客户域DomU,根据操作系统的运算能力建立内存监控参数,所述操作系统的运算能力包括32位操作系统和64位操作系统;
步骤2,将客户域DomU的配置文件初始化,导入内存监控参数,并对内存监控参数进行映射操作,实现内存监控优化。
所述的针对硬件虚拟化的内存监控方法,在步骤2执行32位操作系统时包括:
步骤21,用户提供要映射的DomU的进程的pid、DomU的id值以及虚拟地址;
步骤22,若pid为0,则该被监控的虚拟地址属于内核空间;
步骤23,若pid不为0,则该虚拟地址属于pid对应的进程地址空间,由于在用户空间中地址的存在形式为虚拟地址,首先获取该进程的页目录表项基址的虚拟地址,然后转换为其物理地址进行寻址。
所述的针对硬件虚拟化的内存监控方法,步骤22包括:
步骤31,通过特权虚拟机中实现的访问Xen的内核模块向Xen发送获取要映射的DomU的CR3寄存器中的页目录表物理内存基址;
步骤32,根据页表基址的值和逻辑地址的值,计算出页目录项指针PDPE的物理地址值,之后,需要将该物理地址的内容映射到特权虚拟机的内存中;
步骤33,根据PDPE和虚拟地址的值,计算出页目录项PDE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤34,根据PDE和虚拟地址的值,计算出页表项PTE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤35,根据PTE和虚拟地址的值,计算出虚拟地址在DomU中对应的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤36,得到的特权虚拟机中分配的页中的内容为要监控的虚拟地址的内容,通过对该页的内容进行读取操作完成监控操作。
所述的针对硬件虚拟化的内存监控方法,步骤32包括:
步骤41,对得到的物理地址值进行计算,得到对应的页框号以及在该页中的偏移量,页框号即该页所在页的起始地址;
步骤42,利用页框号及DomU的id,利用已经实现的特权虚拟机的内核模块的地址映射功能,在特权虚拟机中分配空闲页,将该页框号对应的一页内存的内容映射到该空闲页,即让这页内存对应到DomU中要映射页对应的机器地址中的页上,返回该空闲页;
步骤43,在返回的内存页中利用之前求得的PDPE在页中的偏移量既得PDPE的值;
步骤44,返回PDPE的值。
所述的针对硬件虚拟化的内存监控方法,步骤23包括:
步骤51,得到pid对应的进程的页目录表基址的虚拟地址;
步骤52,得到的进程的页目录表基地址的虚拟地址属于内核空间,因此,通过步骤22得到其对应的物理地址;
步骤53,利用得到的进程的页目录表基地址的物理地址进行页表查询,重复执行步骤22完成进程地址空间的内存的监控操作。
所述的针对硬件虚拟化的内存监控方法,步骤51包括:
步骤61,通过初始化得到DomU的初始进程init task的物理地址、进程结构的偏移量;
步骤62,由于进程在内存中是链表排列的,每个进程结构中都有一个指向下一个进程的指针,因此,从初始进程开始遍历所有的进程,利用获得的pid偏移量得到链表中每个进程的pid的值,与提供的pid进行比对,如果相同,则是要找的进程,否则继续查找;
步骤63,进程的页目录表项基地址的虚拟地址存在于进程结构中,利用之前得到的偏移量以及找到的进程地址即算出该地址。
所述的针对硬件虚拟化的内存监控方法,在步骤2执行64位操作系统时包括:
步骤71,用户提供要映射的DomU的进程的pid、DomU的id值以及虚拟地址;
步骤72,若pid为0,则该被监控的虚拟地址属于内核空间;
步骤73,若pid不为0,则该虚拟地址属于pid对应的进程地址空间,需拿到该进程的页目录表项基址的虚拟地址,再进一步转换为其物理地址进行寻址。
所述的针对硬件虚拟化的内存监控方法,步骤72包括:
步骤81,通过特权虚拟机中实现的访问Xen的内核模块向Xen发送获取要映射的DomU的CR3寄存器中的页目录表物理内存基址;
步骤82,根据页表基址的值和逻辑地址的值,计算出第四级页表项PML4E的物理地址值,之后,将该物理地址的内容映射到特权虚拟机的内存中;
步骤83,根据PML4E和虚拟地址的值,计算出页目录项指针PDPE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤84,根据PDPE和虚拟地址的值,计算出页目录项PDE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤85,根据PDE和虚拟地址的值,计算出页表项PTE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤86,根据PTE和虚拟地址的值,计算出虚拟地址在DomU中对应的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤87,得到的特权虚拟机中分配的页中的内容既是要监控的虚拟地址的内容,通过对该页的内容读取操作完成监控操作。
所述的针对硬件虚拟化的内存监控方法,步骤82包括:
步骤91,对得到的物理地址值进行计算,得到对应的页框号以及在该页中的偏移量,页框号即该页所在页的起始地址;
步骤92,利用页框号及DomU的id,利用已经实现的特权虚拟机的内核模块的地址映射功能,在特权虚拟机中分配一页空闲页,将该页框号对应的一页内存的内容映射到该空闲页,即让这页内存对应到DomU中要映射页对应的机器地址中的页上,返回该空闲页;
步骤93,在返回的内存页中利用之前求得的PML4E在页中的偏移量既得PML4E的值;
步骤94,返回PML4E的值。
所述的针对硬件虚拟化的内存监控方法,步骤73包括:
步骤101,得到pid对应的进程的页目录表基址的虚拟地址;
步骤102,利用得到的进程的页目录表基地址的虚拟地址通过A2步骤可以得到其对应的物理地址;
步骤103,利用得到的进程的页目录表基地址的物理地址进行页表查询,重复执行步骤72,从而完成进程地址空间的内存的监控操作。
所述的针对硬件虚拟化的内存监控方法,步骤101包括:
步骤111,通过初始化得到DomU的初始进程init task的物理地址、进程结构的偏移量;
步骤112,由于进程在内存中是链表排列的,每个进程结构中都有一个指向下一个进程的指针,因此,从初始进程开始遍历所有的进程,利用获得的pid偏移量得到链表中每个进程的pid的值,与提供的pid进行比对,如果相同,则是要找的进程,否则继续查找;
步骤113,进程的页目录表项基地址的虚拟地址存在于进程结构中,利用之前得到的偏移量以及找到的进程地址即算出该地址。
本发明公开一种针对硬件虚拟化的内存监控系统,包括:
建立监控参数模块,用于建立客户域DomU,根据操作系统的运算能力建立内存监控参数,所述操作系统的运算能力包括32位操作系统和64位操作系统;
监控优化模块,用于将客户域DomU的配置文件初始化,导入内存监控参数,并对内存监控参数进行映射操作,实现内存监控优化。
所述的针对硬件虚拟化的内存监控系统,在32位操作系统的监控优化模块包括:
提供信息模块,用于用户提供要映射的DomU的进程的pid、DomU的id值以及虚拟地址;
指向内核空间模块,用于若pid为0,则该被监控的虚拟地址属于内核空间;
指向进程地址空间模块,用于若pid不为0,则该虚拟地址属于pid对应的进程地址空间,由于在用户空间中地址的存在形式为虚拟地址,首先获取该进程的页目录表项基址的虚拟地址,然后转换为其物理地址进行寻址。
所述的针对硬件虚拟化的内存监控系统,指向内核空间模块包括:
发送地址模块,用于通过特权虚拟机中实现的访问Xen的内核模块向Xen发送获取要映射的DomU的CR3寄存器中的页目录表物理内存基址;
计算模块,用于根据页表基址的值和逻辑地址的值,计算出页目录项指针PDPE的物理地址值,之后,需要将该物理地址的内容映射到特权虚拟机的内存中;根据PDPE和虚拟地址的值,计算出页目录项PDE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;根据PDE和虚拟地址的值,计算出页表项PTE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;根据PTE和虚拟地址的值,计算出虚拟地址在DomU中对应的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
获得虚拟地址模块,用于得到的特权虚拟机中分配的页中的内容为要监控的虚拟地址的内容,通过对该页的内容进行读取操作完成监控操作。
所述的针对硬件虚拟化的内存监控系统,计算模块还包括:
对得到的物理地址值进行计算,得到对应的页框号以及在该页中的偏移量,页框号即该页所在页的起始地址;利用页框号及DomU的id,利用已经实现的特权虚拟机的内核模块的地址映射功能,在特权虚拟机中分配空闲页,将该页框号对应的一页内存的内容映射到该空闲页,即让这页内存对应到DomU中要映射页对应的机器地址中的页上,返回该空闲页;在返回的内存页中利用之前求得的PDPE在页中的偏移量既得PDPE的值;返回PDPE的值。
所述的针对硬件虚拟化的内存监控系统,指向进程地址空间模块包括:
获得虚拟地址模块,用于得到pid对应的进程的页目录表基址的虚拟地址;
获得物理地址模块,用于得到的进程的页目录表基地址的虚拟地址属于内核空间,因此,通过指向内核空间模块得到其对应的物理地址;
页表查询模块,用于利用得到的进程的页目录表基地址的物理地址进行页表查询,重复执行指向内核空间模块完成进程地址空间的内存的监控操作。
所述的针对硬件虚拟化的内存监控系统,获得虚拟地址模块包括:
通过初始化得到DomU的初始进程init task的物理地址、进程结构的偏移量;由于进程在内存中是链表排列的,每个进程结构中都有一个指向下一个进程的指针,因此,从初始进程开始遍历所有的进程,利用获得的pid偏移量得到链表中每个进程的pid的值,与提供的pid进行比对,如果相同,则是要找的进程,否则继续查找;进程的页目录表项基地址的虚拟地址存在于进程结构中,利用之前得到的偏移量以及找到的进程地址即算出该地址。
所述的针对硬件虚拟化的内存监控系统,在64位操作系统的监控优化模块包括:
提供信息模块,用于用户提供要映射的DomU的进程的pid、DomU的id值以及虚拟地址;
指向内核空间模块,用于若pid为0,则该被监控的虚拟地址属于内核空间;
指向进程地址空间模块,用于若pid不为0,则该虚拟地址属于pid对应的进程地址空间,需拿到该进程的页目录表项基址的虚拟地址,再进一步转换为其物理地址进行寻址。
所述的针对硬件虚拟化的内存监控系统,指向内核空间模块还包括:
发送地址模块,用于通过特权虚拟机中实现的访问Xen的内核模块向Xen发送获取要映射的DomU的CR3寄存器中的页目录表物理内存基址;
计算模块,用于根据页表基址的值和逻辑地址的值,计算出第四级页表项PML4E的物理地址值,之后,将该物理地址的内容映射到特权虚拟机的内存中;根据PML4E和虚拟地址的值,计算出页目录项指针PDPE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;根据PDPE和虚拟地址的值,计算出页目录项PDE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;根据PDE和虚拟地址的值,计算出页表项PTE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;根据PTE和虚拟地址的值,计算出虚拟地址在DomU中对应的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
获得虚拟地址模块,用于得到的特权虚拟机中分配的页中的内容既是要监控的虚拟地址的内容,通过对该页的内容读取操作完成监控操作。
所述的针对硬件虚拟化的内存监控系统,计算模块还包括:
对得到的物理地址值进行计算,得到对应的页框号以及在该页中的偏移量,页框号即该页所在页的起始地址;利用页框号及DomU的id,利用已经实现的特权虚拟机的内核模块的地址映射功能,在特权虚拟机中分配一页空闲页,将该页框号对应的一页内存的内容映射到该空闲页,即让这页内存对应到DomU中要映射页对应的机器地址中的页上,返回该空闲页;在返回的内存页中利用之前求得的PML4E在页中的偏移量既得PML4E的值;返回PML4E的值。
所述的针对硬件虚拟化的内存监控系统,指向进程地址空间模块包括:
获得虚拟地址模块,用于得到pid对应的进程的页目录表基址的虚拟地址;
获得物理地址模块,用于利用得到的进程的页目录表基地址的虚拟地址通过A2步骤可以得到其对应的物理地址;
页表查询模块,用于利用得到的进程的页目录表基地址的物理地址进行页表查询,重复执行指向内核空间模块,从而完成进程地址空间的内存的监控操作。
所述的针对硬件虚拟化的内存监控系统,获得虚拟地址模块包括:
通过初始化得到DomU的初始进程init task的物理地址、进程结构的偏移量;由于进程在内存中是链表排列的,每个进程结构中都有一个指向下一个进程的指针,因此,从初始进程开始遍历所有的进程,利用获得的pid偏移量得到链表中每个进程的pid的值,与提供的pid进行比对,如果相同,则是要找的进程,否则继续查找;进程的页目录表项基地址的虚拟地址存在于进程结构中,利用之前得到的偏移量以及找到的进程地址即算出该地址。
本发明的有益效果为:使用特权虚拟机代替Dom0来进行内存监控,且对于装有32位操作系统和64位操作系统的DomU都可以进行内存监控,这样设计既可以将内存监控功能独立管理,也减轻了Dom0的性能负担,提供了一种针对虚拟化架构实用性强的内存监控技术,为检测病毒特征、恶意软件攻击行为以及分析操作系统运行机理等提供了一种高效实用的手段。
具体实施方式
下面给出本发明的具体实施方式,结合附图对本发明做出了详细描述。
本方法针对两种平台。在内存监控的程序中,需要对32位和64位系统采取独立的步骤,通过用户给定的一台DomU需要监控进程号(系统中以pid表示)以及该进程中要监控的虚拟地址来对该地址的内容进行监控的步骤如下:
当DomU的操作系统为32位操作系统的PAE模式时,步骤如下,流程如图1所示:
A1.用户提供要映射的DomU的进程的pid、DomU的id值以及虚拟地址。
A2.若pid为0,则该被监控的虚拟地址属于内核空间,具体实施步骤如下:
1.通过特权虚拟机中实现的访问Xen的内核模块向Xen发送获取要映射的DomU的CR3寄存器中的页目录表物理内存基址。
2.根据页表基址的值和逻辑地址的值,计算出页目录项指针(PageDirectory Pointer Entry,以下简称PDPE)的物理地址值,之后,需要将该物理地址的内容映射到特权虚拟机的内存中,具体步骤如下:
1).对得到的物理地址值进行计算,得到对应的页框号以及在该页中的偏移量,页框号即该页所在页的起始地址。
2).利用页框号及DomU的id,利用已经实现的特权虚拟机的内核模块的地址映射功能,在特权虚拟机中分配一页空闲页,将该页框号对应的一页内存的内容映射到该空闲页,即让这页内存对应到DomU中要映射页对应的机器地址中的页上,返回该空闲页,如图2所示。
3).在返回的内存页中利用之前求得的PDPE在页中的偏移量既得PDPE的值。
4).返回PDPE的值。
3.根据PDPE和虚拟地址的值,计算出页目录项(Page Directory Entry,以下简称PDE)的物理地址值,并将DomU中该物理地址的内容映射过来,具体步骤参见A2的步骤2,其中的PDPE在本例中是PDE。
4.根据PDE和虚拟地址的值,计算出页表项(Page Table Entry,以下简称PTE)的物理地址值,并将DomU中该物理地址的内容映射过来,具体步骤参见A2的步骤2,其中的PDPE在本例中是PTE。
5.根据PTE和虚拟地址的值,计算出虚拟地址在DomU中对应的物理地址值,并将DomU中该物理地址的内容映射过来,具体步骤参见A2的步骤2,其中的PDPE在本例中要求的虚拟地址对应的物理地址值
6.得到的特权虚拟机中分配的页中的内容既是要监控的虚拟地址的内容,这时候就可以通过对该页的内容读取操作完成监控功能。
A3.若pid不为0,则该虚拟地址属于pid对应的进程地址空间,由于在用户空间中地址的存在形式都是虚拟地址,因此首先需要拿到该进程的页目录表项基址的虚拟地址,再进一步转换为其物理地址进行寻址。具体实施步骤如下:
1.得到pid对应的进程的页目录表基址的虚拟地址,具体实施步骤如下:
1).通过初始化得到DomU的初始进程(init task)的物理地址、进程结构中的一些项的偏移量(如pid在进程结构中的偏移量)。
2).由于进程在内存中是链表排列的,每个进程结构中都有一个指向下一个进程的指针,因此,可以从初始进程开始遍历所有的进程,利用获得的pid偏移量得到链表中每个进程的pid的值,与提供的pid进行比对,如果相同,则是要找的进程,否则继续查找;
3).进程的页目录表项基地址的虚拟地址存在于进程结构中,利用之前得到的偏移量以及找到的进程地址即算出该地址;
2.得到的进程的页目录表基地址的虚拟地址属于内核空间,因此,通过A2步骤可以得到其对应的物理地址。
3.利用得到的进程的页目录表基地址的物理地址进行页表查询,具体步骤同A2,如此,完成了进程地址空间的内存的监控功能。
当DomU的操作系统为64位时,步骤如下,流程图可参考图1,比上种情况多一层映射。
A1.用户提供要映射的DomU的进程的pid、DomU的id值以及虚拟地址。
A2.若pid为0,则该被监控的虚拟地址属于内核空间,具体实施步骤如下:
1.通过特权虚拟机中实现的访问Xen的内核模块向Xen发送获取要映射的DomU的CR3寄存器中的页目录表物理内存基址。
2.根据页表基址的值和逻辑地址的值,计算出第四级页表项(Page MapLevel 4 Entry,以下简称PML4E)的物理地址值,之后,需要将该物理地址的内容映射到特权虚拟机的内存中,具体步骤如下:
1).对得到的物理地址值进行计算,得到对应的页框号以及在该页中的偏移量,页框号即该页所在页的起始地址;
2).利用页框号及DomU的id,利用已经实现的特权虚拟机的内核模块的地址映射功能,在特权虚拟机中分配一页空闲页,将该页框号对应的一页内存的内容映射到该空闲页,即让这页内存对应到DomU中要映射页对应的机器地址中的页上,返回该空闲页;
3).在返回的内存页中利用之前求得的PML4E在页中的偏移量既得PML4E的值;
4).返回PML4E的值;
3.根据PML4E和虚拟地址的值,计算出页目录项指针(Page DirectoryPointer Entry,以下简称PDPE)的物理地址值,并将DomU中该物理地址的内容映射过来,具体步骤参见A2的步骤2,其中的PML4E在本例中是PDPE;
4.根据PDPE和虚拟地址的值,计算出页目录项(Page Directory Entry,以下简称PDE)的物理地址值,并将DomU中该物理地址的内容映射过来,具体步骤参见A2的步骤2,其中的PML4E在本例中是PDE;
5.根据PDE和虚拟地址的值,计算出页表项(Page Table Entry,以下简称PTE)的物理地址值,并将DomU中该物理地址的内容映射过来,具体步骤参见A2的步骤2,其中的PML4E在本例中是PTE;
6.根据PTE和虚拟地址的值,计算出虚拟地址在DomU中对应的物理地址值,并将DomU中该物理地址的内容映射过来,具体步骤参见A2的步骤2,其中的PML4E在本例中是求的虚拟地址对应的物理地址值;
7.得到的特权虚拟机中分配的页中的内容既是要监控的虚拟地址的内容,这时候就可以通过对该页的内容读取操作完成监控功能。
A3.若pid不为0,则该虚拟地址属于pid对应的进程地址空间,需拿到该进程的页目录表项基址的虚拟地址,再进一步转换为其物理地址进行寻址。具体实施步骤如下:
1.得到pid对应的进程的页目录表基址的虚拟地址,具体实施步骤同第一种情况的A3中步骤1;
2.利用得到的进程的页目录表基地址的虚拟地址通过A2步骤可以得到其对应的物理地址;
3.利用得到的进程的页目录表基地址的物理地址进行页表查询,具体步骤同A2,如此,完成了进程地址空间的内存的监控功能。
实现的系统基于Xen架构,特权虚拟机的操作系统为windows server 2003,32位的DomU的操作系统为windows xp sp3,支持PAE模式,64位的DomU的系统为SUSE 11 SP1。
具体实施方式为:a)构建可以与Xen进行通信的特权虚拟机,该虚拟机为HVM形式,装有windows 2003操作系统;b)利用该虚拟机,在32位PAE模式HVM DomU运行过程中对其虚拟地址对应的内存内容进行监控;c)利用该虚拟机,在64位HVM DomU运行过程中对其虚拟地址对应的内存内容进行监控。
具体步骤如下:
1、构建HVM特权虚拟机,具体实现方法如下:
a)启动Xen
b)启动该特权虚拟机,安装windows 2003操作系统
c)安装具备与Xen通信功能的驱动模块
d)开启监控程序,等待输入参数
2、对运行态的32位PAE模式的装有windows xp sp3的HVM虚拟机进行内存监控,具体实现方法如下:
a)输入监控参数,包括DomU的id值、要监控的进程pid、要监控的虚拟内存地址。
b)读取对应DomU的配置文件进行初始化,这个文件需要用户提供,包括操作系统类型、起始进程地址、进程结构偏移量、进程pid偏移量、进程页目录表基址偏移量。
c)申请内存空间,根据参数进行映射操作,返回给用户该内存空间的指针。
对运行态的64位的装有SUSE11 SP1的HVM虚拟机进行内存监控,具体实现方法同2。
如图3所示,本发明公开一种针对硬件虚拟化的内存监控方法,包括:
步骤1,建立客户域DomU,根据操作系统的运算能力建立内存监控参数,所述操作系统的运算能力包括32位操作系统和64位操作系统;
步骤2,将客户域DomU的配置文件初始化,导入内存监控参数,并对内存监控参数进行映射操作,实现内存监控优化。
所述的针对硬件虚拟化的内存监控方法,在步骤2执行32位操作系统时包括:
步骤21,用户提供要映射的DomU的进程的pid、DomU的id值以及虚拟地址;
步骤22,若pid为0,则该被监控的虚拟地址属于内核空间;
步骤23,若pid不为0,则该虚拟地址属于pid对应的进程地址空间,由于在用户空间中地址的存在形式为虚拟地址,首先获取该进程的页目录表项基址的虚拟地址,然后转换为其物理地址进行寻址。
所述的针对硬件虚拟化的内存监控方法,步骤22包括:
步骤31,通过特权虚拟机中实现的访问Xen的内核模块向Xen发送获取要映射的DomU的CR3寄存器中的页目录表物理内存基址;
步骤32,根据页表基址的值和逻辑地址的值,计算出页目录项指针PDPE的物理地址值,之后,需要将该物理地址的内容映射到特权虚拟机的内存中;
步骤33,根据PDPE和虚拟地址的值,计算出页目录项PDE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤34,根据PDE和虚拟地址的值,计算出页表项PTE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤35,根据PTE和虚拟地址的值,计算出虚拟地址在DomU中对应的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤36,得到的特权虚拟机中分配的页中的内容为要监控的虚拟地址的内容,通过对该页的内容进行读取操作完成监控操作。
所述的针对硬件虚拟化的内存监控方法,步骤32包括:
步骤41,对得到的物理地址值进行计算,得到对应的页框号以及在该页中的偏移量,页框号即该页所在页的起始地址;
步骤42,利用页框号及DomU的id,利用已经实现的特权虚拟机的内核模块的地址映射功能,在特权虚拟机中分配空闲页,将该页框号对应的一页内存的内容映射到该空闲页,即让这页内存对应到DomU中要映射页对应的机器地址中的页上,返回该空闲页;
步骤43,在返回的内存页中利用之前求得的PDPE在页中的偏移量既得PDPE的值;
步骤44,返回PDPE的值。
所述的针对硬件虚拟化的内存监控方法,步骤23包括:
步骤51,得到pid对应的进程的页目录表基址的虚拟地址;
步骤52,得到的进程的页目录表基地址的虚拟地址属于内核空间,因此,通过步骤22得到其对应的物理地址;
步骤53,利用得到的进程的页目录表基地址的物理地址进行页表查询,重复执行步骤22完成进程地址空间的内存的监控操作。
所述的针对硬件虚拟化的内存监控方法,步骤51包括:
步骤61,通过初始化得到DomU的初始进程init task的物理地址、进程结构的偏移量;
步骤62,由于进程在内存中是链表排列的,每个进程结构中都有一个指向下一个进程的指针,因此,从初始进程开始遍历所有的进程,利用获得的pid偏移量得到链表中每个进程的pid的值,与提供的pid进行比对,如果相同,则是要找的进程,否则继续查找;
步骤63,进程的页目录表项基地址的虚拟地址存在于进程结构中,利用之前得到的偏移量以及找到的进程地址即算出该地址。
所述的针对硬件虚拟化的内存监控方法,在步骤2执行64位操作系统时包括:
步骤71,用户提供要映射的DomU的进程的pid、DomU的id值以及虚拟地址;
步骤72,若pid为0,则该被监控的虚拟地址属于内核空间;
步骤73,若pid不为0,则该虚拟地址属于pid对应的进程地址空间,需拿到该进程的页目录表项基址的虚拟地址,再进一步转换为其物理地址进行寻址。
所述的针对硬件虚拟化的内存监控方法,步骤72包括:
步骤81,通过特权虚拟机中实现的访问Xen的内核模块向Xen发送获取要映射的DomU的CR3寄存器中的页目录表物理内存基址;
步骤82,根据页表基址的值和逻辑地址的值,计算出第四级页表项PML4E的物理地址值,之后,将该物理地址的内容映射到特权虚拟机的内存中;
步骤83,根据PML4E和虚拟地址的值,计算出页目录项指针PDPE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤84,根据PDPE和虚拟地址的值,计算出页目录项PDE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤85,根据PDE和虚拟地址的值,计算出页表项PTE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤86,根据PTE和虚拟地址的值,计算出虚拟地址在DomU中对应的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
步骤87,得到的特权虚拟机中分配的页中的内容既是要监控的虚拟地址的内容,通过对该页的内容读取操作完成监控操作。
所述的针对硬件虚拟化的内存监控方法,步骤82包括:
步骤91,对得到的物理地址值进行计算,得到对应的页框号以及在该页中的偏移量,页框号即该页所在页的起始地址;
步骤92,利用页框号及DomU的id,利用已经实现的特权虚拟机的内核模块的地址映射功能,在特权虚拟机中分配一页空闲页,将该页框号对应的一页内存的内容映射到该空闲页,即让这页内存对应到DomU中要映射页对应的机器地址中的页上,返回该空闲页;
步骤93,在返回的内存页中利用之前求得的PML4E在页中的偏移量既得PML4E的值;
步骤94,返回PML4E的值。
所述的针对硬件虚拟化的内存监控方法,步骤73包括:
步骤101,得到pid对应的进程的页目录表基址的虚拟地址;
步骤102,利用得到的进程的页目录表基地址的虚拟地址通过A2步骤可以得到其对应的物理地址;
步骤103,利用得到的进程的页目录表基地址的物理地址进行页表查询,重复执行步骤72,从而完成进程地址空间的内存的监控操作。
所述的针对硬件虚拟化的内存监控方法,步骤101包括:
步骤111,通过初始化得到DomU的初始进程init task的物理地址、进程结构的偏移量;
步骤112,由于进程在内存中是链表排列的,每个进程结构中都有一个指向下一个进程的指针,因此,从初始进程开始遍历所有的进程,利用获得的pid偏移量得到链表中每个进程的pid的值,与提供的pid进行比对,如果相同,则是要找的进程,否则继续查找;
步骤113,进程的页目录表项基地址的虚拟地址存在于进程结构中,利用之前得到的偏移量以及找到的进程地址即算出该地址。
如图4所示,本发明公开一种针对硬件虚拟化的内存监控系统,包括:
建立监控参数模块10,用于建立客户域DomU,根据操作系统的运算能力建立内存监控参数,所述操作系统的运算能力包括32位操作系统和64位操作系统;
监控优化模块20,用于将客户域DomU的配置文件初始化,导入内存监控参数,并对内存监控参数进行映射操作,实现内存监控优化。
所述的针对硬件虚拟化的内存监控系统,在32位操作系统的监控优化模块包括:
提供信息模块,用于用户提供要映射的DomU的进程的pid、DomU的id值以及虚拟地址;
指向内核空间模块,用于若pid为0,则该被监控的虚拟地址属于内核空间;
指向进程地址空间模块,用于若pid不为0,则该虚拟地址属于pid对应的进程地址空间,由于在用户空间中地址的存在形式为虚拟地址,首先获取该进程的页目录表项基址的虚拟地址,然后转换为其物理地址进行寻址。
所述的针对硬件虚拟化的内存监控系统,指向内核空间模块包括:
发送地址模块,用于通过特权虚拟机中实现的访问Xen的内核模块向Xen发送获取要映射的DomU的CR3寄存器中的页目录表物理内存基址;
计算模块,用于根据页表基址的值和逻辑地址的值,计算出页目录项指针PDPE的物理地址值,之后,需要将该物理地址的内容映射到特权虚拟机的内存中;根据PDPE和虚拟地址的值,计算出页目录项PDE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;根据PDE和虚拟地址的值,计算出页表项PTE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;根据PTE和虚拟地址的值,计算出虚拟地址在DomU中对应的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
获得虚拟地址模块,用于得到的特权虚拟机中分配的页中的内容为要监控的虚拟地址的内容,通过对该页的内容进行读取操作完成监控操作。
所述的针对硬件虚拟化的内存监控系统,计算模块还包括:
对得到的物理地址值进行计算,得到对应的页框号以及在该页中的偏移量,页框号即该页所在页的起始地址;利用页框号及DomU的id,利用已经实现的特权虚拟机的内核模块的地址映射功能,在特权虚拟机中分配空闲页,将该页框号对应的一页内存的内容映射到该空闲页,即让这页内存对应到DomU中要映射页对应的机器地址中的页上,返回该空闲页;在返回的内存页中利用之前求得的PDPE在页中的偏移量既得PDPE的值;返回PDPE的值。
所述的针对硬件虚拟化的内存监控系统,指向进程地址空间模块包括:
获得虚拟地址模块,用于得到pid对应的进程的页目录表基址的虚拟地址;
获得物理地址模块,用于得到的进程的页目录表基地址的虚拟地址属于内核空间,因此,通过指向内核空间模块得到其对应的物理地址;
页表查询模块,用于利用得到的进程的页目录表基地址的物理地址进行页表查询,重复执行指向内核空间模块完成进程地址空间的内存的监控操作。
所述的针对硬件虚拟化的内存监控系统,获得虚拟地址模块包括:
通过初始化得到DomU的初始进程init task的物理地址、进程结构的偏移量;由于进程在内存中是链表排列的,每个进程结构中都有一个指向下一个进程的指针,因此,从初始进程开始遍历所有的进程,利用获得的pid偏移量得到链表中每个进程的pid的值,与提供的pid进行比对,如果相同,则是要找的进程,否则继续查找;进程的页目录表项基地址的虚拟地址存在于进程结构中,利用之前得到的偏移量以及找到的进程地址即算出该地址。
所述的针对硬件虚拟化的内存监控系统,在64位操作系统的监控优化模块包括:
提供信息模块,用于用户提供要映射的DomU的进程的pid、DomU的id值以及虚拟地址;
指向内核空间模块,用于若pid为0,则该被监控的虚拟地址属于内核空间;
指向进程地址空间模块,用于若pid不为0,则该虚拟地址属于pid对应的进程地址空间,需拿到该进程的页目录表项基址的虚拟地址,再进一步转换为其物理地址进行寻址。
所述的针对硬件虚拟化的内存监控系统,指向内核空间模块还包括:
发送地址模块,用于通过特权虚拟机中实现的访问Xen的内核模块向Xen发送获取要映射的DomU的CR3寄存器中的页目录表物理内存基址;
计算模块,用于根据页表基址的值和逻辑地址的值,计算出第四级页表项PML4E的物理地址值,之后,将该物理地址的内容映射到特权虚拟机的内存中;根据PML4E和虚拟地址的值,计算出页目录项指针PDPE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;根据PDPE和虚拟地址的值,计算出页目录项PDE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;根据PDE和虚拟地址的值,计算出页表项PTE的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;根据PTE和虚拟地址的值,计算出虚拟地址在DomU中对应的物理地址值,并将DomU中该物理地址的内容映射到特权虚拟机的内存中;
获得虚拟地址模块,用于得到的特权虚拟机中分配的页中的内容既是要监控的虚拟地址的内容,通过对该页的内容读取操作完成监控操作。
所述的针对硬件虚拟化的内存监控系统,计算模块还包括:
对得到的物理地址值进行计算,得到对应的页框号以及在该页中的偏移量,页框号即该页所在页的起始地址;利用页框号及DomU的id,利用已经实现的特权虚拟机的内核模块的地址映射功能,在特权虚拟机中分配一页空闲页,将该页框号对应的一页内存的内容映射到该空闲页,即让这页内存对应到DomU中要映射页对应的机器地址中的页上,返回该空闲页;在返回的内存页中利用之前求得的PML4E在页中的偏移量既得PML4E的值;返回PML4E的值。
所述的针对硬件虚拟化的内存监控系统,指向进程地址空间模块包括:
获得虚拟地址模块,用于得到pid对应的进程的页目录表基址的虚拟地址;
获得物理地址模块,用于利用得到的进程的页目录表基地址的虚拟地址通过A2步骤可以得到其对应的物理地址;
页表查询模块,用于利用得到的进程的页目录表基地址的物理地址进行页表查询,重复执行指向内核空间模块,从而完成进程地址空间的内存的监控操作。
所述的针对硬件虚拟化的内存监控系统,获得虚拟地址模块包括:
通过初始化得到DomU的初始进程init task的物理地址、进程结构的偏移量;由于进程在内存中是链表排列的,每个进程结构中都有一个指向下一个进程的指针,因此,从初始进程开始遍历所有的进程,利用获得的pid偏移量得到链表中每个进程的pid的值,与提供的pid进行比对,如果相同,则是要找的进程,否则继续查找;进程的页目录表项基地址的虚拟地址存在于进程结构中,利用之前得到的偏移量以及找到的进程地址即算出该地址。
本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。