Patent ID: 12242438

DETAILED DESCRIPTION

In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It will be apparent, however, that the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to avoid unnecessarily obscuring the present invention.

General Overview

Techniques are provided for implementing a pluggable database monitoring system configured to identify and group computing resources dedicated to a pluggable database, monitor the grouped computing resources, and determine whether the pluggable database should be migrated based on monitored metrics for the grouped computing resources.

In an embodiment, a grouping service identifies a set of running processes associated with a first pluggable database. The first pluggable database is hosted on a container database management system of a plurality of container database management systems hosted on a plurality of virtual machines. A first virtual machine, of the plurality of virtual machines, hosts a first container database management system, which hosts the first pluggable database. The grouping service, after identifying the set of running processes, generates a first grouping that contains the set of running processes associated with the first pluggable database.

In an embodiment, a monitoring service monitors, in real-time, aggregated resource usage of the set of running processes that make up the first grouping to determine if the aggregated resource usage of the first grouping exceeds a first threshold. The aggregated resource usage may incorporate resource types such as CPU usage, memory usage, and input/output usage rates. Additionally, the aggregated resource usage may represent an amount of contention on resource types such as the amount of time a process has to wait for memory to become free for processing tasks.

In an embodiment, in response to the aggregated resource usage of the first grouping exceeding the first threshold, the first pluggable database is migrated to a second container database management system of the plurality of container database management systems. The first threshold may be based on a percentage of resources allocated to the first pluggable database. For instance, the first threshold may represent when resource usage equals 80% of the total resources allocated to the first pluggable database.

In an embodiment, the grouping service may be implemented to maintain the set of running processes that are part of the grouping associated with the first pluggable database. If a process in the set of running processes, terminates, then the grouping service removes the terminated process from the grouping. If, however, a new process, associated with the first pluggable database, is spawned as a result of a new database session, then the grouping service would add the new process to the grouping.

In an embodiment, the monitoring service is implemented to generate alert notifications when monitored resource usage of the first pluggable database exceed a threshold, and send the alert notifications to users of the first pluggable database. The alert notifications may indicate that the first pluggable database is experiencing resource pressure and may be migrated to another container database management system.

By developing a system to group and monitor computing resources for a pluggable database running in a container database management system, resource pressure and bottlenecks may be identified and addressed prior to the pluggable database experiencing bottlenecks that may adversely affect user response time. Additionally, monitoring resources at a pluggable database level provide better insight into how resources are consumed by the pluggable database and may lead to less over-provisioning of resources, thereby freeing up computing resources that may be unnecessarily provisioned to a pluggable database that does not require as much resources as were provisioned.

Structural Overview

FIG.1illustrates an example computer-networking environment upon which an embodiment may be implemented. AlthoughFIG.1only depicts a particular number of each element, a practical environment may have many more, perhaps hundreds or thousands, of each of the elements illustrated inFIG.1.

InFIG.1, database server100represents a combination of software and resources on one or more computing devices that are communicatively coupled to databases (CDB122, CDB123, and CDB124) and are communicatively coupled to each other via network106and also to database client107. Database server100runs an operating system instance. An example of an operating system instance is described below in the “Software Overview”. CDB122and CDB123are implemented to run on virtual machine (VM)102. CDB124is implemented to run on VM104. VM102and VM104are virtual machines implemented to run one or more CDBs. In an embodiment, network106represents one or more local networks, wide area networks, internetworks, or service provider networks. In some embodiments, network106represents the Internet.

In an embodiment, the database client107represents a combination of software and resources on one or more computing devices which implements one or more applications that send commands to the database servers in order to retrieve, modify, delete, or submit data stored by the CDBs. An example of a computing device upon which the database servers may be implemented is described below in the “Hardware Overview”.

CDBs

FIG.2illustrates an example of a virtual machine executing multiple container databases, according to an embodiment. VM102is depicted running CDB112and CDB113. CDB112contains pluggable databases (PDB)202,204,206, and208, and CDB113contains PDB209. Both CDB112and CDB113may contain root databases (not pictured). Each of the PDBs202,204,206,208, and209are hosted and managed by database server100. In other embodiments CDB112and CDB113may contain more or less pluggable databases than the number of pluggable databases that are depicted inFIG.2. PDBs202,204,206,208, and209each include a database dictionary and tables files for storing data for database objects.

The database server100is responsible for establishing and managing database sessions for each of the respective PDBs in CDB112,113, and114. The database dictionary of the PDBs for which the database session is established determines the scope of the commands issued by database client107(e.g., which database(s) the command will be executed on), which permissions are checked, which database dictionaries will be used for the session, and so forth. A database session established for PDB may be referred to herein as running within the PDB. Referring back toFIG.1, the database server100includes a grouping service112, a monitoring service114, and a migration service116.

Grouping Service

In an embodiment, the grouping service112is implemented to identify processes associated with a particular PDB, and generate a grouping that contains each of the processes associated with the particular PDB. For example, when a new client session with PDB202is established a new process for that client session is spawned. If PDB202has 10 active sessions with 10 separate processes running for each of those sessions, then the 10 separate processes would be grouped together, by the grouping service112, to form a “process group” for PDB202.

In an embodiment, the grouping service112may add or remove processes from a process group depending on whether processes are terminated, new processes are spawned, or existing processes begin executing tasks for the PDB associated with the process group. For example PDB202is associated with a process group called “process group-A”. If a client establishes a new database session with PDB202, a new process for that session may be spawned, the grouping service112may identify that the new process is for the new database session for PDB202and may add the new process to the process group-A. In another example, if an existing database session for PDB202, for which there is an existing database process running, is terminated, then the existing database process would also be terminated and the grouping service112would remove the existing database process from the process group-A.

In an embodiment, the grouping service112may also generate a process group for CDBs, where the process group contains processes associated with the root database and other background processes that are not specific to any single PDB. Examples of processes that would be in a CDB process group include, but are not limited to, database writer processes, a log writer process, a checkpoint process, a system monitor process, a process monitor process, and any other process that may perform work for any of the PDBs running within the CDB. For example, the log writer process is tasked to write redo data from redo log buffers to redo log files. The log writer process is assigned to a CDB process group for CDB112. The grouping service112may move a process from the CDB process group to another process group if one of the background processes is executing a task for a specific PDB. For example, if the redo log buffer for PDB202is almost full, then the log writer process may be tasked to read the redo data from the redo log buffer for PDB202and write the redo data into redo log files. The grouping service112may detect that the log writer process, which is currently assigned to the CDB process group, is executing tasks for PDB202, and may reassign the log writer process to the process group-A (process group for PDB202) for the duration that the log writer process works on the task for PDB202. Once the log writer process has completed the task of writing redo data to the redo log files for PDB202, the grouping service112would then reassign the log writer process back to the CDB process group.

In an embodiment, the grouping service112may maintain a hierarchy of process groups for CDBs and PDBs running within the DBMS.FIG.3depicts an example hierarchy of process groups for databases running on VM102. Process group312represents a process group for CDB112and contains processes for the root database in CDB112and running background processes. Process group302represents a process group for PDB202and contains processes associated with PDB202. Process group304represents a process group for PDB204and contains processes associated with PDB204. Process group306represents a process group for PDB206and contains processes associated with PDB206. Process group308represents a process group for PDB208and contains processes associated with PDB208. Process group313represents a process group for CDB113and contains processes for the root database in CDB113and running background processes. Process group312represents a process group for PDB209and contains processes associated with PDB209.

Process group312is depicted as a parent process group for process groups302,304,306, and308, and process group313is depicted as a parent process group for process group312. This hierarchy allows processes from a parent group to be transferred to a child group when a process is executing tasks for a particular PDB. For instance, when the log writer process, which is assigned to process group312, begins processing redo logs for PDB208, then the grouping service112will reassign the log writer process to the process group308. When the log writer process is finished the grouping service112will reassign the log writer process back to process group312. If another PDB needs the log writer process, such as PDB204, then the group service112will reassign the log writer process to process group304when the log writer process begins executing tasks for PDB204.

In an embodiment, the grouping service112may send process group information to VMs running CDBs and PDBs. For example, the grouping service112, upon identifying the processes that belong to process group302(for PDB202), may send process group302information to VM102for the purposes of monitoring and aggregating metrics associated with the processes belonging to process group302. By sending process group302information to VM102, VM102may aggregate performance metrics for the group of processes in process group302and send the aggregated performance metrics to database server100. If the group of processes in process group302changes, e.g. a process in the group terminates, then the grouping service112may send updated process group302information to VM102, where the updated information omits the terminated process from process group302.

Monitoring Service

In an embodiment, the monitoring service114is implemented to monitor resource usage of processes in process groups and identify when processes in a process group are strained, which may cause processing bottlenecks for the associated PDB. For example, the monitoring service114may collect metrics related to CPU, RAM, and input/output (I/O) information to determine whether processes for a specific PDB are experiencing a bottleneck due to contention of resources.

One example of metrics monitored is pressure stall information (PSI) that may be provided by an operating system, such as the operating systems running on VM102and VM104. PSI metrics provide information for detecting resource shortages, in real-time. For example, PSI metrics may provide statistics detailing the percentage of time a process was delayed due to resource contention for memory resources or any other resource. PSI metrics are useful as they are dependent on the number of available resources and not strictly based on amount of usage. For example, PSI information may indicate that there is no immediate pressure on a process when the process is using 1 MB of memory and the PDB has been allocated 32 MB of memory. However, PSI information may indicate high pressure on the process when the process is using 1 MB of memory and the PDB has only been allocated 1-2 MB of memory. This would be high pressure in this situation because it is likely that the process will experience delays because the remaining processes in the process group will also contend for the 1-2 MB of memory.

One feature that PSI-implemented operating systems have is the ability to aggregate metrics for a set of processes. For example, the certain operating systems have the ability to organize processes hierarchically and may group processes together. The grouping service112may provide a process group, such as process group302, to the operating system running on VM102, in order to instruct VM102to collect PSI metrics for the group of processes belonging to process group302.

The monitoring service114may implement a set of resource thresholds to determine whether a PDB may be migrated from its current CDB to another CDB. In an embodiment, the monitoring service114may implement a percentage-based threshold where if resource usage exceeds a percentage of the resources available for a PDB, then the PDB may be migrated to another CDB. For example, the monitoring service114may implement a 90% resource usage threshold for PDB202, where when PSI information indicates that process group302usage is above 90% then the monitoring service114may send a request to the migration service116to migrate PDB202to another CDB.

In another embodiment, the monitoring service114may implement a soft percentage-based threshold where if resource usage exceeds a lower percentage of the resources available for a PDB, then the PDB may be migrated to another CDB and/or the monitoring service114may generate an alert for administrators of the PDB. For example, the soft percentage-based threshold may be based on a lower percentage, such as 80%, where if PSI information indicates that a process group's usage is above 80% then the monitoring service114may initiate the migration service116to migrate the PDB to another CDB, or the monitoring service114may generate an alert indicating the rising pressure on the PDB based on the rising usage rate. Embodiments for generating an alert based on exceeding a threshold are not limited to soft thresholds, and may be generated for any type of monitored event.

In yet another embodiment, the monitoring service114may consider historical usage rates for PDBs when determining whether a PDB should be migrated to another CDB. For example, historical resource usage rates of PDB206may indicate that PDB206usage plateaus after it uses 450 MB of 500 MB allocated. The monitoring service114may implement a second threshold, where a first threshold may be based on 90% usage (450 MB out of 500 MB) and the second threshold may be based on 95% usage (475 MB out of 500 MB). If the first threshold is exceeded by PSI metrics for process group306, the monitoring service114may generate alert notifications for database administrators of PDB206to indicate the high usage rate. If however, the second threshold is exceeded, then the usage of PDB206has exceeded the historical usage plateau and the monitoring service114may instruct the migration service116to migrate PDB206to another CDB.

In yet another embodiment, the monitoring service114may track the changing rates of usage of a process group to predict when a process group exceeds a threshold. For example, the monitoring service114may collect several PSI metrics over a period of time and may determine a rate of increasing resource usage. For instance, the PSI metrics for PDB206may indicate at time T1only 20% of total resources were used, at time T2only 30% of total resources were used, and at time T3only 40% of total resources were used. Based on the received PSI metrics the monitoring service114may calculate a usage increase of 10% per time T, which would indicate that at time T890% of the total resources would be used, which exceeds a first threshold. In this situation, the monitoring service114may issue an alert before the first threshold is exceeded, and/or may instruct the migration service116to migrate PDB206to another CDB.

The monitoring service114may monitor process groups associated with CDBs to determine whether a CDB needs to be migrated from one VM to another VM. For example, the monitoring service114may monitor PSI information for process group312(CDB112) to determine whether CDB112should be migrated from VM102to VM104. In an embodiment, the monitoring service114, when monitoring a parent process group, may aggregate PSI information from child process groups in order to determine aggregated usage for a CDB as well as PDBs running within the CDB. For example, when monitoring process group312, the monitoring service114may aggregate PSI information from process group312and process groups302,304,306, and308to determine whether CDB112and its running PDBs (PDB202-208) should be migrated.

In an embodiment, the monitoring service114may implement a policy that defines various thresholds and notification rules for PDBs and CDBs running in database server100. For example, PDBs202-208may be databases that have steady workloads and may enforce a 90% usage threshold policy for migrating PDBs. PDB209on the other hand, may be a PDB that processes a varying workload where usage rates may fluctuate. The monitoring service114may implement a usage rate based threshold, where the rate of change in PSI information may predict when resources will be exhausted. Additionally, the policy may be used to set different rules for notifying users of usage and pressure rates.

In an embodiment, the monitoring service114may gather metrics from VMs102and104, such as PSI information, CPU usage, memory usage, I/O usage, and any other performance metrics, to determine which VMs and CDBs have enough free resources to accept a PDB that needs to be migrated. If, for example based on PSI metrics, PDB208needs 2 CPU cores and 500 MB of memory, then the monitoring service114may report the resource requirements of PDB208to the migration service116to determine a destination for PDB208. The monitoring service114may also report PSI information for potential destinations for PDB208. For example, the monitoring service114may report PSI information for other CDBs and PSI information gathered at the VM level for VMs102and104, so that the migration service116may determine a suitable destination for PDB208.

Migration Service

In an embodiment, the migration service116is implemented to migrate a PDB from a source CDB to a destination CDB. The migration service116may determine the destination of a PDB to be migrated based upon the PDB metrics and metrics for potential destinations of the PDB. For example, if the migration service116is tasked with migrating the PDB202from CDB112to another CDB, then the migration service116may take into account the current PSI information for PDB202to determine the amount of resources needed to accommodate PDB202and current available resources provisioned to the available CDBs, which include CDB113and CDB114. If PDB208needs 500 MB of memory and CDB113has an available memory allocation size of 1 GB, then the migration service116may migrate PDB202from CDB112to CDB113. In an embodiment, the migration service116may take into account historical resource usage rates of a PDB when determining a destination for migrating the PDB. For instance, if historical PSI information for PDB204indicates that PDB204is memory usage intensive, then the migration service116may select a CDB that has ample memory resources to host PDB204.

The migration service116may migrate a CDB from one VM to another VM. In an embodiment, if the migration service116is instructed to migrate a CDB, and its PDBs to another VM, the migration service116may determine a destination VM based on PSI metrics collected for each of the available VMs. For example, if CDB112is to be migrated from VM102, the migration service116may determine the aggregated PSI metrics for CDB112, which is a sum of the PSI metrics for: CDB112, PDB202, PDB204, PDB206, and PDB208. The aggregated PSI metrics are then compared to available resources and PSI metrics specific to VM104and any other VM running within database server100(not pictured inFIG.1). The migration service116may determine that VM104has enough available resources to accommodate the migration of CDB112, and its corresponding PDBs202-208.

Process Overview

FIG.4is a flow diagram that depicts a process400for identifying and grouping computing resources dedicated to a pluggable database, monitoring the grouped computing resources, and determining whether the pluggable database should be migrated based on monitored metrics for the grouped computing resources, according to an embodiment. The steps of the process as shown inFIG.4may be implemented using processor-executable instructions that are stored in computer memory. For the purposes of providing a clear example, the steps ofFIG.4are described as being performed by processes executing in server node100. For the purposes of clarity, the process described may be performed with more or fewer steps than described inFIG.4.

At step402, process400identifies a set of running processes associated with a first pluggable database. In an embodiment, the grouping service112, identifies a set of running processes associated with a first pluggable database. PDB202may represent the first pluggable database. The grouping service112identifies all running processes associated with PDB202.

At step404, process400generates a first grouping that contains the set of running processes associated with the first pluggable database. In an embodiment, the grouping service112generates process group302that contains the running processes associated with PDB202. In one example, if a process in the process group302terminates, then the grouping service112may remove the process from the process group302. Similarly, if a new process, which is associated with PDB202, is created, then the grouping service112adds the new process to the process group302.

At step406, process400monitors, in real-time, aggregated resource usage of the first grouping to determine if the aggregated resource usage of the first grouping exceeds a first threshold. In an embodiment, the monitoring service114monitors aggregated resource usage for process group302to determine if the resource usage exceeds a first threshold. The aggregated resource usage may represent PSI information gathered from the operating system running on VM102, where the PSI information contains aggregated resource information for the running processes that make up process group302.

In an embodiment, the first threshold may be a percentage-based threshold used to determine when resource usage of process group302exceeds a certain percent of the total resources. For example, the first threshold may be set to be 90% of the resources allocated to PDB202. In another example, the first threshold may be based on historical usage values of processes associated with PDB202.

In an embodiment, prior to migrating PDB202, the monitoring service114may generate a resource usage alert notification that indicates that PDB202is experiencing resource pressure. The alert notification may be sent to clients associated with PDB202, including database administrators.

At step408, process400migrates the first pluggable database to a second container DBMS of a plurality of container DBMSs. In an embodiment, the migration service116migrates the PDB202from CDB112to CDB113. The migration service116may determine, for each available CDB, amounts of available resources to determine which CDB is able to accommodate PDB202. Based on the amount of resource needed to host PDB202and amounts of available resources on the available CDBs, the migration service116selects CDB113to host PDB202. The migration service116then migrates PDB202from CDB112to CDB113.

Software Overview

FIG.5is a block diagram of a basic software system500that may be employed for controlling the operation of computing system600ofFIG.6. Software system500and its components, including their connections, relationships, and functions, is meant to be exemplary only, and not meant to limit implementations of the example embodiment(s). Other software systems suitable for implementing the example embodiment(s) may have different components, including components with different connections, relationships, and functions.

Software system500is provided for directing the operation of computing system600. Software system500, which may be stored in system memory (RAM)606and on fixed storage (e.g., hard disk or flash memory)610, includes a kernel or operating system (OS)510.

The OS510manages low-level aspects of computer operation, including managing execution of processes, memory allocation, file input and output (I/O), and device I/O. One or more application programs, represented as502A,502B,502C . . .502N, may be “loaded” (e.g., transferred from fixed storage610into memory606) for execution by the system500. The applications or other software intended for use on computer system600may also be stored as a set of downloadable computer-executable instructions, for example, for downloading and installation from an Internet location (e.g., a Web server, an app store, or other online service).

Software system500includes a graphical user interface (GUI)515, for receiving user commands and data in a graphical (e.g., “point-and-click” or “touch gesture”) fashion. These inputs, in turn, may be acted upon by the system500in accordance with instructions from operating system510and/or application(s)502. The GUI515also serves to display the results of operation from the OS510and application(s)502, whereupon the user may supply additional inputs or terminate the session (e.g., log off).

OS510can execute directly on the bare hardware520(e.g., processor(s)604) of computer system600. Alternatively, a hypervisor or virtual machine monitor (VMM)530may be interposed between the bare hardware520and the OS510. In this configuration, VMM530acts as a software “cushion” or virtualization layer between the OS510and the bare hardware520of the computer system600.

VMM530instantiates and runs one or more virtual machine instances (“guest machines”). Each guest machine comprises a “guest” operating system, such as OS510, and one or more applications, such as application(s)502, designed to execute on the guest operating system. The VMM530presents the guest operating systems with a virtual operating platform and manages the execution of the guest operating systems.

In some instances, the VMM530may allow a guest operating system to run as if it is running on the bare hardware520of computer system600directly. In these instances, the same version of the guest operating system configured to execute on the bare hardware520directly may also execute on VMM530without modification or reconfiguration. In other words, VMM530may provide full hardware and CPU virtualization to a guest operating system in some instances.

In other instances, a guest operating system may be specially designed or configured to execute on VMM530for efficiency. In these instances, the guest operating system is “aware” that it executes on a virtual machine monitor. In other words, VMM530may provide para-virtualization to a guest operating system in some instances.

A computer system process comprises an allotment of hardware processor time, and an allotment of memory (physical and/or virtual), the allotment of memory being for storing instructions executed by the hardware processor, for storing data generated by the hardware processor executing the instructions, and/or for storing the hardware processor state (e.g. content of registers) between allotments of the hardware processor time when the computer system process is not running. Computer system processes run under the control of an operating system, and may run under the control of other programs being executed on the computer system.

Multiple threads may run within a process. Each thread also comprises an allotment of hardware processing time but share access to the memory allotted to the process. The memory is used to store content of processors between the allotments when the thread is not running. The term thread may also be used to refer to a computer system process in multiple threads are not running.

Cloud Computing

The term “cloud computing” is generally used herein to describe a computing model which enables on-demand access to a shared pool of computing resources, such as computer networks, servers, software applications, and services, and which allows for rapid provisioning and release of resources with minimal management effort or service provider interaction.

A cloud computing environment (sometimes referred to as a cloud environment, or a cloud) can be implemented in a variety of different ways to best suit different requirements. For example, in a public cloud environment, the underlying computing infrastructure is owned by an organization that makes its cloud services available to other organizations or to the general public. In contrast, a private cloud environment is generally intended solely for use by, or within, a single organization. A community cloud is intended to be shared by several organizations within a community; while a hybrid cloud comprise two or more types of cloud (e.g., private, community, or public) that are bound together by data and application portability.

Generally, a cloud computing model enables some of those responsibilities which previously may have been provided by an organization's own information technology department, to instead be delivered as service layers within a cloud environment, for use by consumers (either within or external to the organization, according to the cloud's public/private nature). Depending on the particular implementation, the precise definition of components or features provided by or within each cloud service layer can vary, but common examples include: Software as a Service (SaaS), in which consumers use software applications that are running upon a cloud infrastructure, while a SaaS provider manages or controls the underlying cloud infrastructure and applications. Platform as a Service (PaaS), in which consumers can use software programming languages and development tools supported by a PaaS provider to develop, deploy, and otherwise control their own applications, while the PaaS provider manages or controls other aspects of the cloud environment (i.e., everything below the run-time execution environment). Infrastructure as a Service (IaaS), in which consumers can deploy and run arbitrary software applications, and/or provision processing, storage, networks, and other fundamental computing resources, while an IaaS provider manages or controls the underlying physical cloud infrastructure (i.e., everything below the operating system layer). Database as a Service (DBaaS) in which consumers use a database server or Database Management System that is running upon a cloud infrastructure, while a DbaaS provider manages or controls the underlying cloud infrastructure, applications, and servers, including one or more database servers.

The above-described basic computer hardware and software and cloud computing environment presented for purpose of illustrating the basic underlying computer components that may be employed for implementing the example embodiment(s). The example embodiment(s), however, are not necessarily limited to any particular computing environment or computing device configuration. Instead, the example embodiment(s) may be implemented in any type of system architecture or processing environment that one skilled in the art, in light of this disclosure, would understand as capable of supporting the features and functions of the example embodiment(s) presented herein.

Hardware Overview

According to one embodiment, the techniques described herein are implemented by one or more special-purpose computing devices. The special-purpose computing devices may be hard-wired to perform the techniques, or may include digital electronic devices such as one or more application-specific integrated circuits (ASICs) or field programmable gate arrays (FPGAs) that are persistently programmed to perform the techniques, or may include one or more general purpose hardware processors programmed to perform the techniques pursuant to program instructions in firmware, memory, other storage, or a combination. Such special-purpose computing devices may also combine custom hard-wired logic, ASICs, or FPGAs with custom programming to accomplish the techniques. The special-purpose computing devices may be desktop computer systems, portable computer systems, handheld devices, networking devices or any other device that incorporates hard-wired and/or program logic to implement the techniques.

For example,FIG.6is a block diagram that illustrates a computer system600upon which an embodiment of the invention may be implemented. Computer system600includes a bus602or other communication mechanism for communicating information, and a hardware processor604coupled with bus602for processing information. Hardware processor604may be, for example, a general purpose microprocessor.

Computer system600also includes a main memory606, such as a random access memory (RAM) or other dynamic storage device, coupled to bus602for storing information and instructions to be executed by processor604. Main memory606also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor604. Such instructions, when stored in non-transitory storage media accessible to processor604, render computer system600into a special-purpose machine that is customized to perform the operations specified in the instructions.

Computer system600further includes a read only memory (ROM)608or other static storage device coupled to bus602for storing static information and instructions for processor604. A storage device610, such as a magnetic disk or optical disk, is provided and coupled to bus602for storing information and instructions.

Computer system600may be coupled via bus602to a display612, such as a cathode ray tube (CRT), for displaying information to a computer user. An input device614, including alphanumeric and other keys, is coupled to bus602for communicating information and command selections to processor604. Another type of user input device is cursor control616, such as a mouse, a trackball, or cursor direction keys for communicating direction information and command selections to processor604and for controlling cursor movement on display612. This input device typically has two degrees of freedom in two axes, a first axis (e.g., x) and a second axis (e.g., y), that allows the device to specify positions in a plane.

Computer system600may implement the techniques described herein using customized hard-wired logic, one or more ASICs or FPGAs, firmware and/or program logic which in combination with the computer system causes or programs computer system600to be a special-purpose machine. According to one embodiment, the techniques herein are performed by computer system600in response to processor604executing one or more sequences of one or more instructions contained in main memory606. Such instructions may be read into main memory606from another storage medium, such as storage device610. Execution of the sequences of instructions contained in main memory606causes processor604to perform the process steps described herein. In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions.

The term “storage media” as used herein refers to any non-transitory media that store data and/or instructions that cause a machine to operation in a specific fashion. Such storage media may comprise non-volatile media and/or volatile media. Non-volatile media includes, for example, optical or magnetic disks, such as storage device610. Volatile media includes dynamic memory, such as main memory606. Common forms of storage media include, for example, a floppy disk, a flexible disk, hard disk, solid state drive, magnetic tape, or any other magnetic data storage medium, a CD-ROM, any other optical data storage medium, any physical medium with patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM, NVRAM, any other memory chip or cartridge.

Storage media is distinct from but may be used in conjunction with transmission media. Transmission media participates in transferring information between storage media. For example, transmission media includes coaxial cables, copper wire and fiber optics, including the wires that comprise bus602. Transmission media can also take the form of acoustic or light waves, such as those generated during radio-wave and infra-red data communications.

Various forms of media may be involved in carrying one or more sequences of one or more instructions to processor604for execution. For example, the instructions may initially be carried on a magnetic disk or solid state drive of a remote computer. The remote computer can load the instructions into its dynamic memory and send the instructions over a telephone line using a modem. A modem local to computer system600can receive the data on the telephone line and use an infra-red transmitter to convert the data to an infra-red signal. An infra-red detector can receive the data carried in the infra-red signal and appropriate circuitry can place the data on bus602. Bus602carries the data to main memory606, from which processor604retrieves and executes the instructions. The instructions received by main memory606may optionally be stored on storage device610either before or after execution by processor604.

Computer system600also includes a communication interface618coupled to bus602. Communication interface618provides a two-way data communication coupling to a network link620that is connected to a local network622. For example, communication interface618may be an integrated services digital network (ISDN) card, cable modem, satellite modem, or a modem to provide a data communication connection to a corresponding type of telephone line. As another example, communication interface618may be a local area network (LAN) card to provide a data communication connection to a compatible LAN. Wireless links may also be implemented. In any such implementation, communication interface618sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information.

Network link620typically provides data communication through one or more networks to other data devices. For example, network link620may provide a connection through local network622to a host computer624or to data equipment operated by an Internet Service Provider (ISP)626. ISP626in turn provides data communication services through the world wide packet data communication network now commonly referred to as the “Internet”628. Local network622and Internet628both use electrical, electromagnetic or optical signals that carry digital data streams. The signals through the various networks and the signals on network link620and through communication interface618, which carry the digital data to and from computer system600, are example forms of transmission media.

Computer system600can send messages and receive data, including program code, through the network(s), network link620and communication interface618. In the Internet example, a server630might transmit a requested code for an application program through Internet628, ISP626, local network622and communication interface618.

The received code may be executed by processor604as it is received, and/or stored in storage device610, or other non-volatile storage for later execution.

In the foregoing specification, embodiments of the invention have been described with reference to numerous specific details that may vary from implementation to implementation. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense. The sole and exclusive indicator of the scope of the invention, and what is intended by the applicants to be the scope of the invention, is the literal and equivalent scope of the set of claims that issue from this application, in the specific form in which such claims issue, including any subsequent correction.