CN113468079A - 内存访问方法及装置 - Google Patents
内存访问方法及装置 Download PDFInfo
- Publication number
- CN113468079A CN113468079A CN202111033648.5A CN202111033648A CN113468079A CN 113468079 A CN113468079 A CN 113468079A CN 202111033648 A CN202111033648 A CN 202111033648A CN 113468079 A CN113468079 A CN 113468079A
- Authority
- CN
- China
- Prior art keywords
- address
- segment
- processor
- target
- memory
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
Abstract
本说明书一个或多个实施例提供一种内存访问方法及装置,其中,所述方法包括:处理器响应于获取到的内存访问指令,确定所述内存访问指令携带的逻辑地址,所述逻辑地址中包括目标内存空间在目标地址段中对应的段偏移量;所述处理器将所述段偏移量与段号寄存器中预存储的目标段号进行拼接以生成线性地址,所述目标地址段的段基址包含位于高位的所述目标段号和位于低位的若干零值逻辑位,且所述零值逻辑位与所述段偏移量的位数相同;所述处理器根据所述线性地址访问内存中的所述目标内存空间。
Description
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种内存访问方法及装置。
背景技术
在区块链技术中,智能合约通常以字节码的形式运行在虚拟机中,而字节码的执行效率主要受内存访问方式的影响,例如在段式存储管理的相关技术中,CPU在接收到字节码中内存访问指令携带的逻辑地址后,会进一步将该逻辑地址与所需访问的内存空间所在地址段的段基址相加以得到线性地址,然后基于相加得到的线性地址作为最终的访存地址访问内存,因此,相关技术在访存过程中总是需要通过一次算术运算才能得到真正用于访问内存的地址,而算术运算需要调用处理器的ALU(arithmetic and logic unit,算术逻辑单元)部件,这增大了访存指令的处理延迟。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种内存访问方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种内存访问方法,包括:
处理器响应于获取到的内存访问指令,确定所述内存访问指令携带的逻辑地址,所述逻辑地址中包括目标内存空间在目标地址段中对应的段偏移量;
所述处理器将所述段偏移量与段号寄存器中预存储的目标段号进行拼接以生成线性地址,所述目标地址段的段基址包含位于高位的所述目标段号和位于低位的若干零值逻辑位,且所述零值逻辑位与所述段偏移量的位数相同;
所述处理器根据所述线性地址访问内存中的所述目标内存空间。
根据本说明书一个或多个实施例的第二方面,提出了一种内存访问装置,包括:
指令响应模块,用于使处理器响应于获取到的内存访问指令,确定所述内存访问指令携带的逻辑地址,所述逻辑地址中包括目标内存空间在目标地址段中对应的段偏移量;
地址生成模块,用于使所述处理器将所述段偏移量与段号寄存器中预存储的目标段号进行拼接以生成线性地址,所述目标地址段的段基址包含位于高位的所述目标段号和位于低位的若干零值逻辑位,且所述零值逻辑位与所述段偏移量的位数相同;
内存访问模块,用于使所述处理器根据所述线性地址访问内存中的所述目标内存空间。
根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面中任一项所述的方法。
根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面中任一项所述方法的步骤。
附图说明
图1是一示例性实施例提供的一种内存访问方法的应用场景图。
图2是一示例性实施例提供的一种内存访问方法的流程图。
图3是一示例性实施例提供的一种内存访问方法的硬件实现图。
图4是一示例性实施例提供的一种设备的结构示意图。
图5是一示例性实施例提供的一种内存访问装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
本说明书所涉及的内存访问方法应用于CPU处理器,其上运行的不同应用程序所需访问的内存被划分为若干个内部地址连续的地址段,每个地址段相互之间不重叠,且每个地址段的段基址包含位于高位的段号和位于低位的若干零值逻辑位。图1是一示例性实施例提供的一种内存访问的应用场景图,以图1为例,图示中的内存地址需要用6位16进制数(相当于24位二进制数)表示,因此该内存为24位内存,假设一个线性地址所对应的内存空间的大小为1字节(8bit),那么图示内存的内存大小为1B*2^24=16MB,如图所示,该内存被划分为若干个连续的地址段,其中,虚拟地址空间00:0000H~00:FFFFH对应的地址段用于加载包括系统程序和操作系统在内的内核态程序;虚拟地址空间01:0000H~01:FFFFH对应的地址段用于加载用户态程序应用程序1;虚拟地址空间02:0000H~02:FFFFH对应的地址段用于加载用户态程序应用程序2;虚拟地址空间03:0000H~03:FFFFH对应的地址段用于加载用户态程序应用程序3,以此类推。可见,在图1所示的内存分配场景中,内存被平均分配为若干个段长相同的地址段,每个地址段的首地址(即段基址)中的高2位(对应于8位二进制数)代表段号,低4位(对应于16位二进制数)代表零值逻辑位,零值逻辑位中每位二进制数的值均为0,每个地址段的段长均等于4位16进制数所能表示的最大地址空间即16^4=65536,由于内存中的每个线性地址均被分配至相应的地址段,使得在图1所示的内存分配场景下内存不存在外部碎片。
在图1所示的应用场景中,系统程序或应用程序在内存中所占的虚拟地址空间均不超过其所在地址段的段长,以应用程序2为例,应用程序2的程序首地址为02:0000H,与虚拟地址空间02:0000H~02:FFFFH对应的目标地址段的段基址对齐,其被分配的虚拟地址空间不超过目标地址段的段长,在该目标地址段中,应用程序2维护有包含处理器指令(如机器码)的代码段以及包含应用数据的数据段;当然,应用程序2也可以只维护有包含应用数据的数据段,而应用程序的代码段则与数据段分开存储,例如存放到目标地址段以外的内存空间,本说明书实施例对此并不作任何限制,这里以代码段和数据段均被加载于目标地址段为例进行说明,当应用程序2在需要被执行时,CPU会按照地址顺序从低至高地读取其代码段中的机器码并执行相应的处理操作,例如算术运算、指令跳转、存取数据等处理器操作,类似的,当系统程序或其他应用程序需要被执行时,CPU也会读取相应代码段中的机器码并予以处理。图1中的段号寄存器的物理地址由操作系统或CPU预置,因此CPU可以在读取到对段号寄存器进行操作的有关指令时,可以根据预置的对应于段号寄存器的物理地址从而找到该段号寄存器并执行相应的操作。
下面结合图1对本说明书的内存访问方法进行详细说明。请参见图2,图2是一示例性实施例提供的一种内存访问方法的流程图。如图2所示,该方法可以包括以下步骤:
步骤202,处理器响应于获取到的内存访问指令,确定所述内存访问指令携带的逻辑地址,所述逻辑地址中包括目标内存空间在目标地址段中对应的段偏移量。
如前所述,处理器可以读取内存中的机器码以并执行相应的处理操作,而当处理器读取到的机器码具体为内存访问指令时,可以进一步从该内存访问指令中读取获得其所携带的逻辑地址,具体而言,处理器在读取到机器码的操作码后,通过自身的译码器识别出该操作码具体为内存访问指令,由此触发该内存访问指令对应的处理器操作,同时从该内存访问指令中读取出操作数或地址码,以确定所需操作的数据的逻辑地址和操作对应的操作数,因此在本说明书实施例中,所述内存访问指令包括对程序进行编译后所生成的机器码,例如对于一个内存访问指令“MOV A1,A2”(这里使用汇编语言进行表意,实际的机器码应为一串二进制码),该指令作为一个二地址指令,它的两个地址码字段分别指明参与操作的两个操作数在内存中或运算器中通用寄存器的地址,A1作为存放操作结果的地址,该指令对应的执行逻辑为“读取A2中存储的操作数,并将该操作数写入A1”,当然,在A2为立即数的情况下,该指令对应的执行逻辑则变为“直接将A2这一立即数写入A1”。
以图1为例,假设当前应用程序2执行到一条内存访问指令“0001H [001234H]10H”,其中“0001H”代表操作码,CPU能够据此识别该指令是一条内存访问指令(例如在本实施例中为内存写指令);“[001234H]”代表地址码,也即所需要的访问并写入数据的内存空间对应的逻辑地址,该逻辑地址实际上是由应用程序2所生成和管理的,由于应用程序2无需对线性地址进行直接管理,而是借由操作系统和CPU的寻址功能来实现同一的逻辑地址到用于最终访存的线性地址的转换,因此该逻辑地址往往并不会如实反映真实的线性地址,而是会携带有一个在应用程序2看来的所需访问的虚拟空间的虚拟地址,该虚拟地址被称为逻辑地址,逻辑地址中包含有在应用程序2看来对应于应用程序2的首地址(逻辑地址为0000H,线性地址为02:0000H)与该虚拟空间之间的相对位置关系,其表现为距应用程序2首地址之间的偏移量,例如在本实施例中的上述逻辑地址所携带的段偏移量为“1234H”,有关段偏移量在逻辑地址中的位置和位数是预先定义的,而该逻辑地址的另一部分“00H” 在本实施例中被规定为无效的逻辑位,并不参与段偏移量的构成;上述内存访问指令中的“10H”代表所需写入内存中具体内存空间的操作数,由于在本实施例中假设内存中每一线性地址对应的内存空间大小为1字节,因此最多可以容纳2个16进制数。
在本说明书实施例中,由于应用程序2的首地址与应用程序2所在的目标地址段的段基址对齐,因此逻辑地址中的段偏移量不仅代表着应用程序2的首地址与该虚拟空间之间的相对位置关系(虚拟空间在应用程序内部的偏移量),也实际上能够代表所需访问的真实内存空间距离目标地址段的段基址的相对位置关系(内存中实际目标内存空间在目标地址段中的段偏移量),且在该目标地址段的段基址被设置为低4位均为0(在数值上与应用程序2首地址的逻辑地址相同)的情况下,由于段偏移量的实质就是距离段基址之间的距离,目标内存空间的线性地址一部分必然会显含有该段偏移量,换句话说,无论CPU读取到的内存访问指令是否来自应用程序2,只要采用了将目标地址段的段基址设置为存在数量上与逻辑地址中被规定的有效段偏移量相同位数的零值逻辑位,在从该内存访问指令中确定获取的逻辑地址中包含的段偏移量后,即可确定目标内存空间的线性地址中必然包含该段偏移量,所述逻辑地址中包括目标内存空间在目标地址段中对应的段偏移量必然直接作为最终所需访存的地址中的一部分,其中目标内存空间为所需访问的真实内存空间。
步骤204,所述处理器将所述段偏移量与段号寄存器中预存储的目标段号进行拼接以生成线性地址,所述目标地址段的段基址包含位于高位的所述目标段号和位于低位的若干零值逻辑位,且所述零值逻辑位与所述段偏移量的位数相同。
在本说明书实施例中,处理器在获取到内存访问指令后,将响应于该内存访问指令,并将该内存访问指令中的地址码确定为逻辑地址,在段式存储管理的相关技术中,处理器将会进一步根据逻辑地址中的段偏移量与段基址之和确定线性地址,例如在Intel处理器的IA32模式下,逻辑地址中包含位于高位的段描述符以及位于低位的段偏移量,处理器在响应包含这种逻辑地址的内存访问指令时,将首先根据段表寄存器(段表寄存器中记录有段表的首地址以及段表的长度)中记录的段表长度检查逻辑地址携带的段描述符是否越界,在确定未越界的情况下,处理器会基于该段描述符查找段表(段表被存放在内存中,段表中记录有段描述符与对应地址段的段基址、段长的对应关系),以确定该段描述符对应地址段的段基址和段长,然后继续检查逻辑地址中的段偏移量是否超过段长(即是否发生内存越界),在确定段偏移量未超过段长(未发生内存越界)的情况下,将查找段表得到的该段描述符对应的段基址与逻辑地址中的段偏移量进行算术加法,调用ALU输入段基址和段偏移量以输出得到的线性地址作为最终的访存地址,可见,在相关技术中如果要实现段式存储管理,不仅需要通过越界检查来防止内存越界的问题,还必然会使用算术运算计算出线性地址,造成执行内存访问指令具有较大的计算成本和时间成本。
在本说明书实施例中,当处理器获取内存访问指令中携带的逻辑地址后,将采用不同于相关技术中通过算术运算获得线性地址的处理方式,如前所述,由于目标地址段的段基址包含位于高位的所述目标段号和位于低位的若干零值逻辑位,且所述零值逻辑位与所述段偏移量的位数相同,保证从内存访问指令中确定得到的逻辑地址中包含的段偏移量必然显含于目标内存空间对应的线性地址中,另外,在本说明书实施例中,段号寄存器中预先存储有目标地址段的目标段号,因此,可以直接将内存访问指令中携带的逻辑地址中包含的段偏移量与段号寄存器中与存储的目标段号进行地址拼接操作,以生成用于访存的线性地址。
在一实施例中,上述进行拼接以生成线性地址,包括:所述处理器将所述逻辑地址中的段偏移量作为所述线性地址的低位写入为所述线性地址所分配的存储空间的低位,并将所述段号寄存器中的段号作为所述线性地址的高位写入所述存储空间的高位以在所述存储空间中生成所述线性地址。上述为所述线性地址所分配的存储空间可以包括内存空间或寄存器,当然,也可以包括硬盘空间,在本说明书实施例中,由于目标地址段的段基址中目标段号和零值逻辑位的位数和位置是预先定义的,而零值逻辑位的位数与段偏移量的位数相同,因此相当于逻辑地址中段偏移量的位数也是预先定义的,同时段偏移量在逻辑地址中所在的位置也可以预先定义,例如在本实施例中,段偏移量处于逻辑地址的低位。以图1中所示的以拼接方式获得线性地址为例,段号寄存器中存有目标地址段的目标段号“02H”,CPU从应用程序2发出的内存访问指令中读取得到的逻辑地址为“00:1234H”,根据预设的段偏移量位置和位数的规定从而确定该逻辑地址中的段偏移量为“1234H”,并将该段偏移量“1234H” 作为所述线性地址的低位写入为所述线性地址所分配的存储空间的低位,最后将从段号寄存器中读取得到的目标段号“02H”作为所述线性地址的高位写入所述存储空间的高位,以在所述存储空间中生成所述线性地址“02:1234H”,该线性地址又满足:02:0000H+1234H=02:1234H,不难发现,通过上述拼接方法所得到的线性地址与相关技术中通过算术运算得到的线性地址在数值上一致,即本说明书所涉及的拼接寻址方式对比相关技术可以在不使用算术运算的情况下,生成相同数值的线性地址,而对于CPU而言,拼接操作的性能消耗和时耗都远小于算术运算操作,因此通过本说明书所涉及的内存访问方案,可以降低段式存储管理下的对目标地址段的访存时间,提高了访存效率。
对于前述的地址拼接操作,可以采用图3所示的硬件架构来实现。图3是一示例性实施例提供的一种内存访问方法的硬件实现图,如图3所示,可以通过一个段号选择器来实现拼接得到线性地址的过程,具体而言,通过将段号寄存器与段号选择器的第二输入端相连,CPU在读取到内存访问指令后,可以将其中携带的逻辑地址中除规定位数的段偏移量以外的作为高位的剩余逻辑位读取后写入段号选择器的第一输入端,接着根据内存访问指令对应的操作码判断本次内存访问的模式为拼接寻址模式还是直接寻址模式,并按照预设规则向硬逻辑编码电路的输入端写入寻址模式对应的值,例如,在判断本次内存访问的模式为拼接寻址模式时,向硬逻辑编码电路的输入端写入高电平1,在判断本次内存访问的模式为直接寻址模式时,向硬逻辑编码电路的输入端写入低电平0;同时,根据CPU当前所处的处理器模式,向硬逻辑编码电路的另一输入端写入处理器模式对应的值,例如,在判断CPU当前处于用户态模式的情况下,向硬逻辑编码电路的另一输入端写入高电平1,在判断CPU当前处于内核态模式的情况下,向硬逻辑编码电路的另一输入端写入低电平0。硬逻辑编码电路的输出端与段号选择器的控制端相连,能够按照预设需求输出控制信号以控制段号选择器输出的内容,在一个典型的实施例中,硬逻辑编码电路的真值表如表1所示:
表1
当然,在另一实施例中,也可以不需要采用上述硬逻辑编码电路,而直接将CPU模式信号或指令模式信号输入段号选择器的控制端,从而使CPU模式或指令对应的寻址模式独立地决定段号选择器的输出。
段号选择器的逻辑可以相应设计为:当控制端输入的控制信号为高电平1时,在输出端输出第二输出端的值(即段号寄存器中的段号),当控制端输入的控制信号为低电平0时,在输出端输出第一输入端的值(即剩余逻辑位)。接着,CPU会将从段号选择器的输出端读取出的值与逻辑地址中的段偏移量拼接得到的拼接地址进行访存,例如,在段号选择器的输出端输出的是目标段号时,此时拼接地址相当于线性地址,在段号选择器的输出端输出的是剩余逻辑位时,此时拼接地址与逻辑地址相比完全相同,相当于逻辑地址。
在上述通过硬件方式实现拼接寻址方式的基础上,还可以做更多有关硬件方面的改进,以使CPU获得更高的执行效率。举例而言,可以将硬逻辑电路中用于输入CPU模式信号的输入端与用于存储CPU模式的CPU模式寄存器相连,同时将用于输入指令模式信号的输入端与用于存储指令指示的寻址方式的指令模式寄存器相连,其中,CPU模式寄存器可以为指示CPU运行模式(用户态或内核态)的内部寄存器,每次CPU在切换CPU运行模式时,需要首先在CPU模式寄存器中写入对应的值,从而通过硬件辅助的方式,使得向硬编码逻辑电路输入CPU模式信号的工作可以在指令执行前完成,同理,如前所述,CPU在读取机器码的操作码时,会利用自身内部的译码器进行指令解析,因此可以将CPU内部的指令译码器中对应于内存访问指令的有效输出端(即译码结果为拼接寻址方法时,该有效输出端输出高电平)与指令模式寄存器相连,从而使得向硬编码逻辑电路输入指令模式信号的工作也可以在指令执行前完成,从而大大减轻了CPU执行内存访问指令时所需要的进行的操作环节,提高了访存效率。
再例如,可以通过额外设置一个用于存放逻辑地址的源地址寄存器和一个用于存放线性地址的目的地址寄存器,将源地址寄存器中预定义的用于存放剩余逻辑位的物理空间与段号选择器的第一输入端直接相连,从而使得CPU无需进行将剩余逻辑位读取后写入段号选择器的第一输入端的步骤,同理,将目的地址寄存器中预定义的用于存放段号(段号所占位数与剩余逻辑位所占位数相同)的物理空间与段号选择器的输出端直接相连,同时将目的地址寄存器中预定义的用于存放段偏移量的物理空间与源地址寄存器中用于存放段偏移量的物理空间直接相连,从而使CPU无需进行将从段号选择器的输出端读取出的值与逻辑地址中的段偏移量拼接得到拼接地址的步骤。通过上述硬件改进和改造,使得CPU在读取到内存访问指令时,只需要进行如下操作即可完成对应的访存过程:“将内存访问指令中携带的逻辑地址写入源地址寄存器,根据目的地址寄存器中的拼接地址进行访存操作”,而在上述CPU访存过程中,由于CPU并不参与逻辑地址向拼接地址转化的过程,通过上述硬件电路可以在CPU将逻辑地址写入源地址寄存器的时刻,就使目的地址寄存器中的拼接地址就开始生成,因此在上述硬件设计下的分段寻址操作,理论上只比寄存器直接寻址多“将逻辑地址写入源地址寄存器”这一个步骤,其寻址效率只略低于寄存器直接寻址,但相对于通过算术运算得到访存地址的相关技术而言,极大的缩短了段式存储管理下的对目标地址段的访存时间,提高了访存效率。
可选的,前述进行拼接以生成线性地址也可以通过现有的指令集实现,包括:所述处理器将所述段偏移量写入预设源寄存器,利用所述处理器提供的寄存器拼接操作,将所述段号寄存器中的目标段号与所述预设源寄存器中的所述段偏移量进行拼接,以在目的寄存器中生成所述线性地址。在本说明书实施例中,对于前述的地址拼接操作,可以采用一种通过CPU提供的寄存器拼接操作的实现方式,具体而言,前述的内存访问指令也可以不为机器码,而是作为编译前的汇编指令或其他高级语言指令,因此CPU在读取到内存访问指令后,需要首先进行编译(或者预先将内存访问指令进行编译,CPU直接读取内存访问指令编译后所生成的机器码),从而执行编译得到的机器码(在内存访问指令不显含逻辑地址的情况下,编译后也必会生成包含逻辑地址的机器码,因此可以认为内存访问指令中携带有逻辑地址),其中,编译得到的机器码中包含可以触发寄存器拼接操作的寄存器拼接指令,具体而言,CPU响应于内存访问指令所编译得到的多条机器码时,可以执行如下逻辑:“将内存访问指令携带的逻辑地址写入预设源寄存器,对预设源寄存器与段号寄存器使用寄存器拼接操作,最终拼接得到的线性地址被写入预设目的寄存器中,使用寄存器直接寻址方式对预设目的寄存器中的线性地址进行内存访问”,因此在本说明书实施例中,可以利用CPU提供的寄存器拼接操作完成拼接生成线性地址的过程,从而无需对CPU等硬件进行额外的改造,减少开发成本。
步骤206,所述处理器根据所述线性地址访问内存中的所述目标内存空间。
在本说明书实施例中,在所述内存采用页式存储管理的情况下,所述处理器根据所述线性地址转化得到的物理地址访问所述内存中的所述目标内存空间;在所述内存未采用页式存储管理的情况下,所述处理器将所述线性地址作为物理地址访问所述内存中的所述目标内存空间。由于内存在采用页式存储管理的情况下,线性地址并非直接作为目标内存空间的物理地址,而是包含有页号和页偏移量,且需要进一步查找页表以确定最终的物理地址,因此处理器需要首先将线性地址转化为物理地址,然后基于转化得到的物理地址访问所述内存中的所述目标内存空间;而内存在未采用页式存储管理的情况下,则线性地址相当于目的内存空间的物理地址,因此处理器可以将所述线性地址作为物理地址直接访问所述内存中的所述目标内存空间。通过采用页式存储管理,可以将内存中每个地址段又分别划分为大量的页块,然后根据每个页块的首地址和权限控制信息构建页表,从而方便对内存进行的读写权限进行管理(例如限制用户态程序修改自己代码段的数据),同时也有利于应用虚拟内存技术以实现页粒度的内外存置换。
在本说明书实施例中,提供了一种基于地址拼接的寻址方式,处理器响应于获取到的内存访问指令,确定所述内存访问指令携带的逻辑地址,处理器将逻辑地址中包含的段偏移量与段号寄存器中预存储的目标段号进行拼接以生成线性地址,然后根据拼接得到的线性地址访问内存中的所述目标内存空间,所述目标地址段的段基址包含位于高位的所述目标段号和位于低位的若干零值逻辑位,且所述零值逻辑位与所述段偏移量的位数相同,由于本说明书实施例所涉及的寻址方式并非通过算术运算生成的线性地址,而是通过地址拼接操作生成,并且对于CPU而言,地址拼接操作的性能消耗和时耗都远小于算术运算操作,因此通过本说明书所涉及的内存访问方案,可以显著降低段式存储管理下的对特定地址段中目标内存空间的访存时间,提高了访存效率;可以预见的是,如果将本说明书涉及的内存访问方案应用于区块链中智能合约的执行过程,显然能够提高智能合约的执行效率,当然,本说明书涉及的内存访问方案并不限制于智能合约的执行过程,任何涉及到内存访问指令执行过程的场景,均可以采用本申请所涉及内存访问方案,以起到提高指令执行效率的效果。
在一实施例中,所述目标地址段的段长为所述若干零值逻辑位所能够表示的最大地址空间。如前所述,将段偏移量与段号进行拼接后所形成的线性地址空间的空间大小实际上是由段偏移量的位数所决定,而段偏移量的位数被规定为与目标地址段的段基址中零值逻辑位的位数相同,因此线性地址空间的空间大小在数值上与零值逻辑位所能够标识的最大地址空间的空间大小相等,等于2^x(x为二进制的零值逻辑位的位数),而对于一个段长大于上述计算得到的最大地址空间的地址段,在采用本说明书实施例所涉及的拼接寻址方式后,必然会使得该地址段的一部分内存空间无法被访问到,例如目标地址段对应的虚拟地址空间为01:00H~02:FF,因此该目标地址段的段基址为01:00H,目标段号为01H,段长为512,超过了8位二进制零值逻辑位所能够表示的最大地址空间2^8=256,那么按照本说明书实施例所涉及的拼接寻址方式,所能够拼接得到的线性地址空间为01:00H~01:FFH,而不包括02:00H~02:FFH,因此通过本说明书涉及的通过拼接方法进行寻址的方法,必然无法访问到该目标地址段的全部地址空间,类似的,假如目标地址段的段长被设置为小于上述最大地址空间,也会因实际的线性地址空间中包含目标地址段对应的虚拟地址空间之外的地址空间,导致出现越界访问到其他地址段的现象。为了避免上述的有关问题,提高内存的利用率,可以将所述目标地址段的段长为所述若干零值逻辑位所能够表示的最大地址空间,以避免出现目标地址段中部分线性地址空间无法访问或访问越界的问题。另外,在应用上述实施例的基础上,还可以如图1所示那样将内存以方式紧密排列的方式划分为线性地址上连续的多个地址段,从而进一步提高内存的利用率。
可选的,所述目标地址段中加载有第一用户态程序,其中,第一用户态程序的首地址与所述目标地址段的段基址对齐,第一用户态程序被分配的虚拟地址空间不超过所述目标地址段的段长。一方面,如前所述,在目标地址段中加载有如应用程序的第一用户态程序时,需要使用户态程序的首地址与目标地址段的段基址对齐,确保第一用户态程序的首地址的逻辑地址与目标地址段的段基址中的零值逻辑位在数值上保持统一,均为相同位数的零值逻辑位,这样才能使在CPU在执行第一用户态程序发出的内存访问指令时,根据指令中携带的逻辑地址中包含的段偏移量所确定的目标内存空间能够正确反映第一用户态程序所实际需要访问的内存空间,因为只有在第一用户态程序的首地址的逻辑地址与目标地址段的段基址中的零值逻辑位在数值上保持统一的基础上,应用程序按照自身需求所生成的内存访问指令中虚拟空间相对于应用首地址的偏移量才能够与实际所需访问的线性目标内存空间相对于目标地址段的段偏移量在数值上保持一致。另一方面,第一用户态程序被分配的虚拟地址空间不能超过所述目标地址段的段长,如前所述,目标地址段的段长为所述若干零值逻辑位所能够表示的最大地址空间,因此,为了保证第一用户态程序在访问自身包含的代码段和数据段时不会出现越界问题,需要确保第一用户态程序被分配的虚拟地址空间不超过所述目标地址段的段长,这样一来,第一用户态程序发出的内存访问指令中携带的逻辑地址中包含的段偏移量将可以完全指示到第一用户态程序所占有的任一线性地址空间,从而避免第一用户程序在执行过程中由于访存越界而无法完整访问到自身的代码段或数据段并最终导致运行出错的问题,同时,第一用户态程序与目标地址段对齐则意味着可以避免浪费目标地址段中的地址空间,从而提高第一用户态程序对应的虚拟内存空间的利用率。
可选的,所述处理器将所述段偏移量与段号寄存器中预存储的目标段号进行拼接以生成线性地址,包括:所述处理器在获取到所述内存访问指令后,确定所述处理器当前所处的处理器模式和/或所述内存访问指令的操作码;在所述处理器模式处于用户态模式和/或所述内存访问指令的操作码用于指示所述处理器通过拼接方法进行寻址的情况下,所述处理器将所述段偏移量与段号寄存器中预存储的所述目标段号进行拼接以生成所述线性地址。在本说明书实施例中,处理器可以通过多种方式来确定当前响应的内存访问指令是否需要通过拼接方法进行寻址,即是否要先将逻辑地址与段号寄存器中的目标段号拼接得到的线性地址,然后使用拼接得到的线性地址访问内容,如前所述,处理器可以通过自身的译码器来解析出读取到的机器码是否为内存访问指令,同时,该译码器也能够识别出该内存访问指令的类型,而该类型用于指示处理器是通过拼接方法进行寻址还是通过其他方式进行访存,因此处理器可以根据识别结果执行相应的访存过程;在另一实施例中,处理器也可以首先确定当前所处的处理器模式,例如首先检查处理器内部的CPU模式寄存器从而识别当前处理器所处的处理器模式,然后根据处理器模式决定最终是否通过拼接方法进行寻址,因此处理器无需关注内存访问指令的类型,而只需要确定自身所处的处理器模式即可以执行相应的访存过程;当然,还可以使处理器在同时考虑到内存访问指令的类型以及处理器模式两个因素的情况下,来决定是否通过拼接方法进行寻址,例如可以设置为如下逻辑:在处理器模式为内核态模式的情况下,根据内存访问指令的类型决定访存寻址方式,在处理器模式为用户态模式的情况下,则无需关注内存访问指令的类型,而是直接通过拼接方法进行寻址。在上述采用两个因素的逻辑设计中,将处理器模式作为第一优先级,由于在处理器模式处于内核态模式下时运行的往往是内核态程序,处理器模式处于用户态模式下时运行的往往是用户态程序,这使得内核态程序既可以通过拼接方式进行寻址也可以通过其他方式寻址,但用户态程序则只能通过拼接方式寻址,从而有效地对用户态程序的访存范围进行强制限制,有利于系统的安全性。
可选的,还包括:在所述内存访问指令由用户态程序发出的情况下,所述处理器将所述处理器模式设置为用户态模式。在本说明书实施例中,处理器在执行用户态程序时,内存访问指令由用户态程序发出,此时通过将处理器模式设置为用户态模式,例如可以修改处理器内部的特权级别寄存器中的值,以使修改后的值能够表征目前处理器所处的处理器模式为用户态模式,从而能够防止用户态程序非法使用特权指令,以及在寻址方式由处理器模式所决定的情况下,可以保证用户态程序在执行过程中必须采用拼接方法进行寻址,从而使用户态程序只能访问到段号寄存器中段号对应的地址段,而无法访问该地址段以外的内存空间,限制用户态程序的内存访问范围。
可选的,在上述实施例的基础上,还包括:在所述处理器将所述处理器模式设置为用户态模式的情况下,向所述段号寄存器中写入所述目标段号,其中,所述目标地址段中加载有所述用户态程序。仍以图1为例,应用程序2作为一个用户态程序被加载在目标地址段中,处理器在将所述处理器模式设置为用户态模式后,需要向段号寄存器中写入接下来所需要的执行的用户态程序所在地址段的段号,例如图1中的应用程序2需要被执行时,图1中的系统程序需要将CPU控制权交给用户程序2,此时系统程序在将处理器模式设置为用户态模式之前,首先利用特权指令修改段号寄存器中段号,写入用户态程序所在目标地址段的目标段号,然后将处理器模式设置为用户态模式,并跳转至目标地址段中以执行应用程序2,因此,通过在执行用户态程序之前将处理器模式设置为用户态模式,而寻址方式又是由处理器模式所决定的情况下,处理器对于应用程序2发出的内存访问指令必然会采用拼接方法进行寻址,因此在用户态程序的执行过程中无需在每次读取到用户态程序发出的内存访问指令时重复地将处理器模式设置为用户态模式,或者重复地向所述段号寄存器中写入所述目标段号,就能够保证用户态程序无法访问目标地址段以外的内存空间,进一步的,在地址段的段长为零值逻辑位所能够表示的最大地址空间且用户态程序的虚拟地址空间不超过段长时,即可将用户态程序的内存访问范围限制在用户态程序自身,因此在用户态程序运行过程中,也无需执行有关内存访问越界的检查就能够保证所访问的线性地址在应用程序被分配的内存范围内,从而在根本上避免了内存越界的现象。除了上述实施例所描述的,可以在所述处理器将所述处理器模式设置为用户态模式的情况下,向所述段号寄存器中写入所述目标段号,也可以在所述处理器处于内核态的任意时刻向所述段号寄存器中写入所述目标段号,或者,在所述处理器处于用户态的情况下,响应于用户态程序在编译过程中额外生成的段号修改机器码(段号修改机器码是编译过程中由编译器独立生成的机器码,而不是与用户态程序中任一代码等效的机器码)向所述段号寄存器中写入所述目标段号,本说明书实施例对此并不做任何限制。
可选的,还包括:所述处理器将所述逻辑地址中包含的除所述段偏移量以外的剩余逻辑位写入段号选择器的第一输入端,所述段号选择器的第二输入端与所述段号寄存器相连;所述进行拼接以生成所述线性地址,包括:所述处理器将所述段偏移量与从所述段号选择器的输出端读取出的所述目标段号拼接得到所述线性地址。如前所述,可以通过硬件改进的方法实现前述的地址拼接操作,例如可以采用图3所示的硬件架构来实现,详细介绍可参考之前对图3硬件架构的介绍,这里不再赘述。
可选的,所述逻辑地址中还包括所述目标段号,所述方法还包括:在所述处理器模式处于内核态模式和/或所述内存访问指令的操作码用于指示所述处理器进行直接寻址的情况下,所述处理器根据所述逻辑地址访问所述内存中的所述目标内存空间。如前所述,可以通过处理器模式和/或内存访问指令的类型来决定是否采用拼接寻址方式,而在本说明书实施例中,处理器还提供除拼接寻址方式以外的其他寻址方式,例如处理器仍然支持通过直接寻址的方式去访问目标内存空间,而在所述处理器模式处于内核态模式和/或所述内存访问指令的操作码用于指示所述处理器进行直接寻址的情况下,处理器将执行直接寻址的操作,将内存访问指令中携带的逻辑地址作为目标内存空间的线性地址直接访问内存中的目标内存空间,显然,对于是否采用直接寻址方式,也可以单独由处理器模式或单独由内存访问指令的类型决定,例如,当处理器确定当前的处理器模式为内核态模式时则采用直接寻址方式,或者,当处理器确定内存访问指令的操作码对应的类型用于指示所述处理器进行直接寻址的情况下则采用直接寻址方式,或者,同样可以使处理器在同时考虑到内存访问指令的类型以及处理器模式两个因素的情况下,来决定是否通过直接寻址方式进行寻址,例如可以设置只有在处理器模式为内核态模式且所述内存访问指令的操作码用于指示所述处理器进行直接寻址两个条件同时满足的情况下才会通过直接寻址方式进行寻址,由此使得用户态模式下无权执行直接寻址方式,而内核态模式下可以通过内存访问指令的类型来决定是否采用直接寻址方式寻址。由于在处理器模式处于内核态模式下时运行的往往是内核态程序,处理器模式处于用户态模式下时运行的往往是用户态程序,这使得内核态程序既可以通过拼接方式进行寻址也可以通过直接寻址方式寻址,当然,本说明书实施例只是以直接寻址为例,本说明书实施例并不排除内核态程序还可以采用其他现有的寻址方式,但用户态程序则只能通过拼接方式寻址,从而有效地对用户态程序的访存范围进行强制限制,有利于系统的安全性,同时使内核态程序可以自主、灵活地通过不同寻址方式访问内存。
可选的,还包括:在所述内存访问指令由内核态程序或操作系统发出的情况下,所述处理器将所述处理器模式设置为内核态模式。在本说明书实施例中,处理器在执行内核态程序时,内存访问指令由内核态程序发出,此时通过将处理器模式设置为内核态模式,例如可以修改处理器内部的特权级别寄存器中的值,以使修改后的值能够表征目前处理器所处的处理器模式为内核态模式,从而能够确保内核态程序可以使用特权指令,以及在寻址方式由处理器模式所决定的情况下,可以保证内核态程序在执行过程中采用直接方法进行寻址,从而使内核态程序能够访问到内存中的任意内存空间,满足例如操作系统或其他系统程序的功能需求。
可选的,还包括:所述处理器将所述逻辑地址中包含的除所述段偏移量以外的剩余逻辑位写入段号选择器的第一输入端,所述段号选择器的第二输入端与所述段号寄存器相连;所述根据所述逻辑地址访问所述内存中的所述目标内存空间,包括:所述处理器将所述段偏移量与从所述段号选择器的输出端读取出的所述剩余逻辑位拼接得到所述逻辑地址,根据拼接得到的所述逻辑地址访问所述内存中的所述目标内存空间。如前所述,虽然在本说明书实施例中可以直接通过逻辑地址访问内存,但是也可以通过例如可以采用图3所示的硬件架构来实现,因此虽然需要进行额外的拼接操作,但却能够与拼接寻址方式在硬件逻辑实现上互不干扰,实现在硬件逻辑上统一性,在尽可能小的牺牲性能的前提下利用同一套硬件逻辑实现两种不同的寻址方式,详细介绍可参考之前对图3硬件架构的介绍,这里不再赘述。
可选的,还包括:所述处理器响应于操作系统发出的特权指令对所述段号寄存器中的段号进行修改,所述段号寄存器的修改权限由所述操作系统所有。在本说明书实施例中,为了防止用户态程序对段号寄存器中的段号进行修改从而使用户态程序越权、越界地访问内存,可以设置对段号寄存器进行相关调用的指令为特权指令,因此只有在CPU处于内核态模式或相应于特权指令的情况下才可以对段号寄存器中的段号进行修改,例如操作系统需要将CPU的控制权归还给用户态程序时,则首先应发出特权指令使CPU将所述段号寄存器中的段号修改为所需要的归还的用户态程序所在地址段的段号,然后再将处理器模式调整为用户态模式(或者先修改处理器模式,再发出特权指令修改段号寄存器),最后进行特权指令跳转至所需归还的用户态程序,使CPU开始读取用户态程序的代码段中的指令。通过本说明书实施例,可以避免用户态程序在执行过程中私自修改段号寄存器中的段号,从而导致用户态程序非法访问该用户态程序无权访问的内存范围,增加了系统的安全性。
可选的,所述段号寄存器包括所述处理器中的内部寄存器、作为外设的外部寄存器或所述内存中定义的虚拟寄存器。在本说明书实施例中,段号寄存器可内置于处理器中,与处理器内部的其他通用寄存器具有相同地位,因此CPU默认知晓该段号寄存器的物理地址,并在相关指令中需要调用该段号寄存器时按照其对应的物理地址进行访问。当然,段号寄存器也可以为外部寄存器,此时CPU需要通过I/O接口对段号寄存器进行调用,因此在使用作为外设的外部寄存器时,需要先向操作系统或CPU声明段号寄存器对应的I/O端口地址。同理,段号寄存器也可以为内存中定义的虚拟寄存器,这相当于在内存中分配一个CPU专用的内存空间,因此也需要向操作系统或CPU声明该虚拟寄存器在内存中的物理地址。
图4是一示例性实施例提供的一种设备的结构示意图。请参考图4,在硬件层面,该设备包括处理器402、内部总线404、网络接口406、内存408以及非易失性存储器410,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器402从非易失性存储器410中读取对应的计算机程序到内存408中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
图5是一示例性实施例提供的一种内存访问装置的框图。请参考图5,该装置可以应用于如图4所示的设备中,以实现本说明书的技术方案。其中,所述装置包括:
指令响应模块501,用于使处理器响应于获取到的内存访问指令,确定所述内存访问指令携带的逻辑地址,所述逻辑地址中包括目标内存空间在目标地址段中对应的段偏移量;
地址生成模块502,用于使所述处理器将所述段偏移量与段号寄存器中预存储的目标段号进行拼接以生成线性地址,所述目标地址段的段基址包含位于高位的所述目标段号和位于低位的若干零值逻辑位,且所述零值逻辑位与所述段偏移量的位数相同;
内存访问模块503,用于使所述处理器根据所述线性地址访问内存中的所述目标内存空间。
可选的,所述地址生成模块502具体用于:
使所述处理器在获取到所述内存访问指令后,确定所述处理器当前所处的处理器模式和/或所述内存访问指令的操作码;
在所述处理器模式处于用户态模式和/或所述内存访问指令的操作码用于指示所述处理器通过拼接方法进行寻址的情况下,所述处理器将所述段偏移量与段号寄存器中预存储的所述目标段号进行拼接以生成所述线性地址。
可选的,还包括:
用户态设置单元504,用于在所述内存访问指令由用户态程序发出的情况下,使所述处理器将所述处理器模式设置为用户态模式。
可选的,还包括:
段号写入单元505,用于使所述处理器在所述处理器模式设置为用户态模式的情况下,向所述段号寄存器中写入所述目标段号,其中,所述目标地址段中加载有所述用户态程序。
可选的,还包括:
第一段号输入单元506,用于使所述处理器将所述逻辑地址中包含的除所述段偏移量以外的剩余逻辑位写入段号选择器的第一输入端,所述段号选择器的第二输入端与所述段号寄存器相连;
所述地址生成模块502具体还用于:
使所述处理器将所述段偏移量与从所述段号选择器的输出端读取出的所述目标段号拼接得到所述线性地址。
可选的,所述逻辑地址中还包括所述目标段号,所述装置还包括:
逻辑地址访存单元507,用于在所述处理器模式处于内核态模式和/或所述内存访问指令的操作码用于指示所述处理器进行直接寻址的情况下,使所述处理器根据所述逻辑地址访问所述内存中的所述目标内存空间。
可选的,还包括:
内核态设置单元508,用于在所述内存访问指令由内核态程序或操作系统发出的情况下,使所述处理器将所述处理器模式设置为内核态模式。
可选的,还包括:
第二段号输入单元509,用于使所述处理器将所述逻辑地址中包含的除所述段偏移量以外的剩余逻辑位写入段号选择器的第一输入端,所述段号选择器的第二输入端与所述段号寄存器相连;
所述地址生成模块502具体用于:
使所述处理器将所述段偏移量与从所述段号选择器的输出端读取出的所述剩余逻辑位拼接得到所述逻辑地址,根据拼接得到的所述逻辑地址访问所述内存中的所述目标内存空间。
可选的,所述地址生成模块502具体用于:
所述处理器将所述逻辑地址中的段偏移量作为所述线性地址的低位写入为所述线性地址所分配的存储空间的低位,并将所述段号寄存器中的段号作为所述线性地址的高位写入所述存储空间的高位以在所述存储空间中生成所述线性地址。
可选的,所述地址生成模块502具体用于:
所述处理器将所述段偏移量写入预设源寄存器,利用所述处理器提供的寄存器拼接操作,将所述段号寄存器中的目标段号与所述预设源寄存器中的所述段偏移量进行拼接,以在目的寄存器中生成所述线性地址。
可选的,所述内存访问模块503具体用于:
在所述内存采用页式存储管理的情况下,所述处理器根据所述线性地址转化得到的物理地址访问所述内存中的所述目标内存空间;
在所述内存未采用页式存储管理的情况下,所述处理器将所述线性地址作为物理地址访问所述内存中的所述目标内存空间。
可选的,还包括:
段号修改单元510,用于使所述处理器响应于操作系统发出的特权指令对所述段号寄存器中的段号进行修改,所述段号寄存器的修改权限由所述操作系统所有。
可选的,所述目标地址段的段长为所述若干零值逻辑位所能够表示的最大地址空间。
可选的,所述目标地址段中加载有第一用户态程序,其中,第一用户态程序的首地址与所述目标地址段的段基址对齐,第一用户态程序被分配的虚拟地址空间不超过所述目标地址段的段长。
可选的,所述段号寄存器包括所述处理器中的内部寄存器、作为外设的外部寄存器或所述内存中定义的虚拟寄存器。
可选的,所述内存访问指令包括对程序进行编译后所生成的机器码。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (19)
1.一种内存访问方法,包括:
处理器响应于获取到的内存访问指令,确定所述内存访问指令携带的逻辑地址,所述逻辑地址中包括目标内存空间在目标地址段中对应的段偏移量;
所述处理器将所述段偏移量与段号寄存器中预存储的目标段号进行拼接以生成线性地址,所述目标地址段的段基址包含位于高位的所述目标段号和位于低位的若干零值逻辑位,且所述零值逻辑位与所述段偏移量的位数相同;
所述处理器根据所述线性地址访问内存中的所述目标内存空间。
2.根据权利要求1所述的方法,所述处理器将所述段偏移量与段号寄存器中预存储的目标段号进行拼接以生成线性地址,包括:
所述处理器在获取到所述内存访问指令后,确定所述处理器当前所处的处理器模式和/或所述内存访问指令的操作码;
在所述处理器模式处于用户态模式和/或所述内存访问指令的操作码用于指示所述处理器通过拼接方法进行寻址的情况下,所述处理器将所述段偏移量与段号寄存器中预存储的所述目标段号进行拼接以生成所述线性地址。
3.根据权利要求2所述的方法,还包括:
在所述内存访问指令由用户态程序发出的情况下,所述处理器将所述处理器模式设置为用户态模式。
4.根据权利要求3所述的方法,还包括:
在所述处理器将所述处理器模式设置为用户态模式的情况下,向所述段号寄存器中写入所述目标段号,其中,所述目标地址段中加载有所述用户态程序。
5.根据权利要求2所述的方法,还包括:
所述处理器将所述逻辑地址中包含的除所述段偏移量以外的剩余逻辑位写入段号选择器的第一输入端,所述段号选择器的第二输入端与所述段号寄存器相连;
所述进行拼接以生成所述线性地址,包括:
所述处理器将所述段偏移量与从所述段号选择器的输出端读取出的所述目标段号拼接得到所述线性地址。
6.根据权利要求2所述的方法,所述逻辑地址中还包括所述目标段号,所述方法还包括:
在所述处理器模式处于内核态模式和/或所述内存访问指令的操作码用于指示所述处理器进行直接寻址的情况下,所述处理器根据所述逻辑地址访问所述内存中的所述目标内存空间。
7.根据权利要求6所述的方法,还包括:
在所述内存访问指令由内核态程序或操作系统发出的情况下,所述处理器将所述处理器模式设置为内核态模式。
8.根据权利要求6所述的方法,还包括:
所述处理器将所述逻辑地址中包含的除所述段偏移量以外的剩余逻辑位写入段号选择器的第一输入端,所述段号选择器的第二输入端与所述段号寄存器相连;
所述根据所述逻辑地址访问所述内存中的所述目标内存空间,包括:
所述处理器将所述段偏移量与从所述段号选择器的输出端读取出的所述剩余逻辑位拼接得到所述逻辑地址,根据拼接得到的所述逻辑地址访问所述内存中的所述目标内存空间。
9.根据权利要求1所述的方法,所述进行拼接以生成线性地址,包括:
所述处理器将所述逻辑地址中的段偏移量作为所述线性地址的低位写入为所述线性地址所分配的存储空间的低位,并将所述段号寄存器中的段号作为所述线性地址的高位写入所述存储空间的高位以在所述存储空间中生成所述线性地址。
10.根据权利要求1所述的方法,所述进行拼接以生成所述线性地址,包括:
所述处理器将所述段偏移量写入预设源寄存器,利用所述处理器提供的寄存器拼接操作,将所述段号寄存器中的目标段号与所述预设源寄存器中的所述段偏移量进行拼接,以在目的寄存器中生成所述线性地址。
11.根据权利要求1所述的方法,所述根据所述线性地址访问内存中的所述目标内存空间,包括:
在所述内存采用页式存储管理的情况下,所述处理器根据所述线性地址转化得到的物理地址访问所述内存中的所述目标内存空间;
在所述内存未采用页式存储管理的情况下,所述处理器将所述线性地址作为物理地址访问所述内存中的所述目标内存空间。
12.根据权利要求1所述的方法,还包括:
所述处理器响应于操作系统发出的特权指令对所述段号寄存器中的段号进行修改,所述段号寄存器的修改权限由所述操作系统所有。
13.根据权利要求1所述的方法,所述目标地址段的段长为所述若干零值逻辑位所能够表示的最大地址空间。
14.根据权利要求13所述的方法,所述目标地址段中加载有第一用户态程序,其中,第一用户态程序的首地址与所述目标地址段的段基址对齐,第一用户态程序被分配的虚拟地址空间不超过所述目标地址段的段长。
15.根据权利要求1所述的方法,所述段号寄存器包括所述处理器中的内部寄存器、作为外设的外部寄存器或所述内存中定义的虚拟寄存器。
16.根据权利要求1所述的方法,所述内存访问指令包括对程序进行编译后所生成的机器码。
17.一种内存访问装置,包括:
指令响应模块,用于使处理器响应于获取到的内存访问指令,确定所述内存访问指令携带的逻辑地址,所述逻辑地址中包括目标内存空间在目标地址段中对应的段偏移量;
地址生成模块,用于使所述处理器将所述段偏移量与段号寄存器中预存储的目标段号进行拼接以生成线性地址,所述目标地址段的段基址包含位于高位的所述目标段号和位于低位的若干零值逻辑位,且所述零值逻辑位与所述段偏移量的位数相同;
内存访问模块,用于使所述处理器根据所述线性地址访问内存中的所述目标内存空间。
18.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-16中任一项所述的方法。
19.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1-16中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111033648.5A CN113468079B (zh) | 2021-09-03 | 2021-09-03 | 内存访问方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111033648.5A CN113468079B (zh) | 2021-09-03 | 2021-09-03 | 内存访问方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113468079A true CN113468079A (zh) | 2021-10-01 |
CN113468079B CN113468079B (zh) | 2021-11-19 |
Family
ID=77867369
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111033648.5A Active CN113468079B (zh) | 2021-09-03 | 2021-09-03 | 内存访问方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113468079B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113867971A (zh) * | 2021-12-03 | 2021-12-31 | 北京壁仞科技开发有限公司 | 访问图形处理器的内存的方法、设备、系统和存储介质 |
CN114785742A (zh) * | 2022-06-21 | 2022-07-22 | 闪捷信息科技有限公司 | 访问地址信息加载方法、流量处理方法和电子设备 |
CN116166575A (zh) * | 2023-02-03 | 2023-05-26 | 摩尔线程智能科技(北京)有限责任公司 | 访存段长度的配置方法、装置、设备、介质和程序产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109644518A (zh) * | 2016-11-04 | 2019-04-16 | 松下电器(美国)知识产权公司 | 传输块中控制信息的高效复用 |
CN110659458A (zh) * | 2019-10-10 | 2020-01-07 | 陈昶宇 | 支持软件代码数据保密可信执行的中央处理器设计方法 |
CN111400202A (zh) * | 2020-03-13 | 2020-07-10 | 宁波中控微电子有限公司 | 应用于片上控制系统的寻址方法、模块及片上控制系统 |
CN112416819A (zh) * | 2020-11-05 | 2021-02-26 | 深圳电器公司 | 基于主机内存缓冲器的固态驱动器的实现方法及装置 |
-
2021
- 2021-09-03 CN CN202111033648.5A patent/CN113468079B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109644518A (zh) * | 2016-11-04 | 2019-04-16 | 松下电器(美国)知识产权公司 | 传输块中控制信息的高效复用 |
CN110659458A (zh) * | 2019-10-10 | 2020-01-07 | 陈昶宇 | 支持软件代码数据保密可信执行的中央处理器设计方法 |
CN111400202A (zh) * | 2020-03-13 | 2020-07-10 | 宁波中控微电子有限公司 | 应用于片上控制系统的寻址方法、模块及片上控制系统 |
CN112416819A (zh) * | 2020-11-05 | 2021-02-26 | 深圳电器公司 | 基于主机内存缓冲器的固态驱动器的实现方法及装置 |
Non-Patent Citations (1)
Title |
---|
钱华明等: "VxWorks内存管理机制的分析与研究", 《微计算机信息》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113867971A (zh) * | 2021-12-03 | 2021-12-31 | 北京壁仞科技开发有限公司 | 访问图形处理器的内存的方法、设备、系统和存储介质 |
CN113867971B (zh) * | 2021-12-03 | 2022-03-15 | 北京壁仞科技开发有限公司 | 访问图形处理器的内存的方法、设备、系统和存储介质 |
CN114785742A (zh) * | 2022-06-21 | 2022-07-22 | 闪捷信息科技有限公司 | 访问地址信息加载方法、流量处理方法和电子设备 |
CN116166575A (zh) * | 2023-02-03 | 2023-05-26 | 摩尔线程智能科技(北京)有限责任公司 | 访存段长度的配置方法、装置、设备、介质和程序产品 |
CN116166575B (zh) * | 2023-02-03 | 2024-01-23 | 摩尔线程智能科技(北京)有限责任公司 | 访存段长度的配置方法、装置、设备、介质和程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN113468079B (zh) | 2021-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113468079B (zh) | 内存访问方法及装置 | |
US4777588A (en) | General-purpose register file optimized for intraprocedural register allocation, procedure calls, and multitasking performance | |
RU2629442C2 (ru) | Системы и способы предотвращения несанкционированного перемещения стека | |
CN104951296A (zh) | 允许一种架构的代码模块使用另一种架构的库模块的架构间兼容模块 | |
US20160062751A1 (en) | Method and apparatus for optimising computer program code | |
KR20150122195A (ko) | 스칼라 레지스터 데이터 값에 기초하는 벡터 레지스터 어드레싱 및 기능들 | |
CN113485716B (zh) | 防内存越界的程序编译方法及装置 | |
CN113569508B (zh) | 基于id进行数据索引与访问的数据库模型构建方法及设备 | |
CN113672237B (zh) | 防内存越界的程序编译方法及装置 | |
US10713021B2 (en) | Geometric 64-bit capability pointer | |
JP5414057B2 (ja) | マイクロコンピュータ | |
US20130275688A1 (en) | Data processing device and method | |
KR20200107997A (ko) | 다중 가드 태그 설정 명령어 | |
CN115994348A (zh) | 程序流水线的控制方法、处理装置和存储介质 | |
EP4016288A1 (en) | Isa opcode parameterization and opcode space layout randomization | |
US20220318015A1 (en) | Enforcing data placement requirements via address bit swapping | |
US7363481B2 (en) | Information processing method for controlling the function of a plurality of processors, program for realizing the method, and recording medium | |
CN114217882A (zh) | 在进程中运行应用的方法和装置 | |
CN102902548B (zh) | 汇编级内存复制标准库函数的生成方法及装置 | |
KR102213258B1 (ko) | 효율적인 명령어 처리를 위한 프로세싱-인-메모리 제어 방법 및 이를 적용한 연산장치 | |
US20240037028A1 (en) | Software sharing across multiple cores | |
CN116755845B (zh) | 数据处理方法和装置 | |
US11593113B2 (en) | Widening memory access to an aligned address for unaligned memory operations | |
WO2023016481A1 (zh) | 一种数据处理方法及相关装置 | |
CN117472560A (zh) | 跨多个内核的软件共享 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |