diff options
author | venkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-04-14 18:11:53 +0000 |
---|---|---|
committer | venkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-04-14 18:11:53 +0000 |
commit | 10fd5bb59cfd0e1d9a25164ec06782bc957e64a2 (patch) | |
tree | 0efa930f7cc394246467766fd015aef9f6d6f303 | |
parent | 02b70d21b5b2fb3c8ef6c74cb838526f18b2956e (diff) | |
download | ATCD-10fd5bb59cfd0e1d9a25164ec06782bc957e64a2.tar.gz |
ChangeLogTag: Mon Apr 14 12:56:07 2003 Venkita Subramonian <venkita@cs.wustl.edu>
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | Kokyu/DSRT_Dispatcher_Impl.cpp | 127 | ||||
-rw-r--r-- | Kokyu/DSRT_Dispatcher_Impl.h | 62 | ||||
-rw-r--r-- | Kokyu/DSRT_Dispatcher_Impl.i | 37 |
4 files changed, 234 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index d47caf4cdfa..1739d518169 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Mon Apr 14 12:56:07 2003 Venkita Subramonian <venkita@cs.wustl.edu> + + * Kokyu/DSRT_Dispatcher_Impl.h: + * Kokyu/DSRT_Dispatcher_Impl.cpp: + * Kokyu/DSRT_Dispatcher_Impl.i: + + Added new files for Dynamic scheduling support. + Mon Apr 14 17:28:56 UTC 2003 Johnny Willemsen <jwillemsen@remedy.nl> * ace/config-cygwin32-common.h: diff --git a/Kokyu/DSRT_Dispatcher_Impl.cpp b/Kokyu/DSRT_Dispatcher_Impl.cpp new file mode 100644 index 00000000000..eed2ed8d633 --- /dev/null +++ b/Kokyu/DSRT_Dispatcher_Impl.cpp @@ -0,0 +1,127 @@ +// $Id$ + +#include "DSRT_Dispatcher_Impl.h" +#include "ace/Sched_Params.h" + +#if ! defined (__ACE_INLINE__) +#include "DSRT_Dispatcher_Impl.i" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(Kokyu, Dispatcher_Impl, "$Id$") + +namespace Kokyu +{ + +static Priority_t schedule_MIF (Importance_t imp) +{ + Priority_t min = + ACE_Sched_Params::priority_min (ACE_SCHED_FIFO, ACE_SCOPE_THREAD); + + Priority_t max = + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO, ACE_SCOPE_THREAD); + + switch (imp) + { + case VERY_LOW_IMPORTANCE: + return min; + break; + + case LOW_IMPORTANCE: + return ACE_Sched_Params::next_priority + (ACE_SCHED_FIFO, min, ACE_SCOPE_THREAD); + break; + + case MEDIUM_IMPORTANCE: + return ACE_Sched_Params::next_priority + (ACE_SCHED_FIFO, + ACE_Sched_Params::next_priority + (ACE_SCHED_FIFO, min, ACE_SCOPE_THREAD), + ACE_SCOPE_THREAD); + break; + + case HIGH_IMPORTANCE: + return ACE_Sched_Params::previous_priority + (ACE_SCHED_FIFO, max, ACE_SCOPE_THREAD); + break; + + case VERY_HIGH_IMPORTANCE: + return max; + break; + + default: + break; + } + + return 0; +} + +int +DSRT_Dispatcher_Impl::init_i (const DSRT_ConfigInfo& config_info) +{ + //create and init the dispatcher tasks here + ACE_DEBUG ((LM_DEBUG, "entering init_i\n" )); + + // ACE_NEW_RETURN (this->task_, DSRT_Dispatcher_Task (*config), -1); + + //this->activate (); + + curr_config_info_ = config_info; + return 0; +} + + /************************ +int +DSRT_Dispatcher_Impl::activate () +{ + long flags = THR_BOUND | THR_SCHED_FIFO; + + Priority_t priority = + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO, + ACE_SCOPE_THREAD); + + if (this->task_->activate (flags, 1, 1, priority) == -1) + { + flags = THR_BOUND; + priority = ACE_Sched_Params::priority_max (ACE_SCHED_OTHER, + ACE_SCOPE_THREAD); + if (this->task_->activate (flags, 1, 1, priority) == -1) + ACE_ERROR ((LM_ERROR, + "EC (%P|%t) cannot activate queue %d", i)); + } + return 0; +} +*********************************/ + +int +DSRT_Dispatcher_Impl::schedule_i (guid_t guid, + const QoSDescriptor& qos_info) +{ + ACE_UNUSED_ARG (guid); + switch (curr_config_info_.scheduler_type_) + { + case SCHED_MIF: + ACE_DEBUG ((LM_DEBUG, "(%t) request for MIF schedule\n")); + Priority_t prio = schedule_MIF (qos_info.importance_); + ACE_OS::thr_setprio (ACE_OS::thr_self (), prio); + break; + } + return 0; +} + +int +DSRT_Dispatcher_Impl::update_schedule_i (guid_t guid, + const QoSDescriptor& qos_info) +{ + ACE_UNUSED_ARG (guid); + ACE_UNUSED_ARG (qos_info); + return 0; +} + +int +DSRT_Dispatcher_Impl::cancel_schedule_i (guid_t guid, + const QoSDescriptor& qos_info) +{ + return schedule_i (guid, qos_info); +} + +} diff --git a/Kokyu/DSRT_Dispatcher_Impl.h b/Kokyu/DSRT_Dispatcher_Impl.h new file mode 100644 index 00000000000..21853c3a661 --- /dev/null +++ b/Kokyu/DSRT_Dispatcher_Impl.h @@ -0,0 +1,62 @@ +/* -*- C++ -*- */ +/** + * @file DSRT_Dispatcher_Impl.h + * + * $Id$ + * + */ + +#ifndef DSRT_DISPATCHER_IMPL_H +#define DSRT_DISPATCHER_IMPL_H +#include "ace/pre.h" +#include "ace/OS.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Task.h" +#include "ace/Message_Block.h" +#include "ace/Auto_Ptr.h" + +#include "kokyu_export.h" +#include "Kokyu.h" + +namespace Kokyu +{ + class DSRT_Dispatcher_Impl + { + public: + virtual ~DSRT_Dispatcher_Impl (); + // int activate (); + int init (const DSRT_ConfigInfo&); + int schedule (guid_t guid, + const QoSDescriptor&); + int update_schedule (guid_t guid, + const QoSDescriptor&); + int cancel_schedule (guid_t guid, + const QoSDescriptor&); + + private: + int init_i (const DSRT_ConfigInfo&); + int schedule_i (guid_t guid, + const QoSDescriptor&); + int update_schedule_i (guid_t guid, + const QoSDescriptor&); + int cancel_schedule_i (guid_t guid, + const QoSDescriptor&); + + private: + // typedef auto_ptr<DSRT_Dispatcher_Task> DSRT_Dispatcher_Task_Auto_Ptr; + // DSRT_Dispatcher_Task_Auto_Ptr task_; + DSRT_ConfigInfo curr_config_info_; + }; + +} //end of namespace + +#if defined (__ACE_INLINE__) +#include "DSRT_Dispatcher_Impl.i" +#endif /* __ACE_INLINE__ */ + +#include "ace/post.h" +#endif /* DEFAULT_DISPATCHER_IMPL_H */ diff --git a/Kokyu/DSRT_Dispatcher_Impl.i b/Kokyu/DSRT_Dispatcher_Impl.i new file mode 100644 index 00000000000..401e41c44f1 --- /dev/null +++ b/Kokyu/DSRT_Dispatcher_Impl.i @@ -0,0 +1,37 @@ +// $Id$ + +namespace Kokyu +{ +ACE_INLINE +DSRT_Dispatcher_Impl::~DSRT_Dispatcher_Impl () +{ +} + +ACE_INLINE +int DSRT_Dispatcher_Impl::init (const DSRT_ConfigInfo& config_info) +{ + return this->init_i (config_info); +} + +ACE_INLINE +int DSRT_Dispatcher_Impl::schedule (guid_t guid, + const QoSDescriptor& qos) +{ + return this->schedule_i (guid, qos); +} + +ACE_INLINE +int DSRT_Dispatcher_Impl::update_schedule (guid_t guid, + const QoSDescriptor& qos) +{ + return this->update_schedule_i (guid, qos); +} + +ACE_INLINE +int DSRT_Dispatcher_Impl::cancel_schedule (guid_t guid, + const QoSDescriptor& qos) +{ + return this->cancel_schedule_i (guid, qos); +} + +} |