HVM的常用虚拟指令与详解
2015-10-30 13:02
387 查看
概述
HVM为开发者提供了全套的虚拟指令以及事件,用于控制用户模式与访客模式下的转换,并提供了HVM上保护、多用户、多任务操作系统的实现支持
虚拟指令是Hexagon指令集的延伸版本,虚拟指令可调用HVM操作,这些操作无法通过一般的Hexagon指令来实现
本文中,主要讲述了HVM下的详细的HVM虚拟指令,下面所有的指令都按照字母表进行排序
HVM中所有指令的汇总
所有指令的属性
HVM下的虚拟指令有如下的属性:
指令是需要授权的,只可在访客模式软件中执行。如果在用户模式下执行这些指令,那么将会生成一个权限违反异常
一般情况下,指令从Hexagon 处理器的寄存器R0-R4中取得输入参数,并将输出参数输出到R0以及R1
指令都是单独的指令(Hexagon程序手册中对此有明确定义),因此这些指令不能被汇总至指令包中
指令通常作为Hexagon traps进行实现,从而将处理器切换至监控模式
VMCACHE指令
该指令实现缓存平衡操作,这些操作如果单纯通过本地缓存管理指令可能无法或者有效的实现管理
语法格式:
Vmcache
寄存器定义:
指令类型:JR(slot2)
异常类型:
如果虚拟地址范围中包含了没有写权限的页,将发生store保护异常
如果在用户模式下执行,将产生权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
指令的编码方式:
VMCLRMAP指令
清除可能的脏虚拟映射
语法:
Vmclrmap
寄存器定义
类型: JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMGETIE
获取虚拟处理器中断使能值
语法:
vmgetie
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMINTOP
该指令在虚拟中断控制器上进行操作
语法:
vmintop
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMGETTIME
该指令获取64位的虚拟处理器时戳
语法:
vmgettime
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMNEWMAP
该指令创建新的逻辑-虚拟内存映射
在vmnewmap指令前,虚拟设备的MMU被重新编程,从而撤销旧的虚拟-物理映射,并使用页表L1table中以R0寄存器表示的地址映射。如果转换映射到虚拟设备合法逻辑地址空间外,特殊的功能将会决定是否使能、返回一个零错误代码、或者产生一个设备检测事件。VMM的实现可能不会将所有的转换表实现。不受支持的转换将导致错误,而转换也不会被改变
语法:
vmnewmap
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
如果运行时探测到非法页表,那么将会由虚拟设备实现产生一个设备检查事件
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
vmnewmap操作伴随的虚拟设备指令位于vmnewmap地址源映射的伴随位置。在放置vmnewmap指令的页中必须注意关注放置访客模式操作系统页的映射
编码方式:
VMRTE
从事件服务中返回
PC = G0 (GELR)
Interrupt Enable State = G1[30] (GSR.IE)
User Mode = G1[31] (GSR.UM)
if (User Mode) swap(R29,G2) (GOSP)
语法:
vmrte
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMSETIE
设置虚拟处理器中断使能值
语法:
Vmsetie
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMSETTIME
设置虚拟处理器时间戳的值
语法:
vmsettime
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMSETVEC
语法:
为每个事件设置事件句柄向量
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
HVM为开发者提供了全套的虚拟指令以及事件,用于控制用户模式与访客模式下的转换,并提供了HVM上保护、多用户、多任务操作系统的实现支持
虚拟指令是Hexagon指令集的延伸版本,虚拟指令可调用HVM操作,这些操作无法通过一般的Hexagon指令来实现
本文中,主要讲述了HVM下的详细的HVM虚拟指令,下面所有的指令都按照字母表进行排序
HVM中所有指令的汇总
所有指令的属性
HVM下的虚拟指令有如下的属性:
指令是需要授权的,只可在访客模式软件中执行。如果在用户模式下执行这些指令,那么将会生成一个权限违反异常
一般情况下,指令从Hexagon 处理器的寄存器R0-R4中取得输入参数,并将输出参数输出到R0以及R1
指令都是单独的指令(Hexagon程序手册中对此有明确定义),因此这些指令不能被汇总至指令包中
指令通常作为Hexagon traps进行实现,从而将处理器切换至监控模式
VMCACHE指令
该指令实现缓存平衡操作,这些操作如果单纯通过本地缓存管理指令可能无法或者有效的实现管理
语法格式:
Vmcache
寄存器定义:
指令类型:JR(slot2)
异常类型:
如果虚拟地址范围中包含了没有写权限的页,将发生store保护异常
如果在用户模式下执行,将产生权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
指令的编码方式:
VMCLRMAP指令
清除可能的脏虚拟映射
语法:
Vmclrmap
寄存器定义
类型: JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMGETIE
获取虚拟处理器中断使能值
语法:
vmgetie
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMINTOP
该指令在虚拟中断控制器上进行操作
语法:
vmintop
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMGETTIME
该指令获取64位的虚拟处理器时戳
语法:
vmgettime
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMNEWMAP
该指令创建新的逻辑-虚拟内存映射
在vmnewmap指令前,虚拟设备的MMU被重新编程,从而撤销旧的虚拟-物理映射,并使用页表L1table中以R0寄存器表示的地址映射。如果转换映射到虚拟设备合法逻辑地址空间外,特殊的功能将会决定是否使能、返回一个零错误代码、或者产生一个设备检测事件。VMM的实现可能不会将所有的转换表实现。不受支持的转换将导致错误,而转换也不会被改变
语法:
vmnewmap
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
如果运行时探测到非法页表,那么将会由虚拟设备实现产生一个设备检查事件
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
vmnewmap操作伴随的虚拟设备指令位于vmnewmap地址源映射的伴随位置。在放置vmnewmap指令的页中必须注意关注放置访客模式操作系统页的映射
编码方式:
VMRTE
从事件服务中返回
PC = G0 (GELR)
Interrupt Enable State = G1[30] (GSR.IE)
User Mode = G1[31] (GSR.UM)
if (User Mode) swap(R29,G2) (GOSP)
语法:
vmrte
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMSETIE
设置虚拟处理器中断使能值
语法:
Vmsetie
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMSETTIME
设置虚拟处理器时间戳的值
语法:
vmsettime
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
VMSETVEC
语法:
为每个事件设置事件句柄向量
寄存器定义:
类型:
JR(slot2)
异常类型:
如果在用户模式下进行指令,将导致权限违规异常
标注:
指令是单独的指令,无法与其他指令一起汇总到指令包中
编码方式:
相关文章推荐