📄 dynsched.h
字号:
status_t schedule_dispatches (
ACE_Unbounded_Set<RtecScheduler::Scheduling_Anomaly *> &anomaly_set);
// dispatch scheduling method: sets up an array of dispatch entries,
// calls internal dispatch scheduling method.
virtual status_t store_assigned_info (void);
// = store assigned information back into the RT_Infos
// = Set the minimum priority value.
void minimum_priority_queue (const Preemption_Priority minimum_priority_queue_number);
// = Set the number of tasks.
void tasks (const u_int tasks);
// = Set the number of threads.
void threads (const u_int threads);
// = Set the current scheduler status.
void status (const status_t new_status);
/////////////////////////////////////////////
// protected pure virtual member functions //
/////////////////////////////////////////////
virtual Preemption_Priority minimum_critical_priority () = 0;
// = determine the minimum critical priority number
virtual status_t sort_dispatches (Dispatch_Entry **, u_int) = 0;
// internal sorting method: this orders the dispatches by
// static priority and dynamic and static subpriority.
virtual status_t assign_priorities (
Dispatch_Entry **dispatches,
u_int count,
ACE_Unbounded_Set<RtecScheduler::Scheduling_Anomaly *> &anomaly_set) = 0;
// = assign priorities to the sorted dispatches
virtual status_t assign_subpriorities (
Dispatch_Entry **dispatches,
u_int count,
ACE_Unbounded_Set<RtecScheduler::Scheduling_Anomaly *> &anomaly_set) = 0;
// = assign dynamic and static sub-priorities to the sorted dispatches
virtual status_t
schedule_timeline_entry (Dispatch_Entry &dispatch_entry,
ACE_Unbounded_Queue <Dispatch_Entry *>
&reschedule_queue) = 0;
// = schedule a dispatch entry into the timeline being created
////////////////////////////
// protected data members //
////////////////////////////
OS_Priority minimum_priority_;
// The minimum OS thread priority value that the application specified (in
// its call to init ()).
OS_Priority maximum_priority_;
// The maximum OS thread priority value that the application specified (in
// its call to init ()).
Task_Entry *task_entries_;
// Collection of known tasks.
Task_Entry **ordered_task_entries_;
// An array of pointers to task entries which wrap RT_Infos. It is
// sorted by the DFS finishing time and then the resulting topological
// over the call graph is used both to check for call chain cycles and
// to correctly propagate scheduling information away from the threads.
ACE_Unbounded_Set <Dispatch_Entry *> *thread_delineators_;
// identifies dispatch entries whose underlying
// Task Entries delineate threads
Dispatch_Entry **ordered_thread_dispatch_entries_;
// An array of pointers to task entries which initiate call chains.
// It is sorted by the schedule_threads method defined in the derived class.
ACE_Unbounded_Set <Dispatch_Entry *> *dispatch_entries_;
// the set of dispatch entries
ACE_Unbounded_Set <Config_Info *> *config_info_entries_;
// Collection of dispatch configuration entries.
ACE_Unbounded_Set <Dispatch_Entry *> *expanded_dispatches_;
// expanded set of dispatch entries (all dispatch entries produced by
// expanding sub-frames to the total frame size during timeline creation)
Dispatch_Entry **ordered_dispatch_entries_;
// An array of pointers to dispatch entries. It is
// sorted by the schedule_dispatches method.
u_int dispatch_entry_count_;
// the number of dispatch entries in the schedule
u_int threads_;
// the number of dispatch entries in the schedule
ACE_Ordered_MultiSet <TimeLine_Entry_Link> *timeline_;
// Ordered MultiSet of timeline entries.
private:
///////////////////////////////
// private type declarations //
///////////////////////////////
typedef ACE_CString EXT;
typedef RT_Info *INT;
#if defined (ACE_HAS_THREADS)
typedef TAO_SYNCH_MUTEX SYNCH;
typedef TAO_SYNCH_RECURSIVE_MUTEX LOCK;
#else
typedef ACE_Null_Mutex SYNCH;
typedef ACE_Null_Mutex LOCK;
#endif /* ACE_HAS_THREADS */
typedef ACE_Map_Manager<EXT, INT, TAO_SYNCH_MUTEX> Info_Collection;
typedef ACE_Map_Iterator<EXT, INT, TAO_SYNCH_MUTEX> Info_Collection_Iterator;
typedef ACE_Map_Entry<EXT, INT> Info_Collection_Entry;
//////////////////////////////
// private member functions //
//////////////////////////////
status_t create_timeline ();
// Create a timeline.
status_t output_dispatch_timeline (const char *filename);
status_t output_dispatch_timeline (FILE *file);
// this prints a dispatch timeline to the specified file
status_t output_preemption_timeline (const char *filename);
status_t output_preemption_timeline (FILE *file);
// this prints a preemption timeline to the specified file
status_t output_viewer_timeline (const char *filename);
status_t output_viewer_timeline (FILE *file);
// this prints a scheduling viewer timeline to the specified file
status_t output_dispatch_priorities (const char *filename);
status_t output_dispatch_priorities (FILE *file);
// this prints the scheduling parameters and assigned priorities to the specified file
// = Set up the task entry data structures
status_t setup_task_entries (void);
// = Relate the task entries according to the
// dependencies of the underlying RT_Infos
status_t relate_task_entries (void);
// recursively traverse dependency graph, relating
// task entries and performing DFS start/end marking
status_t relate_task_entries_recurse (long &time, Task_Entry &entry);
// identify thread delimiters
status_t
identify_threads (ACE_CString & unresolved_locals,
ACE_CString & unresolved_remotes);
// checks for cycles in the dependency graph
status_t check_dependency_cycles (void);
// recursion used to check for cycles in the dependency graph
status_t check_dependency_cycles_recurse (Task_Entry &entry);
// = Aggregate the scheduling parameters of the threads
status_t aggregate_thread_parameters (void);
// = recursion over oneway dependencies used to aggregate thread parameters
status_t aggregate_oneways_recurse (Task_Entry &entry);
// = recursion over twoway dependencies used to aggregate thread parameters
status_t aggregate_twoways_recurse (Task_Entry &entry);
// update the scheduling parameters for the previous priority level
void update_priority_level_params ();
status_t
propagate_dispatches (
ACE_Unbounded_Set<RtecScheduler::Scheduling_Anomaly *> &anomaly_set,
ACE_CString & unresolved_locals,
ACE_CString & unresolved_remotes);
// propagate the dispatch information from the
// threads throughout the call graph
status_t calculate_utilization_params ();
// calculate utilization, frame size, etc.
// the following functions are not implememented
ACE_UNIMPLEMENTED_FUNC(ACE_DynScheduler (const ACE_DynScheduler &))
ACE_UNIMPLEMENTED_FUNC(ACE_DynScheduler &operator= (const ACE_DynScheduler &))
//////////////////////////
// private data members //
//////////////////////////
LOCK lock_;
// This protects access to the scheduler during configuration runs.
ACE_Unbounded_Set <RT_Info *> rt_info_entries_;
// Collection of known tasks.
u_int handles_;
// The number of task handles dispensed so far.
const char *runtime_filename_;
// Destination file of Scheduler output from the configuration run.
const char *rt_info_filename_;
// Destination file of all rt_info data from the configuration run.
const char *timeline_filename_;
// The destination of the timeline.
Info_Collection info_collection_;
// A binding of name to rt_info. This is the mapping for every
// rt_info in the process.
u_int tasks_;
status_t status_;
u_int output_level_;
u_long frame_size_; /* 100 nanosec */
// minimum frame size for all tasks
u_long critical_set_frame_size_; /* 100 nanosec */
// minimum frame size for guaranteed schedulable tasks
double utilization_;
// total utilization for all tasks
double critical_set_utilization_;
// minimum frame size for guaranteed schedulable tasks
Preemption_Priority minimum_priority_queue_;
// The platform-independent priority value of the Event Channel's
// minimum priority dispatch queue. The value of the maximum priority
// dispatch queue is always 0.
Preemption_Priority minimum_guaranteed_priority_queue_;
// The platform-independent priority value of the minimum priority dispatch
// queue whose operations are guaranteed to be schedulable. The value of
// the maximum priority dispatch queue is always 0, -1 indicates none can
// be guaranteed.
u_int up_to_date_;
// indicates whether the a valid schedule has been generated since the last
// relevant change (addition, alteration or removal of an RT_Info, etc.)
u_long min_dispatch_id_;
u_long max_dispatch_id_;
};
#if defined (__ACE_INLINE__)
#include "DynSched.i"
#endif /* __ACE_INLINE__ */
#include /**/ "ace/post.h"
#endif /* DYNSCHED_H */
// EOF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -