CN101256480A - 一种能够标记存储器中某些位置的处理器 - Google Patents

一种能够标记存储器中某些位置的处理器 Download PDF

Info

Publication number
CN101256480A
CN101256480A CNA2007100859369A CN200710085936A CN101256480A CN 101256480 A CN101256480 A CN 101256480A CN A2007100859369 A CNA2007100859369 A CN A2007100859369A CN 200710085936 A CN200710085936 A CN 200710085936A CN 101256480 A CN101256480 A CN 101256480A
Authority
CN
China
Prior art keywords
perhaps
certain
processor
memory
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2007100859369A
Other languages
English (en)
Inventor
宋嘉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
OU SHUPING
Original Assignee
OU SHUPING
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by OU SHUPING filed Critical OU SHUPING
Priority to CNA2007100859369A priority Critical patent/CN101256480A/zh
Publication of CN101256480A publication Critical patent/CN101256480A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明公开一种能够标记存储器中某些位置的处理器。本发明涉及一种数据处理设备,特别是处理器的体系结构设计。本发明公开一种处理器设计方法,可以根据内存中某位置的内容而非其地址来标记该位置。若处理器访问被标记了的位置或被访问的位置附近被标记了话,处理器将触发某种自动行为。利用保护字来触发某种预定义的行为,可以在多个角度对软件的错误进行检查和防止,还可以起到防护病毒攻击、保护关键数据、提高处理器性能等作用。

Description

一种能够标记存储器中某些位置的处理器
技术领域
本文涉及一种数据处理设备,特别是处理器的体系结构设计。
背景技术
许多种现有技术可以对微处理器所访问的存储空间中的某些区段赋以一定的属性,从而达到提高安全性等目的。例如虚拟内存(virtual memory)技术中提供的页表。每个页表的大小从1K字节到4M字节不等,可以单独标记某个页表为是否可读、是否可写、是否可执行、是否存在于物理内存中等等。例如ARM公司所提供的TrustZone技术,可以标定某段内存空间的特权级,只有进程拥有足够高的特权级,才能访问这段空间。这些技术都是基于地址的,即在内存中的特殊区域,或在微处理器中的特殊寄存器中,存储页表或内存区段的地址,及其相应的属性。
页表和内存区段只能提供对较大的内存区块的保护。有时候,对较小的内存区块进行保护也是非常必要的。对于软件而言,在某些情况下某些内存位置具有特殊的含义和访问规则,例如:在访问数组时,数组的边界是不可跨越的;未初始化的内存区域是不可访问的;已释放的内存是不可访问的;堆栈中保存的返回地址是不可被覆盖的,等等。对于较低层次的编程语言如C、C++等,对于上述这些具有特殊含义的内存位置,完全以来编程人员的谨慎来保证特定的访问规则不被违反。在处理器的体系结构层面上,并没有对特定位置的特殊访问规则进行检查的辅助措施。
有一些技术,可以标记某个指针能访问的内存范围。例如肥指针(fat-pointer),它通过改变编译器,使得指针不只包含一个地址,还包括该指针可以指向的区域的上边界和下边界,以此来动态地检查数组访问是否越界。在一定程度上,这种方式对较小的内存区块提供了保护。这种方式也是基于地址的。
当前业界存在普遍的偏见,即指定一段内存具有某种属性,只有通过基于地址的方式,即一定要指定这段内存的地址范围。目前尚没有某种技术,通过基于内容的方式,来标定一段内存具有某种属性,即一段内存由于它的起始部分、结束部分、中间的某部分或它的整体存储了特定的内容,而具有某种属性。
这种偏见是有一定理由的。对通用处理器而言,内存中的数据的具体取值,同它的含义——即处理器对它的解释——无关。任意一块内存中存储的数据,既可以被解释成为一个或若干个整数,又可以被解释为一个或若干个浮点数,还可以被解释为一个字符串,等等。因此,规定某一个取值具有特定含义并且用这个取值标记内存中某位置为特殊的位置在原则上是不可行的,因为内存中某位置可能在某时刻碰巧被写入了一个整数、浮点数或字符串,使得该位置上的数据的取值正好就是用来标记特殊位置的那个取值,于是意外地碰巧产生了一个我们所不希望的标记。
本发明提出一种基于内容的技术,对在内存特定位置加标记提供支持,从而破除了这种偏见。
发明内容
在概率意义上,用特定取值标记内存位置是可行的。只要选定的取值包含足够多的比特数,则程序正常运行过程中向内存中写的数据同这个取值巧合的几率就会非常之低,以至于在足够长的时间内都不会出现一次。在软件技术中,经常使用随机生成的128位整数作为唯一的、不会重复的ID。这里所谓的“唯一的、不会重复”是指在概率意义上随机生成的两个128位整数碰巧相等的可能性非常之低。但类似技术并没有出现在处理器设计领域。
本发明的基本思想是利用“在概率意义上,用特定取值标记内存位置是可行的”这一事实,并且加以适当的改进。改进之一使得程序正常运行过程中向内存中写的数据使某位置碰巧满足标记条件的可能性不会因为数据拷贝增加。改进之二使得预定义的取值所包含的字节数(比特数)保持在适当的范围。
改进一。比较简单和幼稚的判定某内存位置被标记的方式是,若该位置保存的数据同某预定义取值相同,则认为该位置被标记了。这种方式的缺点是,一旦程序正常运行过程中向内存中写的数据同这个取值巧合了,则第二次巧合的可能性会大大增加。这是因为,对软件而言,对内存中数据的拷贝是很常见的操作,巧合的数据极有可能会被拷贝到内存中其它位置,造成第二次甚至第三次巧合。在本发明中,判定某内存位置Aj被标记的标准是f(MEM(Aj,n),Aj)≡B。其中,B是某预定义的取值,f是某个映射函数,MEM(Aj,n)表示存储器中从地址Aj开始的n个字节长的数据且该数据被视为无符号整数。本发明不单纯地以存储的内容来判断,即不采用MEM(Aj,n)≡B为判断标准,而是同时考虑内存地址Aj和存储内容MEM(Aj,n),如图1所示。f可以选择为一种加密函数或哈希函数,它可以是简单的异或、移位、相加或这几种计算的结合,也可以是复杂的Blowfish、AES等加密函数,f也可以是某种哈希函数。总之,它把数据存放位置的地址也考虑了进来,数据被拷贝到别的位置后,Aj变化了,不再满足f(MEM(Aj,n),Aj)≡B,因此不会因为拷贝造成新的巧合。根据实施时的不同需要,Aj可以是逻辑地址,也可以是物理地址。若某内存位置Aj满足f(MEM(Aj,n),Aj)≡B,则称该位置存储了一个“同B对应的保护字”,简称存储了一个“保护字”。处理器保存一个集合{B1,B2...Bn},集合中的每一个数据,都对应一种类型的保护字。
处理器可以在正巧访问到保护字时触发某种预定义的行为,也可以在被访问的位置的附近出现保护字时触发某种预定义的行为。例如,处理器访问的地址是Ai,同时在Aj处有一个保护字,处理器可以在这些情况下触发某种预定义的行为:Ai在Aj之后的某个位置上,即Ai-Aj-m≡0,m是某个整数;或者,Aj是Ai所在的长度为m的内存区段的开头,即Ai-Aj-Ai%m≡0,m是某个整数,“%”表示取模操作;或者,Ai距离Aj不超过一定的范围,即(Ai≤Aj+m1)AND(Ai≥Aj-m2)),m1和m2是某两个正整数,AND表示逻辑与操作;等等。
改进二。预定义的取值若只包含64个比特(8个字节,相当于64位处理器中一个指针的大小),巧合的几率并不足以达到很低。设想一种极端情况,一个进程运行在4GHz的处理器上,每秒钟向内存写232个64比特的数据,持续运行了232秒(约136年,这是个保守的估计,因为计算机的平均无故障工作时间仅为10年左右)。在这种情况下,一次巧合也不发生的几率仅仅为37.8%。但是,发生巧合的次数大于16次的可能性低至1.86×10-14。转义列表的机制可以允许一定次数的巧合,从而使得预定义的取值只包含64个比特也是可行的。
由于转义列表的存在,判断一个地址Aj处是否有真保护字,就要考虑Aj是否满足Aj∈{A1,A2...An},{A1,A2...An}是转义列表中列举的地址的集合。一个位置Aj要有真保护字,要满足f(MEM(Aj,n),Aj)≡B并且不满足Aj∈{A1,A2...An}。一个位置Aj若同时满足f(MEM(Aj,n),Aj)≡B和Aj∈{A1,A2...An},则称此位置保存了伪保护字。保存了伪保护字的内存位置不被视为加了标记的位置,不会引起预定义的行为。
维护转义列表和用保护字设定标记,需要甲类和乙类两种访存方式的配合。
用乙类方式访问存储器时,不论所访问的位置包含了怎样的数据,处理器都不会进行任何预定义的行为,即不识别任何保护字。用此类访存方式,可以用来安全地在内存中写入保护字。即使被标记的位置原本就包含有另一种类型的保护字,也可以成功地将它覆盖掉,而不会触发另一种类型的保护字所对应的预定义的行为。
甲类访存方式识别保护字,并且可以触发保护字所对应的预定义的行为。对于读操作,只需在操作之前检查地址A处是否满足标记条件即可。对于写操作,不但需在操作之前检查地址A处是否满足标记条件f(MEM(Aj,n),Aj)≡B,而且需要在操作之后检查地址A处是否满足此条件。如果在操作之前不满足,而操作之后满足了,说明由于该写操作本身碰巧形成了一个伪保护字。这种情况下,处理器将触发某种预定义的行为来把地址A加入转义列表,使得之后的访问不会认为地址A处有真保护字。如果在操作之前满足此条件但该地址处于转义列表中(是个伪保护字,因此不应当引发预定义的行为),而操作之后不满足了,说明由于该写操作本身碰巧取消掉了一个伪保护字。这种情况下,处理器将触发某种预定义的行为,把地址A从转义列表中去除,以腾出转义列表的表项。
用乙类方式在地址A处写上新的保护字时,如果发现该位置碰巧曾经被甲类访存方式形成了一个保护字并且被加入转义列表中了(从而形成了一个伪保护字),也应当把该地址从转义列表中去除。
有益效果:利用保护字来触发某种预定义的行为,可以在多个角度对软件的错误进行检查和防止,还可以起到防护病毒攻击、保护关键数据、提高处理器性能等作用。
附图说明
图1:判断某内存地址A处是否存放了同某个预定义值所对应的保护字。
具体实施方式
有关“某种预定义的行为”的实施
方式1,写保护异常。即对于甲类访存方式,读取地址A处之前发现地址A-8处存储了真保护字,即触发一个异常,通知操作系统,该应用程序改写了一个只能被读取的内存位置的数据,违背了该位置的访问规则。这种方式可以用来标记不可改写的内存区域,例如函数的返回地址,防止软件错误。
方式2,读写保护异常。即对于甲类访存方式,读取地址A处之前发现地址A处存储了真保护字,即触发一个异常,通知操作系统,该应用程序读取或改写了一个不可访问的内存位置A的数据,违背了该位置的访问规则。这种方式可以用来标记不可访问的内存区域,防止软件错误。在数组的开头之前和结尾之后存放保护字,可以在一定程度上防止数组越界的问题。
方式3,执行保护异常。即处理器从地址A处取指令之前发现地址A处存储了真保护字,即触发一个异常,通知操作系统,该应用程序尝试从一个不可访问的内存位置A的取指令,违背了该位置的访问规则。这种方式可以用来标记不可执行的内存区域的边界,防止软件错误。
方式4,程序计数器(Program Counter,简称PC)范围检查。即对于甲类访存方式,读取地址A处之前发现地址A-24处存储了真保护字,则检查PC是否大于A-16处存储的64比特的数据并且小于A-8处存储的64比特的数据,若不满足条件,则触发某种异常。这种方式可以使得某数据只能被某个或某些特定函数来修改,防止软件错误。
方式5,进程特权态的检查。即对于甲类访存方式,访问地址A处之前发现地址A-12处存储了真保护字,则检查当前进程所处特权态的编号是否大于A-4处存储的32比特的数据,若不满足条件,则触发某种异常。这种方式可以使得某数据只能被有足够高的权限的进程修改,防止软件错误。
方式6,进程ID的检查。即对于甲类访存方式,访问地址A处之前发现地址A-12处存储了真保护字,则检查当前进程的ID是否等于A-4处存储的32比特的数据,若不满足条件,则触发某种异常。这种方式可以使得某数据只能被某一特定的进程修改,防止软件错误。
方式7,数据预取。即对于甲类访存方式,访问地址A处之前发现地址A-8处存储了真保护字,则将从A开始的若干字节的数据从内存中预取到高速缓冲器(cache)中。可以在一个数组的开头之前存放保护字,在访问其第一个元素的时候,自动地整个数组或数组的开头部分都会预取到高速缓冲器中,从而减少了高速缓冲器失效(cache miss)的机会,提高处理器的性能。
方式8,统计访问频率。即对于甲类访存方式,访问地址A处之前发现地址A-8处存储了真保护字,则将表示地址A一共被访问了多少次的计数器的值增加一。统计某些关键地址的访问频率有助于分析程序的特性,从而找到提高性能的方法。
在具体实施时,可以同时采取多项上述的方式,只需用不同类型(即对应于不同的B的取值)的保护字来触发不同的行为即可。
相关信息的指定、更新、保存或查询
为了实施本发明,必须用相应的机制来指定、更新、保存或查询预先定义的若干项取值{B1,B2...Bn},这些取值同被自动触发的行为之间的对应关系,以及这些取值对应的转义列表{A1,A2...An}。其中,指定、更新和查询三种操作,可以通过特殊指令来实现,也可以通过读写特定的状态寄存器实现,还可以通过读写特定的内存位置实现。指定操作还可以通过输入设备,从处理器外部输入来实现。保存操作是指在处理器发生进程切换的时候,把必要的信息转存到内存或硬盘上,在进程恢复的时候,从内存和硬盘上把这些信息恢复到处理器内部,它可以通过软件的方式来实现,即先进行查询操作,得到信息后,用软件方式把必要的信息转存到内存或硬盘上,进程恢复时,用软件方式从内存或硬盘上得到信息,进行更新操作以重建这些信息;它也可以通过硬件的方式来实现,即转存和重建完全由处理器内部的控制电路自动完成。
两种不同访存方式的实现
本发明需要甲乙两种不同的访存方式配合工作。可以用不同的指令编码来区分这两种访存方式,即两种访存方式用两类不同的指令来实现。这种实施方式最直接,但是比较耗费编码空间。另一种方式是用不同的处理器状态来实施,即在处理器的状态寄存器中规定某些位为某种值时,发出的访存请求是甲类访存,为另外某种值时,发出的请求是乙类访存。还有一种方式是用前缀指令实施,即规定紧跟在某一条特殊指令之后的访存指令是乙类访存,否则是甲类访存。
利用高速缓冲器(cache)减少判定保护字的次数
为了实施本发明,表面上看来,需要在每次访存的时候,额外进行一次或若干次函数f(MEM(Aj,n),Aj)的计算,但实际上额外的计算代价并没有那么高。现代几乎所有的微处理器内部都包含高速缓存器,可以对高速缓存器以修改,使其不但缓存数据,还缓存一定的信息以表明每64比特的数据及其对应的地址是否满足f(MEM(Aj,n),Aj)≡B1、f(MEM(Aj,n),Aj)≡B2、f(MEM(Aj,n),Aj)≡B3,等等。这样,读操作时就不必进行运算,直接利用缓存的信息即可。只有在数据被改写时,才需要进行额外的运算来更新缓存的信息。

Claims (9)

1. 一种包含访存部件和运算部件的处理器,其特征在于:处理器用某种访存方式甲访问(即读取或改写)某内存地址Ai处的之前和(或)之后,若存在地址Aj,满足f(MEM(Aj,n),Aj)≡B∈{B1,B2...Bn}和g(Ai,Aj,M)≡true,(≡表示恒等,true表示逻辑值真),则处理器在访问内存的之前和(或)之后,自动触发同B对应的某种预定义的行为,其中MEM(Aj,n)表示存储器中从地址Aj开始的n个字节长的数据且该数据被视为无符号整数,{B1,B2...Bn}表示某个正整数集合,f和g表示两个函数,M表示访问的方式,当访问是读时,M为0,当访问为写时,M为1,当访问为执行(即取指令)时,M为2。
2. 如权利要求1所述的处理器,其特征在于:处理器用另一种访存方式乙访问任何内存地址,都不会触发如权利要求1所述的同B对应的某种预定义的行为。
3. 如权利要求1所述的处理器,其特征在于:
(1)f是某种加密函数或哈希函数,并且
(2)g被定义为g(Ai,Aj,M)=k(Ai,Aj),或者
(3)g被定义为g(Ai,Aj,M)=(k(Ai,Aj)AND M≡m),m为0、1或2,或者
(4)g被定义为g(Ai,Aj,M)=(k(Ai,Aj)AND(NOT Aj∈{A1,A2...An})),{A1,A2...An}是一个正整数集合,或者
(5)g被定义为g(Ai,Aj,M)=k(Ai,Aj)AND Aj∈{A1,A2...An},{A1,A2...An}是一个正整数集合,或者
(6)g被定义为g(Ai,Aj,M)=(k(Ai,Aj)AND M≡mAND(NOT Aj∈{A1,A2...An})),m为0、1或2,{A1,A2...An}是一个正整数集合,或者
(7)g被定义为g(Ai,Aj,M)=(k(Ai,Aj)AND M≡m AND Aj∈{A1,A2...An}),m为0、1或2,{A1,A2...An}是一个正整数集合,或者
(8)g被定义为其它形式。
4. 如权利要求1或3所述的处理器,其特征在于:
(1)k被定义为k(Ai,Aj)=(Ai≡Aj),或者
(2)k被定义为k(Ai,Aj)=(Ai-Aj-m≡0),m是某个整数,或者
(3)k被定义为k(Ai,Aj)=(Ai-Aj-Ai%m≡0),m是某个整数,“%”表示取模操作,或者
(4)k被定义为k(Ai,Aj)=((Ai≤Aj+ml)AND(Ai≥Aj-m2)),m1和m2是某两个正整数,或者
(5)k被定义为其它形式。
5. 如权利要求1或3所述的处理器,其特征在于:正整数集合{B1,B2...Bn}和{A1,A2...An}存储在处理器的特殊寄存器当中和(或)内存的特定位置当中,并且它们具体的定义方式,可以被用户指定、更新、保存或查询。
6. 如权利要求1或3所述的处理器,其特征在于:某个整数B∈{B1,B2...Bn}具体对应于哪种预定义的行为,可以被用户指定、更新、保存或查询。
7. 如权利要求1、3或4所述的处理器,其特征在于:函数f、g和k具体的定义方式,可以被用户指定、更新、保存或查询。
8. 如权利要求1所述的处理器,其特征在于:所述的同B对应的某种预定义的行为
(1)是对程序计数器(Program Counter)取值的检查,或者
(2)是对进程所处的运行状态的检查,或者
(3)是对进程所拥有的某个特殊编号的检查,或者
(4)是数据预取(pre-fetch),或者
(5)是将Ai加入集合{A1,A2...An},或者
(6)是改写内存中某位置的值或改写处理器内部某存储单元的值,或者
(7)是内存写保护异常(exception),或者
(8)是内存读保护异常,或者
(9)是内存执行保护异常,或者
(10)是上述某几种行为的混合,或者
(11)是指定、更新、保存或查询正整数集合{B1,B2...Bn}和{A1,A2...An}的具体的定义方式,或者
(12)是指定、更新、保存或查询某个整数B∈{B1,B2...Bn}具体对应于哪种预定义的行为,或者
(13)是指定、更新、保存或查询函数f、g和k具体的定义方式,或者
(14)是其它行为。
9. 如权利要求1所述的处理器,其特征在于:
(1)包含高速缓冲器(cache),并且
(2)在高速缓冲器中,对于每一个B∈{B1,B2...Bn},对于每个包含n个字节的数据,缓存一定的信息来标明它们是否满足f(MEM(Aj,n),Aj)≡B,其中n表示某正整数,Aj代表某一个地址。
CNA2007100859369A 2007-02-28 2007-02-28 一种能够标记存储器中某些位置的处理器 Pending CN101256480A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2007100859369A CN101256480A (zh) 2007-02-28 2007-02-28 一种能够标记存储器中某些位置的处理器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2007100859369A CN101256480A (zh) 2007-02-28 2007-02-28 一种能够标记存储器中某些位置的处理器

Publications (1)

Publication Number Publication Date
CN101256480A true CN101256480A (zh) 2008-09-03

Family

ID=39891330

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2007100859369A Pending CN101256480A (zh) 2007-02-28 2007-02-28 一种能够标记存储器中某些位置的处理器

Country Status (1)

Country Link
CN (1) CN101256480A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104969178A (zh) * 2012-12-28 2015-10-07 英特尔公司 用于实现便笺式存储器的装置和方法
CN105631329A (zh) * 2015-12-21 2016-06-01 北京金山安全管理系统技术有限公司 Virut感染型病毒免疫方法及其装置
WO2018234760A1 (en) * 2017-06-19 2018-12-27 Arm Limited VERIFICATION OF LIMITS

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104969178A (zh) * 2012-12-28 2015-10-07 英特尔公司 用于实现便笺式存储器的装置和方法
CN104969178B (zh) * 2012-12-28 2018-10-12 英特尔公司 用于实现便笺式存储器的装置和方法
CN105631329A (zh) * 2015-12-21 2016-06-01 北京金山安全管理系统技术有限公司 Virut感染型病毒免疫方法及其装置
CN105631329B (zh) * 2015-12-21 2019-05-10 北京金山安全管理系统技术有限公司 Virut感染型病毒免疫方法及其装置
WO2018234760A1 (en) * 2017-06-19 2018-12-27 Arm Limited VERIFICATION OF LIMITS
US10416963B2 (en) 2017-06-19 2019-09-17 Arm Limited Bounds checking

Similar Documents

Publication Publication Date Title
TWI342492B (en) Method of providing extended memory protection
JP6162652B2 (ja) メモリ管理装置、プログラム、及び方法
JP6584823B2 (ja) メモリ管理装置、プログラム、及び方法
JP3944504B2 (ja) 変換索引バッファのレイジー・フラッシング
TWI725059B (zh) 用於控制有界指標的使用之設備及方法
CN111201518B (zh) 用于管理能力元数据的设备和方法
KR20080041707A (ko) Tlb 록 표시자
EP3841477B1 (en) An apparatus and method for controlling use of bounded pointers
US10877897B2 (en) System, apparatus and method for multi-cacheline small object memory tagging
CN101256480A (zh) 一种能够标记存储器中某些位置的处理器
JP4047281B2 (ja) キャッシュメモリをメインメモリに同期させる方法
JP7269942B2 (ja) 複数ガード・タグ設定命令
JP2021512405A (ja) メモリ・アクセスにおける保護タグ・チェックの制御
CN114266036A (zh) 一种基于Intel CET机制的保护通用内存完整性的方法
JP7369701B2 (ja) 処理回路上で実行されるべきプログラムをデバッグするときにメタデータにアクセスする方法

Legal Events

Date Code Title Description
C57 Notification of unclear or unknown address
DD01 Delivery of document by public notice

Addressee: Ou Shuping

Document name: Notification of acceptance

Addressee: Ou Shuping

Document name: Approval notice for cost mitigation

C06 Publication
PB01 Publication
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20080903