Abstract:
In general, in one aspect, the invention relates to a method for managing virtual memory (VM). The method includes receiving, from an application, a first access request comprising a first VM address identifying a VM location, obtaining a current VM location version value for the VM location, obtaining a first submitted VM location version value from the first VM address, and in response to a determination that the current VM location version value and the first submitted VM location version value match: servicing the first access request using the first VM address.

Description:
BACKGROUND 
       [0001]    Programs are assigned virtual memory that is mapped to real memory for use by the program. During the course of its use, a location in virtual memory may be allocated for different purposes and then freed for reuse. It is not an uncommon programming error for one process in a program to access a location in virtual memory that has already been freed and reallocated to a different process. 
       SUMMARY 
       [0002]    In general, in one aspect, the invention relates to a method for managing virtual memory (VM). The method includes receiving, from an application, a first access request comprising a first VM address identifying a VM location, obtaining a current VM location version value for the VM location, obtaining a first submitted VM location version value from the first VM address, and in response to a determination that the current VM location version value and the first submitted VM location version value match: servicing the first access request using the first VM address. 
         [0003]    In general, in one aspect, the invention relates to a non-transitory computer readable medium comprising instructions that, when executed by a processor, perform a method for managing VM. The method includes receiving, from an application, a first access request comprising a first VM address identifying a VM location, obtaining a current VM location version value for the VM location, obtaining a first submitted VM location version value from the first VM address, and in response to a determination that the current VM location version value and the first submitted VM location version value match: servicing the first access request using the first VM address. 
         [0004]    In general, in one aspect, the invention relates to a system that includes a physical memory, a VM manager, and a central processing unit. The VM manager is configured to receive, from an application, an access request comprising a VM address corresponding to a VM location, obtain a current VM location version value for the VM location, and obtain a submitted VM location version value from the VM address. The central processing unit is configured to, in response to a determination that the current VM location version value and the submitted VM location version value match, service the access request using the VM address. 
         [0005]    Other aspects of the invention will be apparent from the following description and the appended claims. 
     
    
     
       BRIEF DESCRIPTION OF DRAWINGS 
         [0006]      FIG. 1  shows a system in accordance with one or more embodiments of the invention. 
           [0007]      FIG. 2  shows a system in accordance with one or more embodiments of the invention. 
           [0008]      FIG. 3  shows a flow diagram in accordance with one or more embodiments of the invention. 
           [0009]      FIG. 4  shows a flow diagram in accordance with one or more embodiments of the invention. 
           [0010]      FIG. 5  shows an example in accordance with one or more embodiments of the invention. 
           [0011]      FIG. 6  shows a computer system in accordance with one or more embodiments of the invention. 
       
    
    
     DETAILED DESCRIPTION 
       [0012]    Specific embodiments of the invention will now be described in detail with reference to the accompanying figures. Like elements in the various figures are denoted by like reference numerals for consistency. 
         [0013]    In the following detailed description of embodiments of the invention, numerous specific details are set forth in order to provide a more thorough understanding of the invention. However, it will be apparent to one of ordinary skill in the art that the invention may be practiced without these specific details. In other instances, well-known features have not been described in detail to avoid unnecessarily complicating the description. 
         [0014]    In general, embodiments of the invention provide a method and system for using multiple addresses to access a single location in virtual memory. Specifically, embodiments of the invention may be used to generate and interpret virtual memory addresses that include a version identifier. 
         [0015]      FIG. 1  shows a diagram of a system in accordance with one or more embodiments of the invention. As shown in  FIG. 1 , the system includes an application ( 100 ), a virtual memory (VM) manager ( 102 ), a memory management unit (MMU) ( 104 ), and physical memory ( 106 ). The VM manager ( 102 ) includes a freed VM location list ( 108 ). 
         [0016]    In one or more embodiments of the invention, the application ( 100 ) is computer software executing on a system (not shown). Specifically, the application ( 100 ) is a group of processes utilizing a processor (not shown) and physical memory ( 106 ) in order to accomplish a task. 
         [0017]    In one or more embodiments of the invention, the VM manager ( 102 ) is a process or group of processes configured to manage the virtual memory. Specifically, the VM manager ( 102 ) is configured to facilitate the application&#39;s ( 100 ) use of the physical memory ( 106 ). In one embodiment of the invention, the VM manager ( 102 ) is configured to generate VM locations for use by the application ( 100 ). The VM manager ( 102 ) may also be configured to provide versioned VM addresses, corresponding to the VM locations, to the application ( 100 ). In one embodiment of the invention, the VM manager ( 102 ) is further configured to receive VM access requests from the application ( 100 ), and pass those access requests to the MMU ( 104 ). In one embodiment of the invention, the VM manager is part of an operating system kernel (not shown). 
         [0018]    In one or more embodiments of the invention, the VM manager ( 102 ) tracks freed VM locations using the freed VM location list ( 108 ). In one embodiment of the invention, the VM manager ( 102 ) receives requests from the application ( 100 ) for available VM locations. In response, the VM manager ( 102 ) may consult the freed VM location list ( 108 ) to determine which VM locations may be allocated to the application ( 100 ). In one embodiment of the invention, the VM manager ( 102 ) is notified by the application ( 100 ) of VM locations no longer in use (i.e., freed VM locations). 
         [0019]    In one embodiment of the invention, VM manager ( 102 ) tracks a VM location version associated with each allocated VM location. In one embodiment of the invention, the VM location version for a VM location is incremented each time the VM location is allocated. In one embodiment of the invention, VM locations are allocated as a group, and a single VM location version is used for the group of VM locations. In one embodiment of the invention, the VM manager ( 102 ) generates versioned VM addresses using the VM location version. 
         [0020]    In one or more embodiments of the invention, the MMU ( 104 ) is a process or group of processes configured to provide access to the physical memory ( 106 ). Specifically, the MMU ( 104 ) may receive access requests from the application ( 100 ) (via the VM manager ( 102 )). Such access requests may include a VM address, which is translated by the MMU ( 104 ) into a physical memory address. 
         [0021]    In one or more embodiments of the invention, the MMU ( 104 ) is configured to interpret different VM addresses as referring to the same VM location (and subsequently, the same physical memory location). Specifically, the MMU ( 104 ) may receive access requests that include VM address that refer to different versions of the same VM location. In one embodiment of the invention, in translating a VM address, the MMU ( 104 ) disregards a portion of the submitted VM address that is associated with the version of the VM location. Specifically, the MMU ( 104 ) may translate multiple VM addresses for an application into the same physical memory address. 
         [0022]    In one or more embodiments of the invention, the physical memory ( 106 ) is volatile memory used by the central processing unit (not shown) to execute software instructions (e.g., software used to generate application ( 100 )). In one embodiment of the invention, the physical memory is divided into pages by the MMU ( 104 ) into which ranges of VM locations are loaded (or otherwise associated with). 
         [0023]      FIG. 2  shows a diagram of a system in accordance with one or more embodiments of the invention. As shown in  FIG. 2 , virtual memory ( 200 ) includes a number of VM locations (VM location A ( 102 A), VM location N ( 202 N)). Each VM location (VM location A ( 202 A), VM location N ( 202 N)) is mapped to a physical memory (PM) location (PM location A ( 206 A), PM location N ( 206 N)) in physical memory ( 204 ). Each VM location (VM location A ( 202 A), VM location N ( 202 N)) is associated with a VM location version (VM location A version ( 208 A), VM location N version ( 208 N)). 
         [0024]    In one or more embodiments of the invention, multiple virtual memory addresses (VMAs) (VMA A, VMA B, VMA C, VMA D, VMA E, VMA F) may point to (or otherwise reference) the same VM location (VM location A ( 202 A), VM location N ( 202 N)). As shown in  FIG. 2 , VMA A, VMA B, and VMA C point to VM location A ( 202 A) and VMA D, VMA E, and VMA F point to VM location N ( 202 N). 
         [0025]    In one or more embodiments of the invention, the VM location version (VM location A version ( 208 A), VM location N version ( 208 N)) includes a value used to differentiate one allocation of the VM location (VM location A ( 202 A), VM location N ( 202 N)) from another. For example, while VMA A, VMA B, and VMA C each point to the same VM location (VM location A ( 202 A)), VMA A, VMA B, and VMA C may each refer to a different version of VM location A ( 202 A). In one embodiment of the invention, a portion of the VM address (VMA A, VMA B, VMA C, VMA D, VMA E, VMA F) may be used to derive the VM location version (VM location A version ( 208 A), VM location N version ( 208 N)) associated with the VMA (VMA A, VMA B, VMA C, VMA D, VMA E, VMA F). 
         [0026]    In one or more embodiments of the invention, each VM address (VMA A, VMA B, VMA C, VMA D, VMA E, VMA F) is directly translated into a physical memory address without removing the portion of the VM address that may be used to derive the VM location version (VM location A version ( 208 A), VM location N version ( 208 N)). Specifically, the MMU may be configured to disregard the portion of the VM address that refers to the VM location version. For example, an application instruction may include the VM address “10002000,” which refers to version “1000” of a VM location. That instruction may be directly translated by the MMU into a physical memory address. Said another way, the VM address “10002000” is not converted into the address “2000” (i.e., the version “1000” is not stripped out of the address) before the MMU and central processing unit are able to parse the instruction. 
         [0027]      FIG. 3  shows a flowchart for allocating virtual memory in accordance with one or more embodiments of the invention. While the various steps in these flowcharts are presented and described sequentially, one of ordinary skill will appreciate that some or all of the steps may be executed in different orders, may be combined or omitted, and some or all of the steps may be executed in parallel. 
         [0028]    In Step  310 , the VM manager receives a request for VM space from an application. In Step  312 , the VM manager accesses a freed VM location list to determine a VM location or set of VM locations available to be allocated to the application. In Step  314 , the VM manager increments the VM location version associated with the VM location to be allocated. In Step  316 , the VM location(s) to be allocated to the application are removed from the freed VM location list. 
         [0029]    In one embodiment of the invention, the when an application notifies the VM manager that a versioned VM address is no longer in use (i.e., freed), the VM manager increments the VM location version value associated with the VM location being freed. A new versioned VM address is then generated by the VM manager before the VM address is added to the freed VM location list. In one embodiment of the invention, this incrementing the version of VM locations before adding them to the freed VM location list allows the VM manager to control access (and potentially log an error) if an application attempts to access a VM location that has previously been freed, but has not yet been reallocated. 
         [0030]    In Step  318 , the VM manager generates a versioned VM address for each VM location using the current VM location version value. In one embodiment of the invention, the versioned VM address is generated by combining the VM location version value with a portion of the VM address as stored in the freed VM location list. For example, if the VM address as stored in the freed VM location list is “30002000,” and the current VM location version value is “3001,” then the VM manager may generate the versioned VM address as “30011000.” Note that in this example, both “30002000” and “30012000” refer to the same VM location, but different VM location versions. In Step  320 , the VM address(es) for the allocated VM location(s) are provided to the requesting application. 
         [0031]      FIG. 4  shows a flowchart for accessing a VM location in accordance with one or more embodiments of the invention. While the various steps in these flowcharts are presented and described sequentially, one of ordinary skill will appreciate that some or all of the steps may be executed in different orders, may be combined or omitted, and some or all of the steps may be executed in parallel. 
         [0032]    In Step  410 , the VM manager receives a request to access a VM location using a VM address. In Step  412 , the VM manager obtains a VM location version value for the VM location associated with the VM address. In Step  414 , the VM manager obtains the version value from the VM address submitted in the request. In Step  416 , the version values are compared. In Step  418 , a determination is made, based on the comparison, as to whether the version values match. 
         [0033]    If, in Step  418 , the version values match, then in Step  420 , the VM address is passed to the MMU, and the application gains access to the VM location. If, in Step  422 , the version values do not match, then in Step  422 , the VM manager logs an error for the application. In one embodiment of the invention, logging an error includes, but is not limited to, causing a segmentation fault (segfault) error. In one embodiment of the invention, the error sent to the requesting application informs the application that it has attempted to access a VM location using an outdated VM address version. 
         [0034]      FIG. 5  shows an example timeline in accordance with one or more embodiments of the invention. In Step  510 , the application ( 500 ) sends a request to store the word “California” in location “10002000.” In Step  512 , the VM manager ( 502 ) obtains the current VM location version value for the location “10002000,” which for the purposes of the example is “1000.” In one embodiment of the invention, the VM location version value is stored in a VM location version file maintained by the VM manager. In Step  514 , the VM manager ( 502 ) obtains the VM version value from the VM address submitted by the application ( 500 ), which for the purposes of the example, is “1000.” Also in Step  514 , the VM manager ( 502 ) compares the two values and determines that they match. In Step  516 , the VM manager ( 502 ) services the request and stores, via the MMU, the word “California” in memory using the VM address “10002000.” 
         [0035]    In Step  518 , the VM address “10002000” is stored by the application ( 500 ) in a separate process involving physical memory. In Step  520 , the application ( 500 ) determines that the VM location referred to by the VM address “10002000” is no longer needed, and the application ( 500 ) notifies the VM manager ( 502 ) that the VM location should be freed. However, due to a programming error, the VM address “10002000” remains stored (either in persistent memory or another VM location) as referring to a U.S. state for which the value is “California.” In Step  522 , the VM address “10002000” is added to the freed VM location list. 
         [0036]    In Step  524 , the application ( 500 ) requests to be allocated a VM location. In Step  526 , the VM manager ( 502 ) obtains the VM address “10002000” from the freed VM location list, and increments the VM location version value stored in the VM location version ( 506 ) to “1001.” In Step  528 , the VM manager ( 502 ) generates a new VM address using the new VM location version value “1001” and the VM address from the freed VM location list. For the purposes of this example, the generated VM address is “10012000.” In Step  530 , the VM manager ( 502 ) provides the VM address “10012000” to the application ( 500 ). 
         [0037]    In Step  532 , the application ( 500 ) sends a request to store the word “Texas” in location “10012000.” In Step  534 , the VM manager ( 502 ) obtains the current VM location version value for the location “10012000,” which for the purposes of the example is “1001.” In Step  536 , the VM manager ( 502 ) obtains the VM version value from the VM address submitted by the application ( 500 ), which for the purposes of the example, is “1001.” Also in Step  536 , the VM manager ( 502 ) compares the two values and determines that they match. In Step  538 , the VM manager ( 502 ) services the request and stores, via the MMU, the word “Texas” in memory using the VM address “10012000.” 
         [0038]    In Step  540 , the application ( 500 ) sends a request to access the VM location corresponding to VM address “10002000,” expecting the value to be “California.” In Step  542 , the VM manager ( 502 ) obtains the current VM location version value for the location “10002000,” which for the purposes of the example is “1001.” In Step  544 , the VM manager ( 502 ) obtains the VM version value from the VM address submitted by the application ( 500 ), which for the purposes of the example, is “1000.” Also in Step  544 , the VM manager ( 502 ) compares the two values and determines that they do not match. At Step  546 , the VM manager ( 502 ) sends a segfault error to application ( 500 ). 
         [0039]    In the current example, if the version of the address “10002000” submitted by the application ( 500 ) had not been present, the VM manager ( 502 ) would have provided the data (“Texas”) to the application ( 500 ). However, the portion of the application ( 500 ) requesting the data would have expected the value to be “California.” By allowing access via the outdated VM address, the application ( 500 ) would have generated unexpected results, either immediately or at some point in the future. 
         [0040]    Embodiments of the invention may be implemented on virtually any type of computer regardless of the platform being used. For example, as shown in  FIG. 6 , a computer system ( 600 ) includes one or more processor(s) ( 602 ) such as a central processing unit (CPU) or other hardware processor(s), associated memory ( 604 ) (e.g., random access memory (RAM), cache memory, flash memory, etc.), a storage device ( 606 ) (e.g., a hard disk, an optical drive such as a compact disk drive or digital video disk (DVD) drive, a flash memory stick, etc.), and numerous other elements and functionalities typical of today&#39;s computers (not shown). In one or more embodiments of the invention, the processor ( 602 ) is hardware. For example, the processor may be an integrated circuit. The computer system ( 600 ) may also include input means, such as a keyboard ( 608 ), a mouse ( 610 ), or a microphone (not shown). Further, the computer system ( 600 ) may include output means, such as a monitor ( 612 ) (e.g., a liquid crystal display (LCD), a plasma display, or cathode ray tube (CRT) monitor). The computer system ( 600 ) may be connected to a network ( 614 ) (e.g., a local area network (LAN), a wide area network (WAN) such as the Internet, or any other type of network) via a network interface connection (not shown). Those skilled in the art will appreciate that many different types of computer systems exist, and the aforementioned input and output means may take other forms. Generally speaking, the computer system ( 600 ) includes at least the minimal processing, input, and/or output means necessary to practice embodiments of the invention. 
         [0041]    Further, those skilled in the art will appreciate that one or more elements of the aforementioned computer system ( 600 ) may be located at a remote location and connected to the other elements over a network. Further, embodiments of the invention may be implemented on a distributed system having a plurality of nodes, where each portion of the invention may be located on a different node within the distributed system. In one embodiment of the invention, the node corresponds to a computer system. Alternatively, the node may correspond to a processor with associated physical memory. The node may alternatively correspond to a processor or micro-core of a processor with shared memory and/or resources. Further, software instructions in the form of computer readable program code to perform embodiments of the invention may be stored, temporarily or permanently, on a non-transitory computer readable storage medium, such as a compact disc (CD), a diskette, a tape, memory, or any other computer readable storage device. 
         [0042]    While the invention has been described with respect to a limited number of embodiments, those skilled in the art, having benefit of this disclosure, will appreciate that other embodiments can be devised which do not depart from the scope of the invention as disclosed herein. Accordingly, the scope of the invention should be limited only by the attached claims.