Embedded Systems
Reliability
Embedded systems are required to be rugged and reliable because it can be difficult if not impossible to patch, fix, or otherwise maintain the system once installed in it’s intended operating environment.
Reliability Problems
Some frequent issues with the reliability of an embedded system are:
- The system is too inaccessible to maintain after deployment to operational environment.
- The system must be kept running for safety reason and thus cannot be safely shut down for maintenance.
- The cost for downtown, in lost revenue by way of decreased production for example, could be substantial.
Solutions to Reliability
The reliability of an embedded system can be fortified with the use of [watchdog timers](Architecture.md#Watchdog Timer) in order to keep the processor on track and hypervisors to encapsulate any issues and prevent them from permeating the system.
Fabrication
High-Volume Fabrication
Primarily concerned with reducing the cost-per-unit by using “good-enough” materials and hardware to implement functionality.
Low-Volume Fabrication and Prototypes
Uses available, general purpose computers with restrictions on the processor to test embedded system designs.
Multitasking
Multitasking or is the act or a computer running two or more programs at the same time. The number of programs that can be effectively multitasked depends on the operating system’s ability to manage the programs, the speed of the CPU and the speed and capacities of the computer’s memory and storage. There are two forms of multitasking: preemptive and cooperative.
Preemptive Multitasking
Preemptive multitasking involves the use of an interrupt mechanism in order to suspend the currently executing process, save its state, and invoke a task scheduler to determine which process should execute next. This insures that all processes receive some amount of CPU time.
Cooperative Multitasking
Also know as non-preemptive multitasking, cooperative multitasking insures that the system never initiates a context switch such as the one seen in preemptive multitasking via interrupting the running process, saving state, and loading another process to execute. Cooperative multitasking achieves this by the processes voluntarily yield the processor periodically or when idle or blocked on some logic. In order for this multitasking scheme to work all the processes must be cooperative.