一种访问协处理器寄存器的方法及装置制造方法及图纸

技术编号:7417530 阅读:177 留言:0更新日期:2012-06-08 23:30
本发明专利技术公开了一种访问协处理器寄存器CPR的方法,该方法包括:在用户态下构造访问CPR指令,执行输入的异常指令,进入特权模式,CPU运行异常处理程序,异常处理程序根据异常指令调用内核处理函数,内核处理函数执行访问CPR指令,返回用户态。本发明专利技术还公开了一种访问CPR的装置,采用本方法及装置,在实现访问CPR的通用性的同时,简化方案,有利于系统维护。

【技术实现步骤摘要】

本专利技术涉及协处理器寄存器(CPR)数据存取领域,特别是指一种访问CPR的方法及装置。
技术介绍
精简指令集计算机(RISC)体系架构下的CPU至少具有两种工作模式非特权模式和特权模式。非特权模式又叫用户模式或者用户态,特权模式又分为内核模式即内核态、管理员(supervisor)模式、调试模式等。工作在特权模式下,CPU可以对所有的资源进行访问;工作在非特权模式下,CPU访问不了特权模式下的资源,例如CPR等。现代操作系统(OS),以下简称系统,的内核一般都运行在特权模式下,应用程序一般运行在非特权模式下。但是应用程序在某些场景下也需要访问CPR,例如用户态下进行锁中断;在脱离⑶B(the GNU ProjectDebugger)或者其它集成调试环境的情况下,监控某段内存的非法操作,则需要对Watch寄存器进行设置;用户态CPU性能监控,需要通过CPR 读取CPU性能参数,所述性能参数包括CPU每一时钟周期内所执行的指令条数(IPC) ,Cache Miss率、TLB Refill次数等,这样,应用程序就需要访问特权模式下的资源。目前特权模式下,主要通过C预处理器形成与所要访问的目的CPR相对应的汇编指令,再通过汇编器生成系统能识别的机器码来访问目的CPR。下面,对访问CPR的汇编指令、即访问CPR指令格式进行描述\)X MIPS (Microprocessor without Interlocked Piped Stages) WM^a^T^i^ 处理器为例,一个MIPS体系结构的系统最大可支持四个协处理器CPO CP3,每个协处理器最多可包含256个寄存器,以CPO为例,其访问CPR指令格式如图1所示,共包含6个部分, 其中101为协处理器编号;102为功能号,功能号中的最低比特位,即图1中最右边的χ标识的比特位表示所操作的CPR的位宽,0为32比特,1为64比特,第3比特位,即图1中左边的χ标识的比特位表示读写,0为要对CPR进行读操作,1为要对CPR进行写操作;103为通用寄存器(GPR)编号;104与106中的数字共同组成CPR编号,所述CPR编号用于标识目的CPR ;105为空字节。由图1所述的访问CPR指令格式可以看出,访问任意一个协处理器中的CPR,也就是目的CPR,都需要与目的CPR对应的指令参数值,包括协处理器编号、功能号、CPR编号、GPR编号参数值等相对应,也就是说,需要一条与目的CPR对应的访问CPR指令。用户态下访问CPR的主要方式是通过系统调用进入到特权模式,存取完目的CPR 的值后再返回用户态,所述系统调用是指通过syscall指令触发系统异常进入特权模式, 执行编译器静态构造的访问CPR指令,从而实现访问CPR的过程,主要有以下两种方案。方案一输入CPR指令参数,且参数值固定,然后通过系统调用进入特权模式,一个系统调用仅能访问一个或者几个CPR,若访问CPR的需求过多,则系统调用数过多,系统难以维护;方案二 输入CPR指令参数,且参数值不固定,然后通过系统调用进入特权模式,参数取值不同,可以访问不同的CPR,然后返回用户态。但是,因访问任意一个协处理器中的 CPR都需要有一条与之对应的访问CPR指令,编译器在静态构造访问CPR指令时,需要预先通过if-else或者switch-case结构来区分4*32*8 = 1024个分支,根据输入的指令参数就可以实现访问协处理器中任意一个CPR的目的,但是,该方案需要预先构造覆盖所有CPR 的指令,导致该方案过于复杂和繁琐。 针对上述方案中存在的问题,现有技术中尚未提出有效的解决方案。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种访问CPR的方法及装置,简化方案,有利于系统维护,实现访问CPR的通用性。为达到上述目的,本专利技术的技术方案是这样实现的本专利技术提供了一种访问协处理器寄存器CPR的方法,该方法包括在用户态下CPU构造访问CPR指令,执行输入的异常指令,进入特权模式,CPU运行异常处理程序,异常处理程序根据异常指令调用内核处理函数,内核处理函数执行访问CPR 指令,返回用户态。上述方案中,所述执行输入的异常指令,进入特权模式,CPU运行异常处理程序包括输入异常指令,CPU执行异常指令,进入特权模式,运行异常处理程序,同时,CPU将产生异常的指令地址保存到异常程序计数寄存器EPC中。上述方案中,所述异常处理程序根据异常指令调用内核处理函数包括异常处理程序读取EPC中的产生异常的指令地址,根据产生异常的指令地址获取内存中的异常指令,根据异常指令的内容,调用相应的内核处理函数。上述方案中,所述内核处理函数执行访问CPR指令包括内核处理函数读取寄存器中的访问CPR指令,保存到全局变量的后四个字节,将全局变量中的数据保存到下一级存储介质,然后将指令缓存中包含旧CPR指令所在的指令行无效,更新指令缓存,从更新后的指令缓存中的全局变量起始地址处开始执行指令,根据延时槽原理,访问CPR指令先于全局变量起始地址处的返回指令执行完毕。上述方案中,所述保存到全局变量的后四个字节包括有一个CPU时,内核处理函数直接将读取的访问CPR指令,保存到全局变量的后四个字节;或者,有一个以上的CPU,内核处理函数读取第一协处理器中的当前运行的CPU编号,根据CPU编号与全局变量的对应关系,将读取的访问CPR指令保存到与CPU编号对应的全局变量的后四个字节。上述方案中,所述访问CPR指令先于全局变量起始地址处的返回指令执行完毕之后,该方法进一步包括内核处理函数将EPC中异常的指令地址加四并保存到EPC,然后执行返回用户态指令,系统返回用户态。本专利技术还提供了一种访问CPR的装置,该装置包括指令构造模块,用于在用户态下,构造访问CPR指令并保存到寄存器中;异常处理模块,用于执行输入的异常指令,进入特权模式,调用内核处理模块;内核处理模块,用于执行访问CPR指令,返回用户态。上述方案中,所述异常处理模块具体包括异常指令执行单元;所述异常指令执行单元,用于执行输入的异常指令,进入特权模式,并将产生异常的指令地址保存到EPC,调用内核处理模块。上述方案中,所述异常处理模块进一步包括调用单元;所述调用单元,用于读取在EPC中保存的产生异常的指令地址,根据所述产生异常的指令地址获取内存中的异常指令,根据异常指令的内容,调用相应的内核处理模块。上述方案中,所述内核处理模块具体包括指令保存单元和指令执行单元;所述指令保存单元,用于读取寄存器中的访问CPR指令,保存到全局变量的后四个字节,将全局变量中的数据保存到下一级存储介质,然后将指令缓存中旧CPR指令所在的指令行无效, 更新指令缓存;所述指令执行单元,用于从更新后的指令缓存中的全局变量的起始地址处开始执行指令,根据延时槽原理,访问CPR指令先于全局变量起始地址处的返回指令执行完毕。上述方案中,所述指令保存单元,有一个CPU时,用于直接将读取的访问CPR指令, 保存到全局变量的后四个字节;或者,有一个以上的CPU时,用于读取第一协处理器中的当前运行的CPU编号,根据CPU编号与全局变量的对应关系,将读取的访问CPR指令保存到与 CPU编号对应的全局变量的后四个字节。上述方案中,所述内核处理模块进一步包括本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:曹厚华王忠波胡小龙
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术