CN102866958B - 一种离散内存访问的方法及装置 - Google Patents
一种离散内存访问的方法及装置 Download PDFInfo
- Publication number
- CN102866958B CN102866958B CN201210330697.XA CN201210330697A CN102866958B CN 102866958 B CN102866958 B CN 102866958B CN 201210330697 A CN201210330697 A CN 201210330697A CN 102866958 B CN102866958 B CN 102866958B
- Authority
- CN
- China
- Prior art keywords
- page table
- tlb page
- address
- level
- order
- 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
Abstract
本发明实施例公开了一种离散内存访问的方法及装置,所述方法包括:在当前需要进行离散物理内存访问时,接收操作系统配置的第一级TLB页表的首地址及虚拟内存地址,第一级TLB页表保存有第二级TLB页表的首地址;根据第一级TLB页表的首地址和虚拟内存地址中的第一部分获取第一级TLB页表;依据第二级TLB页表的首地址和虚拟内存地址中的第二部分,获取第二级TLB页表;读取第二级TLB页表中的数据作为待访问的物理内存地址;访问待访问的物理内存地址指向的物理内存空间。采用本发明实施例公开的方法或装置,可以显著提高物理内存的使用率,从而也减少了物理内存的开销,进一步提升操作系统的性能。
Description
技术领域
本发明涉及嵌入式系统领域,特别是涉及一种离散内存访问的方法及装置。
背景技术
目前,在嵌入式操作系统中通常使用一种叫做虚拟内存的技术来实现每个进程都能获得比物理内存更大的寻址空间的目的。虚拟内存是计算机系统内存管理的一种技术,它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,该连续的可用的内存通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时才进行数据交换。例如在32位的linux系统中每个进程都能寻址4G的内存空间,而通常嵌入式系统的物理内存一般都在1G以下。
在嵌入式系统中,系统级芯片(SOC,System On Chip)中还会有很多硬件加速引擎和DMA(Direct Memory Access,直接内存访问)模块独立运行于操作系统的CPU(Central Processing Unit,中央处理器)之外,例如视频编解码引擎,而这些硬件加速引擎/DMA模块对物理内存通常会采用直接访问的方式。但是嵌入式系统中软硬件协同工作的时候,CPU对物理内存分别采用了映射访问的方式,而硬件加速引擎/DMA模块对物理内存采用的是直接访问的方式。这样便出现了一个问题:随着操作系统中各进程中内存不断的分配与释放会形成许多离散的内存碎片,而包含内存碎片的在虚拟地址上连续的空间在实际的物理内存上却是离散的,这种离散的物理空间是不能被采用直接内存访问方式的硬件加速引擎/DMA模块所访问的。
目前现有技术中实现硬件加速引擎或者DMA模块对离散内存进行访问时,通常的做法是在操作系统中固定预留一块特殊的物理连续空间供硬件加速引擎/DMA模块使用,只是这样的物理连续内存在调用硬件加速引擎/DMA模块的进程终止后操作系统也是不便回收的,这样就导致物理内存的使用率显著降低,特别是对物理内存资源稀少的嵌入式系统,这样的物理内存开销也严重影响了嵌入式系统的性能。
发明内容
本发明所要解决的技术问题是,提供一种离散内存访问的方法,以解决现有技术中在实现离散内存访问时导致的物理内存的使用率显著降低的问题,进一步的也降低物理内存的大量开销给嵌入式系统的性能带来的影响。
本发明的另一个目的是将上述构思应用于具体的应用环境中,提供一种离散内存访问的,从而保证该方法的实现和应用。
为解决上述技术问题,本发明实施例提供了一种离散内存访问的方法,包括:
在当前需要进行离散物理内存访问时,接收操作系统配置的第一级TLB页表的首地址及虚拟内存地址,所述第一级TLB页表保存有第二级TLB页表的首地址;
根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表;
依据所述第二级TLB页表的首地址和所述虚拟内存地址中的第二部分,获取所述第二级TLB页表;
读取所述第二级TLB页表中的数据作为待访问的物理内存地址;
访问所述待访问的物理内存地址指向的物理内存空间。
可选的,在所述操作系统配置第一级TLB页表之后,还包括:
所述操作系统为所述第一级TLB页表和第二级TLB页表的各个表项设置表项有效标识;
则在所述接收操作系统配置的第一级TLB页表的首地址及虚拟内存地址之后、且在所述根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表之前,还包括:
依据所述第一级TLB页表的表项有效标识判断当前的第一级TLB页表的表项是否有效,如果是,则执行所述根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表的步骤;
以及,在获取所述第二级TLB页表之后,且在读取所述第二级TLB页表中的数据作为待访问的物理内存地址之前还包括:
依据所述第二级TLB表的表项有效标识判断获取的第二级TLB页表是否有效,如果是,则执行所述读取所述第二级TLB页表中的数据作为待访问的物理内存地址的步骤。
在所述访问所述待访问的物理内存地址指向的物理内存空间之后,还包括:
为所述第二级TLB页表中的物理内存地址设置唯一对应的标签,则在完成本次内存访问之后、且在下一次进行内存访问之前,还包括:
判断所述虚拟内存地址中的第一部分和第二部分是否与所述标签匹配,如果是,则将所述标签唯一对应的物理内存地址作为所述待访问的物理内存地址。
可选的,所述根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表,包括:
获取所述第一级TLB页表中的首地址指向的第一级TLB页表中的高二十位;
将所述虚拟内存地址中的高十位作为所述第一部分;
依据所述第一级TLB页表中的高二十位和所述第一部分生成所述第一级TLB页表的物理存放地址。
可选的,依据所述第一级TLB页表保存的第二级TLB页表的首地址和所述虚拟内存地址中的第二部分,获取所述第二级TLB页表,包括:
读取所述第一级TLB页表的物理存放地址对应的数据作为所述第二级TLB页表的首地址;
获取所述第二级TLB页表的首地址指向的第二级TLB页表中的高二十位;
将所述虚拟内存地址中与所述高十位相连的后十位作为所述第二部分;
依据所述第二级TLB页表中的高二十位和所述第二部分的内容生成所述第二级TLB页表的物理存放地址。
本发明实施例还提供了一种离散内存访问的装置,包括:
接收模块,用于在当前需要进行离散物理内存访问时,接收操作系统配置的第一级TLB页表的首地址及虚拟内存地址,所述第一级TLB页表保存有第二级TLB页表的首地址;
获取第一级TLB页表模块,用于根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表;
获取第二级TLB页表模块,用于依据所述第一级TLB页表保存的第二级TLB页表的首地址和所述虚拟内存地址中的第二部分,获取所述第二级TLB页表;
读取模块,用于读取所述第二级TLB页表中的数据作为待访问的物理内存地址;
访问模块,用于访问所述待访问的物理内存地址指向的物理内存空间。
可选的,还包括:
获取标识模块,用于获取操作系统为所述第一级TLB页表和第二级TLB页表的各个表项设置的表项有效标识;
第一判断模块,用于依据所述第一级TLB页表的表项有效标识判断当前的第一级TLB页表的表项是否有效;
第一触发模块,用于在所述第一判断模块的结果为是的情况下,触发所述获取第一级TLB页表模块;
第二判断模块,用于依据所述第二级TLB表的表项有效标识判断获取的第二级TLB页表是否有效;
第二触发模块,用于在所述第二判断模块的结果为是的情况下,触发所述获取第二级TLB页表模块。
可选的,还包括:
设置标签模块,用于为所述第二级TLB页表中的物理内存地址设置唯一对应的标签;
第三判断模块,用于判断所述虚拟内存地址中的第一部分和第二部分是否与所述标签匹配;
确定模块,用于在所述第三判断模块的结果为是的情况下,将所述标签唯一对应的物理内存地址作为所述待访问的物理内存地址。
可选的,所述获取第一级TLB页表模块,包括:
第一获取子模块,用于获取所述第一级TLB页表中的首地址指向的第一级TLB页表中的高二十位;
第一确定子模块,用于将所述虚拟内存地址中的高十位作为所述第一部分;
第一生成子模块,用于依据所述第一级TLB页表中的高二十位和所述第一部分生成所述第一级TLB页表的物理存放地址。
可选的,所述获取第二级TLB页表模块,包括:
读取子模块,用于读取所述第一级TLB页表的物理存放地址对应的数据作为所述第二级TLB页表的首地址;
第二获取子模块,用于获取所述第二级TLB页表的首地址指向的第二级TLB页表中的高二十位;
第二确定子模块,用于将所述虚拟内存地址中与所述高十位相连的后十位作为所述第二部分;
第二生成子模块,用于依据所述第二级TLB页表中的高二十位和所述第二部分的内容生成所述第二级TLB页表的物理存放地址。
从上述的技术方案可以看出,由操作系统建立第一级TLB页表和第二级TLB页表,通过该两级TLB页表的方式即可使得硬件加速引擎/DMA模块完成从虚拟内存地址到离散的物理内存地址的映射过程,这样就避免了现有技术中通过预留连续的一段物理内存地址才能实现物理内存访问的方式,因此就比现有技术能够显著提高物理内存的使用率,从而也减少了物理内存的开销,进一步提升操作系统的性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明方法实施例1的流程图;
图2为本发明方法实施例1中步骤104的流程图;
图3为本发明方法实施例1中步骤105的流程图;
图4为本发明方法实施例2的流程图;
图5为本发明方法实施例3的流程图;
图6为本发明装置实施例1的结构示意图;
图7为本发明装置实施例1中第一级TLB页表模块602的结构示意图;
图8为本发明装置实施例1中第二级TLB页表模块603的结构示意图;
图9为本发明装置实施例2的结构示意图;
图10为本发明装置实施例3的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,示出了本发明的一种离散内存访问的方法实施例1的流程图,可以包括以下步骤:
步骤101:当前操作系统获取虚拟内存地址和物理内存地址的映射关系。
在本实施例中,采用两级TLB(Translation Lookaside Buffer,翻译后援存储器)页表的方式实现硬件加速引擎/DMA模块对物理内存地址的映射访问。具体的,该两级TLB页表包括第一级TLB页表和第二级TLB页表,该第一级TLB页表和第二级TLB页表均由操作系统依据获取到的虚拟内存地址和物理内存地址的映射关系所建立。
步骤102:当前操作系统依据所述映射关系建立第一级TLB页表和第二级TLB页表。
在本实施例中,操作系统建立的第一级TLB页表和第二级TLB页表可以提供给硬件加速引擎/DMA模块,由其实现依据该两级TLB页表进行离散内存的访问。
为了方便本领域技术人员对于该两级TLB页表有更详细的了解,在此对于第一级TLB页表和第二级TLB页表进行举例说明。
在实际应用中,第一级TLB页表可以如表1所示,而第二级TLB页表可以如表2所示。
表1
表2
在表1中,一级TLB页表的大小可以为4K字节,由虚拟地址的31到22位可以索引到一级TLB页表,一级TLB页表的首地址为TBA。在表1中,“PEntry0(STBA0)”对应于第二级TLB页表的“二级页表0”,“PEntry1”对应于第二级TLB页表的“二级页表1”,依次类推,“PEntry1023”对应于第1024个第二级TLB页表的“二级页表1023”。其中,在表2中,以“二级页表0”为例,其大小也可以为4K字节,由虚拟地址的21到12位索引,其中,第二级TLB页表的首地址“STBA0”存放于第一级TLB页表的“PEntry0”,而对于“二级页表1”,其大小也可以为4K字节,其首地址“STBA1”存放于第一级TLB页表的“PEntry1”,以此类推,“二级页表1023”的大小也可以为4K字节,并且由虚拟地址的21到12位也可以索引到,该第二级TLB页表的首地址“STBA1023”存放于第一级TLB页表的“PEntry1023”。
在具体保存时,其中,第一级TLB页表表项(PEntry)结构可以如表3所示,第二级TLB页表表项(SEntry)结构则可以如表4所示。
表3
3112 | 11 1 | 0 |
STBA[31:12] | N/C | VLD |
表4
31 12 | 11 1 | 0 |
PPN[31:12] | N/C | VLD |
对于当前操作系统中的每一个进程来说,都有一个对应的第一级TLB页表,而每一个第一级TLB页表都可以对应1024个第二级TLB页表。
返回图1,接着进入步骤103:在当前需要进行离散物理内存访问时,接收操作系统配置的第一级TLB页表的首地址及虚拟内存地址,所述第一级TLB页表保存有第二级TLB页表的首地址。
而硬件加速引擎/DMA模块在需要进行离散物理内存访问时,首先会从操作系统处获取到操作系统配置的第一级TLB页表的首地址及虚拟内存地址,而该第一级TLB页表保存有第二级TLB页表的首地址,可以指向一个第二级TLB页表。而其中获取到的虚拟内存地址(Virtual address)的结构示意可以如表5所示:
表5
31 22 | 21 12 | 11 0 |
VADDR[31:22] | VADDR[21:12] | VADDR[11:0] |
在表5中,虚拟内存地址一共有32位比特,第一列是虚拟内存地址的高十位(从31到22位),第二列是虚拟内存地址的中间十位(从21位到12位),最后一列是虚拟内存地址的低十二位(从11位到第1位)
步骤104:根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表。
在本实施例中,该虚拟内存中的第一部分即是虚拟地址的高十位,根据第一级TLB页表的首地址和所述虚拟内存地址中的高十位可以获取到第一级TLB页表的内容。具体的,参考图2所示,为步骤104在实际应用中的流程图:
步骤201:获取所述第一级TLB页表中的首地址指向的第一级TLB页表中的高二十位;
首先,所述第一级TLB页表中的首地址指向的是第一级TLB页表中的高二十位,第一级TLB页表一共也有32位。
步骤202:将所述虚拟内存地址中的高十位作为所述第一部分;
再将获取到的虚拟内存地址中的高十位即是从31到22位作为所述第一部分;
步骤203:依据所述第一级TLB页表中的高二十位和所述第一部分生成所述第一级TLB页表的物理存放地址。
最后依据步骤201和步骤202中的字节生成如下所示的第一级TLB页表的物理存放地址:
{TBA[31:12],VADDR[31:22],2’b0}
而该物理存放地址可以直接进行读取,读取到的内容即是第一级TLB页表的存放内容,即是能够读取到第二级TLB页表的首地址。
步骤105:依据所述第二级TLB页表的首地址和所述虚拟内存地址中的第二部分,获取所述第二级TLB页表。
在本实施例中,该虚拟内存中的第二部分即是虚拟地址的中间十位,根据读取到的第二级TLB页表的首地址和所述虚拟内存地址中的中间十位可以获取到第二级TLB页表的内容。具体的,参考图3所示,为所述步骤105在实际应用中的流程图:
步骤301:读取所述第一级TLB页表的物理存放地址对应的数据作为所述第二级TLB页表的首地址;
依据所述第一级TLB页表的物理存放地址读取第一级TLB页表对应的数据,并将读取到的数据作为所述第二级TLB页表的首地址;
步骤302:获取所述第二级TLB页表的首地址指向的第二级TLB页表中的高二十位;
再根据第二级TLB页表的首地址可以获得该首地址指向的一段空间中所保存的第二级TLB页表中的高二十位;
步骤303:将所述虚拟内存地址中与所述高十位相连的后十位作为所述第二部分;
再将虚拟内存地址中的与高十位相连的后十位(即是第21位到12位)作为第二部分;
步骤304:依据所述第二级TLB页表中的高二十位和所述第二部分的内容生成所述第二级TLB页表的物理存放地址。
将所述高二十位作为第二级TLB页表的高二十位,并将所述虚拟地址的第二部分作为第二级TLB页表的次十位,并在该次十位后补两个零即可得到第二级TLB页表的物理存放地址,如下所示:
{STBAn[31:12],VADDR[21:12],2’b0}
步骤106:读取所述第二级TLB页表中的数据作为待访问的物理内存地址。
最后从读取所述第二级TLB页表的物理存放地址中的数据,并将读取到的数据作为待访问的物理内存地址,该物理内存地址(Physical address)的结构示意可以如表6所示:
表6
31 12 | 11 0 |
PPN | VADDR[11:0] |
可以从表6中看出,物理内存地址的低十二位是与虚拟内存地址的低十二位完全相同的,而其高二十位则是从第二级TLB页表的物理存放地址中读取到的数据。
步骤107:访问所述待访问的物理内存地址指向的物理内存空间。
在得到物理内存地址之后,因为该物理内存地址指向一段物理内存空间,而该物理内存空间是离散的,所以可以通过步骤106中得到的物理内存地址进行离散物理内存空间的访问。
在本实施例中,由操作系统建立第一级TLB页表和第二级TLB页表,通过该两级TLB页表的方式可使得硬件加速引擎/DMA模块完成从虚拟内存地址到离散的物理内存地址的映射过程,这样就避免了现有技术中通过预留连续的一段物理内存地址才能实现物理内存访问的方式,因此就比现有技术能够显著提高物理内存的使用率,从而也减少了物理内存的开销,进一步提升操作系统的性能。
参见图4,示出了本发明的一种离散内存访问的方法实施例2的流程图,可以包括以下步骤:
步骤401:当前操作系统获取虚拟内存地址和物理内存地址的映射关系。
步骤402:当前操作系统依据所述映射关系建立第一级TLB页表和第二级TLB页表。
步骤401~步骤402与实施例的实施方式相同,在此不再赘述。
步骤403:当前操作系统为所述第一级TLB页表和第二级TLB页表的各个表项设置表项有效标识。
本实施例与实施例1的不同之处在于,在第一级TLB页表和第二级TLB页表的各个表项中还引入了表示表项有效标志(VLD),由当前操作系统在配置第一级TLB页表和第二级TLB页表之后设置,该表项有效标志如果有效,例如设置为1,则说明该表项有效,而如果无效,例如设置为0,则说明第一级TLB页表和第二级TLB页表并不存在。
步骤404:依据所述第一级TLB页表的表项有效标识判断当前的第一级TLB页表的表项是否有效,如果是,则进入步骤405。
因此,在本实施例中,在获取第一级TLB页表之前,先判断当前进程对应的第一级TLB页表的表项是否有效,如果有效,再继续后续获取第一级TLB页表的流程。
需要说明的是,而如果操作系统并没有建立第一级TLB页表或者第二级TLB页表,则在所读取到的表项VLD为0,即是表项无效,则可以采用相应的机制(如中断)通知CPU,CPU收到通知中建立第一级TLB页表和第二级TLB页表的表项填写后再执行本发明实施例的流程。
步骤405:根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表。
本步骤与实施例1的实施方式相同,在此不再赘述。
步骤406:依据所述第二级TLB表的表项有效标识判断获取的第二级TLB页表是否有效,如果是,则进入步骤407。
同时,本实施例与实施例1的不同之处在于,还需要在获取第二级TLB页表之前判断第二级TLB页表的表项是否有效,如果有效,再继续后续获取第二级TLB页表的流程。
步骤407:依据所述第一级TLB页表保存的第二级TLB页表的首地址和所述虚拟内存地址中的第二部分,获取所述第二级TLB页表。
步骤408:读取所述第二级TLB页表中的数据作为待访问的物理内存地址。
步骤409:访问所述待访问的物理内存地址指向的物理内存空间。
步骤407~步骤409的实施方式与实施例1类似,在此不再赘述。
在本实施例中,除了可以实现显著提高物理内存的使用率,从而也减少了物理内存的开销,进一步提升操作系统的性能之外,还可以比实施例1更进一步的节省数据处理时间,并在第一级TLB页表表项或第二级TLB页表表项无效的情况下,就触发操作系统建立两级TLB页表再实现离散内存的访问,因此就更能提升操作系统的性能。
参考图5所示,示出了本发明的一种离散内存访问的方法实施例3的流程图,在本实施例中,在方法实施例1的步骤101~步骤107执行完毕之后,或者实施例2的步骤401~步骤409执行完毕之后,还可以包括以下步骤:
步骤501:为所述第二级TLB页表中的物理内存地址设置唯一对应的标签。
需要说明的是,在本实施例中,已经执行完了步骤107~步骤107的离散内存访问的流程,实现了本次内存访问之后,本实施例还可以为第二级TLB页表中的物理内存地址设置唯一对应的标签TAG,例如对于表6所示意的物理内存地址来说,即是为物理内存地址的高二十位(即是第31到12位)的PPN来设置唯一对应的标签。
其中标签与物理内存地址的高二十位的对应关系可以如表7所示:
表7
步骤502:在下一次需要进行离散物理内存访问时,判断所述虚拟内存地址中的第一部分和第二部分是否与所述标签匹配,如果是,则进入步骤503。
那么在下一次需要进行离散物理内存访问时,在获取到虚拟内存地址之后,先判断虚拟地址的高二十位VADDR[31:12](即是第一部分和第二部分)与之前设置的标签是否匹配,假设之前已经设置了k个标签,则将VADDR[31:12]依次与(TAG0~TAGk)比较,若其中至少有一项TAGi==VADDR[31:12]表示该TAG对应的物理内存地址即是与获取到的虚拟内存地址对应。
此外,考虑到一般硬件读写数据规律性的特点,硬件后续的有关VADDR[31:12]相同的访问则会直接命中某一个标签TAG,从而避免再次去物理内存读取缺失的表项。
步骤503:将所述标签唯一对应的物理内存地址作为所述待访问的物理内存地址。
在本实施例中,如果能够有某个标签与虚拟内存地址的第一部分和第二部分刚好匹配,则说明该标签对应的物理内存地址即是待访问的物理内存地址。则可以以TAGi所对应的PPNi与VADDR[11:0]拼接形成物理地址,PPNi作为物理内存地址的高二十位,而VADDR[11:0]作为物理内存地址的低十二位。
步骤504:访问所述待访问的物理内存地址指向的物理内存空间。
在本实施例中,通过标签的方式,可以使得在对已经访问过的物理内存空间再次进行访问时,可以直接通过匹配标签来看是否可以直接生成物理内存地址,这样就能节省对于离散内存访问的时间,从而在显著提高物理内存的使用率,从而也减少了物理内存的开销,进一步提升操作系统的性能的基础上,进一步提高离散内存访问的效率。
通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
相应于上面的方法实施例,本发明实施例还提供一种离散内存访问的装置。参见图6,示出了一种离散内存访问的装置实施例1的结构示意图,可以包括:
接收模块601,用于在当前需要进行离散物理内存访问时,接收操作系统配置的第一级TLB页表的首地址及虚拟内存地址,所述第一级TLB页表保存有第二级TLB页表的首地址。
获取第一级TLB页表模块602,用于根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表。
在实际应用中,参考图7所示,所述获取第一级TLB页表模块602,具体可以包括:
第一获取子模块701,用于获取所述第一级TLB页表中的首地址指向的第一级TLB页表中的高二十位;
第一确定子模块702,用于将所述虚拟内存地址中的高十位作为所述第一部分;
第一生成子模块703,用于依据所述第一级TLB页表中的高二十位和所述第一部分生成所述第一级TLB页表的物理存放地址。
获取第二级TLB页表模块603,用于依据所述第一级TLB页表保存的第二级TLB页表的首地址和所述虚拟内存地址中的第二部分,获取所述第二级TLB页表。
在实际应用中,参考图8所示,所述获取第二级TLB页表模块603,具体可以包括:
读取子模块801,用于读取所述第一级TLB页表的物理存放地址对应的数据作为所述第二级TLB页表的首地址;
第二获取子模块802,用于获取所述第二级TLB页表的首地址指向的第二级TLB页表中的高二十位;
第二确定子模块803,用于将所述虚拟内存地址中与所述高十位的后十位作为所述第二部分;
第二生成子模块804,用于依据所述第二级TLB页表中的高二十位和所述第二部分的内容生成所述第二级TLB页表的物理存放地址。
读取模块604,用于读取所述第二级TLB页表中的数据作为待访问的物理内存地址。
访问模块605,用于访问所述待访问的物理内存地址指向的物理内存空间。
在本实施例中,由操作系统建立第一级TLB页表和第二级TLB页表,通过该两级TLB页表的方式可使得硬件加速引擎/DMA模块完成从虚拟内存地址到离散的物理内存地址的映射过程,这样就避免了现有技术中通过预留连续的一段物理内存地址才能实现物理内存访问的方式,因此就比现有技术能够显著提高物理内存的使用率,从而也减少了物理内存的开销,进一步提升操作系统的性能。
参见图9,示出了一种离散内存访问的装置实施例2的结构示意图,可以包括:
接收模块601,用于在当前需要进行离散物理内存访问时,接收操作系统配置的第一级TLB页表的首地址及虚拟内存地址,所述第一级TLB页表保存有第二级TLB页表的首地址。
获取标识模块901,用于获取操作系统为所述第一级TLB页表和第二级TLB页表的各个表项设置的表项有效标识。
第一判断模块902,用于依据所述第一级TLB页表的表项有效标识判断当前的第一级TLB页表的表项是否有效。
第一触发模块903,用于在所述第一判断模块的结果为是的情况下,触发获取第一级TLB页表模块。
获取第一级TLB页表模块602,用于根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表。
第二判断模块904,用于依据所述第二级TLB表的表项有效标识判断获取的第二级TLB页表是否有效。
第二触发模块905,用于在所述第二判断模块的结果为是的情况下,触发获取第二级TLB页表模块。
获取第二级TLB页表模块603,用于依据所述第一级TLB页表保存的第二级TLB页表的首地址和所述虚拟内存地址中的第二部分,获取所述第二级TLB页表。
读取模块604,用于读取所述第二级TLB页表中的数据作为待访问的物理内存地址。
访问模块605,用于访问所述待访问的物理内存地址指向的物理内存空间。
在本实施例中,除了可以实现显著提高物理内存的使用率,从而也减少了物理内存的开销,进一步提升操作系统的性能之外,还可以比实施例1更进一步的节省数据处理时间,并在第一级TLB页表的表项或第二级TLB页表的表项无效的情况下,就触发操作系统建立两级TLB页表再实现离散内存的访问,因此就更能提升操作系统的性能。
参见图10,示出了一种离散内存访问的装置实施例3的结构示意图,可以包括:
设置标签模块1001,用于为所述第二级TLB页表中的物理内存地址设置唯一对应的标签。
第三判断模块1002,用于判断所述虚拟内存地址中的第一部分和第二部分是否与所述标签匹配。
确定模块1003,用于在所述第三判断模块的结果为是的情况下,将所述标签唯一对应的物理内存地址作为所述待访问的物理内存地址。
访问模块605,用于访问所述待访问的物理内存地址指向的物理内存空间。
在本实施例中,通过标签的方式,可以使得在对已经访问过的物理内存空间再次进行访问时,可以直接通过匹配标签来看是否可以直接生成物理内存地址,这样就能节省对于离散内存访问的时间,从而在显著提高物理内存的使用率,从而也减少了物理内存的开销,进一步提升操作系统的性能的基础上,进一步提高离散内存访问的效率。
可以理解的是,本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (8)
1.一种离散内存访问的方法,其特征在于,包括:
在当前需要进行离散物理内存访问时,接收操作系统配置的第一级TLB页表的首地址及虚拟内存地址,所述第一级TLB页表保存有第二级TLB页表的首地址;其中,所述第一级TLB页表和第二级TLB页表的各个表项由所述操作系统设置有表项有效标识;
依据所述第一级TLB页表的表项有效标识判断当前的第一级TLB页表的表项是否有效,如果是,则根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表;
依据所述第二级TLB页表的首地址和所述虚拟内存地址中的第二部分,获取所述第二级TLB页表;
依据所述第二级TLB表的表项有效标识判断获取的第二级TLB页表是否有效,如果是,则读取所述第二级TLB页表中的数据作为待访问的物理内存地址;
访问所述待访问的物理内存地址指向的物理内存空间。
2.根据权利要求1所述的方法,其特征在于,在所述访问所述待访问的物理内存地址指向的物理内存空间之后,还包括:
为所述第二级TLB页表中的物理内存地址设置唯一对应的标签,则在完成本次内存访问之后、且在下一次进行内存访问之前,还包括:
判断所述虚拟内存地址中的第一部分和第二部分是否与所述标签匹配,如果是,则将所述标签唯一对应的物理内存地址作为所述待访问的物理内存地址。
3.根据权利要求1~2任一项所述的方法,其特征在于,所述根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表,包括:
获取所述第一级TLB页表中的首地址指向的第一级TLB页表中的高二十位;
将所述虚拟内存地址中的高十位作为所述第一部分;
依据所述第一级TLB页表中的高二十位和所述第一部分生成所述第一级TLB页表的物理存放地址。
4.根据权利要求3所述的方法,其特征在于,依据所述第一级TLB页表保存的第二级TLB页表的首地址和所述虚拟内存地址中的第二部分,获取所述第二级TLB页表,包括:
读取所述第一级TLB页表的物理存放地址对应的数据作为所述第二级TLB页表的首地址;
获取所述第二级TLB页表的首地址指向的第二级TLB页表中的高二十位;
将所述虚拟内存地址中与所述高十位相连的后十位作为所述第二部分;
依据所述第二级TLB页表中的高二十位和所述第二部分的内容生成所述第二级TLB页表的物理存放地址。
5.一种离散内存访问的装置,其特征在于,包括:
接收模块,用于在当前需要进行离散物理内存访问时,接收操作系统配置的第一级TLB页表的首地址及虚拟内存地址,所述第一级TLB页表保存有第二级TLB页表的首地址;
获取标识模块,用于获取操作系统为所述第一级TLB页表和第二级TLB页表的各个表项设置的表项有效标识;
第一判断模块,用于依据所述第一级TLB页表的表项有效标识判断当前的第一级TLB页表的表项是否有效;
第一触发模块,用于在所述第一判断模块的结果为是的情况下,触发获取第一级TLB页表模块;
获取第一级TLB页表模块,用于根据所述第一级TLB页表的首地址和所述虚拟内存地址中的第一部分获取所述第一级TLB页表;
第二判断模块,用于依据所述第二级TLB表的表项有效标识判断获取的第二级TLB页表是否有效;
第二触发模块,用于在所述第二判断模块的结果为是的情况下,触发所述获取第二级TLB页表模块;
获取第二级TLB页表模块,用于依据所述第一级TLB页表保存的第二级TLB页表的首地址和所述虚拟内存地址中的第二部分,获取所述第二级TLB页表;
读取模块,用于读取所述第二级TLB页表中的数据作为待访问的物理内存地址;
访问模块,用于访问所述待访问的物理内存地址指向的物理内存空间。
6.根据权利要求5所述的装置,其特征在于,还包括:
设置标签模块,用于为所述第二级TLB页表中的物理内存地址设置唯一对应的标签;
第三判断模块,用于判断所述虚拟内存地址中的第一部分和第二部分是否与所述标签匹配;
确定模块,用于在所述第三判断模块的结果为是的情况下,将所述标签唯一对应的物理内存地址作为所述待访问的物理内存地址。
7.根据权利要求5~6任一项所述的装置,其特征在于,所述获取第一级TLB页表模块,包括:
第一获取子模块,用于获取所述第一级TLB页表中的首地址指向的第一级TLB页表中的高二十位;
第一确定子模块,用于将所述虚拟内存地址中的高十位作为所述第一部分;
第一生成子模块,用于依据所述第一级TLB页表中的高二十位和所述第一部分生成所述第一级TLB页表的物理存放地址。
8.根据权利要求7所述的装置,其特征在于,所述获取第二级TLB页表模块,包括:
读取子模块,用于读取所述第一级TLB页表的物理存放地址对应的数据作为所述第二级TLB页表的首地址;
第二获取子模块,用于获取所述第二级TLB页表的首地址指向的第二级TLB页表中的高二十位;
第二确定子模块,用于将所述虚拟内存地址中与所述高十位相连的后十位作为所述第二部分;
第二生成子模块,用于依据所述第二级TLB页表中的高二十位和所述第二部分的内容生成所述第二级TLB页表的物理存放地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210330697.XA CN102866958B (zh) | 2012-09-07 | 2012-09-07 | 一种离散内存访问的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210330697.XA CN102866958B (zh) | 2012-09-07 | 2012-09-07 | 一种离散内存访问的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102866958A CN102866958A (zh) | 2013-01-09 |
CN102866958B true CN102866958B (zh) | 2015-07-01 |
Family
ID=47445837
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210330697.XA Active CN102866958B (zh) | 2012-09-07 | 2012-09-07 | 一种离散内存访问的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102866958B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104375950B (zh) * | 2013-08-16 | 2017-08-25 | 华为技术有限公司 | 一种基于队列对通信的物理地址确定方法及装置 |
CN104731720B (zh) * | 2014-12-30 | 2018-01-09 | 杭州中天微系统有限公司 | 组相连的二级内存管理装置 |
CN104991869B (zh) * | 2015-07-31 | 2017-11-10 | 成都腾悦科技有限公司 | 一种微处理器存储管理方法 |
CN107506313B (zh) * | 2017-08-04 | 2021-06-25 | 致象尔微电子科技(上海)有限公司 | 一种管理和查找内存页框属性的方法 |
CN108491334B (zh) * | 2018-03-08 | 2020-10-23 | 北京东土科技股份有限公司 | 一种嵌入式实时系统的物理内存管理方法及装置 |
CN111143241A (zh) * | 2019-12-30 | 2020-05-12 | 深圳Tcl数字技术有限公司 | 内存数据迁移方法、装置和存储介质 |
CN111090500B (zh) * | 2020-03-23 | 2020-06-12 | 上海飞旗网络技术股份有限公司 | 存储进程管理方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101620573A (zh) * | 2009-07-03 | 2010-01-06 | 中国人民解放军国防科学技术大学 | X86体系结构内存管理单元虚拟化方法 |
CN101739359A (zh) * | 2009-12-17 | 2010-06-16 | 深圳华为通信技术有限公司 | 存储装置、移动终端及数据访问方法、调频方法 |
CN201570016U (zh) * | 2009-12-25 | 2010-09-01 | 东南大学 | 基于虚存机制的指令片上异构存储资源动态分配的电路 |
US7941631B2 (en) * | 2007-12-28 | 2011-05-10 | Intel Corporation | Providing metadata in a translation lookaside buffer (TLB) |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070061549A1 (en) * | 2005-09-15 | 2007-03-15 | Kaniyur Narayanan G | Method and an apparatus to track address translation in I/O virtualization |
-
2012
- 2012-09-07 CN CN201210330697.XA patent/CN102866958B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7941631B2 (en) * | 2007-12-28 | 2011-05-10 | Intel Corporation | Providing metadata in a translation lookaside buffer (TLB) |
CN101620573A (zh) * | 2009-07-03 | 2010-01-06 | 中国人民解放军国防科学技术大学 | X86体系结构内存管理单元虚拟化方法 |
CN101739359A (zh) * | 2009-12-17 | 2010-06-16 | 深圳华为通信技术有限公司 | 存储装置、移动终端及数据访问方法、调频方法 |
CN201570016U (zh) * | 2009-12-25 | 2010-09-01 | 东南大学 | 基于虚存机制的指令片上异构存储资源动态分配的电路 |
Also Published As
Publication number | Publication date |
---|---|
CN102866958A (zh) | 2013-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102866958B (zh) | 一种离散内存访问的方法及装置 | |
EP3716081A1 (en) | Memory protection with hidden inline metadata | |
Kim et al. | Frugal ecc: Efficient and versatile memory error protection through fine-grained compression | |
US20170286507A1 (en) | Database search system and database search method | |
US20200379902A1 (en) | Security check systems and methods for memory allocations | |
CN102830942B (zh) | 固态硬盘磁盘阵列映射的方法及其固态硬盘 | |
CN107315779A (zh) | 日志分析方法和系统 | |
US7634494B2 (en) | Flash memory directory virtualization | |
WO2021061466A1 (en) | Memory management unit, address translation method, and processor | |
CN108027713A (zh) | 用于固态驱动器控制器的重复数据删除 | |
CN110196757A (zh) | 虚拟机的tlb填写方法、装置及存储介质 | |
CN104813293A (zh) | 使用动态分配的脏掩码空间的存储器管理 | |
CN103500224A (zh) | 一种数据写入方法及装置、数据读取方法及装置 | |
CN104516822A (zh) | 一种内存访问方法和设备 | |
US10503717B1 (en) | Method for locating data on a deduplicated storage system using a SSD cache index | |
CN104346404A (zh) | 一种访问数据的方法、设备及系统 | |
US10248677B1 (en) | Scaling an SSD index on a deduplicated storage system | |
CN106649129A (zh) | 一种基于ftl的具有版本管理功能的固态硬盘及其实现方法 | |
CN103164348B (zh) | 一种多系统下对实时操作系统所占用内存的保护方法 | |
CN102360339A (zh) | 一种提高tlb利用效率的方法 | |
US6826672B1 (en) | Capability addressing with tight object bounds | |
US10339052B2 (en) | Massive access request for out-of-core textures by a parallel processor with limited memory | |
CN104317735A (zh) | 大容量缓存及数据存储和读取、内存分配和回收的方法 | |
CN103955432A (zh) | 数据存储的方法及装置 | |
CN103645995A (zh) | 写数据的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |