1.一种基于虚拟化的宏内核操作系统载入模块权能隔离方法,其特征在于,包括以下步骤:
S1、在系统初始化阶段,为处在虚拟内存3GiB~(4GiB-1)的内核空间生成载入模块用页表和核心模块用页表,两份页表中线性地址到物理地址的映射相同;
S2、加载载入模块时,执行载入模块初始化之前,操作系统陷入虚拟机监控器中,分别设置载入模块用页表和核心模块用页表属性,操作系统从虚拟机监控器返回;
S3、载入模块申请动态内存时,操作系统陷入虚拟机监控器中,虚拟机监控器调用动态内存空间申请函数,为载入模块分配动态内存,与动态内存对应的载入模块用页表中载入模块数据页属性设置为可读可写,与动态内存对应的核心模块用页表中载入模块数据页属性设置为只读,操作系统从虚拟机监控器返回;
S4、当载入模块直接调用、跳转到核心模块的代码页时,操作系统陷入虚拟机监控器中,虚拟机监控器通过转换页目录地址寄存器,从载入模块用页表切换到核心模块用页表;
在通过监控器检查后,虚拟机监控器为载入模块调用核心模块的接口程序,操作系统从虚拟机监控器返回;当核心模块的接口程序执行完成并返回时,操作系统陷入虚拟机监控器中,虚拟机监控器通过转换页目录地址寄存器,从核心模块用页表切换到载入模块用页表,操作系统由虚拟机监控器返回到载入模块;
S5、当载入模块直接修改核心模块的数据页时,操作系统陷入虚拟机监控器中,虚拟机监控器根据预定策略进行处理,处理结束后操作系统从虚拟机监控器返回;
所述分别设置载入模块用页表和核心模块用页表属性,所述载入模块用页表中用户数据页和载入模块数据页属性设置为可读可写,用户代码页、核心模块数据页和载入模块代码页属性设置为只读,核心模块代码页属性设置为不映射;所述核心模块用页表中用户代码页、用户数据页和核心模块数据页属性设置为可读可写,核心模块代码页和载入模块数据页属性设置为只读,载入模块代码页属性设置为不映射。
2.根据权利要求1所述的基于虚拟化的宏内核操作系统载入模块权能隔离方法,其特征在于,所述步骤S2中分别设置载入模块用页表和核心模块用页表属性前,虚拟机监控器取得载入模块代码的首地址、载入模块代码的长度、载入模块数据的首地址、载入模块的数据长度、核心模块代码的首地址、核心模块代码的长度、核心模块数据的首地址和核心模块数据的长度,计算出载入模块和核心模块所在内存页。
3.根据权利要求1所述的基于虚拟化的宏内核操作系统载入模块权能隔离方法,其特征在于,所述步骤S3中为载入模块分配动态内存是向内核申请一个整页,并在之后再次收到载入模块的请求时,直接在该页中分配空间,直到不够分配为止,再重新向内核请求整页的空间。
4.根据权利要求1所述的基于虚拟化的宏内核操作系统载入模块权能隔离方法,其特征在于,所述步骤S4中虚拟机监控器为载入模块调用核心模块的接口程序前,虚拟机监控器取得引起陷入虚拟机监控器的跳转地址,检查跳转地址的合法性;保存当前的栈顶指针寄存器ESP,切换ESP到核心模块的内核栈中,将载入模块的内核栈中之前压入的输入参数压入到核心模块的内核栈中,恢复当前的ESP;修改虚拟机监控器中的虚拟化控制结构VMCS,将其中的指令寄存器EIP指向目标跳转地址,ESP指向核心模块的内核栈的栈顶。
5.根据权利要求1所述的基于虚拟化的宏内核操作系统载入模块权能隔离方法,其特征在于,所述步骤S4中操作系统从虚拟机监控器返回到载入模块前,虚拟机监控器取得引起陷入虚拟机监控器的跳转地址,检查跳转地址的合法性;保存当前的栈顶指针寄存器ESP,切换ESP到载入模块的内核栈中,弹出载入模块的内核栈中压入的输入参数,恢复当前的ESP;修改虚拟机监控器中的虚拟化控制结构VMCS,将其中的指令寄存器EIP指向目标返回地址,ESP指向载入模块的内核栈的栈顶。