一种高性能微处理器寄存器及其内存地址弹性保护方法
技术领域
本发明涉及一种高性能微处理器寄存器及其内存地址弹性保护方法。
背景技术
处理器是当代计算机工业的核心。处理器大致分为两类:精简指令集处理器和复杂指令集处理器。在高性能处理平台中,精简指令集处理器被广泛使用,如:PAD,高性能服务器,桌面平台,嵌入式平台等;然而,复杂指令集处理器的使用却相对较少,一般只用于低性能服务器和桌面平台等。其主要原因是:精简指令集处理器指令长度不变,指令格式少,寄存器数目多,指令数目少,更能使处理器处理流水化。具有设计简单、效率高、容易测试、成品率高等特点。因此,如何研发出具有完全自主核心知识产权的高性能精简指令集处理器,已成为计算机工业设计研究中的重要课题。
目前,计算机操作***的内核主要放在内存的低地址区间中(只有极少数的处理器把内核放在内存的高地址),接着放操作***处理异常中断的程序,再接着放为应用程序提供服务的程序,应用程序放在最后。为了防止应用程序的非法访问,目前,主流的处理器主要用以下方法实现:
(1)把计算机的内存固定分成一定长度的段,应用程序和操作***内核放在规定的内存区间内,以防止用户程序的非法访问;
(2)处理器通过检查程序的长度,特权级和读写执行等属性以防止用户程序的非法访问;
(3)操作***通过检查程序的长度,特权级和读写执行等属性以防止用户程序的非法访问。
现有的计算机内存地址的保护方法存在以下不足:
1)当计算机的内存很小(如PDD、嵌入式平台中)时,如果固定长度的内存很大,供应用程序使用的内存就会很小,会造成宝贵的内存资源浪费,造成内存没有被合理的使用;
2)当计算机的内存很大(如在高性能的服务器中、大型计算机中),并且其操作***内核也很大时,会造成操作***内核不能完全被处理器内核保护的情况;
3)如果应用程序利用操作***的漏洞,篡改程序属性(在分段操作***,分页操作***中分别更改段属性,页属性等),使程序得到非法权限。
发明内容
本发明的一个目的在于克服现有技术的不足,提供一种高性能微处理器,在不改变指令集的前提下可轻易升级,采用浅流水线设计和精简流水线架构,静态分支预测,动态分支预测,能够更好地减少每条指令执行的时间,同时支持多发多射,减少处理器从内存里查找数据所用的时间;
本发明的另一个目的在于提供一种高性能微处理器寄存器的内存地址弹性保护方法,克服传统处理器通过软件保护和固定分段保护来防止应用程序非法访问的不足,可有效防止应用程序的非法访问。
本发明的目的是通过以下技术方案来实现的:一种高性能微处理器寄存器,它包括:
永远为0的0号寄存器;
用作累加器的1~8号寄存器;
用作乘法时的高位,除法指令的商的9号寄存器;
用作乘法时的低位,除法指令的模的10号寄存器;
用作返回用户模式时的指针、页的11、12号寄存器;
用作处理器在用户模式时的指令指针、页的13、14号寄存器;
用作处理器在特权模式时的指令指针、页的15、16号寄存器;
用作处理器在中断模式时的指令指针、页的17、18号寄存器,其页只有处理器在ken mode和int mode下才被数据移动指令赋值,如果处理器在soft mode和urs mode,则不能赋值并产生异常;
用作软件模式的指令指针、页的19、20号寄存器,其页只有处理器在ken mode、int mode和soft mode下才被数据移动指令赋值,如果处理器在urs mode,则不能赋值并产生异常;
用作堆栈指针、页的21、22号寄存器,当给其控制的0级cache赋值时,检查其特权级,当特权级值小于等于它才被赋值,否则产生异常;
用作页寄存器的指针、页的23、24号寄存器,当给其控制的0级cache赋值时,检查其特权级,当特权级值小于等于它才被赋值,否则产生异常;
用作页寄存器的指针、页的25、26号寄存器,当给其控制的0级cache赋值时,检查其特权级,当特权级值小于等于它才被赋值,否则产生异常;
用作页寄存器的指针、页的27、28号寄存器,当给其控制的0级cache赋值时,检查其特权级,当特权级值小于等于它才被赋值,否则产生异常;
用作页寄存器的指针、页的29、30号寄存器,当给其控制的0级cache赋值时,检查其特权级,当特权级值小于等于它才被赋值,否则产生异常;
用作状态寄存器的31号寄存器;
用作页目录寄存器的32号寄存器,保存虚拟地址转换式的页目录低20位有效,高12位强制为0,否则在以后的产品中产生不可预知的错误异常;
用作定时器timer的33~36号寄存器,当timer使能后,处理器每经过一个时钟寄存器的值加1,溢出时产生异常;
分别用作kenend、intend和softend寄存器的37~39号寄存器,在计算机的内存不大于4GB,在页大小为4kb时低20位有效,高12位必须为0,否则产生指令错误异常;
用作异常中断寄存器的40号寄存器,15位为1开启中断,反之不开启;16位为1开启异常,反之不开启;
用作页异常线性地址的41号寄存器;
用作多任务模式下的页开始、结束位置的42、43号寄存器,当操作***开启多任务保护模式,当用户页的值在42、43号寄存器值之外时,处理器产生出界异常;
用作虚拟模式下的页开始、结束位置的44、45号寄存器,0号版本的内核暂时保留;
用作tlb入口的46~50号寄存器,该寄存器的21,22,23位的值是000,001,010,011,100,101,110,111,其中,011,100,101,110保留,供处理器架构升级用,000作为0级cache的地址使用,001作为1级cache的地址使用,010作为2级cache的地址使用,111作为处理器的全局地址,供io输入输出块使用,高9位是处理器的处理核心号码,供处理器升级成多核心时使用,在操作***为单核心时强制为0,低20位是cache的块号;
用作内部dma的51~53号寄存器,51号寄存器为地址的开始地址,52号寄存器为地址结束处(都是块号);
53号寄存器保留;
54号寄存器保留;
用作分页模式下的局部地址转换的奇54、55号寄存器;
57~60号寄存器分别作为config0、config1、config2、config3,其中,对于config0,25号寄存器低4位分别使能0,1,2,3号时钟,第4位为1开启分页机制,为0时开启分页码机制,第5位多任务保护模式,操作***检查当前usr mode的指令页码的范围是否在42、43号寄存器之内,不在其内,则产生异常;其它位保留,config1、config2、config3分别保留;
分别用作trp、trpp寄存器的61、62号寄存器,在任务切换时,61、62号寄存器的值无需保存,其每行的数据长度为32位,在任务切换时把寄存器的值放在里面,执行该任务时将数据取出;
63号寄存器cpu属性如下:
处理器核心数 9bit【31,23】
处理器当前核心号 9bit【22,14】
处理器的位数 3bit【2,0】
其它位保留;
其中,32~63号寄存器的值只有运行在ker mode,int mode和soft mode才能被赋值。
一种高性能微处理器寄存器的内存地址弹性保护方法,它包括以下步骤:
S1:操作***通过赋值37、38、39号寄存器,分配处理器在各种模式下的内存区间;
S2:处理器检查14号寄存器的内容是否在39号寄存器中页值之内,如果在其范围之内,则产生异常,如果不在其范围之内,则不产生异常;
S3:处理器检查16号寄存器的页码是否在0号到37号寄存器页码范围中,如果在其范围之内,则不产生异常,如果不在其范围之内,则产生异常;
S4:处理器检查18号寄存器的页码是否在37号寄存器和38号寄存器范围中,如果在其范围之内,则不产生异常,如果不在其范围之内,则产生异常;
S5:处理器检查20号寄存器的内容是否在38号寄存器和39号寄存器中页值之内,如果在其范围之外,则产生异常;
S6:处理器把异常号送到异常中断寄存器中,并且进入int mode,当前处理器的指令页是18寄存器,指令指针是17号寄存器,处理器通过执行操作***的异常中断处理程序,从而防止应用程序的非法访问。
本发明的有益效果是:
1)在不改变指令集的前提下可轻易升级,采用浅流水线设计和精简流水线架构,静态分支预测,能够更好地减少每条指令的时间,同时支持多发多射;
2)指令集采用目前主流的精简指令,现大约有60条,本指令集最大可以支持1024条,在处理器的位超过1024位时,才需要升级;
3)在任务切换时,61、62号寄存器的值不需要保存,其每行数据的长度为32位,在任务切换时把寄存器的值放在里面,执行该任务时把数据从里面取出,可减少处理器从内存里查找数据所用的时间;
4)操作***通过数据移动指令赋值37至39号寄存器,能更有效地分配计算机内存空间;
5)从计算机硬件层面保护了***资源,克服了传统处理器通过软件保护和固定分段保护来防止应用程序非法访问的不足,可有效防止应用程序的非法访问。
附图说明
图1为内存地址弹性保护方法流程图。
具体实施方式
下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。
一种高性能微处理器寄存器,其特征在于:它包括:
用于接电源最低电位的永远为0的0号寄存器;
用作累加器的1~8号寄存器;
用作乘法时的高位,除法指令的商的9号寄存器;
用作乘法时的低位,除法指令的模的10号寄存器;
用作返回用户模式时的指针、页的11、12号寄存器;
用作处理器在用户模式时的指令指针、页的13、14号寄存器;
用作处理器在特权模式时的指令指针、页的15、16号寄存器;
用作处理器在中断模式时的指令指针、页的17、18号寄存器,其页只有处理器在ker mode和int mode下才被数据移动指令赋值,如果处理器在soft mode和urs mode,则不能赋值并产生异常;
用作软件模式的指令指针、页的19、20号寄存器,其页只有处理器在ker mode、int mode和soft mode下才被数据移动指令赋值,如果处理器在urs mode,则不能赋值并产生异常;
用作堆栈指针、页的21、22号寄存器,当给其控制的0级cache赋值时,检查其特权级,当特权级值小于等于它才被赋值,否则产生异常;
用作页寄存器的指针、页的23、24号寄存器,当给其控制的0级cache赋值时,检查其特权级,当特权级值小于等于它才被赋值,否则产生异常;
用作页寄存器的指针、页的25、26号寄存器,当给其控制的0级cache赋值时,检查其特权级,当特权级值小于等于它才被赋值,否则产生异常;
用作页寄存器的指针、页的27、28号寄存器,当给其控制的0级cache赋值时,检查其特权级,当特权级值小于等于它才被赋值,否则产生异常;
用作页寄存器的指针、页的29、30号寄存器,当给其控制的0级cache赋值时,检查其特权级,当特权级值小于等于它才被赋值,否则产生异常;
用作状态寄存器的31号寄存器;
用作页目录寄存器的32号寄存器,保存虚拟地址转换式的页目录低20位有效,高12位强制为0,否则在以后的产品中产生不可预知的错误异常;
用作定时器(timer)的33~36号寄存器,当timer使能后,处理器每经过一个时钟寄存器的值加1,溢出时产生异常;
分别用作kenend、intend和softend寄存器的37~39号寄存器,在计算机的内存不大于4GB,在页大小为4kb时低20位有效,高12位必须为0,否则产生指令错误异常;
用作异常中断寄存器的40号寄存器,15位为1开启中断,反之不开启;16位为1开启异常,反之不开启;
用作页异常线性地址的41号寄存器;
用作多任务模式下的页开始、结束位置的42、43号寄存器,当操作***开启了多任务保护模式,当用户页的值在42、43号寄存器值之外时,处理器产生出界异常;
用作虚拟模式下的页开始、结束位置的44、45号寄存器,0号版本的内核暂时保留;
用作tlb入口的46~50号寄存器,该寄存器的21,22,23位的值是000,001,010,011,100,101,110,111,其中,011,100,101,110保留,供处理器架构升级用,000作为0级cache的地址使用,001作为1级cache的地址使用,010作为2级cache的地址使用,111作为处理器的全局地址,供io输入输出块使用,高9位是处理器的处理核心号码,供处理器升级成多核心时使用,在操作***为单核心时强制为0,低20位是cache的块号;
用作内部dma的51~53号寄存器,51号寄存器为地址的开始地址,52号寄存器为地址结束处(都是块号);
53号寄存器保留;
54号寄存器保留;
用作分页模式下的局部地址转换的奇54、55号寄存器;
57~60号寄存器分别作为config0、config1、config2、config3,其中,对于config0,25号寄存器低4位分别使能0,1,2,3号时钟,第4位为1开启分页机制,为0时开启分页码机制,第5位多任务保护模式,操作***检查当前usr mode的指令页码的范围是不是在42、43号寄存器之内,不在其内,则产生异常;其它位保留,config1、config2、config3分别保留;
分别用作trp、trpp寄存器的61、62号寄存器,在任务切换时,61、62号寄存器的值无需保存,其每行的数据长度为32位,在任务切换时把寄存器的值放在里面,执行该任务时将数据取出;
63号寄存器cpu属性如下:
处理器核心数 9bit【31,23】
处理器当前核心号 9bit【22,14】
处理器的位数 3bit【2,0】
其它位保留;
其中,32~63号寄存器的值只有运行在特权模式下才能被赋值。37~39号寄存器只有在ken mode下才能被赋值,其他mode赋值产生异常。
指令集手册:
mov 指令
mov,其为数据移动指令,该指令可以分成两类:立即数移动指令;寄存器间移动指令。
(1)立即数移动指令可以分成有符号立即数移动指令,无符号立即数移动指令:
A:有符号立即数移动指令
源操作数 目的操作数(该处是目的寄存器)
movsb 立即数 , %n 8位有符号移动指令
movsw 立即数 , %n 16位有符号移动指令
movsd 立即数 , %n 32位有符号移动指令
movsl 立即数 , %n 64位有符号移动指令(在32位处理器中保留)
B:无符号立即数移动指令
源操作数 目的操作数(该处是目的寄存器)
movb 立即数 , %n 8位有符号移动指令
movw 立即数 , %n 16位有符号移动指令
movd 立即数 , %n 32位有符号移动指令
movl 立即数 , %n 64位有符号移动指令(在32位处理器中保留)
C: 寄存器间移动指令:
mov %n ,%m(把源操作数所在的寄存器%n,送到目的操作数所在寄存器%m)
(2)特殊指令
指令 注释
bck 源操作数为11号寄存器,目的操作数为12号寄存器,返回用户模式,在跳转指令时,把用户模式的指针,页放入对应的寄存器。
usr 无源目的操作数,处理器进入用户模式。
ken 无源目的操作数,处理器进入核心模式。
int 无源目的操作数,处理器进入中断模式。
saft 无源目的操作数,处理器进入软件模式。
pop 从堆栈页中弹出数据指令,弹出,压人的数据长度为处理器的位数。
push 把寄存器中的数据压人堆栈中,弹出,压人的数据长度为处理器的位数。
set 置位命令,把目的操作数的(源操作数位)置1。
clr 清位命令,把目的操作数的(源操作数位)置0。
tst 测试命令,测试目的操作数的(源操作数位)位,结果放入(31号寄存器)状态寄存器的27位。
m32 32位无符号数乘法指令,结果放到,低位放到10号寄存器,高位放到9号寄存器中。
sm32 32位有符号数乘法指令,结果放到,低位放到10号寄存器,高位放到9号寄存器中。
d32 32位无符号数除法指令,结果放到,结果放到9号寄存器,模放到10号寄存器中。
Sd32 32位有符号数乘法指令,结果放到,结果放到9号寄存器,模放到10号寄存器中。
rst rest(只有处理器处在ken mode,才能执行,否则产生异常)。
如图1所示,一种高性能微处理器寄存器的内存地址弹性保护方法,它包括以下步骤:
S1:操作***通过赋值37、38、39号寄存器,分配处理器在各种模式下的内存区间;
S2:处理器检查14号寄存器的内容是否在39号寄存器中页值之内,如果在其范围之内,则产生异常,如果不在其范围之内,则不产生异常;
S3:处理器检查16号寄存器的页码是否在0号到37号寄存器页码范围中,如果在其范围之内,则不产生异常,如果不在其范围之内,则产生异常;
S4:处理器检查18号寄存器的页码是否在37号寄存器和38号寄存器范围中,如果在其范围之内,则不产生异常,如果不在其范围之内,则产生异常;
S5:处理器检查20号寄存器的内容是否在38号寄存器和39号寄存器中页值之内,如果在其范围之外,则产生异常;
S6:处理器把异常号送到异常中断寄存器(40号寄存器)中,并且进入int mode,当前处理器的指令页是18寄存器,指令指针是17号寄存器,处理器通过执行操作***的异常中断处理程序,从而防止应用程序的非法访问。