Systems and methods for merging virtual layers

A method for merging virtual layers may include creating a virtual merger layer. The method may further include identifying a first virtual layer to be added to the virtual merger layer, the first virtual layer being programmed to execute within a process space of the first virtual layer. The method may also include identifying a second virtual layer to be added to the virtual merger layer, the second virtual layer being programmed to execute within a process space of the second virtual layer that is distinct from the process space of the first virtual layer. The method may also include linking the first and second virtual layers to the virtual merger layer such that when the virtual merger layer is activated, the first and second virtual layers execute within a process space of the virtual merger layer. Various other methods, systems, and computer-readable media are also disclosed.

BACKGROUND

Information Technology (IT) administrators may spend a substantial amount of time managing software applications. Managing software applications may include resolving application conflicts, repairing damaged applications, migrating to new versions of applications, installing applications, and patching applications. These tasks may be frustrating and time-consuming.

Application virtualization technologies may simplify many IT administration tasks. For example, application virtualization may allow an administrator to turn on or off a user's access to applications and data, which may reduce the time it takes to provide users with the resources they need. Application virtualization may also allow an administrator to reset broken applications to a known-good state without fear of damaging other applications. Application virtualization may ensure that each virtualized application has its own copy of DLL files that it would normally share with other applications. This eliminates conflicts that occur when two or more applications may require different versions of the same DLL, thereby rescuing administrators from a condition commonly referred to as “DLL Hell.”

Application virtualization may allow different versions of the same application to peacefully coexist. This means that an administrator may keep older versions intact and available while testing new versions. Even after migrating to a new version, an administrator may quickly rollback to the previous version at any time.

Despite the numerous advantages of application virtualization, traditional virtualization technologies may not efficiently handle interactions between applications installed in different virtual locations. For example, a version of JAVA may be installed to one virtual layer, but an application requiring that version of JAVA may be installed in a different virtual layer. What is needed, therefore, is a more effective mechanism for handling virtualization of multiple applications.

SUMMARY

As will be described in greater detail below, the instant disclosure generally relates to systems and methods for merging virtual layers. In one example, the systems described herein may 1) create a virtual merger layer, 2) identify a first virtual layer to be added to the virtual merger layer, the first virtual layer being programmed to execute within a process space of the first virtual layer, 3) identify a second virtual layer to be added to the virtual merger layer, the second virtual layer being programmed to execute within a process space of the second virtual layer that is distinct from the process space of the first virtual layer, and 4) link the first and second virtual layers to the virtual merger layer such that when the virtual merger layer is activated, the first and second virtual layers execute within a process space of the virtual merger layer.

In one example, the systems described herein may redirect first and second file access attempts to different locations depending on whether the virtual merger layer is activated. When the virtual merger layer is not activated, the systems described herein may redirect a first file access request to the first virtual layer and redirect a second file access request to the second virtual layer. When the virtual merger layer is activated, the systems described herein may redirect the first file access request to the virtual merger layer and redirect the second file access request to the virtual merger layer.

In some embodiments, the systems described herein may activate the virtual merger layer. In such embodiments, activation of the virtual merger layer may trigger activation of the first and second virtual layers. Requests to modify or create files and/or settings may be directed to the virtual merger layer. For example, the systems described herein may identify an attempt to change a file or setting stored in the first virtual layer while the virtual merger layer is active. The systems described herein may further apply the change to the file or setting in the virtual merger layer instead of the first virtual layer. As another example, the systems described herein may identify an attempt to write a new file or setting to the first virtual layer while the virtual merger layer is active and may write the new file or setting to the virtual merger layer instead of the first virtual layer.

The process space of the first virtual layer may be independent of, and may be controlled separately from, the process space of the second virtual layer. For example, the process spaces of the first and second virtual layers may each execute within a process space that contains data, meta-data, and/or settings that may be set, edited, and/or or modified independently of other process spaces.

In one example, the first virtual layer may include files and/or settings of a first application installed to the first virtual layer. Similarly, the second virtual layer may include files and/or settings of a second application installed to the second virtual layer. In this example, the virtual merger layer may enable interaction between the first and second applications within the process space of the virtual merger layer.

The first and second virtual layers and the virtual merger layer may be stored on a computing system within an operating system environment of the computing system. The operating system environment of the computing system may include a process space that is distinct from the process space of the first virtual layer, the process space of the second virtual layer, and the process space of the virtual merger layer.

In one example, the systems described herein may retain files and/or settings stored in the first and second virtual layers in the first and second virtual layers when the first and second virtual layers are linked to the virtual merger layer. Thus, the virtual merger layer may remain empty when the first and second virtual layers are linked to the virtual merger layer.

In certain embodiments, a system for enabling virtual layers may include 1) a creation module programmed to create a virtual merger layer, 2) an identification module programmed to identify a first virtual layer to be added to the virtual merger layer, the first virtual layer being programmed to execute within a process space of the first virtual layer, and to identify a second virtual layer to be added to the virtual merger layer, the second virtual layer being programmed to execute within a process space of the second virtual layer that is distinct from the process space of the first virtual layer, 3) a linking module programmed to link the first and second virtual layers to the virtual merger layer such that when the virtual merger layer is activated, the first and second virtual layers execute within a process space of the virtual merger layer, and 4) one or more processors configured to execute at least one of the creation module, the identification module, and the linking module.

DETAILED DESCRIPTION OF EXEMPLARY EMBODIMENTS

As will be described in greater detail below, the instant disclosure generally relates to systems and methods for merging virtual layers. As will be explained in greater detail below, by linking two or more virtual layers to a virtual merger layer, virtual merger layers may facilitate interaction between applications installed in different virtual layers. In other words, virtual merger layers may enable administrators to run applications from different virtual layers in the same process space. Thus, virtual merger layers may allow applications to interact as though they are installed to the same virtual layer without risking potentially negative consequences of installing multiple applications to the same virtual layer. Embodiments of the instant disclosure may also provide various other features and advantages.

The following will provide, with reference toFIGS. 1-2,5, and6detailed descriptions of exemplary systems for merging virtual layers. Detailed descriptions of corresponding computer-implemented methods will also be provided in connection withFIG. 3, and detailed descriptions of an exemplary user interface will be provided in connection withFIG. 4. In addition, detailed descriptions of an exemplary computing system and network architecture capable of implementing one or more of the embodiments described herein will be provided in connection withFIGS. 7 and 8, respectively.

FIG. 1is a block diagram of an exemplary system100for merging virtual layers. As illustrated in this figure, exemplary system100may include one or more modules102for performing one or more tasks. For example, and as will be explained in greater detail below, exemplary system100may include creation module104programmed to create a virtual merger layer. Exemplary system100may also include an identification module106programmed to identify a first virtual layer to be added to the virtual merger layer. Identification module106may also be programmed to identify a second virtual layer to be added to the virtual merger layer.

In addition, and as will be described in greater detail below, exemplary system100may include linking module108programmed to link the first and second virtual layers to the virtual merger layer such that when the virtual merger layer is activated, the first and second virtual layers execute within a process space of the virtual merger layer. Although illustrated as separate elements, one or more of modules102inFIG. 1may represent portions of a single module or application.

As illustrated inFIG. 1, exemplary system100may also include one or more databases, such as databases120. In one example, databases120may include virtual layer data122and virtual merger layer data124. Databases120may represent portions of a single database or computing device or a plurality of databases or computing devices. For example, databases120may represent a portion of server206inFIG. 2, computing system710inFIG. 7, and/or portions of exemplary network architecture800inFIG. 8. Alternatively, databases120inFIG. 1may represent one or more physically separate devices capable of being accessed by a computing device, such as server206inFIG. 2, computing system710inFIG. 7, and/or portions of exemplary network architecture800inFIG. 8.

Exemplary system100inFIG. 1may be deployed in a variety of ways. For example, all or a portion of exemplary system100may represent portions of exemplary system200inFIG. 2. As shown inFIG. 2, system200may include a computing device202in communication with a server206via a network204. In one embodiment, and as will be described in greater detail below, computing device202may be programmed to perform input and output operations using an input module208and a display module210. Thus, computing device202may provide an interface to server206, which may include multiple virtual layers. Alternatively, embodiments of the instant disclosure may be implemented on a single device or system, with input module208and/or display module210located on the same device as virtual merger layer124.

Computing device202generally represents any type or form of computing device capable of reading computer-executable instructions. Examples of computing device202include, without limitation, laptops, desktops, servers, cellular phones, personal digital assistants (PDAs), multimedia players, embedded systems, combinations of one or more of the same, exemplary computing system710inFIG. 7, or any other suitable computing device.

Server206generally represents any type or form of computing device that is capable of communicating with computing device202to cooperatively perform any of the methods for enabling virtual layers described herein. Examples of server206include, without limitation, application servers and database servers configured to provide various database services and/or run certain software applications.

FIG. 3is a flow diagram of an exemplary computer-implemented method300for merging virtual layers. The steps shown inFIG. 3may be performed by any suitable computer-executable code and/or computing system. In some embodiments, the steps shown inFIG. 3may be performed by one or more of the components of system100inFIG. 1, system200inFIG. 2, computing system710inFIG. 7, and/or portions of exemplary network architecture800inFIG. 8.

At step302, one or more of the exemplary systems disclosed herein may create a virtual merger layer. For example, creation module104may create a virtual merger layer by designating a space for writing new data in the virtual merger layer.

Creation module104may create the virtual merger layer in a variety of contexts using one or more of a variety of techniques. The following discussion ofFIG. 4elaborates on an exemplary embodiment for creating a virtual merger layer in accordance with step302.

FIG. 4illustrates an exemplary graphical user interface (GUI)400for creating and managing virtual merger layers. As shown inFIG. 4, GUI400may include virtual layer management window402and virtual merger layer creation window438. Virtual layer management window402includes a number of representations404-414of virtual and other layers in a computing system, such as computing device202and/or server206. Specifically, virtual layer management window402includes a virtual layer404, a virtual layer406, a virtual layer408, a virtual layer410, a base layer412, and a virtual merger layer414. Each of virtual layers404-410and virtual merger layer414may be associated with a corresponding activation toggle416-424. GUI400is configured such that when a user selects one of activation toggles416-424, the corresponding layer from the layers404-410and414is activated or deactivated accordingly.

Virtual layer management window402also includes create button428, edit button430, and create merger button432. By selecting create button428, a user may create a new virtual layer, such as virtual layers404-410. Creation module104may create a virtual layer by designating a separate space for writing new data to that virtual layer.

Additionally or alternatively, creation module104may create a virtual layer in part by designating a name for the virtual layer (e.g., “virtual layer 4” or any other name). Creation module104may also designate rules for behavior of the virtual layer, including rules regarding file request redirection. For example, creation module104may establish rules regarding file request redirection by modifying the virtualization settings that are associated with a virtual layer.

As will be discussed in greater detail below, each virtual layer and virtual merger layer may execute within its own process space. The following discussion regardingFIG. 5provides examples of process spaces that correspond to virtual layers.FIG. 5is a block diagram illustrating exemplary process spaces500. Process spaces500may include virtual process spaces502and514of first and second virtual layers, respectively. Process spaces500may also include a base process space526of a base layer (e.g., a base file system of an operating system). Lastly, process spaces500may include a merger process space537of a virtual merger layer, as discussed more below.

In one example, merger process space537may be a process space of virtual merger layer414, virtual process space502may be a process space of virtual layer408, virtual process space514may be a process space of virtual layer410, and base process space526may be a process space of a host operating system environment. Virtual layers404and406may be linked to virtual merger layer414and may execute within merger process space537.

Each of the process spaces502,514,526, and537may include Operating System (OS) descriptors, image and memory, security attributes, processor state, and/or any other suitable resource. As shown, virtual process space502may include OS descriptors504, image and memory506, security attributes508, and a processor state510. Similarly, virtual process space514may include OS descriptors516, image and memory518, security attributes520, and a processor state522. Base process space526may include OS descriptors528, image and memory530, security attributes532, and a processor state534. Merger process space537may include OS descriptors538, image and memory540, security attributes542, and a processor state544.

Operating system descriptors may be descriptors of resources that are allocated to a process, such as file descriptors (UNIX terminology) or handles (WINDOWS), and data sources and sinks. An image portion of a process space may include an image of the executable machine code associated with an application. Memory of a process space may typically include some region of virtual memory, and may include the executable code, process-specific data (input and output), a call stack (to keep track of active subroutines and/or other events), and a heap to hold intermediate computation data generated during run time. Security attributes may include the process owner and the set of permissions (allowable operations) for the process. Processor state, or context, may include the contents of registered and physical memory addressing. The operating system may hold some, most, or all of the above information about active processes in data structures called process control blocks.

A process space may include any set of processes that share of one or more of the resources shown in any of the process spaces502,514,526, and537shown inFIG. 5. For example, processes that share security attributes and/or virtualization settings may be considered to share a process space. More generally, for the purposes of this disclosure, the term “process space” may include a collection of related processes that are independent of, and can be controlled separately from, all other processes on a system.

The phrase “process space” may also refer to a file system filter driver's view of a set of processes. For example, a file system filter driver may direct calls from a set of processes to a layer (e.g., a base layer, a virtual layer, etc.). This set of processes may be referred to as a process space.

The process spaces show inFIG. 5may not all exist or be present on a system at the same time. For example, virtual process space502may be present on a system when a first virtual layer is active, and virtual process space514may be present on the system when a second virtual layer is active. However, when the first and second virtual layers are not active, virtual process spaces502and514may not be present on the system or may not be in an active state on the system. In other words, a process space of layer may be an execution environment that is present on a system when the layer is active (i.e., executing within the process space) but not present when the layer is inactive. Thus, merger process space537may be present on the system when a virtual merger layer is active, but may not be present on the system when the virtual merger layer is not active.

In embodiments of the instant disclosure, a file system filter driver may implement one or more rules to redirect file system calls to virtual layers.FIG. 6is a block diagram600illustrating a system for directing a file request. The following discussion ofFIG. 6explains how rules for file system request redirection may be established for a virtual layer by creation module104.FIG. 6illustrates a diagram of how a file request may be modified, or remain unmodified, according to whether one or more virtual layers are activated. Specifically,FIG. 6illustrates how a request602for a particular file (“c:\folder1\file.txt”) may be modified or remain unmodified depending on whether a virtual layer614and/or virtual merger layer616are activated. In the case that neither virtual layer614nor virtual merger layer616are activated, then file request602may remain unmodified, as shown in file request604. In that case, file request602may proceed directly, and without modification, to base layer612. Specifically, file request604is directed to c:\folder1\, which is part of base layer612.

In contrast, when virtual layer614is activated, then file request602may be modified so that the file “file.txt” is retrieved from the virtual layer614instead of base layer612. Specifically, file request602may be modified so that the request no longer attempts to access c:\folder1\, but rather attempts to access c:\folder1_VL\, which may be a part of virtual layer614. For example, a filter driver within the particular computing system, such as server206and/or computing device202, may intercept the original file request602. The filter driver may modify file request602based on a determination that a virtual layer, such as virtual layer614, is activated. In the case that the virtual layer is not activated, the filter driver may allow the original file request602to proceed to the base file system (i.e., base layer612) without modification. Modified file request608and virtual merger layer616will be discussed more below.

In general, a disk space610may be divided into separate storage locations for one or more layers. For example, disc space610inFIG. 6may be divided into base layer612, virtual layer614, and virtual merger layer616. Each of base layer612, virtual layer614, and virtual merger layer616may be distinct from the others (i.e., data may be independently stored to any of those storage locations). Alternatively, one or more of base layer612, virtual layer614, and virtual merger layer616may only additionally store data that is distinct or different from data that is already stored in another layer, such as base layer612. For example, virtual layer614may only store data that is unique to virtual layer614, without additionally storing data that is redundant to data stored in base layer612.

When a virtual layer is created, creation module104may establish rules for file request redirection. For example, creation module104may establish rules for modifying file requests so that file requests from one or more processes are redirected from base layer612to one or more virtual layers, such as virtual layer614. Specifically, creation module104may establish the rule “add ‘_VL’ to the directory of the file request if the request is from process ‘x’.” That may be a rule establishing file request redirection for virtual layer614shown inFIG. 6. By adding the text “_VL” to the directory of the file request, creation module104may ensure that file requests, such as file request602, are redirected to the appropriate virtual layer for a particular process. The above-discussed rule is merely exemplary, however, and this application contemplates systems and methods that perform file request redirection, and/or any other type of application virtualization, in any suitable manner. For example, the letter of the drive may be modified so that file requests to the “C” drive are redirected to another drive, such as the “D” drive. Similarly, instead of modifying the directory of the file request, creation module104may also establish rules for modifying the name of the file itself. For example, the file name “file.txt” may be changed to the form “file_VL.txt.” In that case, files of separate layers may be stored within a same directory while being distinguished or identified by their respective naming conventions. Further, registry and other settings may be separately stored in each of the base layer612, virtual layer614, and virtual merger layer616.

Returning toFIG. 4, a user may create a virtual merger layer at step302by pressing create merger button432in GUI400. Creation module104may create a virtual merger layer in substantially the same way that creation module104creates a virtual layer (e.g., when a user presses create button428). When the virtual merger layer is active, the virtual merger layer may run in a merger process space, such as merger process space537shown inFIG. 5. As further shown inFIG. 5, merger process space537may be substantially the same as virtual process spaces502and514as well as base process space526. As for the creation of virtual layers, creation module102may create a virtual merger layer in part by establishing rules for file request redirection that redirect file requests from one or more processes to the virtual merger layer.

As shown inFIG. 6, certain file system calls may be redirected to virtual merger layer616. For example,FIG. 6shows that file request602may be modified so that the file request no longer refers to c:\folder1\, but rather refers to c:\folder1_VML\, which may be a part of virtual merger layer616. As discussed below regarding step308ofFIG. 3, virtual merger layer616may only record new data or changes to data, such that virtual merger layer616is empty upon creation (e.g., because no new data or changes to data have yet been recorded).

Requests for files (or other data) that are stored prior to the creation and activation of virtual merger layer616may be directed to the virtual layer (e.g., virtual layer614) where the file or data was originally stored. Alternatively, when virtual merger layer616is activated, requests for files (or other data) that are stored prior to the creation and activation of virtual merger layer616may be directed to virtual merger layer616, which may fulfill the requests with data from the virtual layer where the data was originally stored (i.e., virtual merger layer616may reference data in virtual layers linked to virtual merger layer616).

When virtual merger layer616is activated, virtual merger layer616may record changes to data and/or new data that would have been written to a linked virtual layer, such as virtual layer614, had virtual merger layer616not been active. For example, the new version of a file may be stored in virtual merger layer616(alternatively, only information indicating the changes to may be stored in virtual merger layer616). While virtual merger layer616is active, subsequent read requests to the file may be answered with the data from virtual merger layer616rather than data from linked virtual layer614. If virtual merger layer616is deactivated and virtual layer614is activated independent of virtual merger layer616, read requests to the file may be answered with data from virtual layer614rather than virtual merger layer616.

Returning toFIG. 3, at step304, one or more of the systems described herein may identify a first virtual layer to be added to the virtual merger layer, the first virtual layer being programmed to execute within a process space of the first virtual layer. For example, identification module106may identify a first virtual layer to be added to the virtual merger layer.

Identification module106may identify a first virtual layer to be added to the virtual merger layer in a variety of manners. For example,FIG. 4shows how a user may select one of the virtual layers404-410for inclusion within a virtual merger layer. As described above, virtual layer management window402may include a complete list of all layers, including virtual layers, present on a computing system, such as computing device202or server206, and available to the user for inclusion within a virtual merger layer. The user may select one of the virtual layers404-410by selecting (e.g., clicking with the pointing device) on the respective representation.

As a more specific example, a user may create a virtual merger layer in accordance with step302by selecting create merger button432. Upon selecting create merger button432, virtual merger layer creation window438may appear. Virtual merger layer creation window438may include a list of virtual layers for inclusion within the virtual merger layer. For example,FIG. 4shows that virtual layer404and virtual layer406have been previously selected for inclusion within the virtual merger layer. The user may select add button434to add an additional virtual layer to the virtual merger layer. For example, upon selecting add button434, the user may select another virtual layer, such as virtual layer410, for inclusion in the virtual merger layer. The user may select the additional virtual layer by clicking on the virtual layer representation410with the pointing device and/or by providing any other suitable input.

After selecting an additional virtual layer, such as virtual layer410, the representation of that additional virtual layer may appear in the list of virtual layers in virtual layer creation window438. For example, representation410may then appear beneath the virtual layer representations404and406in virtual merger layer creation window438. The user may then add more virtual layers for inclusion within the virtual merger layer as desired.

At virtual merger name prompt440, the user may enter a name for the virtual merger layer. For example, the user may designate the name “virtual merger layer 1” or any other character string (or other name) for the virtual merger layer.

As noted, the first virtual layer may be programmed to execute within a process space of the first virtual layer. For example, when the first virtual layer is activated, a file system filter driver may redirect requests from one or more processes to the first virtual layer. Thus, the first virtual layer may be programmed to execute within a process space of the first virtual layer by virtue of settings implemented by the file system filter driver. Various other virtualization technologies and/or techniques may also enable the first virtual layer to execute in its own process space.

Returning toFIG. 3, at step306one or more of the systems described herein may identify a second virtual layer to be added to the virtual merger layer, the second virtual layer being programmed to execute within a process space of the second virtual layer. For example, identification module106may identify a second virtual layer to be added to the virtual merger layer.

Identification module106may identify the second virtual layer to be added to the virtual merger layer at step306in a variety of ways. These may include substantially the same way that identification module106identifies the first virtual layer to be added to the virtual merger layer at step304. For example, identification module106may identify one or more of the first and second virtual layers based on user input to GUI400shown inFIG. 4. Specifically, a user may select the virtual layers from a list of available virtual layers in virtual layer management window402. Upon selecting the virtual layers, they may appear in virtual merger layer creation window438.

As also discussed above, identification module106may identify the second virtual layer in any other suitable manner, such as by using a different GUI (e.g., one based on merely textual display). Identification module106may also identify the second virtual layer automatically without user input based on one or more of the factors discussed above regarding step304.

The virtual layers identified at steps304and306may be programmed to execute within their own respective process spaces. That is, the first virtual layer may be programmed to execute within its own process space, and the second virtual layer may be programmed to execute within its own process space that is distinct from the process space of the first virtual layer. Returning toFIG. 5, the first virtual layer may execute within virtual process space502and the second virtual layer may execute within virtual process space514, for example. As shown inFIG. 5, process space502and process space514may be distinct. For example, a file system filter driver may redirect calls from a first set of processes (e.g., process associated with the first virtual layer) to process space502and may redirect calls from a second set of processes (e.g., processes associated with the second virtual layer) to process space514.

Returning toFIG. 6, the first virtual layer may correspond to virtual layer614. In that case, the first virtual layer may execute within process space502ofFIG. 5. Virtualization settings for the first virtual layer may designate file request redirection rules, such as the rule that the directory of the file request should be modified to include “_VL”, as shown inFIG. 6. In contrast, the second virtual layer may correspond to an additional virtual layer (not shown inFIG. 6) included within disc space610. The second virtual layer may execute within process space514ofFIG. 5. Virtualization settings may designate separate file request redirection rules for redirecting file requests to the second virtual layer.

Returning toFIG. 3, at step308, one or more of the systems described herein may link the first and second virtual layers to the virtual merger layer such that the first and second virtual layers execute within a process space of the virtual merger layer. For example, linking module108may link virtual layer404and virtual layer406to virtual merger layer414.

Linking module108may link first and second virtual layers to a virtual merger layer in a variety of manners. Linking a virtual layer to a virtual merger layer generally involves any process for associating a virtual layer with a virtual merger layer in a manner that causes the virtual layer to execute with a process space of the virtual merger layer when the virtual merger layer is activated.

As an example of how a virtual layer may be linked to a virtual merger layer, after identification module106has identified the first and second virtual layers for inclusion within the virtual merger layer, the user may select done button436to thereby link the first and second virtual layers to the virtual merger layer. After the user selects done button436, the first and second virtual layers may be associated with the virtual merger layer so that activation of the virtual merger layer automatically activates the first and second virtual layers and causes the first and second virtual layers to execute within the process space of the virtual merger layer.

Linking module108may link the first and second virtual layers to the virtual merger layer in part by modifying virtualization settings to redirect file system calls to the virtual merger layer. For example, file system calls that would be directed to the first and second virtual layers (i.e., the layers linked to the virtual layers) when the virtual merger layer is inactive would be redirected to the first and second virtual merger layers when they are active. In various embodiments, when the virtual merger layer is active, a file system filter driver may view the first and second virtual layers as executing within the same process space (i.e., the process space of the virtual merger layer).

In some embodiments, linking module108may link the first and second virtual layers to the virtual merger layer such that all file system calls that would have been directed to the first and second virtual layers are directed to the virtual merger layer when the virtual merger layer is activated. In such embodiments, when the virtual merger layer is activated, changes to data and new data may be written to the virtual merger layer, while attempts to read data that existed in the linked virtual layers before activation of the virtual merger layer may pass through the virtual merger layer to data in the linked virtual layers.

In other embodiments, linking module108may link the first and second virtual layers to the virtual merger layer such that file requests are redirected to the first and second virtual layers for the purposes of reading files and data stored prior activation of the virtual merger layer, but may be redirected to virtual merger layer616for the purposes of creating or modifying files or data. Thus, if file request602is a request to read a file stored in a virtual layer prior to the linking of that virtual layer to a virtual merger layer and activation of the virtual merger layer, then file request602may be modified in the form of file request606, and thereby redirected to the original virtual layer614(e.g., the first virtual layer). In contrast, if file request602is a request to create or modify data, then file request602may be modified in the form of file request608, and thereby redirected to virtual merger layer616. In summary, when the virtual merger layer is active, read requests to preexisting files and/or settings (i.e., files and/or settings present in a virtual layer before the virtual layer is linked to a virtual merger layer and the virtual merger layer is activated) may be directed to the first and second virtual layers, but the creation and modification of files and/or settings may be performed in the virtual merger layer (e.g., in a separate and unique portion of disc space for the virtual merger layer).

As noted, a virtual merger layer may enable two or more distinct virtual layers to execute within the same process space (i.e., the process space of the virtual merger layer). Thus, applications installed in different virtual layers that are linked to a virtual layer may interact within the same process space when the virtual layer is active. Administrators may therefore be able to reap the advantages of installing applications to distinct virtual layers (i.e., avoiding conflicts) while also being able to activate a virtual merger layer to run the applications in the same process space when desired. Furthermore, by linking virtual layers to a virtual merger layer, a user may enable multiple virtual layers without storing changes or modifications to either one of, or both of, those virtual layers. Rather, the changes or modifications may be stored to the separate space of the virtual merger layer, thereby allowing the user to toggle between the state of an application as captured in the virtual merger layer (e.g., by activating the virtual merger layer) and the state of an application in its own virtual layer (e.g., by deactivating the virtual merger layer and activating the application's virtual layer).

FIG. 7is a block diagram of an exemplary computing system710capable of implementing one or more of the embodiments described and/or illustrated herein. Computing system710broadly represents any single or multi-processor computing device or system capable of executing computer-readable instructions. Examples of computing system710include, without limitation, workstations, laptops, client-side terminals, servers, distributed computing systems, handheld devices, or any other computing system or device. In its most basic configuration, computing system710may include at least one processor714and a system memory716.

Processor714generally represents any type or form of processing unit capable of processing data or interpreting and executing instructions. In certain embodiments, processor714may receive instructions from a software application or module. These instructions may cause processor714to perform the functions of one or more of the exemplary embodiments described and/or illustrated herein. For example, processor714may perform and/or be a means for performing, either alone or in combination with other elements, one or more of the creating, identifying, linking, activating, redirecting, applying, writing, controlling, enabling, retaining, and/or remaining steps described herein. Processor714may also perform and/or be a means for performing any other steps, methods, or processes described and/or illustrated herein.

System memory716generally represents any type or form of volatile or non-volatile storage device or medium capable of storing data and/or other computer-readable instructions. Examples of system memory716include, without limitation, random access memory (RAM), read only memory (ROM), flash memory, or any other suitable memory device. Although not required, in certain embodiments computing system710may include both a volatile memory unit (such as, for example, system memory716) and a non-volatile storage device (such as, for example, primary storage device732, as described in detail below). In one example, one or more of modules102fromFIG. 1may be loaded into system memory716.

In certain embodiments, exemplary computing system710may also include one or more components or elements in addition to processor714and system memory716. For example, as illustrated inFIG. 7, computing system710may include a memory controller718, an Input/Output (I/O) controller720, and a communication interface722, each of which may be interconnected via a communication infrastructure712. Communication infrastructure712generally represents any type or form of infrastructure capable of facilitating communication between one or more components of a computing device. Examples of communication infrastructure712include, without limitation, a communication bus (such as an ISA, PCI, PCIe, or similar bus) and a network.

Memory controller718generally represents any type or form of device capable of handling memory or data or controlling communication between one or more components of computing system710. For example, in certain embodiments memory controller718may control communication between processor714, system memory716, and I/O controller720via communication infrastructure712. In certain embodiments, memory controller718may perform and/or be a means for performing, either alone or in combination with other elements, one or more of the steps or features described and/or illustrated herein, such as creating, identifying, linking, activating, redirecting, applying, writing, controlling, enabling, retaining, and/or remaining.

I/O controller720generally represents any type or form of module capable of coordinating and/or controlling the input and output functions of a computing device. For example, in certain embodiments I/O controller720may control or facilitate transfer of data between one or more elements of computing system710, such as processor714, system memory716, communication interface722, display adapter726, input interface730, and storage interface734. I/O controller720may be used, for example, to perform and/or be a means for performing, either alone or in combination with other elements, one or more of the creating, identifying, linking, activating, redirecting, applying, writing, controlling, enabling, retaining, and/or remaining steps described herein. I/O controller720may also be used to perform and/or be a means for performing other steps and features set forth in the instant disclosure.

Communication interface722broadly represents any type or form of communication device or adapter capable of facilitating communication between exemplary computing system710and one or more additional devices. For example, in certain embodiments communication interface722may facilitate communication between computing system710and a private or public network including additional computing systems. Examples of communication interface722include, without limitation, a wired network interface (such as a network interface card), a wireless network interface (such as a wireless network interface card), a modem, and any other suitable interface. In at least one embodiment, communication interface722may provide a direct connection to a remote server via a direct link to a network, such as the Internet. Communication interface722may also indirectly provide such a connection through, for example, a local area network (such as an Ethernet network), a personal area network, a telephone or cable network, a cellular telephone connection, a satellite data connection, or any other suitable connection.

In certain embodiments, communication interface722may also represent a host adapter configured to facilitate communication between computing system710and one or more additional network or storage devices via an external bus or communications channel. Examples of host adapters include, without limitation, SCSI host adapters, USB host adapters, IEEE 1394 host adapters, SATA and eSATA host adapters, ATA and PATA host adapters, Fibre Channel interface adapters, Ethernet adapters, or the like. Communication interface722may also allow computing system710to engage in distributed or remote computing. For example, communication interface722may receive instructions from a remote device or send instructions to a remote device for execution. In certain embodiments, communication interface722may perform and/or be a means for performing, either alone or in combination with other elements, one or more of the creating, identifying, linking, activating, redirecting, applying, writing, controlling, enabling, retaining, and/or remaining steps disclosed herein. Communication interface722may also be used to perform and/or be a means for performing other steps and features set forth in the instant disclosure.

As illustrated inFIG. 7, computing system710may also include at least one display device724coupled to communication infrastructure712via a display adapter726. Display device724generally represents any type or form of device capable of visually displaying information forwarded by display adapter726. Similarly, display adapter726generally represents any type or form of device configured to forward graphics, text, and other data from communication infrastructure712(or from a frame buffer, as known in the art) for display on display device724.

As illustrated inFIG. 7, exemplary computing system710may also include at least one input device728coupled to communication infrastructure712via an input interface730. Input device728generally represents any type or form of input device capable of providing input, either computer or human generated, to exemplary computing system710. Examples of input device728include, without limitation, a keyboard, a pointing device, a speech recognition device, or any other input device. In at least one embodiment, input device728may perform and/or be a means for performing, either alone or in combination with other elements, one or more of the creating, identifying, linking, activating, redirecting, applying, writing, controlling, enabling, retaining, and/or remaining steps disclosed herein. Input device728may also be used to perform and/or be a means for performing other steps and features set forth in the instant disclosure.

As illustrated inFIG. 7, exemplary computing system710may also include a primary storage device732and a backup storage device733coupled to communication infrastructure712via a storage interface734. Storage devices732and733generally represent any type or form of storage device or medium capable of storing data and/or other computer-readable instructions. For example, storage devices732and733may be a magnetic disk drive (e.g., a so-called hard drive), a floppy disk drive, a magnetic tape drive, an optical disk drive, a flash drive, or the like. Storage interface734generally represents any type or form of interface or device for transferring data between storage devices732and733and other components of computing system710. In one example, databases120fromFIG. 1may be stored in primary storage device732.

In certain embodiments, storage devices732and733may be configured to read from and/or write to a removable storage unit configured to store computer software, data, or other computer-readable information. Examples of suitable removable storage units include, without limitation, a floppy disk, a magnetic tape, an optical disk, a flash memory device, or the like. Storage devices732and733may also include other similar structures or devices for allowing computer software, data, or other computer-readable instructions to be loaded into computing system710. For example, storage devices732and733may be configured to read and write software, data, or other computer-readable information. Storage devices732and733may also be a part of computing system710or may be a separate device accessed through other interface systems.

In certain embodiments, storage devices732and733may be used, for example, to perform and/or be a means for performing, either alone or in combination with other elements, one or more of the creating, identifying, linking, activating, redirecting, applying, writing, controlling, enabling, retaining, and/or remaining steps disclosed herein. Storage devices732and733may also be used to perform and/or be a means for performing other steps and features set forth in the instant disclosure.

The computer-readable medium containing the computer program may be loaded into computing system710. All or a portion of the computer program stored on the computer-readable medium may then be stored in system memory716and/or various portions of storage devices732and733. When executed by processor714, a computer program loaded into computing system710may cause processor714to perform and/or be a means for performing the functions of one or more of the exemplary embodiments described and/or illustrated herein. Additionally or alternatively, one or more of the exemplary embodiments described and/or illustrated herein may be implemented in firmware and/or hardware. For example, computing system710may be configured as an application specific integrated circuit (ASIC) adapted to implement one or more of the exemplary embodiments disclosed herein.

FIG. 8is a block diagram of an exemplary network architecture800in which client systems810,820, and830and servers840and845may be coupled to a network850. Client systems810,820, and830generally represent any type or form of computing device or system, such as exemplary computing system710inFIG. 7.

Similarly, servers840and845generally represent computing devices or systems, such as application servers or database servers, configured to provide various database services and/or run certain software applications. Network850generally represents any telecommunication or computer network including, for example, an intranet, a wide area network (WAN), a local area network (LAN), a personal area network (PAN), or the Internet. In one example, client systems810,820, and/or830and/or servers840and/or845may include system100fromFIG. 1.

As illustrated inFIG. 8, one or more storage devices860(1)-(N) may be directly attached to server840. Similarly, one or more storage devices870(1)-(N) may be directly attached to server845. Storage devices860(1)-(N) and storage devices870(1)-(N) generally represent any type or form of storage device or medium capable of storing data and/or other computer-readable instructions. In certain embodiments, storage devices860(1)-(N) and storage devices870(1)-(N) may represent network-attached storage (NAS) devices configured to communicate with servers840and845using various protocols, such as NFS, SMB, or CIFS.

Servers840and845may also be connected to a storage area network (SAN) fabric880. SAN fabric880generally represents any type or form of computer network or architecture capable of facilitating communication between a plurality of storage devices. SAN fabric880may facilitate communication between servers840and845and a plurality of storage devices890(1)-(N) and/or an intelligent storage array895. SAN fabric880may also facilitate, via network850and servers840and845, communication between client systems810,820, and830and storage devices890(1)-(N) and/or intelligent storage array895in such a manner that devices890(1)-(N) and array895appear as locally attached devices to client systems810,820, and830. As with storage devices860(1)-(N) and storage devices870(1)-(N), storage devices890(1)-(N) and intelligent storage array895generally represent any type or form of storage device or medium capable of storing data and/or other computer-readable instructions.

In certain embodiments, and with reference to exemplary computing system710ofFIG. 7, a communication interface, such as communication interface722inFIG. 7, may be used to provide connectivity between each client system810,820, and830and network850. Client systems810,820, and830may be able to access information on server840or845using, for example, a web browser or other client software. Such software may allow client systems810,820, and830to access data hosted by server840, server845, storage devices860(1)-(N), storage devices870(1)-(N), storage devices890(1)-(N), or intelligent storage array895. AlthoughFIG. 8depicts the use of a network (such as the Internet) for exchanging data, the embodiments described and/or illustrated herein are not limited to the Internet or any particular network-based environment.

In at least one embodiment, all or a portion of one or more of the exemplary embodiments disclosed herein may be encoded as a computer program and loaded onto and executed by server840, server845, storage devices860(1)-(N), storage devices870(1)-(N), storage devices890(1)-(N), intelligent storage array895, or any combination thereof. All or a portion of one or more of the exemplary embodiments disclosed herein may also be encoded as a computer program, stored in server840, run by server845, and distributed to client systems810,820, and830over network850. Accordingly, network architecture800may perform and/or be a means for performing, either alone or in combination with other elements, one or more of the creating, identifying, linking, activating, redirecting, applying, writing, controlling, enabling, retaining, and/or remaining steps disclosed herein. Network architecture800may also be used to perform and/or be a means for performing other steps and features set forth in the instant disclosure.

As detailed above, computing system710and/or one or more components of network architecture800may perform and/or be a means for performing, either alone or in combination with other elements, one or more steps of an exemplary method for merging virtual layers.

In addition, one or more of the modules described herein may transform data, physical devices, and/or representations of physical devices from one form to another. For example, linking module108may transform virtual layer data122and/or virtual merger layer data124so that virtual layers are linked to a virtual merger layer, as discussed above. Linking module108may also receive user input to determine which virtual layers to link to the virtual merger layer, and present output indicating the result of the linking, as also discussed above (e.g. regardingFIG. 4).