CN109710544B - 内存访问方法、计算机***以及处理装置 - Google Patents
内存访问方法、计算机***以及处理装置 Download PDFInfo
- Publication number
- CN109710544B CN109710544B CN201711021550.1A CN201711021550A CN109710544B CN 109710544 B CN109710544 B CN 109710544B CN 201711021550 A CN201711021550 A CN 201711021550A CN 109710544 B CN109710544 B CN 109710544B
- Authority
- CN
- China
- Prior art keywords
- address
- memory
- physical
- direct mapping
- virtual 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.)
- Active
Links
Images
Landscapes
- Memory System (AREA)
Abstract
本申请提供一种内存访问方法、计算机***以及处理装置,所述方法包括:***软件将基地址保存在寄存器中;所述***软件接收进程发送的内存访问请求,并将所述内存访问请求发送给内存管理单元,所述内存访问请求中包括虚拟地址;当所述内存管理单元根据所述虚拟地址中的标识位确定所述虚拟地址为直接映射空间的虚拟地址时,所述内存管理单元根据所述虚拟地址中的偏移位以及所述基地址计算所述虚拟地址对应的物理地址;***软件接收所述物理地址并访问所述物理地址对应的内存中的数据;实现虚拟地址到物理地址的快速转换,提升内存访问速度。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种内存访问方法、计算机***以及处理装置。
背景技术
在计算机应用中,会需要访问内存中的数据,现有的计算机的体系架构中,为了提高计算机的内存访问速度,在***内存和处理器之间增加物理缓存来提供数据缓存,物理缓存一般都在芯片内,因此其大小都有限制。而基于数据访问的区域性原理,***会将频繁访问的数据存放到物理缓存内确保内存访问时尽可能的从缓存中读取,并通过一定的算法提升缓存命中率,但是这样始终无法避免缓存丢失,即当需要访问的内存数据不在物理缓存中时,需要从***内存从读取,这样会造成读取数据的时延提高一个数量级,导致性能出现波动和降低。
现有的计算机体系架构在内存访问时处理器只能访问虚拟地址,因此必须找到该虚拟地址对应的物理地址,才能访问内存中的数据。***内存中有一种表用来存放虚拟地址和物理地址的一一对应的关系,这种表称为页表。***内存中保存所有记录着虚拟地址与物理地址对应关系的页表。旁路转换缓存(translation lookaside buffer,TLB)是基于上述物理缓存的原理用于存放部分页表的缓存,目的使程序访问物理地址时可以从TLB里读取页表,提升物理地址获取的速度。TLB使用了页表分级技术,这样可以极大的降低存放页表消耗的物理地址空间,但是因为TLB大小有限,不可能存放所有的内存页表,因此无法避免程序访问需要的页表时,该页表却没有被存放在TLB的现象产生(这种现象称为TLBmiss)。一旦产生TLB miss,就需要从***内存中读取页表。TLB miss现象降低了物理地址获取的速度,增大了内存访问的时延。然而对于某些重要的应用进程,例如数据业务,对时延十分敏感,因此需要避免产生TLB非命中现象。目前可以通过大页技术有效降低TLB miss发生的几率,但是因为物理缓存始终小于***内存,因此无法解决TLB miss的现象。
发明内容
本发明实施例提供了一种内存访问方法、计算机***以及处理装置,绕开TLB这种通过物理缓存保存页表的内存访问机制,通过虚拟地址即时计算获得该虚拟地址对应的物理地址,实现虚拟地址到物理地址的快速转换,提升物理地址获取的速度,进而降低内存访问时延。
下面从多个方面介绍本申请提供的发明内容,应理解的是,这些方面的发明内容仅是示例性的,并非本申请的所有发明内容,且这些方面的具体实现方式和有益效果均可互相参考。
第一方面,本发明实施例提供了一种内存访问方法。***软件将基地址保存在寄存器中,具体可以在该进程创建或该进程被换入时保存。所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述***软件在所述进程创建时分配给所述进程的一部分内存空间(也可以称为内存)。所述***软件接收所述进程发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量。所述***软件将所述内存访问请求发送给内存管理单元。所述内存管理单元接收所述内存访问请求,根据所述虚拟地址中的所述标识位确定所述虚拟地址为直接映射空间的虚拟地址时,获取所述寄存器中包含的所述基地址,根据所述偏移位和所述基地址计算所述虚拟地址对应的物理地址;将所述物理地址返回给所述***软件。所述***软件接收所述物理地址并访问所述物理地址对应的所述内存中的数据。
***软件指的是运行在应用软件和硬件之间的软件程序,通常包括操作***,例如linux、windows以及mac OS等,还可以包括中间件、微件等其他类型的***软件。内存管理单元为硬件层的一个硬件,通常与一个或多个物理核集成在一个芯片上。
直接映射空间作为本申请划分出的一部分内存,在物理地址空间和虚拟地址空间上都存在。所有在该直接映射空间的虚拟地址都可以通过本申请提供的计算方法直接计算为物理地址,不需要查页表。第一直接映射空间指的是该直接映射空间的部分或全部。
这里的寄存器可以是为本申请新增的寄存器,也可以是使用原有的寄存器,仅将其功能改变了。
可见,本实施例提供的方法在内存中划分出一部分地址空间作为直接映射空间,该部分在被使用时采用直接映射的方式,即内存管理单元根据基地址(需要一个寄存器记录该基地址)和偏移量将虚拟地址直接计算为物理地址,使得某些重要应用(或称之为数据业务)可以绕开TLB或其他的这种访问页表的方式,将这些重要应用的内存访问速度进一步提高。当然,该方法也可以和TLB等方式结合起来使用。
基于第一方面,在一些实现方式中,所述方法还包括:在所述进程创建或被换入时,所述***软件将所述第一直接映射空间的访问属性保存在所述寄存器中;在获取所述基地址之前,所述内存管理单元在根据所述虚拟地址中的所述标识位确定所述虚拟地址为所述直接映射空间的虚拟地址时,从所述寄存器中获取所述访问属性,在确定所述访问属性与所述内存访问请求的访问属性匹配时执行获取所述基地址的步骤。
可见,该直接映射空间分配访问属性,在进行物理地址计算之前,具体的,在获取基地址之前,先判断内存访问请求的访问属性与待访问的直接映射空间(这里是第一直接映射空间)的内存访问属性是否匹配,若匹配,才执行物理地址的计算以及之后的访问操作。例如,第一直接映射空间的内存访问属性为只读,但是当前接收到的这个内存访问请求为写请求,那么就可以不继续执行转换,而是返回错误,由此可以保证虚拟地址转换的安全性,避免非法访问。
基于第一方面,在一些实现方式中,所述方法还包括:在所述进程创建或被换入时,所述***软件将所述第一直接映射空间的长度保存在所述寄存器中;所述内存管理单元从所述寄存器中获取所述长度;在计算出所述物理地址之后,所述内存管理单元确定所述物理地址是否在所述基地址和所述长度确定的物理地址范围内,若所述物理地址在所述物理地址范围内,则将所述物理地址返回给所述***软件。
可见,第一直接映射空间为分配给当前进程的空间,直接映射空间中的其他部分可以分配给其他的进程,每个进程被分配到的直接映射空间都有长度限定,在访问的时候只能访问自己的映射空间。通过如上方法,寄存器保存当前进程所分配到的直接映射空间的长度,在计算出物理地址之后,判断一下该物理地址是否在分配的范围内,若在,才继续执行访问,这样就保证当前进程不会访问其他进程的内存数据,确保不同进程之间数据的隔离和安全。
基于第一方面,在一些实现方式中,所述方法还包括:在初始化时,所述***软件将内存的物理地址空间中的一部分划分为所述直接映射空间;在所述进程创建时,所述***软件将所述第一直接映射空间分配给所述进程,所述第一直接映射空间为所述直接映射空间的部分或全部。
第二方面,本发明实施例提供了一种计算机***,计算机***包括软件层和硬件层,所述软件层包括***软件,所述硬件层包括内存、内存管理单元和寄存器。
所述***软件被配置为:将基地址保存在寄存器中,具体可以在该进程创建或该进程被换入时保存,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述***软件在进程创建时分配给所述进程的一部分内存空间;接收进程发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;将所述内存访问请求发送给所述内存管理单元。
所述寄存器被配置为:保存所述基地址。
所述内存管理单元被配置为:从所述***软件接收所述内存访问请求;在根据所述虚拟地址中的所述标识位确定所述虚拟地址为直接映射空间的虚拟地址时,从所述寄存器中获取所述基地址;根据所述偏移位和所述基地址计算所述虚拟地址对应的物理地址;将所述物理地址返回给所述***软件。
所述***软件还被配置为:从所述内存管理单元接收所述物理地址,并访问所述物理地址对应的所述内存中的数据。
基于第二方面,在一些实现方式中,所述***软件还被配置为:在所述进程创建或被换入时,将所述第一直接映射空间的访问属性保存在所述寄存器中,所述寄存器用来保存所述访问属性。所述内存管理单元还被配置为:在获取所述基地址之前,在根据所述虚拟地址中的所述标识位确定所述虚拟地址为所述直接映射空间的虚拟地址时,从所述寄存器中获取所述访问属性,在确定所述访问属性与所述内存访问请求的访问属性匹配时执行获取所述基地址的步骤。
基于第二方面,在一些实现方式中,所述***软件还被配置为:在所述进程创建或被换入时,将所述第一直接映射空间的长度保存在所述寄存器中。所述寄存器还就用来保存所述长度。所述内存管理单元还被配置为:从所述寄存器中获取所述长度;在计算出所述物理地址之后,确定所述物理地址是否在所述基地址和所述长度确定的物理地址范围内,若所述物理地址在所述物理地址范围内,则将所述物理地址返回给所述***软件。
访问属性和长度的具体使用方法可参考其他方面的实施例。
基于第二方面,在一些实现方式中,所述***软件还被配置为:在所述***软件初始化时将内存的物理地址空间中的一部分划分为所述直接映射空间;在所述进程创建时,所述***软件将所述第一直接映射空间分配给所述进程,所述第一直接映射空间为所述直接映射空间的部分或全部。
第三方面,本发明实施例提供了一种计算机***,计算机***包括包括存储器、物理核、内存管理单元以及寄存器,所述存储器包括内存。所述存储器被配置为存储软件指令;所述物理核被配置为读取所述软件指令以执行如下操作:将基地址保存在寄存器中,具体可以在该进程创建或该进程被换入时保存,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述物理核在进程创建时分配给所述进程的一部分内存空间;接收进程发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;将所述内存访问请求发送给所述内存管理单元;从所述内存管理单元接收物理地址,并访问所述物理地址对应的所述内存中的数据。
所述寄存器被配置为保存所述基地址;
所述内存管理单元被配置为从所述物理核接收所述内存访问请求;在根据所述虚拟地址中的所述标识位确定所述虚拟地址为直接映射空间的虚拟地址时,从所述寄存器中获取所述基地址;根据所述偏移位和所述基地址计算所述虚拟地址对应的所述物理地址;将所述物理地址返回给所述物理核。
基于第三方面,在一些实现方式中,所述物理核还被配置为:读取所述软件指令以执行如下操作:在所述进程创建或被换入时,将所述第一直接映射空间的访问属性保存在所述寄存器中。所述寄存器还被配置为保存所述第一直接映射空间的访问属性。所述内存管理单元还被配置为在获取所述基地址之前,在根据所述虚拟地址中的所述标识位确定所述虚拟地址为所述直接映射空间的虚拟地址时,从所述寄存器中获取所述访问属性,在确定所述访问属性与所述内存访问请求的访问属性匹配时执行获取所述基地址的步骤。
基于第三方面,在一些实现方式中,所述物理核还被配置为读取所述软件指令以执行如下操作:在所述进程创建或被换入时,将所述第一直接映射空间的长度保存在所述寄存器中。所述寄存器还被配置为:保存所述第一直接映射空间的长度。所述内存管理单元还被配置为:从所述寄存器中获取所述长度;在计算出所述物理地址之后,确定所述物理地址是否在所述基地址和所述长度确定的物理地址范围内,若所述物理地址在所述物理地址范围内,则将所述物理地址返回给所述物理核。
访问属性和长度的具体使用方法可参考其他方面的实施例。
基于第三方面,在一些实现方式中,所述物理核还被配置为读取所述软件指令以执行如下操作:将内存的物理地址空间中的一部分划分为所述直接映射空间;在所述进程创建时,将所述第一直接映射空间分配给所述进程,所述第一直接映射空间为所述直接映射空间的部分或全部。
第四方面,本发明实施例提供了一种内存访问装置,所述内存访问装置包括调度模块、管理模块和接口模块。所述调度模块,用于将基地址保存在寄存器中,具体可以在该进程创建或该进程被换入时保存,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述管理模块在所述进程创建时分配给所述进程的一部分内存空间。所述管理模块,用于在所述进程创建时将所述第一直接映射空间分配给所述进程。所述接口模块,用于为所述进程提供发送内存访问请求的接口,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;将所述内存访问请求发送给内存管理单元;并根据所述内存管理单元返回的物理地址执行对内存的访问。
基于第四方面,在一些实现方式中,所述调度模块还用于在所述进程创建或被换入时,将所述第一直接映射空间的访问属性保存在所述寄存器中。
基于第四方面,在一些实现方式中,所述调度模块还用于在所述进程创建或被换入时,将所述第一直接映射空间的长度保存在所述寄存器中。
访问属性和长度的具体使用方法可参考其他方面的实施例。
基于第四方面,在一些实现方式中,所述内存访问装置还包括初始化模块。该初始化模块,用于在初始化时将内存的物理地址空间中的一部分划分为所述直接映射空间。所述内存管理模块还用于在所述进程创建时,将所述第一直接映射空间分配给所述进程,所述第一直接映射空间为所述直接映射空间的部分或全部。
第五方面,本发明实施例提供了一种处理装置,包括物理核、内存管理单元和寄存器,
所述内存管理单元,用于从所述物理核接收进程的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于基地址的偏移量,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述物理核在所述进程创建时分配给所述进程的一部分内存空间;在根据所述虚拟地址中的所述标识位确定所述虚拟地址为直接映射空间的虚拟地址时,从所述寄存器中获取所述基地址,所述基地址为所述物理核在所述进程创建或所述进程被换入时保存到所述寄存器中的;根据所述偏移位和所述基地址计算所述虚拟地址对应的物理地址;将所述物理地址返回给所述物理核,以便于所述物理核根据所述物理地址执行内存访问。所述寄存器用于保存所述基地址。
基于第五方面,在一些实现方式中,所述寄存器,还用于保存所述第一直接映射空间的访问属性。所述内存管理单元,用于在获取所述基地址之前,在根据所述虚拟地址中的所述标识位确定所述虚拟地址为所述直接映射空间的虚拟地址时,从所述寄存器中获取所述访问属性,在确定所述访问属性与所述内存访问请求的访问属性匹配时执行获取所述基地址的步骤。
基于第五方面,在一些实现方式中,所述寄存器,还用于保存所述第一直接映射空间的长度。所述内存管理单元,用于从所述寄存器中获取所述长度;在计算出所述物理地址之后,确定所述物理地址是否在所述基地址和所述长度确定的物理地址范围内,若所述物理地址在所述物理地址范围内,则将所述物理地址返回给所述物理核。
访问属性和长度的具体使用方法可参考其他方面的实施例。
第六方面,本发明实施例提供了一种内存访问方法。该方法可以由***软件执行。将基地址保存在寄存器中,具体可以在该进程创建或该进程被换入时保存,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述内存管理模块在进程创建时分配给所述进程的一部分内存空间;接收进程发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;将所述内存访问请求发送给内存管理单元,根据所述内存管理单元返回的物理地址访问内存。
进一步的,内存管理单元的物理地址计算方法可参考其他方面的实施例。
第七方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质可以是非易失性的,所述计算机可读存储介质中存储有计算机可读指令,当其在计算机上运行时,使得计算机执行上述第六方面或进一步参考其他方面所述的方法。
第八方面,本发明实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第六方面或进一步参考其他方面所述的方法。
第七方面,本发明实施例提供了一种内存访问方法,该方法可以由内存管理单元执行。接收***软件(或理解为物理核,因为物理核运行***软件)发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于基地址的偏移量,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述***软件在所述进程创建时分配给所述进程的一部分内存空间;在根据所述虚拟地址中的所述标识位确定所述虚拟地址为直接映射空间的虚拟地址时,从所述寄存器中获取所述基地址,所述基地址为所述***软件在所述进程创建或所述进程被换入时保存到所述寄存器中的;根据所述偏移位和所述基地址计算所述虚拟地址对应的物理地址;将所述物理地址返回给所述***软件,以便于所述***软件根据所述物理地址执行内存访问。
附图说明
图1为本发明实施例提供的虚拟地址空间划分示意图;
图2为本发明实施例提供的计算机***架构示意图;
图3为本发明实施例提供的流程图;
图4为本发明实施例提供的直接映射空间划分与分配示意图;
图5为本发明实施例提供寄存器示意图;
图6为本发明实施例提供的偏移量示意图;
图7为本发明实施例提供的内存访问方法的流程示意图;
图8为本发明实施例提供的流程示意图;
图9为本发明实施例提供的内存访问方法流程示意图;
图10为本发明实施例提供的内存访问方法流程示意图;
图11为本发明实施例提供的寄存器与虚拟地址空间对应关系示意图;
图12为本发明实施例提供的内存访问方法流程示意图;
图13为本发明实施例提供的一种处理装置的硬件逻辑示意图;
图14为本发明实施例提供的一种计算机***的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述。显然,所描述的实施例仅仅是本发明实施例中的部分实施例,而不是全部的实施例。本申请中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
为方便理解本发明实施例,首先介绍本发明实施例中引入的几个要素:
用户空间/内核空间:现有的某些计算机***中,将整个虚拟地址空间进行划分,划分出两块虚拟地址空间分别作为内核空间(内核态虚拟地址空间)和用户空间(用户态虚拟地址空间)。以64位体系架构下,48位有效虚拟地址为例,用户空间为(00000000,00000000)-(0000FFFF,FFFFFFFF),内核空间为(FFFF0000,00000000)-(FFFFFFFF,FFFFFFFF)。内核空间和用户空间分别有对应的寄存器,寄存器中存有对应空间的独立的页表基地址。
用户态任务:运行在用户空间的进程。
内核态任务:运行在内核空间的进程。
进程,可以为用户态进程也可以为内核态进程。
直接映射空间(direct mapping space,DMS):在整个虚拟地址空间中且在用户空间和内核空间外,逻辑上划分的一个独立的的虚拟地址空间,如图1所示。本申请以64位体系架构下,48位有效虚拟地址为例,可以将虚拟地址的高16位地址自定义为0xBFFF或者0xB000,用于表示该虚拟地址属于直接映射空间。直接映射空间的虚拟地址可以定义为(0xBFFF00FF,FFFFFFFF)-(0xBFFF0000,00000000)。直接映射空间可以分配给一个或多个进程,为便于理解,可以将分配给一个进程的直接映射空间称之为第一直接映射空间,若还分配给了其他进程,依次类推,叫第二直接映射空间、第三直接映射空间等。如图1所示,虚拟地址空间和物理地址空间都有直接映射空间,因此,应当了解,当提到直接映射空间的物理地址时指的是物理地址空间的直接映射空间,同理,当提到直接映射空间的虚拟地址时指的是虚拟地址空间的直接映射空间。
内存管理单元(memory management unit,MMU):是用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。通常集成在处理器内部。
物理核:最小的物理处理单元,一个处理器可以包括一个或多个物理核。
下面结合图2描述根据本发明实施例提供的一种计算机***,图2为本发明实施例提供的计算机***的架构示意图。
计算机***300包括软件层100和硬件层200。其中软件层100即为操作***,操作***也为一种***软件,操作***可以为Windows OS、Mac OS、Linux OS或其他操作***。***软件还可包括除应用程序之外的其他驱动软件或平台软件,如开源***软件、中间件、或微件等。计算机***可以为一种电子设备,例如个人计算机、服务器、手持式或膝上型设备、多处理器***、机顶盒、网络PC、小型计算机或大型计算机。
在本发明实施例中,软件层100分为用户态和内核态,需要说明的是,本发明实施例仅以此为例进行说明,在其他实施例中,其他操作***的软件层还可以呈现类似用户态和内核态的区分或者其他形式,在本申请中不做限制。
软件层100的用户态可以包括应用程序101、普通接口模块102和直接映射接口模块103;内核态可以包括***调用模块104、初始化模块105、调度模块106、管理模块107。
应用程序101为在用户态执行业务的进程,内存访问的操作由这个模块发起。普通接口模块102用于为应用程序101提供普通接口;普通接口模块102在用户态负责封装应用程序101使用的普通接口。应用程序101需要依赖普通接口模块102中函数库glibc封装的接口才能访问内核态,glibc就是根据革奴计划(GNU is Not Unix,GNU)发布的函数库,负责将***调用封装给应用程序101使用。直接映射接口模块103为应用程序101提供可以申请内存201中直接映射空间202的接口。***调用模块104,当应用程序101的进程需要通过接口申请内存时,需要通过***调用模块104才能完成。初始化模块105是在***软件初始化时执行初始化操作,在本发明实施例中可以用于在初始化时将内存201的物理地址空间中的一部分划分为直接映射空间202。初始化模块105可以是一个在原有模块上进行改进得到的模块,也可以是新增的模块。调度模块106用于管理应用程序101的进程在***软件中的调度过程。调度模块106可以是一个在原有模块上进行改进得到的模块,也可以是新增的模块。管理模块107负责在***软件运行过程中对内存201进行分配、管理和释放,管理模块107可以是一个在原有模块上进行改进得到的模块,也可以是新增的模块。
硬件层200可以包括内存201、和处理器206。处理器206包括物理核203、内存管理单元204(memory management unit,MMU)、寄存器205。
内存201是一种物理内存,可供***使用,内存201可以位于存储器中。直接映射空间202是内存201中划分出的部分内存。物理核203,也可以称为CPU core。处理器206可以为多核处理器或单核处理器,对于多核处理器,每个物理核203对应一个寄存器206以及一个内存管理单元204。内存管理单元204是一种负责处理内存访问请求的计算机硬件。寄存器206是直接映射空间对应的寄存器。在处理器206中,还包括图2中未显示的用户空间对应的寄存器以及内核空间对应的寄存器以及其他功能的寄存器,用户空间/内核空间对应的寄存器中保存有页表基地址,用于在通过TLB方式内存访问时为内存管理单元204提供页表基地址。寄存器206可以是其他功能的寄存器改进后的寄存器,也可以是新增的一个寄存器。
在本发明实施例中,应用程序101为MySQL数据库软件,计算机***300可以为运行MySQL数据库软件的服务器。MySQL数据库软件的进程可以分为管理业务进程与数据业务进程,其中数据业务对内存访问的时延十分敏感,使用TLB方式进行内存访问时发生TLB miss带来的时延直接影响MySQL数据库软件的运行性能;而管理业务对时延不敏感,使用TLB方式进行内存访问时发生TLB miss带来的时延对管理业务影响不大。
下面将以运行MySQL数据库软件的服务器为例,详细描述本发明实施例提供的一种内存访问方法的具体步骤。
在MySQL数据库软件进行内存访问之前,还包括以下步骤,流程图如图3所示:
步骤301:在初始化时,***软件将内存的物理地址空间中的一部分划分为直接映射空间;
具体的,在初始化时,初始化模块105从内存201的连续物理地址空间中划分出部分物理地址空间作为直接映射空间202所用。再将直接映射空间202划分成多个固定大小的第一直接映射空间,例如图4所示,初始化模块105将直接映射空间202划分成N个固定大小的第一直接映射空间。
步骤302:在进程创建时,***软件将第一直接映射空间分配给进程;
具体的,在应用程序101进程创建时,管理模块107将第一直接映射空间分配给创建的进程。其中,第一直接映射空间为直接映射空间202的部分或全部。在本发明实施例中,如图4所示,N等分的直接映射空间可以被分配给N个进程,每个进程被分配到直接映射空间的一部分,因此每个进程都有独立的物理地址空间,互不干扰。
步骤303:在进程创建或进程被换入时,***软件将基地址保存在寄存器中;
具体的,在进程1创建时,调度模块106将该进程1的基地址保存在寄存器205中,基地址为第一直接映射空间的物理起始地址,第一直接映射空间为步骤302***软件在进程1创建时分配给该进程的一部分内存空间;在进程2被换入时,调度模块106将进程2的基地址保存在寄存器205中,覆盖寄存器205保存的上一个进程的基地址。
可选的,调度模块106在进程创建或被换入时,将第一直接映射空间的访问属性保存在寄存器205中;
可选的,调度模块106在进程创建或被换入时,将第一直接映射空间的长度保存在所述寄存器205中;
以64位体系架构下,在寄存器205的64位空间中,图5所示,基地址可以保存在寄存器205的低48位空间中,其中,基地址为第一直接映射空间的物理起始地址,第一直接映射空间为调度模块106在进程创建时分配给所述进程的一部分内存空间。
寄存器205的高16位空间保存了当前进程的第一直接映射空间的长度及访问属性。寄存器的高16位空间是可以自定义的标识位,其中,第一直接映射空间的长度及访问属性可以自定义。访问属性可以为只读、只写、读写等这些属性,如果定义访问属性为只读,那么当前进程进行内存访问写数据时就会报错。第一直接映射空间的访问属性可以设置在寄存器的高16位空间中的高4位空间,第一直接映射空间的长度可以设置在高16位空间中的低12位空间。
步骤304:***软件接收进程发送的内存申请请求时,将虚拟地址返回给进程;
MySQL数据库软件的数据业务对时延十分敏感,因此数据业务进程通过直接映射接口模块103提供的直接映射接口发送内存申请请求,直接映射接口为应用程序编程接口;
具体的,直接映射接口模块103提供的直接映射接口可以为DM_malloc(size,align)接口,第一个参数size表示进程申请的内存大小,第二个参数align表示物理地址按多少字节对齐。地址对齐是接口一个常规参数,因为处理器本身设计上要求访问的物理地址的起始地址都是对齐的,否则会影响性能。对齐的长度可以设置,例如:设置成4字节对齐,那么分配的物理地址低位2位都是00,如果8字节对齐,那么分配的物理地址低位都是000。
应用程序101的进程可以通过直接映射接口模块103提供的直接映射接口经过***调用模块104进入内核态;
管理模块107接收到数据业务进程通过直接映射接口发送的内存申请请求后,为数据业务进程分配内存,分配的内存为在步骤302数据业务进程分配到的第一直接映射空间;
以64位体系架构下,48位有效虚拟地址为例,如图6所示偏移量示意图。数据业务进程的基地址即第一直接映射空间的物理起始地址为0x2000,第一直接映射空间已经分配了0x50的物理地址空间。那么,管理模块107分配给数据业务进程的物理地址从0x2050开始,已经分配的0x50物理地址就是管理模块107分配给数据业务进程的物理地址相对于数据业务进程的基地址的偏移量(PA offset)。
管理模块107将虚拟地址返回给数据业务进程,虚拟地址中包含标识位和偏移位,标识位用于指示虚拟地址为直接映射空间对应的虚拟地址,偏移位用于指示基于内存申请请求而分配给应用程序101的内存的物理起始地址相对于基地址的偏移量;
具体的,直接映射空间对应的虚拟地址的标识位可以是虚拟地址的高16位,可以将虚拟地址的高16位地址定义为0xBFFF或者0xB000来指示虚拟地址为直接映射空间对应的虚拟地址,本发明实施例以虚拟地址高16位地址定义为0xBFFF为例,因此,数据业务进程获得的虚拟地址的格式为0xBFFF<<48|(PA_offset),虚拟地址的高16位是标识位,用于指示虚拟地址为直接映射空间对应的虚拟地址,在本发明实施例中可以设置为BFFF,低48位为偏移位,用于指示基于内存申请请求而分配给数据业务进程的内存的物理起始地址相对于基地址的偏移量。
对于MySQL数据库软件的管理业务,通过普通接口模块102提供的普通接口发送内存申请请求,管理模块107按照正常的地址转换规则将转换后的虚拟地址返回给MySQL数据库软件的管理业务,并将存有虚拟地址与物理地址转换关系的页表保存在内存201。
请参考图7,为本发明实施例提供的一种内存访问方法的流程示意图。本发明实施例中所描述的内存访问方法包括以下步骤:
因为进程运行在虚拟地址空间,进程运行时使用虚拟地址空间中的虚拟地址,进程需要进行内存访问时,所以进行需要进行虚拟地址到物理地址的转换获得物理地址才能进行内存访问操作,访问物理地址对应的内存数据。
下面描述MySQL数据库如何使用本发明实施例提供的一种内存访问方法进行内存访问操作,包括以下步骤:
步骤401:接收内存访问请求,内存访问请求中包含虚拟地址;
内存访问请求,可能是读请求,也可能是写请求。以MySQL数据库的数据业务进程需要写数据到内存为例,用户程序101,即MySQL数据库的数据业务进程通过普通接口模块102提供的普通接口向物理核203发送为写请求的内存访问请求,内存访问请求中包含该进程的虚拟地址。物理核203接收到来自应用程序101的内存访问请求后,将包含虚拟地址的内存访问请求发送给内存管理单元204。
通过普通接口,即现有的内存访问接口,可以减少代码修改量,提升与现有***的兼容性。
步骤402:根据虚拟地址中的标识位确定虚拟地址的类型;
内存管理单元204接收来自物理核203发送的包含虚拟地址的内存访问请求,根据虚拟地址中的标识位确定虚拟地址的类型。
在本发明实施例中,如图1所示虚拟地址空间包括用户空间、内核空间和直接映射空间,因此,虚拟地址的类型可以分为虚拟地址属于用户空间、内核空间或直接映射空间。
MySQL数据库的数据业务进程在步骤304进行内存申请时,管理模块107返回给进程的虚拟地址中包含标识位和偏移位。因此,MySQL数据库的数据业务进程的内存访问请求中的虚拟地址包括标识为和偏移位。其中,标识位用于指示虚拟地址的类型,偏移位用于指示待访问的内存的物理起始地址相对于基地址的偏移量。
在一个具体实施例中,参考图8,在执行步骤402时,具体可以通过步骤501和502来实现,具体地:
步骤501:根据虚拟地址中第一标识位的值确定虚拟地址是否属于用户空间;
具体地,第一标识位可以为虚拟地址的高N位,其中N为正整数,且N≥1。
步骤502:根据虚拟地址中第二标识位的值确定虚拟地址是否属于直接映射空间;
具体地,第二标识位可以为虚拟地址的高M位,其中M为正整数,且M>N。
如图9所示,虚拟地址中第一标识位的值可以是虚拟地址的63位的值,通过63位的值可以判断虚拟地址的类型是否是用户空间的虚拟地址,第二标识位可以是虚拟地址的高16位的值。
若63位的值不大于0,则确定虚拟地址的类型,该虚拟地址属于用户空间。若虚拟地址的63位的值大于0,则通过虚拟地址高16位的值确定虚拟地址是否属于直接映射空间。若虚拟地址的高16位的值为0xBFFF,则确定虚拟地址属于直接映射空间;若虚拟地址的高16位的值不等于0xBFFF,则确定虚拟地址属于内核空间。
如图10所示,第一标识位的值还可以是虚拟地址的高2位的值,即63、32位的值,第二标识位的值可以是高4位的值。直接映射空间的虚拟地址高16位设置为为0xBFFF,则高4位为1011。
若63、62位的值不大于00,则确定虚拟地址的类型,虚拟地址属于用户空间。若虚拟地址的63、62位的值大于00,则通过虚拟地址高4位的值确定虚拟地址是否属于直接映射空间。若虚拟地址的高4位的值为1011,则确定虚拟地址属于直接映射空间;若虚拟地址的高4位的值不是1011,则确定虚拟地址属于内核空间。
步骤403:获取寄存器中包含的基地址;
内存管理单元204在根据虚拟地址中的标识位确定虚拟地址为直接映射空间的虚拟地址时,获取寄存器205中保存的基地址。其中,基地址为第一直接映射空间的物理起始地址,第一直接映射空间为管理模块107在进程创建时分配给进程的一部分内存空间。
每个虚拟地址空间都有对应的一个寄存器,如图11所示。若在步骤402中根据虚拟地址中标识位的值确认虚拟地址为直接映射空间的虚拟地址之后,根据虚拟地址空间与寄存器的对应关系,访问直接映射空间对应的寄存器DMBR_EL1,在图2中为寄存器205。
对应的,若根据虚拟地址中标识位的值确认虚拟地址的类型为用户空间或者内核空间时,内存管理单元204从用户空间或内核空间对应的寄存器A或寄存器B中获取页表基地址,并使用TLB的方式进行后续的内存访问操作:根据页表基地址在TLB中查找对应的页表,进行虚拟地址到物理地址的转换,获得物理地址后,访问内存数据。
步骤404:根据虚拟地址中的偏移位和基地址计算虚拟地址对应的物理地址
在步骤402中已经确定虚拟地址属于直接映射空间,因此,内存管理单元204可以通过虚拟地址的偏移位和从寄存器205获得的基地址计算出虚拟地址对应的物理地址,如图12所示,即可以通过虚拟地址低48位和寄存器205低48位的基地址计算虚拟地址对应的物理地址。因为属于直接映射空间的虚拟地址的偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量,因此PA=VA&MASK(low 48bit)+DMBR_EL1&MASK(low48bit),物理地址等于虚拟地址的低48位地址与寄存器的低48位地址(当前进程的基地址)相加。
例如,内存管理单元204从寄存器205获得的基地址为0x00000000,00002000,虚拟地址的低48位中得到的偏移量为0x00000000,00000050,则内存管理单元204计算得到物理地址位0x00000000,00002050。
步骤405:接收所述物理地址并访问所述物理地址对应的内存中的数据;
内存管理单元204获得转换后的物理地址后,将物理地返回给物理核203,物理核203接收物理地址后访问物理地址对应的内存201中的数据;
可选的,在步骤403获取寄存器中包含的基地址之前还包括:
步骤406:确定所述访问属性与所述内存访问请求的访问属性匹配;
具体的,在获取基地址之前,内存管理单元204在根据虚拟地址中的标识位确定虚拟地址为直接映射空间的虚拟地址时,内存管理单元204从寄存器205中获取第一直接映射空间的访问属性,在确定第一直接映射空间的访问属性与所述内存访问请求的访问属性匹配时执行获取基地址的步骤403。
例如,如果第一直接映射空间的访问属性为只读,但是内存访问请求的访问属性为写请求,那么就不可以继续进行步骤403获取基地址以及步骤403后续的步骤,而是返回错误,由此可以保证虚拟地址转换的安全性,避免非法访问。
可选的,在步骤405之前还包括:
步骤407:确定物理地址在基地址和第一直接映射空间的长度确定的物理地址范围内;
具体的,内存管理单元204从寄存器205中获取第一直接映射空间的长度;在计算出所述物理地址之后,确定所述物理地址是否在基地址和第一直接映射空间的长度确定的物理地址范围内,若计算出的物理地址在物理地址范围内,则内存管理单元204将物理地址返回给物理核203,进行步骤405;若计算出的物理地址不在物理地址范围内,则认为该内存访问请求非法并触发***异常。
第一直接映射空间为分配给当前进程的空间,直接映射空间中的其他部分可以分配给其他的进程,每个进程被分配到的直接映射空间都有长度限定,在访问的时候只能访问自己的映射空间。通过如上方法,寄存器保存当前进程所分配到的直接映射空间的长度,在计算出物理地址之后,判断一下该物理地址是否在分配的范围内,若在,才继续执行访问,这样就保证当前进程不会访问其他进程的内存数据,确保不同进程之间数据的隔离和安全。
例如,当前进程的基地址是0x10000,当前进程的第一直接映射空间的长度是0x2000,则物理地址范围为0x12000。假设步骤401获得的虚拟地址为(0xBFFF0000,00001000),虚拟地址的偏移位为0x1000,可以确定计算出的物理地址为0x2000,在物理地址范围内,因此该物理地址安全,可以进行步骤405。
第一直接映射空间的访问属性及第一直接映射空间的长度的设置可以保证地址转换的安全性,保证当前进程不会破坏其他进程的内存数据,确保数据的安全,并且支持多个进程可以使用本发明实施例提供的内存访问方法。
图13所示为本发明实施例提供的一种处理装置的硬件设计的实现形态,表示了内存管理单元204的硬件逻辑。本领域的技术人员可以由图13所示的硬件逻辑示意图,构建实际的硬件电路。
图13所示的硬件设计相当于在原有的内存管理单元上增加新的硬件逻辑。V0-V60为虚拟地址,P0-P60为转换后的物理地址。原有的内存管理单元的硬件逻辑是:
首先,内存管理单元通过判断虚拟地址最高位,区分虚拟地址属于用户空间或内核空间。
接着,内存管理单元执行在TLB缓存中查找页表的操作;若在TLB缓存中找到所需的页表,即TLB hit(命中),则内存管理单元将虚拟地址转换成物理地址P0-P20;若在TLB缓存中未找到所需的页表,即TLB miss(失败),则进入内存查找页表。
最终,内存管理单元获得虚拟地址对应的物理地址P41-P60。
新增的硬件逻辑是使内存管理单元在判断虚拟地址最高位后,再判断虚拟地址高M位是否为BFFF。
若虚拟地址高16位等于BFFF,则内存管理单元根据虚拟地址低48位与寄存器DMBR_EL1低48位中的基地址计算生成物理地址P21-P40。
若虚拟地址高16位不等于BFFF,则执行在TLB缓存中查找页表的操作。
请参考图14,为本发明实施例提供的一种计算机***的结构示意图。该计算机***包括处理器601和存储器602及连接处理器与内核的总线603。处理器601包括物理核604、内存管理单元605和寄存器606。存储器602包括内存607。
存储器602被配置为:存储软件指令;
物理核604被配置为:读取所述软件指令以执行如下操作:
将内存的物理地址空间中的一部分划分为所述直接映射空间;在所述进程创建时,将所述第一直接映射空间分配给所述进程,所述第一直接映射空间为所述直接映射空间的部分或全部。在进程创建或被换入时,将基地址保存在寄存器606中,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为物理核604在进程创建时分配给所述进程的一部分内存;接收进程发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;将所述内存访问请求发送给内存管理单元605;从内存管理单元605接收物理地址,并访问所述物理地址对应的所述内存中的数据;在所述进程创建或被换入时,将所述第一直接映射空间的访问属性保存在寄存器606中;在所述进程创建或被换入时,将所述第一直接映射空间的长度保存在寄存器606中;
寄存器606被配置为:保存所述基地址;保存所述第一直接映射空间的访问属性;保存所述第一直接映射空间的长度;
内存管理单元605被配置为:
从物理核604接收所述内存访问请求;在根据所述虚拟地址中的所述标识位确定所述虚拟地址为直接映射空间的虚拟地址时,从寄存器606中获取所述基地址;根据所述偏移位和所述基地址计算所述虚拟地址对应的所述物理地址;将所述物理地址返回给物理核604。
在获取所述基地址之前,在根据所述虚拟地址中的所述标识位确定所述虚拟地址为所述直接映射空间的虚拟地址时,从寄存器606中获取所述访问属性,在确定所述访问属性与所述内存访问请求的访问属性匹配时执行获取所述基地址的步骤。
从寄存器606中获取所述长度;在计算出所述物理地址之后,确定所述物理地址是否在所述基地址和所述长度确定的物理地址范围内,若所述物理地址在所述物理地址范围内,则将所述物理地址返回给物理核604。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。对于用软件实现的部分,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述软件程序(或计算机指令)可以存储在计算机可读存储介质中。所述计算机可读存储介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如DVD)、或者半导体介质(例如固态硬盘)等。
Claims (18)
1.一种内存访问方法,其特征在于,包括:
***软件将基地址保存在寄存器中,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述***软件在进程创建时分配给所述进程的一部分内存;
所述***软件接收所述进程发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;
所述***软件将所述内存访问请求发送给内存管理单元;
所述内存管理单元接收所述内存访问请求,根据所述虚拟地址中的所述标识位确定所述虚拟地址为直接映射空间的虚拟地址时,获取所述寄存器中包含的所述基地址;
所述内存管理单元根据所述偏移位和所述基地址计算所述虚拟地址对应的物理地址;
所述内存管理单元将所述物理地址返回给所述***软件;
所述***软件接收所述物理地址并访问所述物理地址对应的所述内存中的数据。
2.根据权利要求1所述的内存访问方法,其特征在于,所述方法还包括:
所述***软件将所述第一直接映射空间的访问属性保存在所述寄存器中;
在获取所述基地址之前,所述内存管理单元在根据所述虚拟地址中的所述标识位确定所述虚拟地址为所述直接映射空间的虚拟地址时,从所述寄存器中获取所述访问属性,在确定所述访问属性与所述内存访问请求的访问属性匹配时执行获取所述基地址的步骤。
3.根据权利要求1或2所述的内存访问方法,其特征在于,所述方法还包括:
所述***软件将所述第一直接映射空间的长度保存在所述寄存器中;所述内存管理单元从所述寄存器中获取所述长度;在计算出所述物理地址之后,所述内存管理单元确定所述物理地址是否在所述基地址和所述长度确定的物理地址范围内,若所述物理地址在所述物理地址范围内,则将所述物理地址返回给所述***软件。
4.一种计算机***,其特征在于,包括软件层和硬件层,所述软件层包括***软件,所述硬件层包括内存、内存管理单元和寄存器,其中:
所述***软件被配置为:将基地址保存在寄存器中,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述***软件在进程创建时分配给所述进程的一部分内存;接收所述进程发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;将所述内存访问请求发送给所述内存管理单元;
所述寄存器被配置为:保存所述基地址;
所述内存管理单元被配置为:从所述***软件接收所述内存访问请求;在根据所述虚拟地址中的所述标识位确定所述虚拟地址为直接映射空间的虚拟地址时,从所述寄存器中获取所述基地址;根据所述偏移位和所述基地址计算所述虚拟地址对应的物理地址;将所述物理地址返回给所述***软件;
所述***软件还被配置为:从所述内存管理单元接收所述物理地址,并访问所述物理地址对应的所述内存中的数据。
5.根据权利要求4所述的计算机***,其特征在于,
所述***软件还被配置为:将所述第一直接映射空间的访问属性保存在所述寄存器中;
所述寄存器还被配置为:保存所述访问属性;
所述内存管理单元还被配置为:在获取所述基地址之前,在根据所述虚拟地址中的所述标识位确定所述虚拟地址为所述直接映射空间的虚拟地址时,从所述寄存器中获取所述访问属性,在确定所述访问属性与所述内存访问请求的访问属性匹配时执行获取所述基地址的步骤。
6.根据权利要求4或5所述的计算机***,其特征在于,
所述***软件还被配置为:将所述第一直接映射空间的长度保存在所述寄存器中;
所述寄存器还被配置为:保存所述长度;
所述内存管理单元还被配置为:从所述寄存器中获取所述长度;在计算出所述物理地址之后,确定所述物理地址是否在所述基地址和所述长度确定的物理地址范围内,若所述物理地址在所述物理地址范围内,则将所述物理地址返回给所述***软件。
7.根据权利要求4-5任意一项所述的计算机***,其特征在于,
所述***软件还被配置为:在所述***软件初始化时将内存的物理地址空间中的一部分划分为所述直接映射空间;所述***软件将所述第一直接映射空间分配给所述进程,所述第一直接映射空间为所述直接映射空间的部分或全部。
8.一种计算机***,其特征在于,包括存储器、物理核、内存管理单元以及寄存器,所述存储器包括内存,其中:
所述存储器被配置为:存储软件指令;
所述物理核被配置为:读取所述软件指令以执行如下操作:
将基地址保存在寄存器中,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述物理核在进程创建时分配给所述进程的一部分内存;接收所述进程发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;将所述内存访问请求发送给所述内存管理单元;从所述内存管理单元接收物理地址,并访问所述物理地址对应的所述内存中的数据;
所述寄存器被配置为:保存所述基地址;
所述内存管理单元被配置为:
从所述物理核接收所述内存访问请求;在根据所述虚拟地址中的所述标识位确定所述虚拟地址为直接映射空间的虚拟地址时,从所述寄存器中获取所述基地址;根据所述偏移位和所述基地址计算所述虚拟地址对应的所述物理地址;将所述物理地址返回给所述物理核。
9.根据权利要求8所述的计算机***,其特征在于,
所述物理核还被配置为:读取所述软件指令以执行如下操作:将所述第一直接映射空间的访问属性保存在所述寄存器中;
所述寄存器还被配置为:保存所述第一直接映射空间的访问属性;
所述内存管理单元还被配置为:在获取所述基地址之前,在根据所述虚拟地址中的所述标识位确定所述虚拟地址为所述直接映射空间的虚拟地址时,从所述寄存器中获取所述访问属性,在确定所述访问属性与所述内存访问请求的访问属性匹配时执行获取所述基地址的步骤。
10.根据权利要求8或9所述的计算机***,其特征在于,
所述物理核还被配置为:读取所述软件指令以执行如下操作:将所述第一直接映射空间的长度保存在所述寄存器中;
所述寄存器还被配置为:保存所述第一直接映射空间的长度;
所述内存管理单元还被配置为:从所述寄存器中获取所述长度;在计算出所述物理地址之后,确定所述物理地址是否在所述基地址和所述长度确定的物理地址范围内,若所述物理地址在所述物理地址范围内,则将所述物理地址返回给所述物理核。
11.根据权利要求8-9任意一项所述的计算机***,其特征在于,
所述物理核还被配置为:读取所述软件指令以执行如下操作:
将内存的物理地址空间中的一部分划分为所述直接映射空间;将所述第一直接映射空间分配给所述进程,所述第一直接映射空间为所述直接映射空间的部分或全部。
12.一种内存访问装置,其特征在于,所述内存访问装置包括调度模块、管理模块和接口模块,其中:
所述调度模块,用于将基地址保存在寄存器中,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述管理模块在进程创建时分配给所述进程的一部分内存;
所述管理模块,用于将所述第一直接映射空间分配给所述进程;
所述接口模块,用于为所述进程提供发送内存访问请求的接口,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;将所述内存访问请求发送给内存管理单元;并根据所述内存管理单元返回的物理地址执行内存访问。
13.根据权利要求12所述的内存访问装置,其特征在于,还包括初始化模块,
所述初始化模块,用于在初始化时将所述内存的物理地址空间中的一部分划分为所述直接映射空间;
所述管理模块还用于:将所述第一直接映射空间分配给所述进程,所述第一直接映射空间为所述直接映射空间的部分或全部。
14.一种处理装置,包括物理核、内存管理单元和寄存器,其特征在于,
所述内存管理单元,用于从所述物理核接收进程的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于基地址的偏移量,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为所述物理核在所述进程创建时分配给所述进程的一部分内存;在根据所述虚拟地址中的所述标识位确定所述虚拟地址为直接映射空间的虚拟地址时,从所述寄存器中获取所述基地址,所述基地址为所述物理核保存到所述寄存器中的;根据所述偏移位和所述基地址计算所述虚拟地址对应的物理地址;将所述物理地址返回给所述物理核,以便于所述物理核根据所述物理地址执行内存访问;
所述寄存器用于保存所述基地址。
15.根据权利要求14所述的处理装置,其特征在于,
所述寄存器,还用于保存所述第一直接映射空间的访问属性;
所述内存管理单元,用于在获取所述基地址之前,在根据所述虚拟地址中的所述标识位确定所述虚拟地址为所述直接映射空间的虚拟地址时,从所述寄存器中获取所述访问属性,在确定所述访问属性与所述内存访问请求的访问属性匹配时执行获取所述基地址的步骤。
16.根据权利要求14或15所述的处理装置,其特征在于,
所述寄存器,还用于保存所述第一直接映射空间的长度;
所述内存管理单元,用于从所述寄存器中获取所述长度;在计算出所述物理地址之后,确定所述物理地址是否在所述基地址和所述长度确定的物理地址范围内,若所述物理地址在所述物理地址范围内,则将所述物理地址返回给所述物理核。
17.一种计算机存储介质,其特征在于,所述计算机存储介质存储软件程序,当所述软件程序被处理器执行时实现:
将基地址保存在寄存器中,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为内存管理模块在进程创建时分配给所述进程的一部分内存;
接收所述进程发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;将所述内存访问请求发送给内存管理单元,并根据所述内存管理单元返回的物理地址执行对内存的访问。
18.一种计算机,其特征在于,包括软件程序,所述计算机加载和执行所述软件程序时实现:
将基地址保存在寄存器中,所述基地址为第一直接映射空间的物理起始地址,所述第一直接映射空间为内存管理模块在进程创建时分配给所述进程的一部分内存;
接收所述进程发送的内存访问请求,所述内存访问请求中包括虚拟地址,所述虚拟地址中包含标识位和偏移位,其中所述标识位用于指示所述虚拟地址的类型,所述偏移位用于指示待访问的内存的物理起始地址相对于所述基地址的偏移量;将所述内存访问请求发送给内存管理单元,并根据所述内存管理单元返回的物理地址执行内存访问。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711021550.1A CN109710544B (zh) | 2017-10-26 | 2017-10-26 | 内存访问方法、计算机***以及处理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711021550.1A CN109710544B (zh) | 2017-10-26 | 2017-10-26 | 内存访问方法、计算机***以及处理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109710544A CN109710544A (zh) | 2019-05-03 |
CN109710544B true CN109710544B (zh) | 2021-02-09 |
Family
ID=66252942
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711021550.1A Active CN109710544B (zh) | 2017-10-26 | 2017-10-26 | 内存访问方法、计算机***以及处理装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109710544B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11144638B1 (en) * | 2018-01-18 | 2021-10-12 | Pure Storage, Inc. | Method for storage system detection and alerting on potential malicious action |
CN112114738B (zh) * | 2019-06-20 | 2024-02-20 | 杭州海康威视数字技术股份有限公司 | 一种存储数据的方法及存储设备 |
CN111274040B (zh) * | 2020-02-18 | 2023-04-07 | 北京和利时控制技术有限公司 | 一种内存管理方法和装置 |
CN111400202A (zh) * | 2020-03-13 | 2020-07-10 | 宁波中控微电子有限公司 | 应用于片上控制***的寻址方法、模块及片上控制*** |
CN112513817B (zh) * | 2020-08-14 | 2021-10-01 | 华为技术有限公司 | 一种主cpu与npu的数据交互方法及计算设备 |
CN112532585A (zh) * | 2020-11-02 | 2021-03-19 | 杭州迪普科技股份有限公司 | 一种进程间报文传输的方法、设备及介质 |
CN112381209B (zh) * | 2020-11-13 | 2023-12-22 | 平安科技(深圳)有限公司 | 一种模型压缩方法、***、终端及存储介质 |
CN112463714B (zh) * | 2020-11-30 | 2022-12-16 | 成都海光集成电路设计有限公司 | 远程直接内存访问方法、异构计算***及电子设备 |
CN113326213B (zh) * | 2021-05-24 | 2023-07-28 | 北京计算机技术及应用研究所 | 一种飞腾服务器平台下在驱动程序中实现地址映射的方法 |
EP4379560A1 (en) * | 2021-09-24 | 2024-06-05 | Huawei Technologies Co., Ltd. | Electronic apparatus, and method for securely accessing software |
CN114185818B (zh) * | 2022-02-15 | 2022-08-02 | 摩尔线程智能科技(北京)有限责任公司 | 基于扩展页表的gpu访存自适应优化方法及装置 |
CN117170854A (zh) * | 2022-05-26 | 2023-12-05 | 华为技术有限公司 | 一种内存访问方法及相关设备 |
CN117370228A (zh) * | 2022-06-30 | 2024-01-09 | 超聚变数字技术有限公司 | 一种数据处理设备及方法 |
WO2024113090A1 (zh) * | 2022-11-28 | 2024-06-06 | 华为技术有限公司 | 访存方法、装置及*** |
CN116483738B (zh) * | 2023-06-20 | 2023-09-05 | 苏州浪潮智能科技有限公司 | 数据访问方法及装置、存储介质及电子装置 |
CN117785493B (zh) * | 2024-02-28 | 2024-05-07 | 苏州元脑智能科技有限公司 | 嵌入式***的硬件资源访问方法、装置及服务器 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101246427A (zh) * | 2007-02-15 | 2008-08-20 | 凌阳科技股份有限公司 | 应用程序可重定位加载的方法及地址重定位装置 |
US20110010521A1 (en) * | 2009-07-13 | 2011-01-13 | James Wang | TLB Prefetching |
CN103377141A (zh) * | 2012-04-12 | 2013-10-30 | 无锡江南计算技术研究所 | 高速存储区的访问方法以及访问装置 |
CN105283855A (zh) * | 2014-04-25 | 2016-01-27 | 华为技术有限公司 | 一种寻址方法及装置 |
-
2017
- 2017-10-26 CN CN201711021550.1A patent/CN109710544B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101246427A (zh) * | 2007-02-15 | 2008-08-20 | 凌阳科技股份有限公司 | 应用程序可重定位加载的方法及地址重定位装置 |
US20110010521A1 (en) * | 2009-07-13 | 2011-01-13 | James Wang | TLB Prefetching |
CN103377141A (zh) * | 2012-04-12 | 2013-10-30 | 无锡江南计算技术研究所 | 高速存储区的访问方法以及访问装置 |
CN105283855A (zh) * | 2014-04-25 | 2016-01-27 | 华为技术有限公司 | 一种寻址方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109710544A (zh) | 2019-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109710544B (zh) | 内存访问方法、计算机***以及处理装置 | |
EP3491520B1 (en) | Controlling access to pages in a memory in a computing device | |
US9836409B2 (en) | Seamless application access to hybrid main memory | |
US10802987B2 (en) | Computer processor employing cache memory storing backless cache lines | |
US7620766B1 (en) | Transparent sharing of memory pages using content comparison | |
US10169244B2 (en) | Controlling access to pages in a memory in a computing device | |
US8261267B2 (en) | Virtual machine monitor having mapping data generator for mapping virtual page of the virtual memory to a physical memory | |
EP2994837B1 (en) | Multi-core page table sets of attribute fields | |
US20140006681A1 (en) | Memory management in a virtualization environment | |
US20070038840A1 (en) | Avoiding silent data corruption and data leakage in a virtual environment with multiple guests | |
US7480784B2 (en) | Ensuring deadlock free operation for peer to peer traffic in an input/output memory management unit (IOMMU) | |
US10459852B1 (en) | Memory utilization analysis for memory management systems | |
US9928000B2 (en) | Memory mapping for object-based storage devices | |
US9208082B1 (en) | Hardware-supported per-process metadata tags | |
CN115292214A (zh) | 页表预测方法、存储访问操作方法、电子装置和电子设备 | |
US9367478B2 (en) | Controlling direct memory access page mappings | |
CN110196757A (zh) | 虚拟机的tlb填写方法、装置及存储介质 | |
US11907301B2 (en) | Binary search procedure for control table stored in memory system | |
TW201447583A (zh) | 用於減少執行硬體表搜尋(hwtw)所需的時間和計算資源量的方法和系統 | |
US7562204B1 (en) | Identifying and relocating relocatable kernel memory allocations in kernel non-relocatable memory | |
US8347064B1 (en) | Memory access techniques in an aperture mapped memory space | |
US20170262382A1 (en) | Processing device, information processing apparatus, and control method of processing device | |
WO2018036486A1 (zh) | 页表缓存的访问方法、页表缓存、处理器芯片和存储单元 | |
CN116795740A (zh) | 数据存取方法、装置、处理器、计算机***及存储介质 | |
US12008261B2 (en) | Method and device for accessing memory |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200423 Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant after: HUAWEI TECHNOLOGIES Co.,Ltd. Address before: 301, A building, room 3, building 301, foreshore Road, No. 310052, Binjiang District, Zhejiang, Hangzhou Applicant before: Huawei Technologies Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |