|
Generic Universal Hardware Abstracts
The key to the UniOS system, will be abstracted hardware. This
mean that instead of programming the hardware directly, you program a simplified
object that represents the hardware itself. This method produces
slightly slower programs, but allows program code to be portable. Hardware
abstracts, are absolutely necessary to maintaining hardware independence.
A good example of a system with hardware abstracts is Java. Java
uses a set of classes that abstract the physical hardware. When this technique
is done right, it can provide total platform independence.
Hardware abstracts are objects and fall into two categories:
1) High Level - Platform independent, and universal to all UniOS implementations
2) Low Level - System level drivers
High level abstracts map directly to low level functions. This
means that if you have a common function in the High level, how it would
be exectuted would be dependent on the low level, as the low level contains
all the necessary code. The reason for having two layers, is to allow
for universal functions across all UniOS implementation, while still allowing
specialized programs to access hardware functions we have not made universal
through the low level abstract. For example, if a hardware
developer was implementing new features into a video card, he/she could
write these functions into the low level driver, and could take advantage
of them through an application, via the low level driver. We always
will recommend using the high level generic abstracts, but we know it is
a necessity to not limit programmers to them. If a function is important
enough, it will be added into the next standardized release of the particular
hardware abstract object.
Proposed High Level Abstracts Objects By Category:
1) System
- SYSTEM - Used for system status and configuration
- CPU - Used for compiling to native code on application install
- TASK - Used to multitask system
- MEMORY MANAGER - Manages memory resources
- TIME - Timing related I/O for events and observing
- USER - User configuration and information
2) Storage
- FIXED - Hard drives, or otherwise non removable storage methods
- REMOVABLE - Disks, of any size, shape, capacity, and read/write ability
- LINEAR - Linear storage devices such as tapes.
- REMOTE - Any storage device where the availability may be in question
3) Network
- LAN - Methods for communicating local
- WAN - Methods for communication with remote (difference in procedures)
4) Stream (Text)
- SERIAL - I/O from a video display, modem, printer, USB, or dumb terminal
device
- PARALLEL - I/O from printer or specialized I/O channels
5) Graphical
- 2D - Graphical Bit mapped or Vector 2D I/O for mice, scanners, 2D
video cards
- 3D - Graphical Bit mapped or Vector 3D I/O for video cards
6) Sound
- SEQUENCED - MIDI type I/O
- VOICE - PCM related I/O
Each abstract can map to multiple low level devices (multiple hard drives
under fixed storage), with a definable default. An object (application)
would be programmed generically for the abstract with the methods contained
within the abstract object. Specific implementations of protocols and API's,
such as TCP/IP or OpenGL would be built on top of the abstracts, as interfaceable
objects.
This (like all other document ;), is only a suggestion. It may be better
to have a different set of abstracts to allow for better flexibility or
portability. |