The present disclosure generally relates to providing an abstraction layer and, more particularly, to systems and methods for providing an abstraction layer that maintains usability of application code on systems that receive hardware revisions.
Embedded real time operating systems (RTOS) used in various modern devices use a Board Support Package (BSP) or equivalent to adapt an operating system kernel to target hardware and provide system services. In addition, embedded real time operating systems provide additional features such as timers and events to support real time operation. However, application software installed on a device utilizing a real time operating system typically require significant programming changes to the application software if the hardware of the device is altered (e.g., upgraded, swapped out, or the like). For example, if the device is modified with new hardware components having different timing (e.g., a newer processor that runs faster relative to an older processor) and/or to replace obsolete hardware, the device will complete various processing activities at a quicker rate. However, such an increase in rate of processing can be detrimental to the application layer because the applications used by the device may be designed, certified, or the like to operate with a particular timing and/or particular components.
In one aspect, a method of providing an abstraction layer between an application layer and one or more existing hardware components of a computing device includes receiving a request for a resource from the application layer, the application layer being stored in a non-transitory medium of the computing device, determining a component type for performing a task according to the request for the resource, determining whether the one or more existing hardware components of the computing device correspond to the component type for performing the task based on a predetermined function of the one or more existing hardware components, and when the one or more existing hardware components of the computing device do not correspond to the component type for performing the task, converting the task into a translated task readable by the one or more existing hardware components, providing the translated task to the one or more existing hardware components, receiving an output from the one or more existing hardware components as a result of providing the translated task, and providing the output to the application layer as an emulated output that mimics an expected output of the component type.
In another aspect, a method of providing an abstraction layer between an application layer and one or more existing hardware components of a computing device includes receiving a request for a resource from the application layer, the application layer being stored in a non-transitory medium of the computing device, determining a timing for performing a task according to the request for the resource, obtaining, based on the timing, a timing schedule for providing a response to the request according to the timing, and when the one or more existing hardware components of the computing device have a hardware timing that does not correspond to the timing schedule, providing the task and the timing schedule to an input/output (I/O) scheduler, receiving an input or an output from the I/O scheduler as a result of providing the task, and providing the input or the output to the application layer as an emulated input or an emulated output that mimics the timing.
In another aspect, a method of providing an abstraction layer between an application layer and one or more existing hardware components of a computing device includes receiving a request for a resource from the application layer, the application layer being stored in a non-transitory medium of the computing device, determining a component type and a timing for performing a task according to the request for the resource, determining whether the one or more existing hardware components of the computing device correspond to the component type for performing the task, obtaining, based on the timing, a timing schedule for providing a response to the request at the timing, and when the one or more existing hardware components of the computing device do not correspond to the component type for performing the task and/or do not correspond to the timing schedule, converting the task into a translated task readable by the one or more existing hardware components, providing the translated task and the timing schedule to an input/output (I/O) scheduler, the I/O scheduler interfacing with one or more existing hardware components that generate an input or an output depending on an interface type, receiving the input or the output, and providing the input or the output to the application layer as an emulated input or an emulated output that mimics an expected input or an expected output of the component type with the timing.
These and additional features provided by the embodiments described herein will be more fully understood in view of the following detailed description, in conjunction with the drawings.
The embodiments set forth in the drawings are illustrative and exemplary in nature and not intended to limit the subject matter defined by the claims. The following detailed description of the illustrative embodiments can be understood when read in conjunction with the following drawings, wherein like structure is indicated with like reference numerals and in which:
Referring generally to the figures, embodiments described herein are directed to systems and methods for providing an abstraction layer between an application layer and one or more hardware components of an electronic device, particularly electronic devices that incorporate a real time operating system (RTOS). The abstraction layer allows for modification of hardware components in the electronic device without revisions to software located within the application layer of the device. In one or more embodiments, the systems and methods described herein determine a component type and a timing for performing a task according to a request from the application for a resource, determine whether the existing hardware components correspond to the component type for performing the task, obtain, based on the timing, a timing schedule for providing a response to the request at the timing. If the existing hardware components do not correspond to the component type for performing the task and/or do not correspond to the timing schedule (e.g., due to a modification of hardware components within the device), the systems and methods of some embodiments described herein provide to the application layer an emulated output that mimics an expected output of the component type with the timing. In one or more embodiments, the timing schedule maps the timing to an available system I/O resource and/or to external and internal system timing requirements.
The systems and methods described herein may find particular applicability in RTOS systems and devices where a predetermined timing is necessary for continued, correct, and/or optimal operation. For example, the systems and methods described herein may be implemented in a real-time control system such as, for example, a full authority digital engine control (FADEC) that digitally manages all aspects of an aircraft engine. As can be appreciated, the timing of operation of various aspects of an aircraft engine may be tightly maintained to ensure appropriate operation thereof. Thus, implementing an abstraction layer, as described herein, may allow for upgrades, replacement, and/or the like of various hardware components of the FADEC system and/or the aircraft engine without affecting the timing of various software programs executed by the FADEC system, thereby allowing the FADEC system to operate as originally programmed, certified, and/or as expected after such an upgrade, replacement, and/or the like. In another example, the systems and methods described herein may be implemented in various medical equipment, such as pacemakers, ventilators, and/or the like that operate according to a particular timing. As can be appreciated, the timing of operation of certain medical equipment may be tightly maintained to ensure proper operation (e.g., a pacemaker provides an electric current at particular intervals to ensure appropriate operation thereof). Thus, by implementing an abstraction layer as described herein, certain changes to hardware components of the medical equipment that would otherwise affect timing (e.g., delivery of the electric current) are controlled by the abstraction layer such that timing remains the same with the new hardware components. In another example, the systems and methods described herein may be implemented in various factory process control devices such as control devices for conveyor belts, assembly line operations, machines and/or the like that operate according to a particular timing. As can be appreciated, the timing of certain operations may be tightly maintained to ensure proper operation (e.g., an automated assembly line must perform certain actions at certain times to keep the assembly line moving). Thus, by implementing an abstraction layer as described herein, certain changes to hardware components of the factory control devices that would otherwise affect timing (e.g., time at which certain components perform certain actions) are controlled by the abstraction layer such that timing remains the same with the new hardware components. The systems and methods described herein may also generally have applicability to other industries in the industrial and/or embedded space that utilize a RTOS, as these industries are normally considered to be long-life industries (e.g., 20-30+ years), while processors may tend to last a much shorter period of time (e.g., 10-15 years).
As also illustrated in
The processor 20, such as a computer processing unit (CPU), may be the central processing unit of the computing device 120, performing calculations and logic operations to execute a program. The processor 20, alone or in conjunction with the other components, is an illustrative processing device, computing device, processor, or combinations thereof, including, for example, a multi-core processor, a microcontroller, a field-programmable gate array (FPGA), or an application-specific integrated circuit (ASIC). The processor 20 may include any processing component configured to receive and execute instructions (such as from the data storage component 26 and/or the memory component 30). In some embodiments, the processor 20 may be a plurality of processing devices.
The input/output hardware 22 may include a monitor, a keyboard, a mouse, a printer, a camera, a microphone, a speaker, a touch-screen, a motor controller, a solenoid and valve driver, an analog or a digital sensor (e.g., temperature, pressure, positional, etc.) and/or other device for receiving, sending, and/or presenting data, reading sensors or controlling motors, valves, solenoids and the like, particularly those used in aviation systems, transportation systems, process control systems, power generation and distribution systems, healthcare systems, and/or the like. For example, the input/output hardware 22 may include a CAN bus, a serial bus, and/or another industry standard bus. In a particular embodiment, the input/output hardware 22 may be hardware that is certified as compliant with applicable industry standards, such as ARINC characteristics or specifications (formerly promulgated by Aeronautical Radio, Inc, presently by the SAE Industry Technologies Consortia). The network interface hardware 24 may include any wired or wireless networking hardware, such as a modem, LAN port, wireless fidelity (Wi-Fi) card, WiMax card, mobile communications hardware, and/or other hardware for communicating with other networks and/or devices. For example, the network interface hardware 24 may be used to facilitate communication between external storage devices, user computing devices, server computing devices, external control devices, and/or the like via a network, such as, for example, a local network, the Internet, and/or the like.
The memory component 30 may be configured as volatile and/or nonvolatile computer readable medium and, as such, may include random access memory (including SRAM, DRAM, and/or other types of random access memory), flash memory, registers, compact discs (CD), digital versatile discs (DVD), and/or other types of storage components. Additionally, the memory component 30 may be configured to include various logic modules (each of which may be embodied as a computer program, firmware, or hardware, as an example).
The request receiving logic 31a may contain one or more programming instructions for receiving a request for one or more resources from an application layer stored in a non-transitory medium of the computing device 120 (
The task component/hardware component determination logic 31b may contain one or more programming instructions for determining a component type for performing a task according to the request for the resource and/or determining whether the one or more existing hardware components of the computing device correspond to the component type for performing the task based on a predetermined function of the one or more existing hardware components. In one or more embodiments, determining whether the existing hardware components correspond to the component type for performing the task may include transmitting a driver information request to a hardware device driver layer, the driver information request corresponding to the one or more existing hardware components, receiving driver information from the hardware device driver layer, the driver information corresponding to a set of functions of the one or more existing hardware components, and/or determining one or more functions of the set of functions that corresponds to the component. In one or more embodiments, determining whether the existing hardware components correspond to the component type for performing the task may include determining whether one or more components of a real-time control system (e.g., a full authority digital engine control (FADEC) system) correspond to the component type for performing the task. In one or more embodiments, determining whether the existing hardware components correspond to the component type for performing the task may include determining whether one or more components of a medical device control system correspond to the component type for performing the task. In one or more embodiments, determining whether the existing hardware components correspond to the component type for performing the task may include determining whether one or more components of a power turbine control system correspond to the component type for performing the task. In one or more embodiments, determining whether the existing hardware components correspond to the component type for performing the task may include determining whether one or more components of a factory control system correspond to the component type for performing the task.
The task translating/providing logic 31c may contain one or more programming instructions for converting the task into a translated task readable by the one or more existing hardware components and/or providing the translated task to the one or more existing hardware components The task translating/providing logic 31c can convert the task into a task which is readable by the existing hardware and/or provide the translated task to the to the existing hardware components even when the existing hardware components do not correspond to the component type for performing the task.
The output receiving/providing logic 31d may contain one or more programming instructions for receiving an output from the one or more existing hardware components as a result of providing the translated task, and/or providing the output to the application layer as an emulated output that mimics an expected output of the component type. Thus, for example, the application layer can receive the output from the existing hardware components even when the existing hardware components do not correspond to the component type for performing the task.
The alternative hardware determination/providing logic 31e may contain one or more programming instructions for determining that a second hardware component of the one or more existing hardware components is capable of performing the task as an alternative to the first hardware component, and/or providing the task to the second hardware component. Thus, when a first hardware component of the existing hardware components does not correspond to the component type, an alternative hardware component capable of performing the task can be determined, and the task can be translated to the alternative hardware component.
The output receiving/providing logic 31f may contain one or more programming instructions for receiving an output from the second hardware component as a result of providing the task, and/or providing the output to the application layer. Thus, the application layer may receive the one or more requested resources even when a first hardware component of the existing hardware components does not correspond to the component type.
The request receiving logic 32a may contain one or more programming instructions for receiving a request for one or more resources from an application layer stored in a non-transitory medium of the computing device 120 (
Still referring to
The timing schedule obtaining logic 32c may contain one or more programming instructions for obtaining, based on the timing, a timing schedule for providing a response to the request according to the timing. The actual generation of the timing schedule is determined and maintained by a separate layer or component, such as an input/output (I/O) scheduler layer (e.g., provided by the timing schedule generating logic 33c). Thus, for example, when the application layer needs to receive a resource at a certain frequency, the timing schedule can contain information related to when the resource is needed. In one or more embodiments, the timing schedule maps the timing to an available system I/O resource and/or to external and internal system timing requirements.
The task/timing schedule providing logic 32d may contain one or more programming instructions for providing the task and the timing schedule to an input/output (I/O) scheduler. The I/O scheduler can be used to control the timing. In one or more embodiments, the timing schedule may be provided to the I/O scheduler at application compile time. In one or more embodiments, the timing schedule may be provided to the I/O scheduler during application runtime. In one or more embodiments, the task and timing schedule may be provided to an I/O scheduler having an independent clock having a clock rate that is decoupled from the clock rate of the one or more existing hardware components. In one or more embodiments, the task and timing schedule may be provided to a software based I/O scheduler. In one or more embodiments, the task and timing schedule may be provided to a hardware based I/O scheduler. Examples of such hardware in one or more embodiments include, but are not limited to a multi-core processor, a microcontroller, a field-programmable gate array (FPGA), or an application-specific integrated circuit (ASIC). In one or more embodiments, additional implementations of the I/O scheduler may include, for example, any construct that can isolate an application layer from a system's I/O.
The output receiving/providing logic 32e may contain one or more programming instructions for receiving an input or output from the I/O scheduler as a result of providing the translated task, and/or providing the input or output to the application layer as an emulated input or output that mimics the timing. This may allow, for example, the application layer to receive the requested resource according to the timing independently of any processor timing. This may also, for example, maintain an application programming interface (API) to the data (e.g., input or output) of a particular application without sending the data in a format that the device could return (e.g., device returns 12 bits, but the application only expects 8 bits). In one or more embodiments, providing the input or output to the application layer as the emulated input or output may include delaying transmission of one or more portions of the input or output in accordance with timing. In one or more embodiments, the timing may be a specified timing.
The device driver layer logic 32f may contain one or more programming instructions for transmitting a driver information request to a hardware device driver layer, the driver information request corresponding to the one or more existing hardware components, and/or receiving driver information from the hardware device driver layer, the driver information corresponding to a hardware timing of the one or more existing hardware components. In one or more embodiments, the device driver layer logic 32f may determine whether the one or more existing hardware components of the computing device have a hardware timing that does not correspond to the timing schedule.
The request receiving logic 33a may contain one or more programming instructions for receiving a request for one or more resources from an application layer stored in a non-transitory medium of the computing device 120 (
Still referring to
The timing schedule generating logic 33c may contain one or more programming instructions for generating, based on the expected application timing, a timing schedule for providing a response to the request according to the timing. Thus, for example, when the application layer needs to receive a resource at a certain frequency (e.g., data is needed every 10 milliseconds (ms)), the timing schedule can contain information related to the frequency at which the resource is needed. In one or more embodiments, the timing schedule maps the timing to an available system I/O resource and/or to external and internal system timing requirements. In some embodiments, the timing schedule generating logic 33c may maintain a timing schedule.
The task translating/providing logic 33d may contain one or more programming instructions for converting the task into a translated task readable by the one or more existing hardware components, and/or providing the translated task and the timing schedule to an input/output (I/O) scheduler, the I/O scheduler interfacing with one or more existing hardware components to generate an input or output. In one or more embodiments, the I/O scheduler may interface with the one or more existing hardware components to generate an input or output depending on an interface type. In one or more embodiments, providing the task and the timing schedule to the I/O scheduler may include providing the task and timing schedule to a hardware based I/O scheduler and/or a software based I/O scheduler. Examples of such hardware of the I/O scheduler in one or more embodiments include, but are not limited to, a multi-core processor, a microcontroller, a field-programmable gate array (FPGA), or an application-specific integrated circuit (ASIC).
The output receiving/providing logic 33e may contain one or more programming instructions for receiving the input or output from the I/O scheduler, and/or providing the input output to the application layer as an emulated input or output that mimics an expected input or output of the component type with the timing. In one or more embodiments, providing the input or output to the application layer as the emulated input or output may include delaying transmission of one or more portions of the input or output in accordance with the timing.
Referring again to
Referring again to
It should be understood that the components illustrated in
Referring now to
Still referring to
At block 308, the request is parsed for information related to context and/or timing. In one or more embodiments the request from the application layer is made according to a generic data interface model (e.g., the application layer does not provide timing information). In one or more embodiments, the parsing of the request is performed by a context layer which parses the request into a specific data format and one or more operation tasks to utilize the application layer data (e.g., from the request) and perform an I/O operation in a format needed by the specific interface of the device. In one or more embodiments, the request is parsed for timing by an I/O scheduler layer, where the I/O scheduler layer determines when the one or more operation tasks are performed. In one or more embodiments, if there is no context layer present, the request from the application layer should conform to the format needed by a particular interface of the device. However, if the request does conform to the needed format, the I/O scheduler layer would determine when the one or more operation tasks are performed. Then, at block 312, it is ascertained whether a component type and a timing for performing a task according to the request for the resource has been determined. If the component type and/or timing has not been determined (block 312: NO), the method returns to block 308. If the component type and/or timing has been determined (block 312: YES), the method continues to block 314.
At block 314, it is determined whether the whether the one or more existing hardware components of the computing device correspond to the component type for performing the task.
At block 315, a timing schedule is obtained, based on the timing for providing a response to the request according to the timing. In one or more embodiments, the timing schedule maps the timing to an available system I/O resource and/or to external and internal system timing requirements. Such a mapping may be completed, for example, by the I/O scheduler layer and provided to the abstraction layer in some embodiments. In one or more embodiments, the timing schedule may be generated at runtime. In one or more embodiments, the timing schedule may be created as a non-resident task (e.g., not in the system itself). In one or more embodiments, the timing schedule may be created using a scheduling tool, as described herein with respect to
Still referring to
At block 318, further transmission(s) can be received from the application layer. That is, in the course of running an application, the application layer may generally transmit a plurality of requests (e.g., dozens, hundreds, or even thousands of requests, depending on the type of system). For example, such requests may include, but are not limited to, a request for a reading from one or more sensors (e.g., a pressure sensor, a temperature sensor, or the like), a request for a particular component (e.g., a stepper motor or the like) to move to a certain position, a request for a particular component to open or close (e.g., a valve, a solenoid, or the like).
At block 320, the task is converted (e.g., translated) into a translated task readable by the one or more existing hardware components. This allows the existing hardware components to understand the task, even if the request from the application layer was hardware-agnostic.
At block 322, the translated task and/or the timing schedule are provided to an input/output (I/O) scheduler, the I/O scheduler interfacing with one or more existing hardware components to generate an input or output. In one or more embodiments, the I/O scheduler may interface with the one or more existing hardware components to generate an input or an output depending on an interface type. The I/O scheduler may be implemented via software and/or hardware. For example, some functions of the I/O scheduler may be completed by hardware components, whereas other functions may be completed via one or more software processes. That is, the timing schedule itself is unified (e.g., one time base, with tasks split between different implementations), but can be handled by a plurality of different elements.
At block 324, an input or an output is received from the I/O scheduler. At block 326, the input or output is provided to the application layer as an emulated input or an emulated output that mimics an expected input or an expected output of the component type with the timing. The emulated input or the emulated output may allow the application layer to receive the requested resource even if the hardware component(s) do not correspond to the component type for performing the task and/or do not correspond to the timing schedule.
At block 328, it is determined if there are any additional transmissions. If there are no additional transmissions (block 328: NO), the method ends. If there are additional transmissions (block 328: YES), the method returns to block 318 to receive the further transmissions from the application layer.
At block 402, inputs are provided to a scheduling tool (e.g., scheduling solver). The inputs include, for example, information pertaining to when an application would like an I/O task to happen from one or more requesting sources (e.g., multicore processors may have many concurrent attempted requests for I/O), and the capabilities of the I/O devices (e.g., bandwidth of the I/O devices, whether the I/O devices can perform their function concurrently with other I/O devices, etc.). In one or more embodiments, the scheduling tool may be, e.g., a network scheduling solver similar to the type of network schedule solver used on aircraft Avionics Full-Duplex Switched Ethernet (AFDX) networks.
At block 404, the scheduling tool then analyzes the requests and their desired timing against the capability of the system to determine if a schedule can be created that meets every constraint. If a schedule can be created (block 404: YES), the method proceeds to block 406 and the scheduling tool produces an output file that creates that schedule for the I/O scheduler.
If the scheduling tool determines that a schedule cannot be created (block 404: NO) the method continues to block 308 and reports that a schedule cannot be created and/or provides an indication (e.g., an error message or the like) that intervention is needed (e.g., an instruction to system designers need to change their inputs to allow a schedule to be created). For example, changing inputs may include, but is not limited to, changing the desired timing of events, changing the capability of I/O devices and/or a combination of both.
In one or more embodiments, the timing schedule may be created based on pre-determined timing requirements and/or based on prior calculations of processor timing and device performance.
Further, in one or more embodiments, the application layer defines the incoming data format and/or the outgoing data format. The context layer can provides a transition from a generic (e.g., hardware agnostic) format of application data that is being moved through the system I/O to/from any type of data format (e.g., single byte serial data, CAN bus data payloads, Ethernet packets, Serial Advanced Technology Attachment (SATA) bus memory payloads, and the like). The context layer understands how to take the application layer generic data, and formats it, parses it if necessary, and controls its flow through the low-level device driver layer.
In one or more embodiments, instead of interfacing directly with the low-level device driver layer, the context layer moves data to/from the I/O scheduler layer. The I/O scheduler may directly control the low-level device driver layer. When both a context layer and an I/O scheduler layer are deployed, the processor execution is decoupled from system I/O timing with the I/O scheduler and the processor data constructs are defined without needing to conform to the data format of the actual I/O protocol format. In one or more embodiments, the I/O scheduler may be implemented via hardware and/or software. Examples of such hardware include, but are not limited to a multi-core processor, a microcontroller, a field-programmable gate array (FPGA), or an application-specific integrated circuit (ASIC). In some embodiments, the loading of the I/O schedule can be done at any layer (e.g., application layer, context layer, OS layer, and the like). In one or more embodiments, the timing schedule may be generated as part of the creation or definition of the system. This timing schedule generation is accomplished via a process that maps the application timing needs to the available system I/O resources and to the external and internal system timing requirements to create the schedule. In one or more embodiments, the process may be aided by a scheduling tool. Once generated, the schedule is deployed as part of the system (e.g., within the I/O scheduler). In one or more embodiments, the I/O scheduler is the master, meaning everything else with respect to I/O is controlled by the I/O scheduler's timing schedule. In one or more embodiments, the I/O scheduler can provide an input or an output.
Nonlimiting detailed examples are presented below with reference to
One or more of the examples below illustrate dynamic loading of libraries. However, such illustration is merely an example, and it is to be understood that the present disclosure is not limited solely to dynamic loading of libraries. That is, in one or more embodiments, libraries may be statically compiled into the application. In some embodiments, a hybrid combination of statically compiled libraries and dynamically loaded libraries may be utilized. That is, certain component types may be built at compile time, and other component types may be loaded dynamically.
EXAMPLE 1: SWITCHING FROM ETHERNET TO UART:
EXAMPLE 2—ETHERNET ABSTRACTION:
EXAMPLE 3: ETHERNET ABSTRACTION HANDSHAKING:
EXAMPLE 4: ETHERNET ABSTRACTION POLLING:
EXAMPLE 5: UART ABSTRACTION:
EXAMPLE 6: UART ABSTRACTION HANDSHAKING:
EXAMPLE 7: UART ABSTRACTION POLLING:
EXAMPLE 8: CAN ABSTRACTION:
EXAMPLE 9: CAN ABSTRACTION HANDSHAKING:
EXAMPLE 10: CAN ABSTRACTION POLLING:
EXAMPLE 11: SPI ABSTRACTION:
EXAMPLE 12: SPI ABSTRACTION HANDSHAKING:
EXAMPLE 13: I2C ABSTRACTION:
EXAMPLE 14: I2C ABSTRACTION HANDSHAKING:
EXAMPLE 15: I/O SCHEDULER ETHERNET:
EXAMPLE 16: I/O SCHEDULER ETHERNET SCENARIO-INITIALIZATION:
EXAMPLE 17: I/O SCHEDULER ETHERNET SEND SCENARIO:
EXAMPLE 18: I/O SCHEDULER ETHERNET READ SCENARIO:
EXAMPLE 19: I/O SCHEDULER UART:
EXAMPLE 20: I/O SCHEDULER UART SCENARIO-INITIALIZATION:
EXAMPLE 21: I/O SCHEDULER UART SEND SCENARIO:
EXAMPLE 22: I/O SCHEDULER UART READ SCENARIO:
As described in detail above, embodiments are directed to systems and methods for providing an abstraction layer between an application layer and one or more hardware components of an electronic device, particularly electronic devices that incorporate a real time operating system (RTOS). The abstraction layer allows for modification of hardware components in the electronic device without revisions to software located within the application layer of the device.
While particular embodiments have been illustrated and described herein, it should be understood that various other changes and modifications may be made without departing from the spirit and scope of the claimed subject matter. Moreover, although various aspects of the claimed subject matter have been described herein, such aspects need not be utilized in combination. It is therefore intended that the appended claims cover all such changes and modifications that are within the scope of the claimed subject matter.
Further aspects of the invention are provided by the subject matter of the following clauses:
1. A method of providing an abstraction layer between an application layer and one or more existing hardware components of a computing device, the method comprising: receiving a request for a resource from the application layer, the application layer being stored in a non-transitory medium of the computing device; determining a component type for performing a task according to the request for the resource; determining whether the one or more existing hardware components of the computing device correspond to the component type for performing the task based on a predetermined function of the one or more existing hardware components; and when the one or more existing hardware components of the computing device do not correspond to the component type for performing the task: converting the task into a translated task readable by the one or more existing hardware components; providing the translated task to the one or more existing hardware components, receiving an output from the one or more existing hardware components as a result of providing the translated task, and providing the output to the application layer as an emulated output that mimics an expected output of the component type.
2. The method of any preceding clause, further comprising: when a first hardware component of the one or more existing hardware components does not correspond to the component type: determining that a second hardware component of the one or more existing hardware components is capable of performing the task as an alternative to the first hardware component, providing the task to the second hardware component, receiving an output from the second hardware component as a result of providing the task, and providing the output to the application layer.
3. The method of any preceding clause, wherein determining whether the one or more existing hardware components of the computing device correspond to the component type for performing the task comprises: transmitting a driver information request to a hardware device driver layer, the driver information request corresponding to the one or more existing hardware components; receiving driver information from the hardware device driver layer, the driver information corresponding to a set of functions of the one or more existing hardware components; and determining one or more functions of the set of functions that corresponds to the component type.
4. The method of any preceding clause, wherein determining whether the one or more existing hardware components of the computing device correspond to the component type for performing the task comprises determining whether one or more components of a real-time control system correspond to the component type for performing the task.
5. The method of any preceding clause, wherein determining whether the one or more existing hardware components of the computing device correspond to the component type for performing the task comprises one of: determining whether one or more components of a medical device control system correspond to the component type for performing the task; determining whether one or more components of a power turbine control system correspond to the component type for performing the task; and determining whether one or more components of a factory control system correspond to the component type for performing the task.
6. A method of providing an abstraction layer between an application layer and one or more existing hardware components of a computing device, the method comprising: receiving a request for a resource from the application layer, the application layer being stored in a non-transitory medium of the computing device; determining a timing for performing a task according to the request for the resource; obtaining, based on the timing, a timing schedule for providing a response to the request according to the timing; and when the one or more existing hardware components of the computing device have a hardware timing that does not correspond to the timing schedule: providing the task and the timing schedule to an input/output (I/O) scheduler; receiving an input or an output from the I/O scheduler as a result of providing the task, and providing the input or the output to the application layer as an emulated input or an emulated output that mimics the timing.
7. The method of any preceding clause, wherein the timing schedule maps the timing to an available system I/O resource and/or to external and internal system timing requirements.
8. The method of any preceding clause, wherein providing the input or the output to the application layer as the emulated input or the emulated output comprises delaying transmission of one or more portions of the input or the output in accordance with the timing.
9. The method of any preceding clause, further comprising: when a first hardware component of the one or more existing hardware components does not have a hardware timing that corresponds to the timing schedule: determining that a second hardware component of the one or more existing hardware components has a hardware timing that corresponds to the timing schedule, providing the task to the second hardware component, receiving an input or an output from the second hardware component as a result of providing the task, and providing the input or the output to the application layer.
10. The method of any preceding clause, further comprising: determining whether the one or more existing hardware components of the computing device have a hardware timing that does not correspond to the timing schedule.
11. The method of any preceding clause, wherein determining whether the one or more existing hardware components of the computing device have a hardware timing that does not correspond to the timing schedule comprises: transmitting a driver information request to a hardware device driver layer, the driver information request corresponding to the one or more existing hardware components; and receiving driver information from the hardware device driver layer, the driver information corresponding to a hardware timing of the one or more existing hardware components.
12. The method of any preceding clause, wherein providing the task and the timing schedule to the I/O scheduler comprises providing the task and timing schedule to an I/O scheduler having an independent clock having a clock rate that is independent of a clock rate of the one or more existing hardware components.
13. The method of any preceding clause, wherein providing the task and the timing schedule to the I/O scheduler comprises providing the task and timing schedule to a hardware based I/O scheduler.
14. The method of any preceding clause, wherein providing the task and the timing schedule to the I/O scheduler comprises providing the task and timing schedule to a software based I/O scheduler.
15. A method of providing an abstraction layer between an application layer and one or more existing hardware components of a computing device, the method comprising: receiving a request for a resource from the application layer, the application layer being stored in a non-transitory medium of the computing device; determining a component type and a timing for performing a task according to the request for the resource; determining whether the one or more existing hardware components of the computing device correspond to the component type for performing the task; obtaining, based on the timing, a timing schedule for providing a response to the request at the timing; and when the one or more existing hardware components of the computing device do not correspond to the component type for performing the task and/or do not correspond to the timing schedule: converting the task into a translated task readable by the one or more existing hardware components; providing the translated task and the timing schedule to an input/output (I/O) scheduler, the I/O scheduler interfacing with one or more existing hardware components that generate an input or an output depending on an interface type, receiving the input or the output, and providing the input or the output to the application layer as an emulated input or an emulated output that mimics an expected input or an expected output of the component type with the timing.
16. The method of any preceding clause, wherein determining the component type for performing the task comprises determining a context of the request.
17. The method of any preceding clause, wherein determining the context of the request comprises accessing a context base containing one or more stored contexts cross-referenced with requests.
18. The method of any preceding clause, wherein providing the input or the output to the application layer as the emulated input or the emulated output comprises delaying transmission of one or more portions of the input or the output in accordance with the timing.
19. The method of any preceding clause, wherein providing the task and the timing schedule to the I/O scheduler comprises providing the task and timing schedule to one or more of a hardware based I/O scheduler and a software based I/O scheduler.
20. The method of any preceding clause, wherein the timing schedule maps the timing to one or more of an available system I/O resource and to external and internal system timing requirements.