Disclosed aspects are directed to processing systems designed to handle virtual addresses. More specifically, exemplary aspects are directed to precise and efficient invalidation mechanisms for virtually tagged structures such as a virtually indexed virtually tagged (VIVT) cache.
In processing systems, for example, with a shared memory accessible by multiple applications or processors, virtual memory is well known in the art for extending real or physical memory space and improving the efficiency of sharing the physical memory amongst the various applications, processors, etc. A virtual address is used for addressing the virtual memory space which is divided into blocks of contiguous virtual memory addresses, or “pages.” Software programs may be conveniently written with reference to virtual addresses and for execution of program instructions by the processors, a translation of the virtual addresses to physical address may be performed.
Memory management units (MMUs) may be used for looking up page tables which map virtual addresses to corresponding physical addresses in order to obtain translations of the virtual addresses to physical addresses, a process referred to in the art as a “page table walk”. Page table walks may be time consuming and so MMUs may include hardware such as a translation lookaside buffer (TLB) to cache translations for frequently accessed pages. The TLB may be implemented as a tagged hardware lookup table, which is tagged using the virtual addresses. Thus, if a virtual address hits in the TLB (i.e., there is a matching tag in the TLB for the virtual address), the corresponding physical address translation may be retrieved from the TLB, without having to incur the costs associated with a page table walk. The retrieved physical address may then be used for accessing memory structures such as the shared memory or one or more caches which may be present between the processors and the shared memory.
A cache, as known in the art, is designed to be small, high speed memory structures which store a limited number of frequently accessed data (or data determined to have high likelihood of future use) and offer a faster access path for the data stored in the cache, in comparison to the longer access times which may be incurred for accessing a backing storage location of the cache (e.g., another cache or the shared memory such as a main memory). While the cache may be indexed and tagged with physical addresses associated with the data stored therein (also referred to as a physical indexed physically tagged or “PIPT” cache), it may be beneficial to alternatively implement the cache as a memory structure which is indexed and tagged using virtual addresses (also referred to as a virtually indexed and virtually tagged or “VIVT” cache). Since the VIVT cache may be accessed using the virtual addresses, a translation of the virtual addresses to physical addresses is not required to search the cache, and so the VIVT cache may offer a faster access time.
However, in some cases, the VIVT cache may be made to appear as a PIPT cache to software, to avoid scenarios where an entire cache may be invalidated by software upon a translation change (e.g., pursuant to a context switch between applications which use different pages and correspondingly, different virtual to physical address translations) that might not even be relevant to the cache. However, conventional implementations of a VIVT cache which appears as a PIPT cache to software suffers from drawbacks. For example, each virtual address page may cover a physical address space which is greater than the size of a cache line of the cache. Accordingly, even if only a single entry of the TLB or a single page is to be invalidated for a given TLB invalidate operation, there are no efficient processes known in the art for determining which specific cache lines of the cache are to be correspondingly invalidated. Thus, in conventional implementations, in the case of a TLB invalidate operation, the entire VIVT cache is invalidated.
Since TLB invalidates can occur frequently, e.g., in the case of multiprocessor systems with numerous processors or applications which share the same physical memory, there may be frequent invalidations of entire caches. Invalidating an entire cache can have severe performance impacts. For example, if an entire instruction cache is invalidated pursuant to a TLB invalidate, then processors which derive instructions from the instruction cache may stall, leading to undesirable delays and loss of performance.
Accordingly, there is a need in the art for more efficient techniques for handling TLB invalidate operations, for example, with respect to their impact on VIVT caches.
Exemplary aspects of the invention are directed to systems and methods for precise invalidation of cache lines of a virtually indexed virtually tagged (VIVT) cache. At least a translation lookaside buffer (TLB) index corresponding to a TLB entry which comprises a virtual address to physical address translation for a cache line is associated with the cache line. The TLB entries are inclusive of the cache lines of the VIVT cache. Upon receiving an invalidate instruction, the invalidate instruction is filtered at the TLB to determine if the invalidate instruction is likely to affect one or more cache lines in the VIVT cache. If the invalidate instruction is likely to affect one or more cache lines in the VIVT cache, the TLB indices of the TLB entries which correspond to the invalidate instruction are determined, and only the cache lines of the VIVT cache which are associated with the affected TLB indices are selectively invalidated.
For example, an exemplary aspect is directed to a method of managing a virtually indexed virtually tagged (VIVT) cache. The method comprising associating, with each cache line of the VIVT cache, at least a translation lookaside buffer (TLB) index corresponding to a TLB entry which comprises a virtual address to physical address translation for the cache line. Upon receiving an invalidate instruction, the method includes filtering the invalidate instruction at the TLB to determine if the invalidate instruction is likely to affect one or more cache lines in the VIVT cache. If the invalidate instruction is determined to be likely to affect one or more cache lines in the VIVT cache the TLB indices of the TLB entries which correspond to the invalidate instruction are determined, and only the cache lines of the VIVT cache which are associated with the TLB indices of the TLB entries which correspond to the invalidate instruction are selectively invalidated.
Another exemplary aspect is directed to an apparatus comprising a translation lookaside buffer (TLB) comprising TLB entries, wherein each TLB entry has an associated TLB index and comprises a virtual address to physical address translation. The apparatus also includes a virtually indexed virtually tagged (VIVT) cache comprising cache lines, wherein each cache line is tagged with at least the TLB index corresponding to the TLB entry which comprises the virtual address to physical address translation for the cache line. The apparatus further includes logic configured to filter an invalidate instruction received at the TLB to determine if the invalidate instruction is likely to affect one or more cache lines of the VIVT cache, and if the invalidate instruction is determined to be likely to affect one or more cache lines of the VIVT cache, determine the TLB indices of the TLB entries which correspond to the invalidate instruction, and selectively invalidate only the cache lines of the VIVT cache which are associated with the TLB indices of the TLB entries which correspond to the invalidate instruction.
Yet exemplary aspect is directed to an apparatus comprising a translation lookaside buffer (TLB) comprising TLB entries, wherein each TLB entry has an associated TLB index and comprises a virtual address to physical address translation and a virtually indexed virtually tagged (VIVT) cache comprising cache lines. The apparatus comprises means for tagging each cache line with at least the TLB index corresponding to the TLB entry which comprises the virtual address to physical address translation for the cache line, and means for filtering an invalidate instruction received at the TLB to determine if the invalidate instruction is likely to affect one or more cache lines in the VIVT cache. The apparatus also includes means for determining the TLB indices of the TLB entries which correspond to the invalidate instruction if the invalidate instruction is determined to be likely to affect one or more cache lines of the VIVT cache, and means for selectively invalidating only the one or more cache lines of the VIVT cache which are associated with the TLB indices of the TLB entries which correspond to the invalidate instruction if the invalidate instruction is determined to be likely to affect the one or more cache lines of the VIVT cache.
Another exemplary aspect is directed to a non-transitory computer readable storage medium comprising code, which, when executed by a processor, causes the processor to perform operations for managing a virtually indexed virtually tagged (VIVT) cache, the non-transitory computer readable storage medium comprising code for associating, with each cache line of the VIVT cache, at least a translation lookaside buffer (TLB) index corresponding to a TLB entry which comprises a virtual address to physical address translation for the cache line, code for filtering an invalidate instruction received at the TLB to determine if the invalidate instruction is likely to affect one or more cache lines in the VIVT cache, code for determining the TLB indices of the TLB entries which correspond to the invalidate instruction if the invalidate instruction is determined to be likely to affect one or more cache lines of the VIVT cache, and code for selectively invalidating only the one or more cache lines of the VIVT cache which are associated with the TLB indices of the TLB entries which correspond to the invalidate instruction if the invalidate instruction is determined to be likely to affect the one or more cache lines of the VIVT cache.
The accompanying drawings are presented to aid in the description of aspects of the invention and are provided solely for illustration of the aspects and not limitation thereof.
Aspects of the invention are disclosed in the following description and related drawings directed to specific aspects of the invention. Alternate aspects may be devised without departing from the scope of the invention. Additionally, well-known elements of the invention will not be described in detail or will be omitted so as not to obscure the relevant details of the invention.
The word “exemplary” is used herein to mean “serving as an example, instance, or illustration.” Any aspect described herein as “exemplary” is not necessarily to be construed as preferred or advantageous over other aspects. Likewise, the term “aspects of the invention” does not require that all aspects of the invention include the discussed feature, advantage or mode of operation.
The terminology used herein is for the purpose of describing particular aspects only and is not intended to be limiting of aspects of the invention. As used herein, the singular forms “a”, “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises”, “comprising,”, “includes” and/or “including”, when used herein, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof.
Further, many aspects are described in terms of sequences of actions to be performed by, for example, elements of a computing device. It will be recognized that various actions described herein can be performed by specific circuits (e.g., application specific integrated circuits (ASICs)), by program instructions being executed by one or more processors, or by a combination of both. Additionally, these sequence of actions described herein can be considered to be embodied entirely within any form of computer readable storage medium having stored therein a corresponding set of computer instructions that upon execution would cause an associated processor to perform the functionality described herein. Thus, the various aspects of the invention may be embodied in a number of different forms, all of which have been contemplated to be within the scope of the claimed subject matter. In addition, for each of the aspects described herein, the corresponding form of any such aspects may be described herein as, for example, “logic configured to” perform the described action.
Exemplary aspects of this disclosure are directed to efficient and precise invalidation of virtually tagged memory structures such as a virtually indexed virtually tagged (VIVT) cache, e.g., pursuant to one or more translation lookaside buffer (TLB) invalidate operations. In exemplary aspects, one or more specific cache lines which are affected by an invalidate operation are efficiently determined. In one example, a cache line of a VIVT cache is tagged with a TLB index of a TLB entry which comprises a virtual to physical address translation for the cache line. When an invalidate operation is received (e.g., a TLB invalidate or a cache invalidate,), the invalidate is first filtered at the TLB to determine which one or more TLB indices are targeted by or correspond to the invalidate instruction, and only the cache lines of the VIVT cache corresponding to the one or more TLB indices which correspond to the invalidate instruction (as determined based on the TLB index tags associated with the cache lines) are precisely invalidated, without invalidating the entire VIVT cache.
Furthermore, in some aspects, rather than immediately invalidating the cache lines tagged with the TLB indices that correspond to an invalidate instruction upon receipt of the invalidate instruction, the TLB indices which correspond to the invalidate instructions are recorded for one or more successive invalidate instructions. For example, a TLB invalidate vector is maintained, which collects or records all the TLB indices for which invalidate instructions are pending, and the corresponding cache lines of the VIVT cache are invalidated at once, e.g., prior to a context synchronization. These and other exemplary features will now be discussed with reference to the figures below.
With reference now to
Since cache 108 is a VIVT cache which is indexed and tagged with virtual addresses, in the conventional implementation of processing system 100 shown, processor 102 may access cache 108 using virtual addresses. But if there is a miss, in a conventional implementation which will be discussed with reference to
Accordingly, with reference to
Thus, considering an example where processor 102 issues a request to fetch a cache line from a virtual address (VA) denoted as “A” from cache 108 (which may be a VIVT instruction cache), if there is a hit, then the cache line at an address whose index corresponds to and whose tag matches virtual address A in cache 108 is returned to processor 102. If there is a miss in cache 108, on the other hand, TLB 104 is accessed to obtain the translation for the virtual address A to a corresponding physical address (PA), before backing storage locations of cache 108 are accessed using the physical address. However, there may be a miss in TLB 104 as well, which would lead to event 122 wherein a translation for virtual address A may be performed through a page table walk, for example. At event 124, the physical address for virtual address A is retrieved following the page table walk and an entry at index 0 of TLB 104 is populated with virtual address A and its corresponding physical address. Any other attributes (e.g., an application space identifier (ASID), processor identifier (PID), etc., as known in the art) may also be added to the TLB entry at index 0, but these are not particularly relevant to this disclosure. Subsequently, at event 126, the cache line may be retrieved from a backing storage location using the physical address translation for virtual address A, and at event 128, the cache line may be filled in cache 108 (e.g., in set 0 in the example shown), and tagged using the virtual address A (keeping in mind that a portion, e.g., a subset of bits, of the virtual address may be used in the tag, rather than the entire virtual address).
With reference now to
The effect of invalidating TLB index 0 of TLB 104 on cache 108 is denoted as event 140, wherein, the entire cache 108 is invalidated (all M cache lines of cache 108 are shown to be invalidated using strike-through notations, wherein the invalidation may be effected in practice by changing a valid bit associated with each cache line to indicate that the cache line is invalid, for example). The reason for invalidating all M cache lines, as a previously discussed, is because in the conventional implementations, there are no provisions for knowing which ones of the M cache lines are associated with the invalidated TLB entry at TLB index 0. As can be appreciated, invalidating the entire cache 108 can cause severe performance degradations. To avoid invaliding the entire cache 108 in this manner, exemplary techniques will be described with reference to
In another case, the invalidation operation may be based on a cache invalidate operation using the virtual address A (e.g., an instruction cache invalidate by a virtual address to a point of unification, as known in the art). In this case, all instruction cache lines which have data for the physical address that the virtual address A translates to, are to be invalidated. In the conventional implementation, there are no provisions for knowing which of the cache lines that might be affected by the cache invalidate are actually associated with the invalidation and therefore all cache lines that may be or are likely to be affected by the cache invalidate are invalidated. As can be appreciated, invalidating cache lines in cache 108 that do not need to be invalidated can cause severe performance degradations. Exemplary techniques which will be described with reference to
In order to more precisely invalidate a VIVT cache, exemplary features of additionally tagging cache lines of the VIVT cache with TLB indices, maintaining TLB indices pending invalidation in an invalidate vector, and precisely invalidating only specific cache lines based on their TLB index tags (and collectively invalidating a group of one or more cache lines of the VIVT cache based on the invalidate vector, e.g., at a context synchronization event), will be explained with reference to
With reference now to
Among other exemplary features of processing system 200, invalidate vector 206 is shown, which can be configured to comprise TLB indices for TLB entries which are pending invalidation. Further, in addition to cache 208 being configured as a VIVT cache which is indexed and tagged with virtual addresses, cache 208 may also be configured to additionally include for each cache line, a tag of the TLB index which comprises the translation for the virtual to physical address for the cache line. Processing system 200 may further include logic configured for precise invalidation of one or more cache lines of cache 208 based on the TLB index tags associated with the one or more cache lines. For example, pursuant to receiving an invalidate instruction, logic such as control logic (not specifically shown) associated with TLB 204 may be configured to filter the invalidate instruction at TLB 204 to determine if the invalidate instruction is likely to affect cache lines in cache 208. If the invalidate instruction is likely to affect cache lines in cache 208, the logic may be configured to determine the TLB indices of the TLB entries which correspond to the invalidate instruction. Further, logic (e.g., control logic for cache 208, not specifically shown) may be configured to selectively invalidate only the cache lines of the VIVT cache which are associated with the affected TLB indices. Further aspects of precise invalidation of cache lines of cache 208, will now be discussed with reference to
With reference to
Thus, considering an example where processor 202 issues a request to fetch a cache line from a virtual address (VA) denoted as “A” from cache 208 (which may be a VIVT instruction cache), if there is a hit, then the cache line at an address whose index corresponds to and tag matches virtual address A in cache 208 is returned to processor 202. If there is a miss in cache 208, on the other hand, TLB 204 is accessed to obtain the translation for the virtual address A to a corresponding physical address (PA), before backing storage locations of cache 208 are accessed using the physical address. However, there may be a miss in TLB 204 as well, which would lead to event 222, wherein a translation for virtual address A may be performed through a page table walk, for example. At event 224, the physical address for virtual address A is retrieved following the page table walk and an entry at index 0 of TLB 104 is populated with virtual address A and its corresponding physical address. Any other attributes (e.g., an application space identifier (ASID), processor identifier (PID), etc., as known in the art) may also be added to the TLB entry at index 0, but these are not particularly relevant to this disclosure. Additionally, event 225 also takes place simultaneously or in conjunction with event 224, wherein, in event 225, invalidate vector 206 is updated to indicate that the TLB entry at index 0 does not have an associated pending invalidate operation (e.g., pending bit is “0” for index 0).
Subsequently, at event 226, the cache line may be retrieved from a backing storage location using the physical address, and at event 228, the cache line may be filled in cache 208 (e.g., in set 0 in the example shown), and tagged using the virtual address A (keeping in mind that a portion of the virtual address may be used in the tag, rather than the entire virtual address). Additionally, the cache line is also tagged with the TLB index 0 corresponding to the TLB entry which was allocated at event 224 in TLB 204 with the translation of the virtual to physical address for the cache line.
In an exemplary aspect, TLB 204 is inclusive of all the cache lines in the VIVT cache, cache 208, which means that all cache lines in cache 208 will be tagged with an associated TLB index when the cache lines are filled in cache 208, and all cache lines in cache 208 with a given TLB index tag will be invalidated if the entry in TLB 204 corresponding to that TLB index is replaced (e.g. due to eviction caused by the reallocation of the TLB entry). Precise invalidation of cache lines is thus possible for several types of invalidation operations which may be filtered at TLB 204.
For example, in a first type of invalidation operation which may be a translation invalidation, a TLB invalidate operation may be used to remove a stale mapping of a virtual address, e.g., virtual address A, to a physical address in TLB 204. Correspondingly, the translation invalidation may require invalidating the cache lines of cache 208 which are associated with the virtual address A specified in the TLB invalidate operation, since virtual address A may no longer map to the physical address associated with the data in the VIVT cache. In the exemplary VIVT cache tagged with the TLB index, this invalidation may be performed by searching TLB 204 (which is inclusive of the VIVT cache 208) using the virtual address A. The TLB entries which match the virtual address A are invalidated in TLB 204 and the TLB indices of these entries invalidated in TLB 204 are used to precisely invalidate cache lines which have matching TLB indices. The VIVT cache 208 may be configured to support the functionality of a search and invalidate using the TLB indices (and as will be described in more detail, the actual invalidation may occur during the next context synchronization operation).
In a second type of invalidation operation pertaining to a cache invalidation, invalidation of cache 208 may be specified by a virtual address A (e.g., an instruction cache invalidate by virtual address to point of unification, “ICIVAU” as known in the art). In this case, all cache lines of cache 208 which have data for the physical address that the virtual address A translates to are to be invalidated. For a VIVT cache, since different cache lines with different virtual addresses may all map to the same physical address, precise invalidation of only those cache lines with virtual addresses which map to the physical address corresponding to virtual address A may be pursued in exemplary aspects, to avoid over-invalidating the VIVT cache. In this regard, processor 202, which may initiate the invalidation, for example, may first translates the virtual address A to a corresponding physical address (e.g., based on a page table walk). The physical address may then be broadcast and used to invalidate corresponding cache lines in all instruction caches in processing system 200, including cache 208. The invalidation, in exemplary aspects, may involve performing a reverse lookup of TLB 204 (which, once again, is inclusive of the VIVT cache 204) using the physical address, to determine which TLB entries have the same physical address which was specified in the invalidate instruction. Correspondingly, the cache lines which are tagged with TLB indices of the matching TLB entries may then be precisely invalidated.
With reference now to
Corresponding invalidations of cache 208 may be filtered by TLB 204 in the above-described aspects of
A context synchronization, as known in the art, is a point in the sequence of instructions being executed, e.g., by processor 202, which mandates that any change to architectural resources (e.g., registers) before this point is to be observed by all instructions after this point. A context synchronizing event can be inserted into the sequence of instructions being executed in one or more ways, including, for example, by software, through the use of a context synchronizing instruction (e.g. an instruction barrier); by hardware, before or after a hardware-enforced context synchronizing event as defined by an applicable instruction set architecture (ISA) (e.g. before an exception or after execution of a hardware-synchronized register access); or by hardware for an internal operation, which may be invisible to software. As such, the invalidate operations to cache lines of cache 208 need not be applied (e.g., due to translation changes) until a context synchronization event forces the changes by the translation invalidate to be observed by subsequent instructions after the context synchronization event.
Although the context synchronization event is one example described herein, the gathered invalidates in invalidate vector 206 may also be applied based on events other than a context synchronization. For example, a software hint may be provided to apply the gathered invalidates. In another example, a miss in either TLB 204 or in cache 208 may be used as a trigger to apply the gathered invalidates.
Furthermore, the pending invalidates gathered in invalidate vector 206 need not be applied simultaneously or at once but may be applied piecemeal, e.g., one or more of the gathered invalidates may be read out from invalidate vector 206 at separate times and corresponding cache lines may be invalidated. In some cases, a count may be maintained of the number of invalidates gathered in invalidate vector 206 and if this count exceeds a pre-specified threshold, then the invalidates may be applied when the count exceeds the threshold, rather than upon the occurrence of an event such as a context synchronization, a software hint, a miss in either TLB 204 or cache 208, etc.
Accordingly, with reference to
Subsequently, at event 250, cache 208 is searched using the TLB index 0 to determine all cache lines whose TLB index tag match the TLB index 0. Only those cache lines which are tagged with TLB index 0 are selectively invalidated, while the remaining cache lines whose tags do not match the TLB index 0 are not invalidated. Simultaneously, or in conjunction with invalidating these cache lines, the indication in invalidate vector 206 for pending invalidation of TLB index 0 is also cleared.
In this manner, only cache lines of the exemplary VIVT cache which are affected by one or more invalidations are selectively invalidated, thus avoiding invalidation of the entire cache upon each translation invalidation or instruction cache invalidation. Furthermore, inclusivity is maintained between the exemplary TLB and the VIVT cache, which enables effective filtering of invalidate operations at the TLB (e.g., if all cache lines of the VIVT cache are tagged with corresponding TLB indices, then it is possible to filter out invalidate operations which do not affect the VIVT cache).
It will be appreciated that aspects include various methods for performing the processes, functions and/or algorithms disclosed herein. For example, as illustrated in
Block 302 comprises associating, with each cache line of a virtually indexed virtually tagged (VIVT) cache, at least a translation lookaside buffer (TLB) index (e.g., of TLB 204) corresponding to a TLB entry which comprises virtual address to physical address translation for the cache line (e.g., at the time of filling the cache line at event 228,
In Block 304, upon receiving an invalidate instruction, the invalidate instruction is filtered at the TLB to determine if the invalidate instruction is likely to affect one or more cache lines in the VIVT cache. For example, determining if the invalidate instruction is likely to affect one or more cache lines in the VIVT cache can involve, if the invalidate instruction is a translation invalidate instruction, determining if the a virtual address specified by the translation invalidate instruction matches at least one of the virtual addresses for which translations are included in TLB 204. If the invalidate instruction is a cache invalidate instruction, determining if the invalidate instruction is likely to affect one or more cache lines in the VIVT cache can involve determining, based on a reverse search of TLB 204, if a physical address specified by the cache invalidate instruction matches a translated physical address in at least one entry of TLB 204. Further, in some aspects, one or more invalidates are gathered in an invalidate vector such as invalidate vector 206. Thus, by maintaining inclusivity between TLB 204 and cache 208, the invalidate instruction can be filtered at TLB 204 to determine if the invalidate instruction is likely to affect one or more cache lines or if the invalidate instruction does not affect cache lines of cache 208. Furthermore the filtering at TLB 204 may also filter out cache flash invalidates).
In Block 306, if the invalidate instruction is determined to be likely to affect one or more cache lines in the VIVT cache the TLB indices of the TLB entries which correspond to the invalidate instruction may be determined. Further, only the cache lines of the VIVT cache which are associated with the TLB indices of the TLB entries which correspond to the invalidate instruction may be selectively invalidated. For example, only the cache lines associated with TLB index 0 are selectively invalidated at event 250 as discussed above with regard to
An example apparatus in which exemplary aspects of this disclosure may be utilized, will now be discussed in relation to
Accordingly, a particular aspect, input device 430 and power supply 444 are coupled to the system-on-chip device 422. Moreover, in a particular aspect, as illustrated in
It should be noted that although
Those of skill in the art will appreciate that information and signals may be represented using any of a variety of different technologies and techniques. For example, data, instructions, commands, information, signals, bits, symbols, and chips that may be referenced throughout the above description may be represented by voltages, currents, electromagnetic waves, magnetic fields or particles, optical fields or particles, or any combination thereof.
Further, those of skill in the art will appreciate that the various illustrative logical blocks, modules, circuits, and algorithm steps described in connection with the aspects disclosed herein may be implemented as electronic hardware, computer software, or combinations of both. To clearly illustrate this interchangeability of hardware and software, various illustrative components, blocks, modules, circuits, and steps have been described above generally in terms of their functionality. Whether such functionality is implemented as hardware or software depends upon the particular application and design constraints imposed on the overall system. Skilled artisans may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the present invention.
The methods, sequences and/or algorithms described in connection with the aspects disclosed herein may be embodied directly in hardware, in a software module executed by a processor, or in a combination of the two. A software module may reside in RAM memory, flash memory, ROM memory, EPROM memory, EEPROM memory, registers, hard disk, a removable disk, a CD-ROM, or any other form of storage medium known in the art. An exemplary storage medium is coupled to the processor such that the processor can read information from, and write information to, the storage medium. In the alternative, the storage medium may be integral to the processor.
Accordingly, an aspect of the invention can include a computer readable media embodying a method for cache management, including precise invalidation of cache lines of a VIVT cache. Accordingly, the invention is not limited to illustrated examples and any means for performing the functionality described herein are included in aspects of the invention.
While the foregoing disclosure shows illustrative aspects of the invention, it should be noted that various changes and modifications could be made herein without departing from the scope of the invention as defined by the appended claims. The functions, steps and/or actions of the method claims in accordance with the aspects of the invention described herein need not be performed in any particular order. Furthermore, although elements of the invention may be described or claimed in the singular, the plural is contemplated unless limitation to the singular is explicitly stated.