CN110659219B - 虚拟内存管理 - Google Patents
虚拟内存管理 Download PDFInfo
- Publication number
- CN110659219B CN110659219B CN201910567278.XA CN201910567278A CN110659219B CN 110659219 B CN110659219 B CN 110659219B CN 201910567278 A CN201910567278 A CN 201910567278A CN 110659219 B CN110659219 B CN 110659219B
- Authority
- CN
- China
- Prior art keywords
- memory
- virtual address
- virtual
- page
- address space
- 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
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/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
- G06F12/0653—Configuration or reconfiguration with centralised address assignment
-
- 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/109—Address translation for multiple virtual address spaces, e.g. segmentation
-
- 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/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0882—Page mode
-
- 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
-
- 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/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1036—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/652—Page size control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种使用一组虚拟地址空间管理对由n个内存页帧形成的物理内存的存取的方法,所述一组包括n个虚拟地址空间,每个虚拟地址空间由p个连续内存页形成,所述方法包括:接收将数据块写入到所述n个虚拟地址空间中的虚拟地址空间i内的虚拟地址的写入请求,所述虚拟地址由所述虚拟地址空间i、所述虚拟地址空间i内的内存页j和相对于所述内存页j的开始的偏移定义;使用具有n x p个条目的虚拟内存表将所述虚拟地址转换成所述物理内存的地址,所述条目指定所述虚拟地址空间的内存页和所述物理内存的内存页帧之间的映射,其中所述物理内存地址由以下定义:(i)如所述虚拟内存表指定的映射到所述内存页j的所述内存页帧,和(ii)所述虚拟地址的所述偏移;以及将所述数据块写入到所述物理内存地址。
Description
技术领域
本发明涉及通过虚拟内存寻址方案管理虚拟内存。
背景技术
有效管理对计算机内存的存取和计算机内存内的存储空间是影响例如中央处理单元(CPU)或图形处理单元(GPU)的计算机处理系统的性能的重要因素。
图1示出计算机内存100的实例区域。内存100可形成更广的计算机处理系统(图1中未示出)的部分。内存100可以例如是形成IC芯片的部分的内存(即,它可为片上内存)。内存100示出为被分割成多个块或分块1022、1024、1026、1028、10210和10212。每个块可以是内存100的最小可寻址单元。或者或另外,每个块可表示每次可以分配/解除分配的内存100的最小连续部分。
管理内存100内的块的分配的一种方法可被称作圆形管理。在圆形管理中,根据某一指定块次序,数据首先写入到块102。一旦块变满,数据就写入到由块次序指定的下一块。例如,数据可首先写入到块1024。一旦块1024变满,数据就写入到块1026,接着是块1028(一旦块1026变满)、块10210(一旦块1028变满)、块10212(一旦块10210变满),然后回到块1022(一旦块10212变满),以一种循环方式以此类推。
当内存100形成其部分的计算机处理系统的处理资源不再需要存储在块内的数据时,块可变空。当块变空时,数据可以先前存储在块中的数据为代价写入到块。例如,先前存储在块中的数据在不再需要时可以从内存中清空。或者,数据可以写入到块以覆写先前存储在那个块中的数据,而不是在不再需要数据时主动地清空数据。空闲块还可被称作解除分配块,即,可以自由重复使用且没有被分配给计算机处理系统的资源的块。
通过圆形管理,空闲块只有在它是内存中的最早块时才能随后进行重新分配;最早块即内存中保存来自先前分配的数据最长时间的块。然而,实际上,内存内的任何块都可以变空,例如,当它不再需要时。这可产生以下情形:内存含有空闲块,但是那些块无法重新分配,因为在内存中存在更早的(非空闲)块。这在图1中示意性地说明。在图1中,块1028变空,然而块1024是内存100内的最早数据块。因此,根据圆形管理方案,块1028尽管是空闲块,但是也无法重新分配。这可被称作‘环绕问题’。
缓解上述问题的一种方法是使用虚拟内存。虚拟内存使用虚拟地址空间,所述虚拟地址空间定义转换为物理内存地址(即,计算机处理系统的物理内存内的地址)的虚拟地址。计算机处理系统的资源称为虚拟内存地址(例如,在写入或读取操作中)。接着,内存管理单元可将虚拟内存地址转换为物理内存地址,以便对物理内存执行操作。
图2示出物理内存200和虚拟内存202之间的实例映射。内存200被分割成连续内存的数个块,称为内存页帧。虚拟内存202被分割成虚拟内存的多个连续块,称为页。内存200的每个内存页帧映射到虚拟内存202的相应页。内存200的内存页帧和虚拟内存202的页之间的映射可以存储在页表中。内存200的页帧和虚拟内存202的页之间的映射在图2中通过物理内存200和虚拟内存202之间的互连线加以说明。虚拟内存的页可具有与物理内存的内存页帧相等的大小(即,由相同数目个位形成),但不必如此。
虚拟地址可以由虚拟内存的页和相对于所述页指定的偏移定义。为了将虚拟地址转换为物理内存地址(为简洁起见,其在本文中可以被称为‘物理地址’),使用页表将虚拟内存的页映射到物理内存的内存页帧。接着,可根据指定的页帧和虚拟地址的偏移指定物理地址。
虚拟内存202还可使用圆形管理方案来管理,但是为了缓解环绕问题,可以使虚拟内存的地址空间大于物理内存的地址空间(即,虚拟地址可多于物理地址)。因此,相比于内存页帧,可存在更多数目个虚拟页,例如,如图2所示。这一方法可因为在内存200的特定页能够重新分配之前不需要等待这个页变空而改进内存使用。这在图2中示意性地说明。内存200的页帧和虚拟内存202的页之间的映射由互连线说明。页帧2044是内存200中的最早页帧;即,未解除分配达最长时间段的页帧。页帧2048最初映射到虚拟内存的页2066(由虚线说明)。页帧2048随后变成解除分配或空闲的内存页帧,例如,因为虚拟页2066解除分配或变空。空闲物理页帧可以任意地映射到虚拟页,因为圆形管理方案不用于物理页帧。因此,尽管不是内存200中的最早数据块,根据虚拟页的圆形管理方案,页帧2048也可以随后被分配给空闲页20614。因此,提供虚拟内存202使得页帧2048能够在最早页帧2044没有解除分配的情况下进行分配。换句话说,可以圆形方式分配虚拟内存。因为可使得虚拟地址空间大于物理地址空间,所以环绕问题在虚拟内存中发生的时间比它在圆形管理方案用于物理内存时发生的时间晚得多,从而增加在发生环绕时虚拟内存中的最早块已被释放的可能性。
因此,可了解,向虚拟内存提供比物理内存的地址空间大的地址空间可以缓解上文所描述的环绕问题。然而,这个方法仍然有一些问题。因为虚拟地址空间大于物理地址空间,所以相比于物理地址,指定虚拟地址需要更多数目个位。此外,尽管虚拟地址空间大于物理地址空间,环绕问题仍然存在(但程度更轻微)。尽管这可以通过较大的虚拟地址空间来缓解,但是增加虚拟地址空间会增加每个虚拟地址的位的数目。
发明内容
根据本公开,提供一种使用一组n个虚拟地址空间管理对由n个内存页帧形成的物理内存的存取的方法,每个虚拟地址空间由p个连续内存页形成,所述方法包括:接收将数据块写入到所述一组n个虚拟地址空间中的第一虚拟地址空间i内的第一虚拟地址的写入请求,所述第一虚拟地址由第一虚拟地址空间i、第一虚拟地址空间i内的第一内存页j和相对于第一内存页j的偏移定义;使用具有n x p个条目的虚拟内存表将第一虚拟地址转换为物理内存的地址,所述条目指定虚拟地址空间的内存页和物理内存的内存页帧之间的映射;所述物理内存地址由如虚拟内存表指定的映射到第一内存页j的内存页帧和第一虚拟地址的偏移定义;以及将所述数据块写入到物理内存地址。
每个虚拟地址空间可具有唯一地标识所述一组n个虚拟地址空间内的所述地址空间的索引,且物理内存的每个内存页帧可具有唯一地标识物理内存内的所述内存页帧的索引,每个虚拟地址空间索引映射到相应的内存页帧索引。
虚拟内存表的每个条目可与所述一组n个虚拟地址空间内的相应内存页相关。
虚拟内存表可为由n组p个连续条目形成的阵列,n组p个连续条目中的每一个与相应虚拟地址空间内的p个内存页相关。
所述方法可另外包括:如果数据块超过物理内存中映射到第一虚拟地址空间i内的第一内存页j的内存页帧的可用空间,那么:
从可用内存页帧的列表中选择另一内存页帧;
在虚拟内存表中指定所述另一内存页帧和第一虚拟地址空间i中与第一内存页j相连的第二内存页k之间的映射;以及
将所述数据块的剩余数据写入到所述另一内存页帧。
所述方法可另外包括:在数据块已写入到物理内存之后:
接收对要写入的新虚拟地址的请求;
响应于所述请求确定第二虚拟地址,所述第二虚拟地址由不同于第一虚拟地址空间i的第二虚拟地址空间I'、第二虚拟地址空间i'内的内存页j'和相对于所述内存页j'的偏移定义;以及
在虚拟内存表中指定第二虚拟地址空间i'内的第二虚拟地址的内存页j'和物理内存的内存页帧之间的映射。
所述请求可以是第一类型的请求或第二类型的请求,所述第一类型的请求请求对应于物理内存中与数据块写入的最后一个页帧相同的页帧的新虚拟地址,且第二类型的请求请求对应于物理内存的新页帧的新虚拟地址。
确定第二虚拟地址的步骤可包括:依据接收的请求类型,选择物理内存的内存页帧;以及选择具有映射到选定内存页帧的索引的索引的虚拟地址空间作为第二虚拟地址空间i'。
所述方法可另外包括:响应于接收到第一类型的请求:
选择数据块写入的最后一个内存页帧;以及
在虚拟内存表中指定所述内存页帧和第二虚拟地址空间i'中的内存页之间的映射。
确定第二虚拟地址的步骤可包括:选择具有映射到数据块写入的最后一个内存页帧的索引的索引的虚拟地址空间作为第二虚拟地址空间i'。
确定第二虚拟地址的步骤可另外包括:将第二虚拟地址的偏移设置成等于数据块的末尾相对于数据块写入的最后一个内存页帧的偏移。
确定第二虚拟地址的步骤可另外包括:选择第二虚拟地址空间i'内的终端内存页作为第二虚拟地址空间i'内的内存页j'。
所述方法可另外包括:响应于接收到第二类型的请求:
从可用内存页帧的列表中选择内存页帧;以及
在虚拟内存表中指定选定内存页帧和第二虚拟地址空间i'中的内存页之间的映射。
确定第二虚拟地址空间的步骤可包括:选择具有映射到选定内存页帧的索引的索引的虚拟地址空间作为第二虚拟地址空间i'。
确定第二虚拟地址的步骤可包括:响应于接收到第二类型的请求,将新虚拟地址的偏移设置成零。
确定第二虚拟地址的步骤可另外包括:选择第二虚拟地址空间内的终端内存页作为第二虚拟地址空间i'内的内存页j'。
作为实施图形管线的部分,可对物理内存进行存取。
物理内存可以是存储作为图形管线的部分处理的图元的图元数据的顶点缓冲器。
所述方法可另外包括:
保持每个内存页帧的计数值,所述计数值指示具有存储在所述内存页帧内的数据且在图形管线内活跃/参考的图元的数目;以及
当内存页帧的计数值指示图形管线内没有参考具有存储在所述内存页帧内的数据的图元时,将所述内存页帧添加到可用内存页帧的列表。
可提供一种用于使用一组n个虚拟地址空间管理对由n个内存页帧形成的物理内存的存取的内存管理单元,每个虚拟地址空间由p个连续内存页形成,所述内存管理单元包括:
存储单元,其用于存储具有n x p个条目的虚拟内存表,所述条目指定所述虚拟地址空间的内存页和所述物理内存的内存页帧之间的映射;以及
控制器,其配置成进行以下操作:
接收将数据块写入到所述一组n个虚拟地址空间中的第一虚拟地址空间i内的第一虚拟地址的写入请求,所述第一虚拟地址由第一虚拟地址空间i、所述第一虚拟地址空间i内的内存页j和相对于所述内存页j的偏移定义;
使用虚拟内存地址表将第一虚拟地址转换成物理内存的地址,所述物理内存地址由如虚拟内存表指定的映射到第一内存页j的内存页帧和第一虚拟地址的偏移定义;以及
将所述数据块写入到所述物理内存地址。
每个虚拟地址空间可具有唯一地标识所述一组n个虚拟地址空间内的所述地址空间的索引,且物理内存的每个内存页帧可具有唯一地标识物理内存内的所述内存页帧的索引,每个虚拟地址空间索引映射到相应的内存页帧索引。
虚拟内存表的每个条目可与所述一组n个虚拟地址空间内的相应内存页相关。
虚拟内存表可为由n组p个连续条目形成的阵列,n组p个连续条目中的每一个与相应虚拟地址空间内的p个内存页相关。
控制器可另外配置成:如果数据块超过物理内存中映射到第一虚拟地址空间i内的第一内存页j的内存页帧的可用空间,那么:
从可用内存页帧的列表中选择另一内存页帧;
在虚拟内存表中指定所述另一内存页帧和第一虚拟地址空间i中与第一内存页j相连的第二内存页k之间的映射;以及
将所述数据块的剩余数据写入到所述另一内存页帧。
内存管理单元可另外包括地址计算单元,所述地址计算单元配置成响应于控制器在数据块写入到物理内存之后接收到对新虚拟地址的请求:
确定第二虚拟地址,所述第二虚拟地址由不同于第一虚拟地址空间i的第二虚拟地址空间i'、第二虚拟地址空间i'内的内存页j'和相对于所述内存页j'的偏移定义;以及
在虚拟内存表中指定第二虚拟地址空间i'内的第二虚拟地址的内存页j'和物理内存的内存页帧之间的映射。
所述请求可以是第一类型的请求或第二类型的请求,所述第一类型的请求请求对应于物理内存中与数据块写入的最后一个页帧相同的页帧的新虚拟地址,且第二类型的请求请求对应于物理内存的新页帧的新虚拟地址。
地址计算单元可配置成通过以下操作来确定第二虚拟地址:
依据接收到的请求类型选择所述物理内存的内存页帧;以及
选择具有映射到选定内存页帧的索引的索引的虚拟地址空间作为第二虚拟地址空间i'。
地址计算单元可配置成响应于控制器接收到第一类型的请求:
选择数据块写入的最后一个内存页帧;以及
在虚拟内存表中指定所述内存页帧和第二虚拟地址空间i'中的内存页之间的映射。
地址计算单元可配置成选择具有映射到数据块写入的最后一个内存页帧的索引的索引的虚拟地址空间作为第二虚拟地址空间i'。
地址计算单元可配置成将新虚拟地址的偏移设置成等于数据块的末尾相对于数据块写入的最后一个内存页帧的偏移。
地址计算单元可配置成选择第二虚拟地址空间i'内的终端内存页作为第二虚拟地址空间i'内的内存页j'。
地址计算单元可配置成响应于控制器接收到第二类型的请求:
从可用内存页帧的列表中选择内存页帧;以及
在虚拟内存表中指定选定内存页帧和第二虚拟地址空间i'中的内存页之间的映射。
地址计算单元可配置成响应于接收到第二类型的请求而将新虚拟地址的偏移设置成零。
地址计算单元可配置成选择具有映射到选定内存页帧的索引的索引的虚拟地址空间作为第二虚拟地址空间i'。
地址计算单元可配置成选择第二虚拟地址空间内的终端内存页作为第二虚拟地址空间i'内的内存页j'。
内存管理单元可形成配置成实施图形管线的图形处理系统的部分,作为实施图形管线的部分,所述内存管理单元配置成对物理内存进行存取。
物理内存可以是存储作为图形管线的部分处理的图元的图元数据的顶点缓冲器。
内存管理单元可另外包括多个计数器,所述计数器用于保持每个内存页帧的计数值,所述计数值指示具有存储在所述内存页帧内的数据且在图形管线内活跃/参考的图元的数目,所述控制器配置成当内存页帧的计数值指示在图形管线内没有参考具有存储在所述内存页帧内的数据的图元时将所述内存页帧添加到可用内存页帧的列表。
可提供一种配置成执行本文中的任一种方法的内存管理单元。
内存管理单元可在集成电路上体现为硬件。
可提供使用集成电路制造系统制造根据本文中的任一个实例的内存管理单元的方法。
可提供一种使用集成电路制造系统制造根据本文中的任一个实例的内存管理单元的方法,所述方法包括:
使用布局处理系统处理图形处理系统的计算机可读描述,以便产生体现内存管理单元的集成电路的电路布局描述;以及
根据电路布局描述使用集成电路产生系统制造内存管理单元。
可提供用于执行本文中的任一种方法的计算机程序代码。
可提供一种在其上存储有计算机可读指令的非暂时性计算机可读存储介质,所述计算机可读指令在计算机系统处执行时使计算机系统执行本文中的任一种方法。
可提供一种集成电路定义数据集,所述集成电路定义数据集在集成电路制造系统中处理时配置集成电路制造系统以制造根据本文中的任一个实例的内存管理单元。
可提供一种在其上存储有根据本文中的任一个实例的内存管理单元的计算机可读描述的非暂时性计算机可读存储介质,所述计算机可读描述在集成电路制造系统中处理时使集成电路制造系统制造体现内存管理单元的集成电路。
可提供一种在其上存储有根据本文中的任一个实例的内存管理单元的计算机可读描述的计算机可读存储介质,所述计算机可读描述在集成电路制造系统中处理时使集成电路制造系统进行以下操作:
使用布局处理系统处理内存管理单元的计算机可读描述,以便产生体现内存管理单元的集成电路的电路布局描述;以及
根据电路布局描述使用集成电路产生系统制造内存管理单元。
可提供一种配置成制造根据本文中的任一个实例的内存管理单元的集成电路制造系统。
可提供一种集成电路制造系统,包括:
非暂时性计算机可读存储介质,其上存储有根据本文中的任一个实例的内存管理单元的计算机可读描述;
布局处理系统,其配置成处理所述计算机可读描述以便产生体现所述内存管理单元的集成电路的电路布局描述;以及
集成电路产生系统,其配置成根据所述电路布局描述制造所述内存管理单元。
附图说明
现在将参考附图详细描述实例,在附图中:
图1示出被分割成块的物理内存的实例;
图2示出虚拟内存的页和物理内存的页帧之间的映射的示意性图示;
图3示出图形处理系统;
图4示出虚拟内存和物理内存;
图5示出图3的图形处理系统的内存管理单元的更详细视图,包含存储的虚拟内存表和物理内存表的示意性图示;
图6示出虚拟内存页的阵列和虚拟内存表之间的关系;
图7是响应于接收到写入请求由控制器执行写入到物理内存的写入操作的步骤的流程图;
图8示意性地说明将本公开的虚拟地址转换成物理内存的地址;
图9示出当要写入的数据跨越多个页帧时写入到物理内存的写入操作的步骤的流程图;
图10示出当写入跨越两个页帧的数据块时虚拟内存表如何更新的实例;
图11示出响应于在写入操作之后接收到对新虚拟地址的第一类型的请求虚拟内存表如何更新的实例;
图12示出响应于在写入操作之后接收到对新虚拟地址的第二类型的请求虚拟内存表如何更新的实例;
图13示出响应于接收到对新虚拟内存地址的请求而执行的步骤的流程图;
图14示出集成电路制造系统。
具体实施方式
本公开涉及一种虚拟内存寻址方案。虚拟内存寻址方案对由一组n个虚拟地址空间形成的虚拟内存进行寻址。每个虚拟内存地址空间由p个连续虚拟内存页(为简洁起见,本文中将其简称为‘页’)形成。页可以映射到物理内存的页帧。物理内存被分割成n个页帧;即,在此实例中,虚拟地址空间的数目等于物理内存的页帧的数目。物理内存的n个页帧可以是连续的。应注意,在本文中详细描述的实例中,虚拟地址空间的数目等于物理内存的页帧的数目,但是更一般来说,虚拟地址空间的数目可以等于或大于物理内存的页帧的数目。
虚拟内存的虚拟地址由虚拟地址空间和所述虚拟地址空间内的页同时指定。因此,例如,具有相等页索引但是属于不同虚拟地址空间的页形成不同虚拟地址。这与常规虚拟内存寻址方案不同,在常规虚拟内存寻址方案中,映射到物理内存的虚拟内存仅由单个虚拟地址空间形成,所述单个虚拟地址空间由多个连续页形成。
虚拟内存的页和物理内存的页帧之间的映射在虚拟内存表中指定。虚拟内存表含有n x p个条目(即,n×p个条目),其中每个条目对应于虚拟内存的相应页。也就是说,虚拟内存表的每个条目与虚拟内存的相应页相关。每个条目可存储虚拟内存的对应页和物理内存的页帧之间的单个映射。虚拟内存可布置为阵列。阵列可由n组p个连续条目构成,其中每一组p个连续条目与相应虚拟地址空间内的p个连续页相关。
使用虚拟内存表将虚拟内存的地址转换成物理内存地址。如将在下文更详细地阐释,提供由多个地址空间形成的虚拟内存能够避免上文所描述的环绕问题,每个地址空间由多个页形成。所公开的虚拟内存寻址方案的各个其它优点将在下文加以解释。
在以下实例中,虚拟内存寻址方案将在图形处理系统的上下文中加以描述。应了解,这仅仅是出于说明的目的,并且本公开的原理可以同等地应用在其它计算机处理系统内。
图3示出图形处理系统300中可用于处理图形数据以呈现场景(例如,3D场景)的图像的一些元件。
图形处理系统300是基于图块的图形系统。基于图块的图形处理系统通常有两个操作阶段:几何结构处理阶段和呈现阶段。在几何结构处理阶段中,分析用于呈现的图形数据,以便针对每一个图块确定哪些图形数据项存在于所述图块内。接着,在呈现阶段中,图块可以通过处理那些确定存在于所述图块内的图形数据项来呈现(而不需要处理在几何结构处理阶段中确定不存在于特定图块内的图形数据项)。图形数据项可表示几何形状,其描述场景中的结构的表面并且被称为“图元”。常见的图元形状是三角形,但是图元可以是其它2D形状,或者还可以是线或点。对象可由一个或多个(例如,数百、数千或数百万)此类图元构成。
图形处理系统300包括图形处理单元(GPU)302和内存304的一部分。
GPU 302包括预处理模块306、平铺单元308、内存管理单元(MMU)318、内存部分320和呈现逻辑310。内存部分320可被称作片上内存。它是物理内存。内存部分320存储由平铺单元308产生的数据以供呈现逻辑310使用。内存部分320可包含一个或多个缓冲器。在此实例中,内存部分320包含顶点缓冲器324和图块列表缓冲器326。
平铺单元308使用虚拟内存寻址方案将数据写入内存部分320。MMU 318用以通过将内存320内的页帧适当地指派到通过平铺单元308寻址的虚拟内存的页而管理内存部分320内的内存的分配。MMU 318还用以将平铺单元308参考的虚拟地址转换成内存部分320的地址,使得数据能够从平铺单元写入到内存320。这将在下文更详细地解释。
呈现逻辑310包括获取单元312、包含处理核心3141-6的处理逻辑313和调度逻辑316。呈现逻辑310配置成使用处理核心314来实施呈现空间的图块的图形数据(例如,图元片段)上的隐藏表面去除(HSR)和纹理化和/或着色。尽管在此实例中,呈现逻辑示出为包含六个处理核心,但是应了解,一般来说,呈现逻辑可包含一个或多个处理核心,例如,在1到256的范围内,或甚至更高。呈现逻辑310中的处理核心的数目可调适成适于图形处理系统的预定用途(例如,用于对处理资源和硅大小具有严格约束的小型移动装置的图形处理系统可包含少量处理核心(例如,6个处理核心),而用于例如PC或服务器的对处理资源和硅大小具有不太严格的约束的大型装置的图形处理系统可包含大量处理核心(例如,128个处理核心))。
图形处理系统300布置成使得由应用程序提供的一系列图元在预处理模块306处接收。在几何结构处理阶段中,预处理模块306执行功能,例如包含修剪和剔除的几何结构处理,以便去除未落入可见视图中的图元。预处理模块306还可将图元投影到屏幕空间中。从预处理模块306输出的图元被传递到平铺单元308,平铺单元308确定哪些图元存在于图形处理系统300的呈现空间中的每一个图块内。平铺单元308通过形成呈现空间的图块的控制流(或“显示列表”)来向图块指派图元,其中图块的控制流包含存在于图块内的图元的指示。
图元的控制流和数据从平铺单元308输出并存储于内存320中。控制流存储在图块列表缓冲器326中。在控制流中指示的图元的数据存储在顶点缓冲器324中。图元数据可组织成图元块。每个图元块可含有一组图元的索引列表和那些图元的顶点的顶点数据。顶点数据可包含例如顶点坐标。图元块的使用便于使得在相同图元块内的图元之间共享的顶点的顶点数据在顶点缓冲器中仅存储一次,从而降低内存要求。
因此,总体而言,顶点缓冲器324可存储多个图元块,且图块列表缓冲器326可存储指示每个图块的至少部分地定位在所述图块内的图元的控制流。每个控制流可通过图元ID指示位于图块内的图元,其中每个图元ID由以下形成:(i)图元块ID,其指示图元位于其中的图元块,和(ii)块内ID,其标识所述图元块内的图元。以此方式,每个图块的控制流可参考位于所述图块内的图元的图元块。
为了将控制流和图元数据写入到内存320,平铺单元308可发出一个或多个写入请求。每个写入请求可请求将数据块写入到虚拟内存地址。每个写入请求由MMU 318接收,MMU318用以将所述请求中指定的虚拟内存地址转换成内存320的地址,使得数据块能够写入到内存320。
在呈现阶段中,呈现逻辑310呈现呈现空间的图块的图形数据,以产生呈现值,例如,呈现图像值。呈现逻辑310可配置成实施任何合适的呈现技术。在此实例中,呈现逻辑实施光栅化以执行呈现,但是在其它实例中,可执行光线追踪。为了呈现图块,获取单元312从内存320获取图块的控制流和与所述图块相关的图元。
获取单元312使用虚拟内存寻址方案从内存320获取数据。为了获取图块的控制流和图元数据,获取单元可发出一个或多个读取请求。读取请求在本文中也可称为获取请求。获取单元312发出的从内存320获取数据的获取请求由MMU 318接收。每个请求可以是对存储在特定虚拟内存地址处的数据的请求。MMU 318用以将虚拟内存地址转换成内存320的地址,使得存储在所述转换地址处的数据能够被获取并被传递到获取单元312。
呈现单元310可根据延迟呈现技术实施光栅化,使得使用处理核心314中的一个或多个执行隐藏表面去除,从而去除隐藏在场景中的图元的片段,然后使用处理核心314中的一个或多个向剩余图元片段应用纹理化和/或着色,从而形成呈现图像值。术语“片段”是指在采样点处的图元的样本,所述样本将进行处理以呈现图像像素。在一些实例中,可存在样本位置到像素的一对一映射。在其它实例中,可存在比像素更多的样本位置,且这一过采样可以用更高质量呈现像素值,例如,通过促进可以应用到多个片段以呈现像素值中的每一个的抗混叠和其它滤波。对经过HSR阶段的片段执行的纹理化和/或着色确定呈现图像的像素颜色值,所述值可以被传递到内存304以便存储在帧缓冲器中。纹理数据可在呈现逻辑310处从内存320接收,以便向图元片段应用纹理化。可以执行着色器程序以向图元片段应用着色。纹理化/着色过程可包含向图元片段应用其它处理(例如,α混合和其它过程),以确定图像的呈现像素值。呈现逻辑310处理每一个图块中的图元,并且当整个图像已被呈现并存储于内存304中时,呈现图像可从图形处理系统300输出并以任何合适的方式使用,例如,在显示器上显示或在内存中存储或传输到另一装置等等。
在一些系统中,特定处理核心可用于在一个时间点执行隐藏表面去除,并在另一时间点执行纹理化/着色。在一些其它系统中,处理核心中的一些专用于执行隐藏表面去除,而处理核心中的其它处理核心专用于对图元片段执行纹理化和/或着色。
上文所描述的图形处理系统300是延迟呈现系统,因为呈现逻辑310配置成在向图元片段应用纹理化/着色处理之前对图元片段执行HSR处理。其它图形处理系统不是延迟呈现系统,因为它们配置成在对图元片段执行HSR之前执行那些图元片段的纹理化和/或着色。延迟呈现系统避免了在向通过隐藏表面去除过程去除的图元片段中的至少一些应用纹理化和/或着色时所涉及的处理。
如果呈现逻辑310包含超过一个处理核心314,那么处理核心可同时处理不同数据,从而提高呈现逻辑310的效率。在一些系统中,图块被指派给呈现逻辑110的处理核心,使得用于呈现特定图块的图形数据在单个处理核心中进行处理。用于呈现不同图块的图形数据可由不同的单个处理核心处理。在单个处理核心上处理特定图块(而不是横跨多个核心展开特定图块的处理)可具有例如提高高速缓存命中率的益处。多个图块可指派给相同处理核心,这个处理核心可称为具有“多个飞行图块”。当用于呈现的所有图块都已经被呈现逻辑310处理时,呈现完成。接着,呈现的结果(例如,呈现帧)可适当地使用(例如,在显示器上显示或在内存中存储或传输到另一装置等),并且呈现逻辑310可处理随后呈现的图块。图块到处理核心的分配受调度逻辑316控制。
现将更详细地描述通过图形处理系统300实施的虚拟内存寻址方案。将参考虚拟内存和物理内存顶点缓冲器324之间的映射描述寻址方案。应了解,这仅仅是出于说明的目的,并且以下技术同等地应用于内存部分320内的其它缓冲器,例如图块列表缓冲器326。
图4示出可通过平铺单元308和获取单元312寻址的物理顶点缓冲器内存324和虚拟内存402的示意性图示。
顶点缓冲器324被分割成n个页帧。每个页帧是缓冲器324的物理内存的连续块。n个页帧可以是内存的连续块(如此实例中所示),但无需如此。每个页帧可存储从平铺单元308写入的一个或多个图元块。
虚拟内存402由n个单独的虚拟地址空间形成。换句话说,在此实例中,虚拟内存402的虚拟地址空间的数目等于缓冲器324的页帧的数目。每个虚拟地址空间是可以寻址的一系列虚拟地址。每个虚拟地址空间由表示为Pageij的多个连续页形成。索引i表示页Pageij形成部分的虚拟地址空间,且索引j表示所述虚拟地址空间内的页。
每个虚拟地址空间中的连续页的数目表示为p,其中p是大于1的整数。因此,在虚拟内存中总共存在n x p个虚拟页。p的值可随着实施方案而变化。在一些实例中,p可以等于2。在其它实例中,p可以等于3、4、5或某一其它整数。在其它实例中,p可以是更大的值,例如,大于10、20、50等。p的值可选择成使得虚拟地址空间大到足以容纳系统所支持的最大分配。如果最大分配在pmax个页内,那么p可以设置成pmax+1,使得最大分配可开始于虚拟地址空间的第一页内的任何位置。在此实例中,虚拟内存的页的大小(即,位大小)等于内存页帧的大小。在其它实例中,虚拟页和内存页帧的大小可以是不同的。
虚拟地址空间彼此独立。也就是说,每个虚拟地址空间定义的一系列虚拟地址独立于由虚拟内存中的另一虚拟地址空间定义的一系列虚拟地址。因此,虚拟内存402内的最大连续分配大小(以位为单位表示)等于pxPageSize,其中PageSize是虚拟内存的页的位大小。因为每个地址空间是独立的,所以虚拟内存402的虚拟地址部分地由虚拟地址空间和所述虚拟地址空间内的页的组合定义。相对于虚拟地址空间中的页的开始的偏移可完全定义虚拟地址。换句话说,虚拟地址由以下定义:i)虚拟地址空间;ii)所述虚拟地址空间内的页;以及ⅲ)相对于所述页的开始的偏移。偏移被限制在页内。偏移的大小等于虚拟内存的最小可寻址单元的整数倍数,其中整数倍数采用一组在0到K-1范围内的指定值中的一个,其中K的值使得偏移被约束在页内。例如,虚拟内存的最小可寻址单元可以是字节。在此情况下,值K表示页的字节大小。因此,每个虚拟地址的位大小等于log2(p*n*K)。
缓冲器324的每个页帧可与唯一地标识所述一组n个页帧内的所述页帧的索引相关。在此实例中,页帧索引的值在0到n-1范围内。虚拟内存402的每个虚拟地址空间还与标识所述一组n个虚拟地址空间中的所述虚拟地址空间的索引相关。在此实例中,虚拟地址空间索引的值在0到n-1的范围内。每个页帧索引映射到相应的虚拟地址空间索引。因此,缓冲器324的每个页帧映射到相应的虚拟地址空间或与其相关。缓冲器324的每个页帧可以唯一地映射到相应的虚拟地址空间;即,缓冲器324的页帧和虚拟地址空间之间可存在一对一映射。缓冲器324的页帧和虚拟地址空间之间的映射可以是固定的。每个页帧索引可以唯一地映射到相应的虚拟地址空间索引。索引可以根据某一指定映射进行映射。在本实例中,索引进行映射,使得页帧0与虚拟地址空间0相关;页帧1与虚拟地址空间1相关,以此类推。换句话说,根据本文中所描述的实例,页帧i与地址空间i相关。
页帧索引和虚拟地址空间索引之间的映射控制页帧如何映射到虚拟内存的页。这将在下文更详细地描述。
MMU 318用以通过使用虚拟内存表管理缓冲器324中的页帧到虚拟内存402的页的分配。
图5示出MMU 318的更详细视图。MMU 318示出为连接到平铺单元308、内存部分320和获取单元312。为了清楚起见,已经省略图形处理系统的其它部件。
MMU 318包括控制器502、地址产生单元504(其在本文中可以被称为“地址计算单元”504)、多个计数器506和存储单元508。
存储单元508存储虚拟内存表510、物理内存表512和空闲页帧列表514。
虚拟内存表510指定缓冲器324的页帧和虚拟内存402的页之间的映射。虚拟内存表510含有n x p个条目。虚拟内存表的每个条目对应于虚拟内存的相应页。也就是说,虚拟内存表的每个条目与虚拟内存的相应页相关。虚拟内存表510中的每个条目可存储虚拟内存的对应页和缓冲器324的页帧之间的单个映射。
虚拟内存表510布置为由n组p个连续条目形成的阵列。换句话说,虚拟内存表510布置为由数组p个连续条目形成的阵列,其中p个连续条目的组数等于缓冲器324中的页帧的数目n。每一组p个连续条目与虚拟内存402的相应虚拟地址空间内的p个连续页相关或对应。因此,虚拟内存表中的每一组p个连续条目与相应的虚拟地址空间相关。一组中的p个条目中的每一个与和所述一组相关的虚拟地址空间内的相应页相关。
在此处说明的实例中,虚拟内存表是由n行和p列形成的2D阵列;即,每一行由p个条目形成的n行。内存表中的每一条目行与相应的虚拟地址空间相关,其中所述行内的每个条目与所述虚拟地址空间内的对应页相关。应了解,在其它实例中,虚拟内存表可为由p行和n列(即,每一列由p个条目形成的n列)形成的阵列,在此情况下,虚拟内存表的每一列将与相应的虚拟内存地址空间相关。
虚拟内存402和虚拟内存表510之间的关系在图6中说明。
虚拟内存402的页Pageij和虚拟内存表510的条目Pij之间存在一对一关联。通过这种方式,虚拟内存表510通过它的n组p个连续条目(在此实例中,它的n行p个条目中的每一个)标识n个不同虚拟地址空间,且通过对应于所述虚拟地址空间的所述一组的p个条目标识虚拟地址空间内的p个页中的每一个。
此一对一关联在图6中说明,其中虚拟内存402的页Page01示出为与虚拟内存表510的条目P01相关,且虚拟内存402的页Pagen-1,p-1示出为与虚拟内存表510的条目Pn-1,p-1相关。因此,条目P01指定页Page01和物理内存的页帧之间的映射,条目Pn-1,p-1指定页Pagen-1,p-1和物理内存的页帧之间的映射。应了解,尽管虚拟内存的每个页与虚拟内存表中的相应条目相关,但是出于清楚起见,在图6中仅明确示出两个此类关联。
返回参考图5,物理内存表512含有n个条目,每个条目含有缓冲器324的相应页帧的指示。每个页帧指示可以是页帧地址或者是页帧地址的参考。表512还存储一组n个参考计数值。每个参考计数值与相应页帧相关。参考计数值可由MMU 318内的计数器506维持。页帧的参考计数值可指示在存储于所述页帧内的每一个图元块内的在图形处理单元300内活跃(即,由图形处理单元300处理)的图元的数目。也就是说,参考计数值可指示在存储于所述页帧内的每一个图元块内的由图形处理单元300进行的处理尚未完成的图元的数目。当页帧的参考计数值指示存储于所述页帧内的图元块内没有正在由图形处理单元300处理的图元(即,图形处理单元300已经完成它对存储于页帧内的图元块内的所有图元的处理)时,所述页帧被由控制器502添加到空闲页帧列表514。参考计数值为零可指示页帧可以添加到空闲页帧列表。
空闲页帧列表514标识缓冲器324内的每个空闲页帧。‘空闲’页帧还可被称作解除分配的页帧。空闲页帧是可以重新分配的页帧。换句话说,空闲页帧是可以(例如,从平铺单元308)写入新数据的页帧。空闲页帧可以仅指代其中整个页帧解除分配/可以重新分配的页帧。因此,当在空闲页帧列表514中标识页帧时,所述页帧可以自由进行重新分配。
当在空闲页帧列表514上标识的页帧重新分配时(例如,当新数据写入到所述页帧时,或者当页帧映射到虚拟内存402的页时),页帧从空闲页帧列表去除。空闲页帧列表的管理(即,将页帧添加到列表和从列表去除页帧)可以受控制器502控制。
现将参考图7中说明的流程图描述MMU 318响应于来自平铺单元308的写入请求而将数据块写入到缓冲器314的操作。
在步骤702,MMU 318从平铺单元308接收将数据块写入到虚拟内存地址的写入请求。数据块可以是图元块数据。写入请求可以在控制器502处接收。虚拟内存地址对虚拟内存402的区域进行寻址。虚拟内存地址由虚拟地址空间i、虚拟地址空间i内的内存页j和相对于内存页j的偏移定义。虚拟地址空间i内的页j是Pageij。
在此实例中,为了说明,虚拟地址空间i为虚拟地址空间0,虚拟地址空间i内的内存页j为虚拟地址空间0内的页0,即Page00。因此,在此实例中,虚拟地址由Page00和相对于Page00的偏移定义。
在步骤704,控制器502使用虚拟内存表510将虚拟地址空间i的内存页j(在此实例中,Page00)映射到内存的页帧而将虚拟地址转换成物理内存(在此实例中,缓冲器324)的地址。
为了将虚拟地址转换成物理内存地址,控制器502可首先存取虚拟内存表510,以鉴定Page00和内存324的页帧之间的映射是否已经指定。控制器502可存取虚拟内存表510的与虚拟内存的页Page00相关的条目。在此实例中,虚拟内存表510的与Page00相关的条目是条目P00。如果虚拟内存表的条目P00未指定Page00和内存324的页帧之间的映射,那么控制器可从空闲页帧的列表514选择页帧,并更新虚拟内存表510以指定虚拟内存402的Page00和内存324的选定页帧之间的映射。表可以通过更新与Page00相关的条目来进行更新,以指定所述页和内存324的选定页帧之间的映射。接着,使用内存324的映射到Page00的选定页帧产生物理内存地址。
如果虚拟内存表510的与虚拟内存402的Page00相关的条目P00指定Page00-和内存324的页帧之间的映射,那么使用内存的所述页帧产生物理内存地址。
在本实例中,假设Page00映射到内存324的页帧0。
图8说明控制器502如何将虚拟内存地址转换成缓冲器324的地址。
虚拟内存地址在802处说明。虚拟内存地址由虚拟地址空间0和804处标识的虚拟地址空间0内的页0(即,Page00)以及相对于Page00的偏移806定义。控制器502存取虚拟内存表510的与Page00相关的条目,所述条目是条目P-00,表示为808。虚拟内存表510的条目P00指定所述Page00映射到内存314的页帧0。接着,控制器502使用物理内存表512存取映射到Page00的页帧0的地址。换句话说,控制器502使用虚拟内存表510识别映射到虚拟内存402的Page00的页帧(在此实例中,页帧0)。控制器可接着存取物理内存表512,以确定所标识的页帧0的地址。应注意,出于清楚起见,在图8中省略了存储在物理内存表512中的参考计数值。接着,控制器根据页帧0的地址和偏移806产生缓冲器324的物理内存地址810。换句话说,转换的物理内存地址810由如虚拟内存表510指定的映射到虚拟内存402的Page00的页帧和虚拟内存地址802的偏移定义。
在根据接收到的虚拟内存地址802产生物理内存地址810后,在步骤706,控制器502将数据块写入到缓冲器324的物理内存地址810。
在一些情形下,请求写入到虚拟内存地址的数据块将超过页帧的可用空闲空间。当发生这种情形时,MMU 318选择物理内存314的新页帧,以便继续将数据块写入到物理内存。现将参考图9中的流程图描述在这些情形中的控制器的操作。
在步骤902,控制器502开始将数据块写入到映射到虚拟地址空间i中的虚拟内存页j的页帧。继续先前的实例,控制器开始将数据块写入到缓冲器324中映射到由虚拟地址指定的虚拟页P00的页帧0。
在步骤904,控制器502确定在写入操作完成之前是否已到达页帧0的末尾。换句话说,确定在所有数据块都被写入到缓冲器之前是否到达页帧0的末尾(即,所述页帧和缓冲器324的下一页帧之间的边界)。如果在到达页帧0的边界之前完成写入操作,那么过程结束(步骤906)。
如果控制器502确定在数据块结束写入到内存之前(即,在写入操作完成之前)已到达页帧0的末尾,那么控制器选择缓冲器324的新页帧(即,“另一页帧”)(步骤908)。
控制器502从可用空闲页帧的列表514选择所述另一页帧。
在步骤910,控制器更新虚拟内存表510,以指定选自空闲页帧列表514的所述另一页帧和虚拟地址空间i中与先前内存页j相连的第二内存页k之间的映射。在每个虚拟地址空间内,如果数据要写入到多个内存页,那么数据根据指定次序依序写入到内存页。要写入的每个内存页与已写入的先前内存页相连。也就是说,在写入操作期间,如果虚拟地址空间内的内存页变满,那么数据写入到与所述内存页相连的下一内存页。在本文中所描述的实例中,虚拟地址空间内的页帧pageij以j增序写入。通过这种方式,可以知道与先前内存页j相连的内存页k将是空闲的。控制器通过更新与和先前页j相连的页k相关的条目来更新虚拟内存表510,以指定页k和缓冲器324的所述另一页帧之间的映射。
在步骤912,控制器开始将数据块的剩余数据写入到缓冲器324的选定另一页帧。
步骤910和912在图10中说明。如上文所描述,数据块最初写入到缓冲器324的页帧0,页帧0映射到虚拟内存的Page00(即,地址空间i的页j)。虚拟内存表510的与Page00相关的条目(条目P00)指定Page00和页帧0之间的这一映射(在1002处表示)。当在整个数据块写入到缓冲器324之前到达页帧0的末尾时,控制器502从可用页帧的列表选择额外页帧来继续写入。在此处的实例中,在空闲页帧列表514中列出的可用页帧包含缓冲器324的页帧2和页帧5。在当前实例中,控制器502选择页帧2作为要写入的所述另一页帧。
接着,控制器更新虚拟表510,以指定选定页帧2和虚拟内存中与Page00相连的下一页之间的映射,所述下一页如图4和6中所示是Page01。Page01与Page00处于相同虚拟地址空间(虚拟地址空间0)中并且相连(即,Page01是页k)。控制器502通过在与Page01相关的表条目中指定缓冲器324的页帧2和虚拟内存402的Page01之间的映射来更新虚拟内存表510,所述表条目在此实例中是条目P01,如图6中所说明。指定这一映射的更新表条目在图10中1004处示出。接着,页帧2可从空闲页帧列表514中的可用页帧列表去除。
因此,控制器502将数据块写入到缓冲器324中通过虚拟内存表510映射到单个虚拟内存地址空间内的虚拟内存402的连续页的多个(可能不连续)页帧。
步骤904到912可以重复进行,直到整个数据块写入到缓冲器324为止。
以上实例说明在响应于接收到写入请求而由MMU 318执行的写入操作期间可以如何将数据块写入到缓冲器324。出于说明的目的,在这些实例中假设在缓冲器324中存在足够的内存可以用于存储写入请求的数据(即,存在足够的内存可以用于完成写入操作)。然而,应了解,在一些情况下,MMU 318可能接收写入超过缓冲器324中的可用内存的数据块的写入请求。为了处理这些情形,响应于接收到每个写入请求,MMU 318可以确定缓冲器324内是否存在足够的可用内存(例如,足够数量的空闲页帧)来完成写入操作(即,写入在写入请求中指示的数据块)。这个步骤可在步骤702之后且在步骤704之前由MMU执行。要写入的数据块的大小可在写入请求中指示,这可使得MMU 318能够确定在缓冲器324中是否存在足够的可用内存来完成写入操作。这一确定可由控制器502作出。
如果确定在缓冲器324中存在足够的可用内存来完成写入操作,那么MMU 318前进到执行根据上述实例的写入操作。响应于确定在缓冲器324中没有足够的可用内存来完成写入操作,MMU 318可暂停执行写入操作,直到在缓冲器324中有足够内存可用于完成写入操作为止。也就是说,一旦确定在内存324中存在足够的内存可以用于完成写入操作,MMU318就只能前进到执行步骤704:将虚拟地址转换成物理内存地址和/或开始将数据块写入缓冲器324。或者,MMU 318可前进到使用缓冲器内的可用空间开始将数据块写入到缓冲器324,以及在缓冲器变满的情况下暂停写入操作,等待其它内存变得可用。也就是说,响应于确定缓冲器324中没有足够的可用内存来完成写入操作,如果缓冲器324中存在可用的——尽管不够充足——内存,MMU 318可开始写入操作。接着,当缓冲器324中不再存在任何可用内存时MMU可暂停写入操作,并且在缓冲器内有内存变得可用后恢复写入操作。暂停和恢复写入操作的过程可一直继续到写入操作完成为止(即,直到写入请求中指示的所有数据块都被写入到缓冲器324为止)。
在写入操作完成之后(即,在数据块写入到缓冲器324之后),控制器502从平铺单元308接收对要写入的新虚拟内存地址的请求。控制器502可在每个写入操作完成之后接收此类请求。
提交给控制器502的请求可以是两种类型中的一种。第一类型的请求是对映射到缓冲器324中与先前(即,最近)数据块写入的最后一个页帧(即,在最后一个写入操作中数据块写入的最后一个页帧)相同的页帧的新虚拟内存地址的请求。此处,最后一个页帧是指含有先前数据块的末尾的页帧,即最近写入的页帧。
第二类型的请求是对映射到缓冲器324的新页帧的新虚拟内存地址的请求。新页帧是指不同于含有先前写入的数据块的末尾的页帧的页帧。
现将参考图13中的流程图描述响应于接收到请求而产生这些额外虚拟内存地址的方法。
在步骤1302,控制器502接收对要写入的新虚拟内存地址的请求。如上所陈述,接收到的请求可为第一类型的或第二类型的。
在步骤1304,MMU 318响应于接收到的请求而确定虚拟内存地址。为了清楚起见,这个虚拟内存地址可被称作第二虚拟内存地址以与在图7的步骤702接收到的虚拟内存地址区分开。这个第二虚拟地址由虚拟地址空间i'、虚拟地址空间i'内的页j'(表示为Pagei'j')和相对于页j'的偏移定义。
步骤1304可由地址计算单元504执行。地址计算单元可通过依据在步骤1302接收到的请求类型选择缓冲器324的页帧而确定第二虚拟地址。在依据请求类型选择缓冲器324的页帧之后,地址计算单元选择不同于在步骤702接收到的先前虚拟地址的虚拟地址空间i的第二虚拟地址的虚拟地址空间i'。单元504选择具有映射到缓冲器324的选定页帧的索引的索引的虚拟地址空间作为第二虚拟地址的虚拟地址空间i'。
在步骤1306,MMU 318在虚拟内存表510中指定所确定的第二虚拟地址的地址空间i'内的内存页j'和缓冲器324的页帧之间的映射。MMU可在虚拟内存表中指定选择用于确定第二虚拟地址(例如,依据接收到的请求的类型选择的页帧)的页帧和内存页j'之间的映射。
一旦第二虚拟地址产生,它就可以传送回到平铺单元。这可由控制器502执行。
第一类型的请求是对映射到缓冲器324中与先前(即,最近)数据块写入的最后一个页帧相同的页帧的新虚拟内存地址的请求。因此,响应于控制器502接收到第一类型的请求,地址计算单元504选择先前数据块写入的最后一个页帧作为页帧。在当前实例中,所述页帧是页帧2(如图10中所示)。接着,地址计算单元504选择具有映射到先前数据块写入的最后一个页帧的索引的索引的虚拟地址空间作为第二虚拟地址的虚拟地址空间i'。因此,继续我们的实例,具有映射到页帧2的索引的索引的虚拟地址空间被选择作为虚拟地址空间i'。在当前实例中,页帧2的索引映射到虚拟地址空间2的索引。因此,响应于接收到第一类型的请求,控制器502选择地址空间2作为虚拟地址空间i'。
接着,地址计算单元需要确定虚拟地址空间i'内的页j'和相对于页j'的偏移以定义第二虚拟地址。
地址计算单元504选择虚拟地址空间内的终端页(例如,虚拟地址空间内的第一个页或最后一个页)作为虚拟地址空间i'内的内存页j'。在此当前实例中,地址计算单元504选择虚拟地址空间i'内的第一页面,并且因此将选择虚拟地址空间2内的页0(即,Page20)。
因为第一类型的请求请求映射到最后一个数据块写入的最后一个页帧的虚拟内存地址,所以第二虚拟地址的偏移不小于所述页帧内的数据块的末尾的偏移至关重要。因此,地址计算单元504可将第二虚拟地址的偏移选择为大于来自最后一个写入操作的数据块的末尾的偏移。换句话说,地址计算单元可将第二虚拟地址的偏移设置成等于最后一个数据块写入的最后一个页帧内的第一空闲(即,可用)偏移。
因此,在此实例中,响应于在将数据块写入到缓冲器324的页帧0和页帧2的最后一个写入操作之后接收到第一类型的请求,地址计算单元产生第二虚拟地址,所述第二虚拟地址由虚拟地址空间2(它是映射到页帧2的地址空间)、虚拟地址空间2内的页0(即,Page20)和等于页帧2内的第一可用偏移的偏移定义。
在计算出第二虚拟地址之后,地址产生单元504更新虚拟内存表510以指定Page20和页帧2之间的映射。具体地说,单元504通过在与Page20相关的条目(它在此实例中是条目P20)中指定映射来更新虚拟内存表。这在图11中说明,其中1102表示在响应于接收到第一类型的请求而产生第二虚拟地址之后更新的条目P20。
在其中先前数据块写入到虚拟地址空间的第一个页且页未被填充的另一实例中,针对第二虚拟地址而选择的虚拟地址空间i'将与先前数据块的虚拟地址空间i相同。例如,在产生虚拟地址空间2中的虚拟地址并更新1102处的条目P20之后,数据块可以写入,使得数据块的末尾保持在页帧2内。响应于接收到另一第一类型的请求,在具有映射到先前数据块写入的最后一个页帧的索引的索引的虚拟地址空间中产生虚拟地址。在此实例中,所述索引是2,即虚拟地址空间保持不变。换句话说,响应于在将数据块写入到虚拟地址空间的第一个页之后接收到第一类型的请求,在所述相同虚拟地址空间中产生虚拟地址,其中所述块完全在所述第一个页内(即,块的末尾保持在所述第一个页内)。因此,可以看出,有可能在同一虚拟地址空间中进行数个较小分配,条件是它们全都开始于虚拟地址空间的第一个页内。这使得数据能够写入到同一虚拟地址空间,直到所述空间的第一个页变满为止。因为虚拟地址空间的数目与页帧的数目相同,这通常意味着在物理内存空间耗尽之前虚拟地址空间不会耗尽。
第二类型的请求是对映射到缓冲器324的新页帧的新虚拟内存地址的请求。
因此,响应于控制器502接收到第二类型的请求,地址计算单元504通过从空闲页帧列表514选择页帧来执行步骤1304。接着,地址计算单元504选择具有映射到选定页帧的索引的索引的虚拟地址空间作为第二虚拟地址的虚拟地址空间i'。在本实例中,参考图10可看出,在先前写入操作之后,页帧2将从空闲页帧列表514去除,但是页帧5保留。因此,响应于在所述写入操作之后接收到第二类型的请求,地址计算单元504将从列表514选择页帧5,并选择具有映射到选定页帧5的索引的索引的虚拟地址空间作为第二虚拟地址的虚拟地址空间i'。在当前实例中,页帧5的索引映射到虚拟地址空间5的索引。因此,响应于接收到第二类型的请求,控制器502选择地址空间5作为第二虚拟内存地址的虚拟地址空间i'。
接着,地址计算单元需要确定虚拟地址空间i'内的页j'和相对于页j'的偏移以定义第二虚拟地址。
地址计算单元504选择虚拟地址空间内的终端页(例如,虚拟地址空间内的第一个页或最后一个页)作为虚拟地址空间i'内的内存页j'。因此,继续我们的当前实例,其中地址空间i'内的第一个页被选定,地址计算单元504将选择虚拟地址空间5内的页0(即,Page50)。
因为第二类型的请求请求映射到空闲页帧的虚拟内存地址,所以地址计算单元504可将第二虚拟地址的偏移选择为零,以使内存占用率最大化。
因此,在此实例中,响应于在将数据块写入到缓冲器324的页帧0和页帧2的最后一个写入操作之后接收到第二类型的请求,地址计算单元504产生第二虚拟地址,所述第二虚拟地址由虚拟地址空间5(它是映射到页帧5的地址空间)、虚拟地址空间5内的页0(即,Page50)和相对于Page50的零偏移定义。
在响应于接收到第二类型的请求计算出第二虚拟地址之后,地址产生单元504更新虚拟内存表510以指定Page50和页帧5之间的映射。具体地说,单元504通过在与Page50相关的条目(它在此实例中是条目P50)中指定映射来更新虚拟内存表。这在图12中说明,其中1202表示在响应于接收到第二类型的请求而产生第二虚拟地址之后更新的条目P50。接着,页帧5可从空闲页帧列表514中的可用页帧列表去除。
使用在每个写入操作之后发出的对新虚拟地址的第一和第二类型的请求使得图形处理系统300能够同时支持多个数据流。数据流或为简洁起见简称的‘流’是将由图形处理单元302一起使用(例如,处理)的一系列连续数据。如果数据一起使用,优选的是,流中的数据存储在缓冲器324的同一页帧中,因为每次只能释放或解除分配整个页帧。也就是说,可能无法解除分配一段页帧——整个页帧可能需要一起解除分配。
因此,在完成到缓冲器324的写入操作之后,当相同流的额外数据要写入到缓冲器时,平铺单元可向MMU发出第一类型的请求,使得返回的虚拟内存地址映射到缓冲器的同一页帧。当不同流的数据要写入到缓冲器时,平铺单元可向MMU发出第二类型的请求,使得返回的虚拟地址映射到缓冲器的新页帧。
在先前虚拟内存寻址方案中,例如在图1中所说明的方案中,同时支持m个流需要m个虚拟内存表和一个物理内存表。那些虚拟内存表中的每一个可遭受上文所论述的环绕问题。这可通过使这些m个虚拟表中的每一个大于物理内存表来缓解。假设物理内存表具有n个条目且每个虚拟内存表比物理内存表大p倍,存储m个虚拟表将需要m.n.p.log2(n.p)个位。此外,每个虚拟内存地址的大小将以log2(m)个位的倍数增加,使得虚拟内存地址的大小为log2(p.n.K.m),其中K是页帧内的偏移数目。
然而,本公开的虚拟内存寻址方案使得能够同时支持m个数据流,同时降低存储成本。本文中所描述的虚拟内存表(例如,表510)比含有n个条目的物理内存表的大小大p倍。因此,存储虚拟内存表510需要n.p.log2(n.p)个位。每个虚拟内存地址的大小为log2(p.n.K)个位。换句话说,相比于使用同等大小的虚拟内存的仅支持单个数据流的常规寻址方案,本公开的虚拟内存寻址方案使得能够同时支持m个数据流,同时对虚拟内存表或虚拟地址没有额外的存储要求。
现将简要地描述从缓冲器324读取数据的读取操作。从缓冲器324读取数据的读取请求可由获取单元312发出并由MMU 318接收。读取请求是从虚拟内存地址读取数据块的请求。在读取请求中指定的虚拟内存地址可由虚拟地址空间、所述虚拟地址空间内的页帧和相对于所述页帧的偏移指定。读取请求还可指定要从虚拟内存地址读取的数据块的大小。
响应于接收到读取请求,MMU 318将请求中指定的虚拟地址转换成缓冲器324的一个或多个物理内存地址,并从那些地址获取数据。MMU可确定被所请求的数据块覆盖的虚拟内存402的页和要读取的数据块的大小,所请求的数据块来自读取请求中指定的虚拟地址。在标识被所请求的数据块覆盖的虚拟内存的页之后,MMU存取虚拟内存表510以确定映射到那些页的缓冲器324的页帧。MMU 318存取与被所请求的数据块覆盖的虚拟内存的页相关的虚拟内存表的条目。接着,可从如虚拟内存表指定的缓冲器324中映射到虚拟页帧的页帧获取数据。
在从读取请求中指定的缓冲器324获取数据之后,MMU 318可将所获取的数据发送到获取单元312。
本文中已经描述虚拟内存寻址方案的各方面,其中可寻址虚拟内存由多个独立的虚拟地址空间形成,每个虚拟地址空间由多个连续页形成。本文中所描述的虚拟内存寻址方案可存在众多优于常规虚拟内存寻址方案的优点,常规虚拟内存寻址方案对仅由单个虚拟地址空间组成的虚拟内存进行寻址。
使用多个单独的虚拟地址空间意味着本文中所描述的寻址方案不需要在可用页能够进行分配之前使特定的页变空或解除分配。使用多个虚拟地址空间意味着许多分配可以在它们自己的虚拟地址空间中分配,而不是像常规系统中那样所有分配都共享单个虚拟地址空间。经常出现以下情况:每个分配具有其自身的虚拟地址空间(即,虚拟内存表中的行)。可以使每个虚拟地址空间足够大(即,具有足够的页或虚拟内存表中具有足够的列)以用于系统所支持的最大分配。只要虚拟地址空间没有耗尽,环绕问题就可以避免。然而,通过使虚拟地址空间的数目等于页帧的数目并在多个分配保持在虚拟地址空间的第一个页内的情况下使得那些分配能够在同一虚拟地址空间内进行,在物理内存耗尽之前所述虚拟地址空间通常不会耗尽。因此,本文中所描述的寻址方案可以避免与常规虚拟内存寻址方案相关的环绕问题。寻址方案还支持在写入操作之后,依据接收到的对新虚拟地址的请求的类型以两种不同的方式产生新虚拟地址。相比于常规寻址方案,这使得处理系统能够同时支持多个流,并且降低了存储要求。
本文中已参考图形处理系统描述虚拟内存寻址方案。应了解,本文中所描述的寻址方案可实施在不同类型的处理系统内,例如实施在CPU内,CPU可为单核或多核CPU。在此情况下,内存管理单元可从CPU的处理单元接收写入请求,所述处理单元例如是处理器核心或算术逻辑单元。
类似地,应了解,顶点缓冲器324仅仅是根据本文中所描述的实例可以映射到虚拟内存的物理内存的实例。例如,图块列表缓冲器326还可使用本文中所描述的技术映射到虚拟内存。在其它实例中,映射到虚拟内存的物理内存可为计算机处理系统的某一其它内存部分,并且可为片上或片外内存。也就是说,尽管在图3中,内存部分320(顶点缓冲器324和图块列表缓冲器326形成其部分)是片上内存,但是应了解,在其它实例中,内存部分320可为片外内存。
在上文所描述的实例中,由MMU 318实施的虚拟内存寻址方案使得虚拟内存的内存页pagei0始终映射物理页i。因此,在此实施方案中,虚拟内存表510的列‘0’(第一列或左侧列)可以在存储单元508中省略,因为这些条目指定的映射是隐式的。换句话说,存储单元508可仅存储具有nx(p-1)个条目的虚拟内存表,由省略的条目列指定的映射是隐式的。
图3和5的内存管理单元(MMU)示出为包括数个功能块。这仅是示意图,并不旨在定义此类实体的不同逻辑元件之间的严格划分。可以以任何合适的方式提供每个功能块。应理解,本文中描述为由控制器或单元形成的中间值无需由控制器或单元在任一点处以物理方式产生,而是可以只表示通常描述由控制器或单元在其输入和输出之间执行的处理的逻辑值。
本文中所描述的MMU可以在集成电路上体现为硬件。本文中所描述的MMU可配置成执行本文所描述的任一种方法。一般来说,上文所描述的功能、方法、技术或部件中的任一个可以实施于软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方案的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的实例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或可由机器存取的其它数据的存储器装置。
如本文使用的术语“计算机程序代码”和“计算机可读指令”是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表示的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用诸如C、Java或OpenCL之类的编程语言代码表示的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机系统的处理器执行由代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
本发明还旨在包括定义如本文中描述的硬件配置的软件,例如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程码片以执行所需功能。也就是说,可提供一种计算机可读存储介质,在其上对呈集成电路定义数据集形式的计算机可读程序代码进行编码,所述计算机可读程序代码在集成电路制造系统中处理时将系统配置成制造配置成执行本文所描述的任一种方法的MMU,或制造包括本文中所描述的任何设备的MMU。集成电路定义数据集可以是例如集成电路描述。
可提供一种在集成电路制造系统处制造如本文中所描述的MMU的方法。可提供一种集成电路定义数据集,所述集成电路定义数据集在集成电路制造系统中处理时使制造MMU的方法被执行。
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程码片的代码,作为在任何层级定义集成电路的硬件描述语言,包含作为寄存器传送级(RTL)代码、作为例如Verilog或VHDL的高级电路表示,和作为例如OASIS(RTM)和GDSII的低级电路表示。在逻辑上定义集成电路的更高级表示法(例如RTL)可以在配置成在软件环境的上下文中产生集成电路的制造定义的计算机系统处处理,所述软件环境包括电路元件的定义和用于组合那些元件以便产生由所述表示法定义的集成电路的制造定义的规则。与通常软件在计算机系统上执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为用于产生集成电路的制造定义,以执行定义集成电路的代码,从而产生所述集成电路的制造定义。
现将关于图14描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置成制造MMU的实例。
图14示出配置成制造如本文中的任一个实例中所描述的MMU的集成电路(IC)制造系统1402的实例。具体地说,IC制造系统1402包括布局处理系统1404和集成电路产生系统1406。IC制造系统1402配置成接收IC定义数据集(例如,定义如本文中的任一个实例中所描述),处理IC定义数据集,并根据IC定义数据集产生IC(例如,其体现如本文中的任一个实例中所描述的MMU)。IC定义数据集的处理将IC制造系统1402配置成制造体现如本文中的任一个实例中所描述的MMU的集成电路。
布局处理系统1404配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域是已知的,并且例如可以涉及合成RTL代码以确定要产生的电路的门级表示,例如,就逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示确定电路布局。这可以自动完成或者在用户参与下完成,以优化电路布局。当布局处理系统1404确定了电路布局,它可以将电路布局定义输出到IC产生系统1406。电路布局定义可以是例如电路布局描述。
如本领域已知的,IC产生系统1406根据电路布局定义产生IC。例如,IC产生系统1406可以实施产生IC的半导体装置制造工艺,其可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来产生IC。或者,提供给IC产生系统1406的电路布局定义可呈计算机可读代码的形式,IC产生系统1406可以使用所述计算机可读代码来形成用于产生IC的合适掩模。
由IC制造系统1402执行的不同过程可以全部在一个位置例如由一方来实施。或者,IC制造系统1402可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同的位置和/或由不同方执行:(i)合成表示IC定义数据集的RTL代码,以形成要产生的电路的门级表示,(ii)基于门级表示来产生电路布局,(iii)根据电路布局来形成掩模,以及(iv)使用掩模来制造集成电路。
在其它实例中,集成电路定义数据集在集成电路制造系统处的处理可将系统配置成制造其中IC定义数据集不进行处理以便确定电路布局的MMU。例如,集成电路定义数据集可以定义可重新配置的处理器(例如,FPGA)的配置,并且对所述数据集进行的处理可以将IC制造系统配置成产生具有所述定义配置的可重新配置的处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统产生如本文中描述的装置。例如,通过集成电路制造定义数据集以上文参考图14描述的方式对集成电路制造系统进行配置,可以制造出如本文所述的装置。
在一些实例中,集成电路定义数据集可包含在由数据集定义的硬件上运行的软件,或者与由数据集定义的硬件组合运行的软件。在图14所示的示例中,IC产生系统还可以由集成电路定义数据集另外配置成在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
本文中所描述的MMU可以在集成电路上体现为硬件。本文中所描述的MMU可配置成执行本文所描述的任一种方法。
与已知的实施方案相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文实施的方法中)的实施方案可以改进性能。性能改进可包含计算性能提高、等待时间缩短、吞吐量增大和/或功耗降低中的一项或多项。在制造此类装置、设备、模块和系统(例如集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方案的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实施方案的改进(例如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造一个模块的多个个例来完成。
申请人据此独立地公开了本文描述的每个单独的特征以及两个或更多个此类特征的任意组合,使得此类特征或组合能够根据所属领域的技术人员的普通常识基于本说明书整体执行,而不管此类特征或特征的组合是否解决了本文公开的任何问题。鉴于前文描述,本领域技术人员来说显而易见的是,可在本发明的范围内进行各种修改。
Claims (27)
1.一种使用一组虚拟地址空间管理由n个内存页帧形成的物理内存的存取的方法,所述一组虚拟地址空间包括n个虚拟地址空间,每个虚拟地址空间由p个连续内存页形成,所述方法包括:
接收将数据块写入到所述n个虚拟地址空间中的虚拟地址空间i内的虚拟地址的写入请求,所述虚拟地址由所述虚拟地址空间i、所述虚拟地址空间i内的内存页j和相对于所述内存页j的开始的偏移定义;
使用具有n x p个条目的虚拟内存表将所述虚拟地址转换成所述物理内存的地址,每个所述条目指定所述虚拟地址空间的相应内存页和所述物理内存的相应内存页帧之间的映射,其中所述物理内存地址由以下定义:(i)如所述虚拟内存表指定的映射到所述内存页j的所述内存页帧,和(ii)所述虚拟地址的所述偏移;以及
将所述数据块写入到所述物理内存地址。
2.根据权利要求1所述的方法,其中所述n个虚拟地址空间中的每一个具有唯一地标识所述n个虚拟地址空间内的所述地址空间的索引,并且所述物理内存的每个内存页帧具有唯一地标识所述物理内存内的所述内存页帧的索引,其中所述虚拟地址空间索引中的每一个映射到相应的内存页帧索引。
3.根据权利要求1或2所述的方法,其中所述虚拟内存表的每个条目与所述n个虚拟地址空间内的相应内存页相关。
4.根据权利要求1或2所述的方法,其中所述方法另外包括:如果所述数据块超过物理内存中映射到所述虚拟地址空间i内的所述内存页j的所述内存页帧的可用空间,那么:
从可用内存页帧的列表中选择另一内存页帧;
在所述虚拟内存表中指定所述另一内存页帧和所述虚拟地址空间i中与所述内存页j相连的第二内存页k之间的映射;以及
将所述数据块的剩余数据写入到所述另一内存页帧。
5.根据权利要求1或2所述的方法,另外包括:在所述数据块写入到所述物理内存之后:
接收对要写入的新虚拟地址的请求;
响应于所述请求确定新虚拟地址,所述新虚拟地址由不同于所述虚拟地址空间i的另一虚拟地址空间i'、所述另一虚拟地址空间i'内的内存页j'和相对于所述内存页j'的开始的偏移定义;以及
在所述虚拟内存表中指定所述另一虚拟地址空间i'内的所述新虚拟地址的所述内存页j'和所述物理内存的内存页帧之间的映射。
6.根据权利要求5所述的方法,其中所述请求是第一类型的请求或第二类型的请求,所述第一类型的请求请求所述新虚拟地址映射到物理内存中与所述数据块写入的最后一个页帧相同的页帧,且所述第二类型的请求请求所述新虚拟地址映射到物理内存的新页帧。
7.一种用于使用一组虚拟地址空间管理对由n个内存页帧形成的物理内存的存取的内存管理单元,所述一组虚拟地址空间包括n个虚拟地址空间,每个虚拟地址空间由p个连续内存页形成,所述内存管理单元包括:
存储单元,其用于存储具有n x p个条目的虚拟内存表,每个所述条目指定所述虚拟地址空间的相应内存页和所述物理内存的相应内存页帧之间的映射;以及
控制器,其配置成进行以下操作:
接收将数据块写入到所述n个虚拟地址空间中的虚拟地址空间i内的虚拟地址的写入请求,所述虚拟地址由所述虚拟地址空间i、所述虚拟地址空间i内的内存页j和相对于所述内存页j的开始的偏移定义;
使用所述虚拟内存表将所述虚拟地址转换成所述物理内存的地址,其中所述物理内存地址由以下定义:(i)如所述虚拟内存表指定的映射到所述内存页j的所述内存页帧,和(ii)所述虚拟地址的所述偏移;以及
将所述数据块写入到所述物理内存地址。
8.根据权利要求7所述的内存管理单元,其中所述n个虚拟地址空间中的每一个具有唯一地标识所述n个虚拟地址空间内的所述地址空间的索引,并且所述物理内存的每个内存页帧具有唯一地标识所述物理内存内的所述内存页帧的索引,其中所述虚拟地址空间索引中的每一个映射到相应的内存页帧索引。
9.根据权利要求7或8所述的内存管理单元,其中所述虚拟内存表的每个条目与所述n个虚拟地址空间内的相应内存页相关。
10.根据权利要求7或8所述的内存管理单元,其中所述虚拟内存表是由n组p个连续条目形成的阵列,所述n组p个连续条目中的每一个与相应虚拟地址空间内的所述p个内存页相关。
11.根据权利要求7或8述的内存管理单元,其中所述控制器另外配置成:如果所述数据块超过物理内存中映射到所述虚拟地址空间i内的所述内存页j的所述内存页帧的可用空间,那么:
从可用内存页帧的列表中选择另一内存页帧;
在所述虚拟内存表中指定所述另一内存页帧和所述虚拟地址空间i中与所述内存页j相连的第二内存页k之间的映射;以及
将所述数据块的剩余数据写入到所述另一内存页帧。
12.根据权利要求7或8所述的内存管理单元,其中所述内存管理单元另外包括地址计算单元,所述地址计算单元配置成响应于所述控制器在所述数据块写入到所述物理内存之后接收到对新虚拟地址的请求:
确定新虚拟地址,所述新虚拟地址由不同于所述虚拟地址空间i的另一虚拟地址空间i'、所述另一虚拟地址空间i'内的内存页j'和相对于所述内存页j'的开始的偏移定义;以及
在所述虚拟内存表中指定所述另一虚拟地址空间i'内的所述新虚拟地址的所述内存页j'和所述物理内存的内存页帧之间的映射。
13.根据权利要求12所述的内存管理单元,其中所述请求是第一类型的请求或第二类型的请求,所述第一类型的请求请求所述新虚拟地址映射到物理内存中与所述数据块写入的最后一个页帧相同的页帧,且所述第二类型的请求请求所述新虚拟地址映射到物理内存的新页帧。
14.根据从属于权利要求8的权利要求13所述的内存管理单元,其中所述地址计算单元配置成通过以下操作来确定所述新虚拟地址:
依据接收到的请求类型选择所述物理内存的内存页帧;以及
选择具有映射到所述选定内存页帧的索引的索引的所述虚拟地址空间作为所述另一虚拟地址空间i'。
15.根据权利要求13所述的内存管理单元,其中所述地址计算单元配置成响应于所述控制器接收到第一类型的请求:
选择所述数据块写入的所述最后一个内存页帧;以及
在所述虚拟内存表中指定所述选定内存页帧和所述另一虚拟地址空间i'中的内存页之间的映射。
16.根据从属于权利要求8的权利要求15所述的内存管理单元,其中所述地址计算单元配置成选择具有映射到所述数据块写入的所述最后一个内存页帧的索引的索引的所述虚拟地址空间作为所述另一虚拟地址空间i'。
17.根据权利要求16所述的内存管理单元,其中所述地址计算单元配置成将所述新虚拟地址的所述偏移设置成等于所述数据块的末尾相对于所述数据块写入的所述最后一个内存页帧的偏移。
18.根据权利要求16所述的内存管理单元,其中所述地址计算单元配置成选择所述另一虚拟地址空间i'内的终端内存页作为所述另一虚拟地址空间i'内的所述内存页j'。
19.根据权利要求13所述的内存管理单元,其中所述地址计算单元配置成响应于所述控制器接收到所述第二类型的请求:
从可用内存页帧的列表中选择内存页帧;以及
在所述虚拟内存表中指定所述选定内存页帧和所述另一虚拟地址空间i'中的内存页之间的映射。
20.根据从属于权利要求8的权利要求19所述的内存管理单元,其中所述地址计算单元配置成响应于接收到所述第二类型的请求,将所述新虚拟地址的所述偏移设置成零。
21.根据权利要求20所述的内存管理单元,其中所述地址计算单元配置成选择具有映射到所述选定内存页帧的索引的索引的所述虚拟地址空间作为所述另一虚拟地址空间i'。
22.根据权利要求20所述的内存管理单元,其中所述地址计算单元配置成选择所述另一虚拟地址空间i'内的终端内存页作为所述另一虚拟地址空间i'内的所述内存页j'。
23.根据权利要求7或8所述的内存管理单元,其中所述内存管理单元形成图形处理系统的部分,所述图形处理系统配置成处理图形数据以呈现场景的图像,作为处理所述图形数据以呈现场景的部分,所述内存管理单元配置成存取所述物理内存。
24.根据权利要求23所述的内存管理单元,其中所述物理内存是存储作为图形管线的部分处理的图元的图元数据的顶点缓冲器。
25.根据权利要求24所述的内存管理单元,其中所述内存管理单元另外包括多个计数器,所述计数器用于保持每个内存页帧的计数值,所述计数值指示具有存储在所述内存页帧内的数据且在所述图形处理系统内活跃的图元的数目,所述控制器配置成当内存页帧的计数值指示没有在所述图形处理系统内活跃的图元具有存储在所述内存页帧内的数据时,将所述内存页帧添加到可用内存页帧的列表。
26.根据权利要求7或8所述的内存管理单元,其中所述内存管理单元在集成电路上体现为硬件。
27.一种集成电路制造系统,包括:
非暂态计算机可读存储介质,其上存储有根据权利要求7或8所述的内存管理单元的计算机可读描述;
布局处理系统,其配置成处理所述计算机可读描述以便产生体现所述内存管理单元的集成电路的电路布局描述;以及
集成电路产生系统,其配置成根据所述电路布局描述制造所述内存管理单元。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1810779.7 | 2018-06-29 | ||
GB1810779.7A GB2570744B (en) | 2018-06-29 | 2018-06-29 | Virtual memory management |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110659219A CN110659219A (zh) | 2020-01-07 |
CN110659219B true CN110659219B (zh) | 2022-07-19 |
Family
ID=63143559
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910567278.XA Active CN110659219B (zh) | 2018-06-29 | 2019-06-27 | 虚拟内存管理 |
Country Status (4)
Country | Link |
---|---|
US (3) | US11042486B2 (zh) |
EP (1) | EP3591534B1 (zh) |
CN (1) | CN110659219B (zh) |
GB (1) | GB2570744B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2587224B (en) | 2019-09-19 | 2021-09-15 | Imagination Tech Ltd | Methods and tiling engines for hierarchially tiling primitives in a graphics processing system |
US20210144170A1 (en) * | 2019-11-09 | 2021-05-13 | Indian Institute Of Science | System and method for protection against side channel attacks |
CN111611083B (zh) * | 2020-05-26 | 2023-05-02 | 北京字节跳动网络技术有限公司 | 虚拟内存上限检测方法、装置、计算机设备及存储介质 |
JP2023044521A (ja) * | 2021-09-17 | 2023-03-30 | キオクシア株式会社 | メモリシステム |
CN114218153B (zh) * | 2021-12-06 | 2023-11-14 | 海飞科(南京)信息技术有限公司 | 用于存储管理的方法、介质、程序产品、系统和装置 |
CN114781322B (zh) * | 2022-04-24 | 2023-04-25 | 苏州睿芯集成电路科技有限公司 | Cpu芯片仿真加速中针对无mmu环境的内存状态恢复方法 |
CN116185565A (zh) * | 2022-12-29 | 2023-05-30 | 芯动微电子科技(武汉)有限公司 | 一种内存数据隔离和共享的系统和方法 |
CN115757260B (zh) * | 2023-01-09 | 2023-04-14 | 摩尔线程智能科技(北京)有限责任公司 | 数据交互方法、图形处理器及图形处理系统 |
CN116775512B (zh) * | 2023-08-22 | 2023-12-05 | 摩尔线程智能科技(北京)有限责任公司 | 页表管理装置、方法、图形处理器及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006178764A (ja) * | 2004-12-22 | 2006-07-06 | Toshiba Corp | メモリ管理装置、コンピュータシステム及びメモリ管理方法 |
CN102110196A (zh) * | 2009-12-25 | 2011-06-29 | 中国长城计算机深圳股份有限公司 | 并行运行多用户操作系统间的数据安全传输方法及系统 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5895503A (en) * | 1995-06-02 | 1999-04-20 | Belgard; Richard A. | Address translation method and mechanism using physical address information including during a segmentation process |
US5860144A (en) * | 1996-08-09 | 1999-01-12 | Oracle Corporation | Addressing method and system for providing access of a very large size physical memory buffer to a number of processes |
US20050193169A1 (en) * | 2004-03-01 | 2005-09-01 | Ahluwalia Manish K. | Memory management |
US10365858B2 (en) * | 2013-11-06 | 2019-07-30 | Pure Storage, Inc. | Thin provisioning in a storage device |
US9529546B2 (en) | 2014-01-08 | 2016-12-27 | Netapp, Inc. | Global in-line extent-based deduplication |
GB2554587B (en) * | 2015-03-05 | 2018-09-19 | Imagination Tech Ltd | Systems and methods for distributed scalable ray processing |
US10162525B2 (en) * | 2015-09-11 | 2018-12-25 | Red Hat Israel, Ltd. | Translating access requests for a multi-level page data structure |
GB2546343A (en) * | 2016-01-15 | 2017-07-19 | Stmicroelectronics (Grenoble2) Sas | Apparatus and methods implementing dispatch mechanisms for offloading executable functions |
GB2552831B (en) * | 2016-08-12 | 2019-01-02 | Sony Interactive Entertainment Inc | Memory allocation apparatus and method |
US10552321B2 (en) * | 2017-08-04 | 2020-02-04 | Microsoft Technology Licensing, Llc | Flexible buffer sizing in graphics processors |
-
2018
- 2018-06-29 GB GB1810779.7A patent/GB2570744B/en active Active
-
2019
- 2019-06-26 EP EP19182552.0A patent/EP3591534B1/en active Active
- 2019-06-27 CN CN201910567278.XA patent/CN110659219B/zh active Active
- 2019-06-29 US US16/457,975 patent/US11042486B2/en active Active
-
2021
- 2021-06-03 US US17/338,466 patent/US11669460B2/en active Active
-
2023
- 2023-06-02 US US18/205,023 patent/US20230315645A1/en active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006178764A (ja) * | 2004-12-22 | 2006-07-06 | Toshiba Corp | メモリ管理装置、コンピュータシステム及びメモリ管理方法 |
CN102110196A (zh) * | 2009-12-25 | 2011-06-29 | 中国长城计算机深圳股份有限公司 | 并行运行多用户操作系统间的数据安全传输方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
US20230315645A1 (en) | 2023-10-05 |
US20210294750A1 (en) | 2021-09-23 |
GB2570744B (en) | 2020-08-26 |
US11042486B2 (en) | 2021-06-22 |
GB2570744A (en) | 2019-08-07 |
EP3591534B1 (en) | 2021-09-22 |
CN110659219A (zh) | 2020-01-07 |
GB201810779D0 (en) | 2018-08-15 |
US11669460B2 (en) | 2023-06-06 |
US20200004688A1 (en) | 2020-01-02 |
EP3591534A1 (en) | 2020-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110659219B (zh) | 虚拟内存管理 | |
US11341601B2 (en) | Task assembly for SIMD processing | |
CN106504181B (zh) | 用于处理子图元的图形处理方法和系统 | |
US11715175B2 (en) | Hierarchical tiling in a graphics processing system using chain sorting of primitives | |
CN106504184B (zh) | 用于处理子图元的图形处理方法和系统 | |
CN112017102B (zh) | 使用渲染进度检查的图形处理单元和方法 | |
US20130046951A1 (en) | Parallel dynamic memory allocation using a nested hierarchical heap | |
GB2555929A (en) | Task assembly | |
US9171525B2 (en) | Graphics processing unit with a texture return buffer and a texture queue | |
US9165396B2 (en) | Graphics processing unit with a texture return buffer and a texture queue | |
GB2595025A (en) | Rendering tasks using render progression checks |
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 |