|
||
The System Starter is invoked by the Base Starter as part of the boot process once the file system has been mounted. It works by processing a list of instructions in sequence. The list is referred to as a Static Startup Configuration, or SSC. In practical terms the SSC is defined in a resource file and is built into the ROM.
A fundamental feature of the SSC is that it allows the start up procedure to be optimised. Though the commands are processed in sequence their effect is to perform tasks not only in sequence (wait for the application or process to initialise before continuing) but also in parallel (do not wait for initialisation) and at the optimum time (wait until conditions are right).
In the diagram above each vertical bar represents a process or application started during the startup procedure. The list on the left shows the SSC command for each process. An application may ‘rendezvous’ with the starter when its initialisation (shown in dark blue) is complete and it is ready to be used by dependent applications. A rendezvous is simply a signal from the appliation to the starter that it has reached a designated point.
Process number 1 starts first and must rendezvous (WaitForStart) before 2, 3 or 4 can start.
Processes 2, 3 & 4 are all started in parallel but must rendezvous before 6 can start. (DeferredWaitForStart)
5 is not a process at all. When the starter reaches a MultipleWait instruction it pauses until all outstanding DeferredWaitForStart processes have made their rendezvous.
Processes 6, 7 & 8 are all started in parallel but each is treated differently. 7 is FireAndForget so it has no need of an initialisation section or a rendezvous. 8 must complete its initialisation before 9 can start. 6 and 9 must initialise before 11 can be started.
The multiple wait (10) ensures that 6 has made its rendezvous before 11 starts. In the diagram there will be no wait because 6 has already completed its initialisation by the time 10 starts. The same result could have been achieved by specifying 9 as DeferredWaitForStart.