I have tried to summarise the very basic elements of an IMA system. If you have any comments then please feel free to mail me.
Technology Transparency - The underlying hardware should not have any impact on an application either during development or execution
Scheduled Maintenance - The system should have inbuilt capability to operate in the presence of failures so that Maintenance Free Operating Periods (MFOPS) can be achieved
Incremental Update - The system should be designed such that applications can be inserted/altered with minimum impact on other applications and on the supporting safety case
Layered architecture using standard programming interface layers to hide hardware and applications from one another
Reconfiguration of applications on the modules. This can be static re-configuration (whilst the aircraft is not in use) or dynamic reconfiguration (in flight)
Protection mechanisms to allow resources like memory to be shared by multiple criticality level applications, and to allow applications to be inserted/altered without impact on the rest of the system. This is called partitioning.
Flexible scheduling to meet the deadlines of all the applications, for each viable configuration and when system is upgraded.
Code re-use and portability
An operating system to manage the applications
Physical integration of networks, modules and IO devices
Design for growth and change
Figure 1: Example basic IMA computing module.
Figure 1 shows a very simple layered architecture for an IMA computing module. Note that some operating services could be located in the actual partitions, and/or the architecture could have an extra hardware interface system layer such as the ARINC 653 model. The partitions contain actual application functions.