13.3    System Startup

(1)   On system startup the system instance transitions from system offline to system starting (see Figure 22).   Start(system) initiates the initialization of the execution platform components.  In the case of processors, the binary images of the kernel address space are loaded into memory of each processor, and execution is started to initialize the execution platform software (see Figure 9).  Loading into memory may take zero time, if the memory can be preloaded, e.g., PROM or flash memory. 

(2)   Once a processor is initialized (Processor operational), each processor initiates the initialization of virtual processors bound to the processor, if any (see Figure 9).  When the virtual processors have completed their initialization they are operational (see Figure 10).

(3)    When processors and virtual processors have entered their operational state (started(processor) and started(vprocessor)), the loading of the binary images of processes bound to the specific processor or its virtual processors into memory is initiated (see Figure 8). Process binary images are loaded in the memory component to which the process and its contained software components are bound.  In a static process loading scenario, all binary images must be loaded before execution of the application system starts, i.e., thread initialization is initiated. In a dynamic process loading scenario, binary images of all the processes that contain a thread that is part of the current mode must be loaded.

(4)   The maximum system initialization time can be determined as

·         max(Startup_Deadline) of all processors and other hardware components

·         + max(Startup_Deadline) of all virtual processors

·         + max(Load_Deadline) of all processes

·         + max(Process_Startup_Deadline) of all processes

·         + max(Initialize_Deadline) of all threads.

(5)   All software components for a process must be bound to memory components that are all accessible from every processor to which any thread contained in the process is bound.  That is, every thread is able to access every memory component into which the binary image of the process containing that thread is loaded.

(6)   Data components shared across processes must be bound to memory accessible by all processors to which the processes sharing the data component are bound.

(7)   Thread initialization must be completed by the next hyperperiod of the initial mode.  Once all threads are initialized, threads that are part of the initial mode enter the await dispatch state.   If loaded, threads that are not part of the initial mode enter the suspend awaiting mode state (see Figure 5). At their first dispatch, the initial values of connected out or in out ports are made available to destination threads in their in or in out ports. 

(8)   This initialization model assumes independent initialization of threads, i.e., no ordering requirement (other than processes must be initialized first).  If there is an ordering requirement the user can introduce an initialization mode, in which they can utilize the full power of AADL to specify thread execution dependencies.

Figure 22 System Instance States, Transitions, and Actions