The present invention relates generally to a guest operating system having control of the underlying hardware and software resources rather than a host operating system. In particular, the host operating system provides the management of the infrastructure but the guest operating system controls the infrastructure.
Enterprises have highly demanding computing environments in terms of security, reliability and performance, requiring computing systems that are secure, adaptable, fast and reliable. This includes both enterprise-hosted computing systems as well as cloud computing system, and often requires integration across organizations and computing platforms within an enterprise. Such hosted systems may require use of various software that supports workloads executing on commodity Windows-based systems, Linus-based systems, and legacy systems that support robust mainframe-type reliability required for enterprise workloads. Such legacy enterprise systems often have different computing requirements as compared to workloads on commodity systems. Over time, commodity server systems have replaced mainframes but the demand for the mainframe operating system continues in particular for legacy systems. As such, an emulated system allows the mainframe operating system to run on top of a native operating system using an interface layer in between. However, the native operating system still manages and controls the resources and infrastructure of the computing system. Therefore, improvements are desirable.
The present invention relates generally to computer architecture and infrastructure for guest operating systems executing on a host operating system. More particularly, the present invention relates to methods and system for allowing a guest operating system to control the resources of a commodity server system. According to one embodiment, a method of creating a guest-native executable includes receiving, by a host operating system, a call from a guest operating system to construct an executable from a guest-native source; creating an ecosystem for the guest-native source in a secure sandbox running on a host operating system; receiving the guest-native source; and executing the guest-native source in the ecosystem on the host operating system.
According to another embodiment, a computer program product for creating a guest-native executable includes a non-transitory computer-readable medium comprising a set of instructions that when executed by a programmable computing device causes the computing device to implement a method for configuring a set of network devices. The method includes receiving, by a host operating system, a call from a guest operating system to construct an executable from a guest-native source; creating an ecosystem for the guest-native source in a secure sandbox running on a host operating system; receiving the guest-native source; and executing the guest-native source in the ecosystem on the host operating system.
The foregoing has outlined rather broadly the features and technical advantages of the present invention in order that the detailed description of the invention that follows may be better understood. Additional features and advantages of the invention will be described hereinafter that form the subject of the claims of the invention. It should be appreciated by those skilled in the art that the concepts and specific embodiments disclosed may be readily utilized as a basis for modifying or designing other structures for carrying out the same purposes of the present invention. It should also be realized by those skilled in the art that such equivalent constructions do not depart from the spirit and scope of the invention as set forth in the appended claims. The novel features that are believed to be characteristic of the invention, both as to its organization and method of operation, together with further objects and advantages will be better understood from the following description when considered in connection with the accompanying figures. It is to be expressly understood, however, that each of the figures is provided for the purpose of illustration and description only and is not intended as a definition of the limits of the present invention.
For a more complete understanding of the disclosed systems and methods, reference is now made to the following descriptions taken in conjunction with the accompanying drawings.
The SAIL package includes the following components: SAIL Kernel—SUSE Linux Enterprise Server distribution with open source modifications; System Control (SysCon)—the glue that creates and controls the instruction processor emulators; 2200 Instruction Processor emulated—based on 2200 ASA-00108 architecture; Network emulators; and Standard Channel Input/output processor (IOP) drivers. The hardware platform 220 is, in one example, a DELL® server with associated storage input/output processors, host bus adapter, host adapters and network interface cards. Embodiments of the present invention are not limited to any particular host system or hardware platform but may instead be adapted for application with any underlying system.
The OS 2200 server management control (SMC) 225 monitors the performance at all levels of the computing system 200, including the software applications 205, 2200 OS 210, SAIL 215, and the hardware platform 220.
Referring to
Referring to
Referring to
The NativeX Loader 604 includes configuration information to access a secure tunnel 624 (“Stunnel”) to create an encrypted communication path between the Guest OS 640 and the Host OS 630. The NativeX Loader 604 attaches to the Stunnel 624 and waits for a signal from NativeX Management 616 executing on the Guest OS 630. When the NativeX Loader 604 on the Host OS 630 is activated, it first creates a self-signed certificate 618 and stores it into the Loopback Networking 626 system, which persists at 620. The NativeX Management 616 then sends a message to the NativeX Loader 604 to load the NativeX Daemon code 614 from the Guest OS 640 controlled storage 625 via path 612 and using a Host OS 630 utility, such as systemd, to initiate its execution as NativeX Daemon 610. The NativeX Daemon 610 creates a cleartext communication path between the NativeX Daemon 610 and the NativeX Management 616 through Loopback Networking 626. The NativeX Daemon 610 then uses the certificate 620 to establish a secure, encrypted path 622 between it and the NativeX Management 616.
Next, the NativeX Daemon 610 creates the secure sandbox 608 within which all services requested by users in the Guest OS 640 execute. When creating the secure sandbox 608 in the Host OS 630, the NativeX Daemon 610 creates the secure sandbox 608 to have its attributes constrained in such a way that any process executing in the secure sandbox 608 appears to be executing as an extension of the Guest OS 640 environment. The NativeX Daemon 610 continues to execute until one of these situations occurs: NativeX Management 616 terminates either by error or by operator action; the Guest OS 640 terminates either by error or by operator action; or NativeX Management 616 sends a signal to NativeX Daemon 610 to terminate execution. When any of these situations occur, NativeX Daemon 610 receives a signal to terminate all processes executing in the secure sandbox 608, release any resources held by the processes, and terminate its own execution.
The secure sandbox 608 may not be an actual construct in the Host OS 630 environment. In some environments, it can exist as a “slice definition” in the Host OS 630, whereby any process initiated using that slice definition inherits the attributes and constraints of the slice. An important attribute of each slice is that it can be isolated from other slices such that each slice cannot read or write into each other's memory, control structures, etc. Each time the NativeX Daemon 610 starts or restarts, it recreates (overwrites) the secure sandbox/slice definition. It is a convenient abstraction to describe the slice/secure sandbox/container as a “container” in the standard sense of the word whereby any process executing “in the container” inherits the properties and constraints of the container. This abstraction and nomenclature are reinforced by the names and functions of other parts of the infrastructure such as the container management cgroup mechanisms.
The NativeX Daemon 610 creates the NativeX secure sandbox 608 with this set of constraints:
The NativeX secure sandboxes 608 executes within the Host OS 630. However, due to the containment, aspects of the Host OS 630 system are not available to processes executing within the NativeX sandbox 608, including the uptime command, the utmp utility, the ps utility and the gdb utility. Processes running in the NativeX secure sandbox 608 are constrained with respect to system resources. Some resource limits pertain to individual active processes executing in the NativeX sandbox 608, while others pertain to the aggregate of all processes executing in the NativeX sandbox 608 at a specific time. When a resource request exceeds one of these limits, the relevant low-level system service call will return a failure status, which will sometimes become visible to the user as a failure within the running process, depending on the specific programming choices in that specific process. The global resource limitations imposed on all the aggregate of all processes executing in the NativeX sandbox 608 include number of simultaneously active processes, amount of system CPU usage available to processes, amount of working system memory available, number of simultaneously active user tasks or threads, core file size, maximum file size, number of pending signals, maximum amount of locked memory, pipe buffer size and message queue size and stack size. The normal limits for Guest OS 640 files are applied by the SMB file Access 628 mechanism. The resource limitations imposed by NativeX on each process executing in the NativeX sandbox 608 includes an accumulated CPU time from all tasks running on all cores and amount of working system memory available.
The final action of the NativeX Daemon 610 is to create a User ID (UID)/Group ID (GID) pool and pool management control structure. Unix-like operating systems identify a user by a value called a user identifier, often abbreviated to UID. The UID, along with the group identifier (GID) and other access control criteria, is used to determine which system resources a user can access. For NativeX processes executing in the Host OS 630 environment, the UID capabilities are constrained. The NativeX Daemon 610 creates and manages the UIDs and GIDs as UID/GID pairs. The pool of UIDs and GIDs are returned to the Host OS 630 when the NativeX Daemon 610 stops execution.
When a Guest OS 640 user invokes a process to execute in the NativeX environment in the Host OS 630 environment (in the secure sandbox), the NativeX Daemon 610 chooses a UID/GID pair from the pool and associates it with the Guest OS 640 user credential. When the NativeX Daemon 610 initiates the native process, it uses a Host OS 630 service to associate the UID/GID with the process to be initiated. If the Guest OS 640 user makes multiple invocations, through multiple execution threads, from different interactive sessions, from different Guest OS 640 initiated middleware, or from different user initiated background services, the NativeX Daemon 610 makes the association between the Guest OS 640 user credentials and the same, selected UID/GID pair. As a result, all services executing in NativeX on behalf of a Guest OS 640 user have the same UID/GID pair in the Host OS 630 environment, and thus the same credentials for accessing subsidiary services from either the Host OS 640 environment or the Guest OS 630 environment. When all services executing in NativeX in the Host OS 630 environment complete, the UID/GID pair is returned to the pool.
In a hybrid execution environment, a service executing in the secure sandbox 608 on the Host OS 630 must have the same credentials as a corresponding service, executing in the Guest OS 640, which initiated the secure sandbox service. This allows the Guest OS 640 to treat the service executing on the Host OS 630 as an extension of the Guest OS 640 and enforce the same authentication and authorization rules irrespective of the service execution environment choice. The Host OS 630 typically enforces credentials and provides authenticated access to only its resources. But, in the present disclosure, the Guest OS 640 operating within the Host OS 630 enforces credentials and authenticates access to resources within the Guest OS 640.
Referring to
During its execution, when the Native process 1 714 requests network access, it can use Loopback Networking 726 via path 720 to communicate with other applications executing in the Guest OS 740 environment. It can also go directly through the Host OS 730 to other network services via path 722. Both access methods may be constrained by secure sandbox 708 rules. For example, the Native app process 1 714 was created on behalf of appl 2 702. In the event that appl 2 702 must terminate execution for some reason e.g., application end-of-execution, application abort, user-initiated termination request, operator-initiated termination, etc., the guest OS 740 must terminate and clean up all local and remote services associated with appl 2 702, including: terminate any outstanding 110 requests from the secure sandbox 708 in path 720 to user files 718; terminate and close any network communication occurring via path 720 or path 722; terminate the native process 1 714, and release the cpu, memory, and other resources associated with the process; if native process 1 714 is the last process associated with a NativeX session e.g., session 1023, unmount the file access path 716 in the Host OS 740 file system, terminate appl 2 702 and release cpu and memory associated with it. From the Guest OS 730 viewpoint, native app process 1 714 in secure sandbox 708, and appl 2 702 are a single, atomic unit of work under management by the Guest OS 740.
Referring to
The chroot( ) service requires privileged (super user) access in the Host OS 730. Privileged access is disallowed for Native app processes according to the secure sandbox constraints. “A chroot is an operation that changes the apparent root directory for the current running process and their children. A program that is run in such a modified environment cannot access files and commands outside that environmental directory tree. This modified environment is called a chroot jail.” from https://wiki.archlinux.org/index.php/Chroot
Below illustrates an example of the process hierarchy created in the Host OS 730 after several Native app processes have been initiated by NativeX.
The NativeX Daemon 706 creates a pair of execution threads for each Native app process and redirects STDIN and STDOUT to these processes. When the initiating appl 2 702 makes a NativeX write request (see Programmatic API description below), NativeX Management 716 uses the socket in the process control object to pass the write packet's information to the STDIN redirector thread. When the initiating appl 2 702 makes a NativeX read request (see Programmatic API description below), NativeX Management 716 uses the socket in the process control object to retrieve the information from the STDOUT redirector thread.
Referring to
In the hybrid execution environment, sometimes a user at a terminal logged into the Guest OS 740 in command mode wants to make use of a corresponding command environment in the Host OS 730 such as bash in Linux or cmd in Windows. In the NativeX case, the terminal protocol to the Guest OS 740 is a block-mode protocol such as IBM 3270 terminal protocol or the UNISYS® UTS terminal protocol. The corresponding command environment in the Host OS 730 uses a streaming protocol such as Xterm. A system requirement is that the bash or other command protocol must be able to be used in the NativeX environment with no modifications.
To provide a seamless interaction between a user at a terminal in the Guest OS 740, and a command session in the Host OS 730, a protocol translation mechanism was created. It leverages the secure sandbox creation mechanism and certificate mechanism to create a secure path between the terminal user, the command session on the Guest OS 740 and the command process on the Host OS 730. NativeX provides these utilities with their corresponding pre-configured Native process code and required ecosystems.
Referring to
In the hybrid execution environment, an application executing on the Guest OS 1140 may want to invoke a service to execute in the Host OS 1130 environment, calling it as if it were a local service such as a compiler runtime service. From the application's perspective, the called service must be able to be invoked as a procedure (no direct return value) or as a function (with a direct return value) and be able to pass parameters as by value or by reference or by whatever additional parameter mechanisms are supported by the application's programming language. The invocation mechanism must support all execution modalities in the Guest OS 1140, such as interactive (Demand), background (Batch), and transaction (TIP in the Unisys OS 2200 environment, COMS in the Unisys MCP environment, or CICS in the IBM Z/Series environment). In order to make a procedure call look local, NativeX provides a mechanism to call the service as a procedure or as a function:
NativeX provides a binding for the _native_start wrapper for each Guest OS 1140 programming language such as C, COBOL, FORTRAN, and so on, such that the mechanism looks native to each application's chosen programming language. The _native_start mechanism leverages the secure sandbox creation mechanism and certificate mechanism to create a secure path between the Guest OS 1140 application caller and the service on the Host OS 1130. This is shown in
Use the _native_write( ) function to write data to a native process. The native_write( ) function writes data to the native process started by the _native_start( ) call. Synopsis: int _native_write(void*native_handle, char*str, int len, int mode); where: native_handle is a pointer to the native control area returned by native_start( ); str is a pointer to the buffer holding the data; len is the number of bytes to be written; and mode is always 0.
Use the _native_stop( ) function to terminate the execution of a NativeX process. The _native_stop( ) function stops the Native process started by the _native_start( ) function and deallocates the NativeX secure sandbox. Synopsis: int_native_stop(void*native_handle); where: native_handle is a pointer to the native control area returned by native_start( ).
A calling program appl 2 1202 wants to invoke Native process 3 1209 as a called procedure. The program appl 2 1202 uses the _native_start( ) mechanism in NativeX management 1216 to cause the NativeX Daemon 1210 to load the appl 3 executable 1216 into the secure sandbox 1208 using path 1218, as Native process 3 1209 and begin its execution. The Marshal Guest to Host mechanism 1211 transforms the call-by-value, call-by-reference and other parameter data and meta data from the calling program's environment in appl 2 1202 into a representation appropriate for the called service Native process 3. It also transforms the data values between the execution environments including: big endian to little endian integer representation, 9-bit ASCII to 16 bit UNICODE characters, IEEE format floating point numeric values to Intel floating point numeric values.
For any parameter or function return values passed by Native process 3 to appl 2, the Marshal Guest to Host 1211 does the transformations in the reverse direction, from the Native process 3 view to the appl 2 view. When the Native process 3 1209 completes execution and returns its result to appl 2 1202, the NativeX management 1216 signals the NativeX Daemon 1210 to terminate Native process 3 1209 and releases its resources. If the appl 2 1202 code terminates unexpectedly or is terminated by an operator action while the Native process 3 1209 is still executing, the Guest OS 1240 releases all resources held by appl 2 1202. The Guest OS 1240 signals the NativeX management 1216 which signals the NativeX Daemon 1210 to terminate the Native process 1209 and release its resources.
In the hybrid execution environment, sometimes a user wants to develop in a programming language not available in the Guest OS 1240. The programming language may require a specialized runtime environment or may require OS services or other environmental attributes available only in the Host OS 1230. In addition to the functional requirement for the programming language, the program development cycle must appear as if it were being executed in the Guest OS 1240 where other applications are being developed. Programming language runtime environments would reside in the “container” or sandbox along with the program being run. The =time environment would be running in the Host OS 1230 rather than the Guest OS 1240.
NativeX provides pre-configured environments for executing, for example, the bash ecosystem (which includes for example the gcc compiler). A user can create a program source code using the mechanisms standard to the Guest OS 1240 and store the file in the Guest OS 1240 file system. The user then invokes, for example bash via the standard access mechanism in the Guest OS 1240. The NativeX Management intercepts the call and creates the bash ecosystem in the Host OS 1230. The user can then invoke, for example, gcc to compile the program source code into an executable.
Referring to
Once the bash program begins execution, the user 1302 can interact with bash using path 1320 for example to invoke the gcc compiler. The gcc compiler can read appl 3 source code 1311 using path 1324 and then write the appl 3 executable output file 1326 using the same path 1324. The appl 3 executable code can be executed by using terminal 1302 directly in bash or the user 1302 may use the @nxlink utility mechanism described below to create a guest-native executable. Once the bash program begins execution, it can access other files, networking, and services as shown in
In the Guest OS 1340 environment, command streams, or command sequences, are a powerful and often-used mechanism for initiating program executions, providing program input, creating program input, pipelining utility calls together and so on. In one Host OS 1430 environment, these command sequences are called “Executive Control Language (ECL) scripts” or “add streams”. This invention provides the ability to combine and execute statements and from two discrete scripting languages (Python and ECL) into a single script.
NativeX provides the @pyadd utility to be able to use a python application to generate and execute an ECL script. It combines the capabilities described elsewhere for Utilities and Creating, Compiling, and Executing a program in a Hybrid environment described above. Signature is @pyadd python-code-file, where python-code-file is the name of the file containing the python script to generate the ECL script.
Referring to
The /proc directory in Unix-like operating systems, sometimes called the /proc file system, contains system information in the form of files. It contains what appear as zero-length files which the operating system fills in with information when the file is accessed.
The Host OS 1530 provides a variety of services to allow processes to query and modify system behavior via a synthetic file system under the directory /proc. Each time a process references an entry in this directory hierarchy, the Host OS intercepts the I/O request and satisfies it either via synthesizing the requested information (for input requests) or updating a system behavior parameter (for output requests).
In Unix-like systems, everything is managed as a file including devices of various kinds. Information about these virtual files is available through the /proc directory. In this solution, the Guest OS 1540 rather than the Host OS 1530 determines the user's view of the /proc filesystem on the Host OS 1530. In NativeX secure sandbox execution, the secure sandboxes have their view of the system restricted in many ways, including file system access and networking access to name two. NativeX secure sandboxes also have their view of /proc restricted. To provide a compatible execution environment for standard off-the-shelf programs, utilities, and ecosystems which can execute in the NativeX secure sandbox 1508 in the Host OS 1530, NativeX provides access to the /proc directory in the Host OS 1530 file system only if the process executing in the NativeX secure sandbox 1508 is asking for information about itself; and the process executing in the NativeX secure sandbox 1508 is asking for information on execution threads running with the same credentials as the requestor. Such requests will only succeed if the requesting process has sufficient privilege. In the NativeX environment, the SMB File Access 1528 mechanism maintains a directory named /proc, but it provides only a subset of the readable entries from the system /proc hierarchy for convenience of each Native process.
Referring to
To make the NativeX capability most useful in the Guest OS 1640 environment requires a mechanism such that NativeX processes can be called using the standard program or utility calling sequence provided by the Guest OS 1640. NativeX provides the @nxlink utility to wrapper any Native process or program and make it callable by the standard Guest OS 1640 calling sequence. The Native process can be written in any language and use any ecosystem supported by NativeX such as C, C++, python, or Java. It can also include execution of bash and any utility supported by bash. Signature is @NXLINK [-a] [-d] [-i p] [-l] [-o output_zoom] nx-program [static_options][static_args . . . ] where:
The use of @nxlink is shown for a python program in
To execute the program, user 1702 invokes the @myprog program 1712 using the pre-existing mechanism through path 1718. The invocation loads the program executable 1708 using the pre-existing mechanism through path 1720. When the program @myprog 1712 begins execution, it uses the NativeX management 1716 to cause the NativeX Daemon 1710 to load the python ecosystem 1716 and the python code appl4.py 1704 into the secure sandbox 1708 as Python ecosystem process 1726, and begin its execution. The @myprog program 1712 communicates with the python ecosystem using path 1724.
In one embodiment, the user interface device 1810 is referred to broadly and is intended to encompass a suitable processor-based device such as a desktop computer, a laptop computer, a personal digital assistant (PDA) or tablet computer, a smartphone or other a mobile communication device having access to the network 1808. The user interface device 1810 may be used to access a web service executing on the server 1802. When the device 1810 is a mobile device, sensors (not shown), such as a camera or accelerometer, may be embedded in the device 1810. When the device 1810 is a desktop computer the sensors may be embedded in an attachment (not shown) to the device 1810. In a further embodiment, the user interface device 1810 may access the Internet or other wide area or local area network to access a web application or web service hosted by the server 1802 and provide a user interface for enabling a user to enter or receive information.
The network 1808 may facilitate communications of data, such as dynamic license request messages, between the server 1802 and the user interface device 1810. The network 1808 may include any type of communications network including, but not limited to, a direct PC-to-PC connection, a local area network (LAN), a wide area network (WAN), a modem-to-modem connection, the Internet, a combination of the above, or any other communications network now known or later developed within the networking arts which permits two or more computers to communicate.
In one embodiment, the user interface device 1810 accesses the server 1802 through an intermediate sever (not shown). For example, in a cloud application the user interface device 1810 may access an application server. The application server may fulfill requests from the user interface device 1810 by accessing a database management system (DBMS). In this embodiment, the user interface device 1810 may be a computer or phone executing a Java application making requests to a JBOSS server executing on a Linux server, which fulfills the requests by accessing a relational database management system (RDMS) on a mainframe server.
The computer system 1900 may also include random access memory (RAM) 1908, which may be synchronous RAM (SRAM), dynamic RAM (DRAM), synchronous dynamic RAM (SDRAM), or the like. The computer system 1900 may utilize RAM 1908 to store the various data structures used by a software application. The computer system 1900 may also include read only memory (ROM) 1906 which may be PROM, EPROM, EEPROM, optical storage, or the like. The ROM may store configuration information for booting the computer system 1900. The RAM 1908 and the ROM 1906 hold user and system data, and both the RAM 1908 and the ROM 1906 may be randomly accessed.
The computer system 1900 may also include an I/O adapter 1910, a communications adapter 1914, a user interface adapter 1916, and a display adapter 1922. The I/O adapter 1910 and/or the user interface adapter 1916 may, in certain embodiments, enable a user to interact with the computer system 1900. In a further embodiment, the display adapter 1922 may display a graphical user interface (GUI) associated with a software or web-based application on a display device 1924, such as a monitor or touch screen.
The I/O adapter 1910 may couple one or more storage devices 1912, such as one or more of a hard drive, a solid state storage device, a flash drive, a compact disc (CD) drive, a floppy disk drive, and a tape drive, to the computer system 1900. According to one embodiment, the data storage 1912 may be a separate server coupled to the computer system 1900 through a network connection to the I/O adapter 1910. The communications adapter 1914 may be adapted to couple the computer system 1900 to the network 1808, which may be one or more of a LAN, WAN, and/or the Internet. The user interface adapter 1916 couples user input devices, such as a keyboard 1920, a pointing device 1918, and/or a touch screen (not shown) to the computer system 1900. The display adapter 1922 may be driven by the CPU 1902 to control the display on the display device 1924. Any of the devices 1902-1922 may be physical and/or logical.
The applications of the present disclosure are not limited to the architecture of computer system 1900. Rather the computer system 1900 is provided as an example of one type of computing device that may be adapted to perform the functions of the server 1802 and/or the user interface device 1810. For example, any suitable processor-based device may be utilized including, without limitation, personal data assistants (PDAs), tablet computers, smartphones, computer game consoles, and multi-processor servers. Moreover, the systems and methods of the present disclosure may be implemented on application specific integrated circuits (ASIC), very large scale integrated (VLSI) circuits, or other circuitry. In fact, persons of ordinary skill in the art may utilize any number of suitable structures capable of executing logical operations according to the described embodiments. For example, the computer system 1800 may be virtualized for access by multiple users and/or applications.
If implemented in firmware and/or software, the functions described above may be stored as one or more instructions or code on a computer-readable medium. Examples include non-volatile computer-readable media encoded with a data structure and computer-readable media encoded with a computer program. Computer-readable media includes physical computer storage media. A storage medium may be any available medium that can be accessed by a computer. By way of example, and not limitation, such computer-readable media can comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store desired program code in the form of instructions or data structures and that can be accessed by a computer. Disk and disc includes compact discs (CD), laser discs, optical discs, digital versatile discs (DVD), floppy disks and blu-ray discs. Generally, disks reproduce data magnetically, and discs reproduce data optically. Combinations of the above should also be included within the scope of computer-readable media.
In addition to storage on computer-readable medium, instructions and/or data may be provided as signals on transmission media included in a communication apparatus. For example, a communication apparatus may include a transceiver having signals indicative of instructions and data. The instructions and data are configured to cause one or more processors to implement the functions outlined in the claims.
Although the present disclosure and its advantages have been described in detail, it should be understood that various changes, substitutions and alterations can be made herein without departing from the spirit and scope of the disclosure as defined by the appended claims. Moreover, the scope of the present application is not intended to be limited to the particular embodiments of the process, machine, manufacture, composition of matter, means, methods and steps described in the specification. As one of ordinary skill in the art will readily appreciate from the present invention, disclosure, machines, manufacture, compositions of matter, means, methods, or steps, presently existing or later to be developed that perform substantially the same function or achieve substantially the same result as the corresponding embodiments described herein may be utilized according to the present disclosure. Accordingly, the appended claims are intended to include within their scope such processes, machines, manufacture, compositions of matter, means, methods, or steps.