/** @page LEVEL3 Scheduler Requirements @section LEVEL4 Simulation Time -# %Trick shall track simulation elapsed time by an integer count of tics/second [ @anchor r_exec_time_0 r_exec_time_0 ] -# %Trick shall initialize simulation elapsed time after all initialization class jobs have completed. [ @anchor r_exec_time_1 r_exec_time_1 ] -# %Trick shall increment simulation elapsed time to the next lowest job call time greater than the current simulation time after all jobs at the current simulation time have completed. [ @anchor r_exec_time_2 r_exec_time_2 ] @section LEVEL4 Modes -# %Trick shall provide an initialization mode [ @anchor r_exec_mode_0 r_exec_mode_0 ] -# %Trick shall provide a run mode [ @anchor r_exec_mode_1 r_exec_mode_1 ] -# %Trick shall provide a freeze mode [ @anchor r_exec_mode_2 r_exec_mode_2 ] -# %Trick shall provide an exit mode [ @anchor r_exec_mode_3 r_exec_mode_3 ] -# %Trick shall provide a mode command to transition to Freeze [ @anchor r_exec_mode_4 r_exec_mode_4 ] -# %Trick shall provide a mode command to transition to Run [ @anchor r_exec_mode_5 r_exec_mode_5 ] -# %Trick shall provide a mode command to transition to Shutdown [ @anchor r_exec_mode_6 r_exec_mode_6 ] @section LEVEL4 Jobs -# %Trick shall provide a method for adding simulation objects to the scheduler prior to execution. [ @anchor r_exec_jobs_2 r_exec_jobs_2 ] -# %Trick shall order jobs by job_class, then phase, then sim_object id, then job_id [ @anchor r_exec_jobs_3 r_exec_jobs_3 ] @section LEVEL4 Periodic Jobs -# %Trick shall execute periodic scheduled jobs during simulation run mode (all scheduled types) [ @anchor r_exec_periodic_0 r_exec_periodic_0 ] -# %Trick shall execute periodic freeze jobs during simulation freeze mode (freeze) [ @anchor r_exec_periodic_1 r_exec_periodic_1 ] -# %Trick shall execute periodic scheduled jobs during simulation run mode at the end of a settable software_frame (end_of_frame) [ @anchor r_exec_periodic_2 r_exec_periodic_2 ] -# %Trick shall assign the initial call time for a periodic job to the current simulation time + job offset. [ @anchor r_exec_periodic_3 r_exec_periodic_3 ] -# %Trick shall reschedule subsequent job call times for a periodic job to the current simulation time + job cycle. [ @anchor r_exec_periodic_4 r_exec_periodic_4 ] @section LEVEL4 Discrete Jobs -# %Trick shall execute discrete job execution scheduling on simulation startup (default_data) [ @anchor r_exec_discrete_0 r_exec_discrete_0 ] -# %Trick shall execute discrete job execution scheduling during simulation initialization (initialization) [ @anchor r_exec_discrete_1 r_exec_discrete_1 ] -# %Trick shall execute of discrete job execution scheduling upon entering simulation freeze (freeze_init) [ @anchor r_exec_discrete_2 r_exec_discrete_2 ] -# %Trick shall execute of discrete job execution scheduling upon exiting simulation freeze (unfreeze) [ @anchor r_exec_discrete_3 r_exec_discrete_3 ] -# %Trick shall execute discrete job execution scheduling during simulation termination (shutdown) [ @anchor r_exec_discrete_4 r_exec_discrete_4 ] @section LEVEL4 Instrumentation Jobs -# %Trick shall provide a method for inserting a job before each initialization and each scheduled job within a simulation. [ @anchor r_exec_instrument_0 r_exec_instrument_0 ] -# %Trick shall provide a method for inserting a job before a single initialization or scheduled job within a simulation. [ @anchor r_exec_instrument_1 r_exec_instrument_1 ] -# %Trick shall provide a method for inserting a job after each initialization and each scheduled job within a simulation. [ @anchor r_exec_instrument_2 r_exec_instrument_2 ] -# %Trick shall provide a method for inserting a job after a single initialization or scheduled job within a simulation. [ @anchor r_exec_instrument_3 r_exec_instrument_3 ] -# %Trick shall provide a method for removing instrumentation job(s). [ @anchor r_exec_instrument_4 r_exec_instrument_4 ] @section LEVEL4 Threads -# %Trick shall support single threaded execution during all modes of operation [ @anchor r_exec_thread_0 r_exec_thread_0 ] -# %Trick shall support multiple threads of execution during run mode. [ @anchor r_exec_thread_1 r_exec_thread_1 ] -# %Trick shall support child threads that synchronize execution with each time step of the parent thread (synchronous thread) [ @anchor r_exec_thread_2 r_exec_thread_2 ] -# %Trick shall support child threads that does not synchronize execution with the parent thread. Thread jobs are restarted at next available time step from the master thread. (asynchronous thread) [ @anchor r_exec_thread_3 r_exec_thread_3 ] -# %Trick shall support child threads that does synchronizes execution with the parent thread at a specified interval. This interval may be greater than a time step in the parent thread (asynchronous must finish (AMF) thread) [ @anchor r_exec_thread_4 r_exec_thread_4 ] -# %Trick shall spawn enough threads to accomodate jobs listed within the S_define file [ @anchor r_exec_thread_5 r_exec_thread_5 ] -# %Trick shall provide inter-thread job dependencies. This ensures pre-requesite jobs are completed before current job execution. [ @anchor r_exec_thread_6 r_exec_thread_6 ] -# %Trick shall terminate simulation execution if a child thread exits [ @anchor r_exec_thread_7 r_exec_thread_7 ] @section LEVEL4 Signals -# %Trick shall assign signal handlers to attempt a graceful shutdown of the simulation when the following signals occur: SIGINT, SIGTERM, SIGBUS, SIGSEGV, SIGFPE [ @anchor r_exec_signal_0 r_exec_signal_0 ] -# %Trick shall assign signal handlers to handle the SIGCHLD signal [ @anchor r_exec_signal_1 r_exec_signal_1 ] -# %Trick shall attempt to terminate the simulation gracefully when a SIGTERM, SIGBUS, or SIGSEGV signal is caught. Program corruption at this point may be too great to complete this requirement, hence "attempt". [ @anchor r_exec_signal_2 r_exec_signal_2 ] -# %Trick shall allow the user to assign the system default signal handlers for the signals SIGBUS, SIGSEGV, or SIGFPE signals. [ @anchor r_exec_signal_3 r_exec_signal_3 ] */