diff options
author | venkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-04-25 04:26:15 +0000 |
---|---|---|
committer | venkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-04-25 04:26:15 +0000 |
commit | 1b0be34fae7e78d821fa69d3df966c8b26eabca2 (patch) | |
tree | c97bb628da748a3183fea883bad5699a40c725ca /Kokyu | |
parent | adbdf1e8a205e5180cd9a87b5731875c00895c3f (diff) | |
download | ATCD-1b0be34fae7e78d821fa69d3df966c8b26eabca2.tar.gz |
ChangeLogTag: Thu Apr 24 23:20:16 2003 Venkita Subramonian <venkita@cs.wustl.edu>
Diffstat (limited to 'Kokyu')
-rw-r--r-- | Kokyu/DSRT_Dispatcher_Impl.cpp | 6 | ||||
-rw-r--r-- | Kokyu/DSRT_Dispatcher_Impl.h | 14 | ||||
-rw-r--r-- | Kokyu/DSRT_Dispatcher_Impl.i | 6 | ||||
-rw-r--r-- | Kokyu/DSRT_Schedulers.cpp | 86 | ||||
-rw-r--r-- | Kokyu/DSRT_Schedulers.h | 12 | ||||
-rw-r--r-- | Kokyu/Kokyu.cpp | 6 | ||||
-rw-r--r-- | Kokyu/Kokyu.h | 17 | ||||
-rw-r--r-- | Kokyu/tests/DSRT_MIF/MIF.cpp | 13 | ||||
-rw-r--r-- | Kokyu/tests/DSRT_MIF/svc.conf | 4 | ||||
-rw-r--r-- | Kokyu/tests/DSRT_MIF/svc.conf.xml | 2 |
10 files changed, 96 insertions, 70 deletions
diff --git a/Kokyu/DSRT_Dispatcher_Impl.cpp b/Kokyu/DSRT_Dispatcher_Impl.cpp index 704ba23f028..6be4ea9ba3a 100644 --- a/Kokyu/DSRT_Dispatcher_Impl.cpp +++ b/Kokyu/DSRT_Dispatcher_Impl.cpp @@ -30,7 +30,7 @@ DSRT_Dispatcher_Impl::init_i (const DSRT_ConfigInfo& config_info) int DSRT_Dispatcher_Impl::schedule_i (guid_t guid, - const QoSDescriptor& qos_info) + const DSRT_QoSDescriptor& qos_info) { ACE_UNUSED_ARG (guid); @@ -42,7 +42,7 @@ DSRT_Dispatcher_Impl::schedule_i (guid_t guid, int DSRT_Dispatcher_Impl::update_schedule_i (guid_t guid, - const QoSDescriptor& qos_info) + const DSRT_QoSDescriptor& qos_info) { ACE_UNUSED_ARG (guid); ACE_UNUSED_ARG (qos_info); @@ -51,7 +51,7 @@ DSRT_Dispatcher_Impl::update_schedule_i (guid_t guid, int DSRT_Dispatcher_Impl::cancel_schedule_i (guid_t guid, - const QoSDescriptor& qos_info) + const DSRT_QoSDescriptor& qos_info) { return schedule_i (guid, qos_info); } diff --git a/Kokyu/DSRT_Dispatcher_Impl.h b/Kokyu/DSRT_Dispatcher_Impl.h index 6e16981bf6e..f0ed126dbbc 100644 --- a/Kokyu/DSRT_Dispatcher_Impl.h +++ b/Kokyu/DSRT_Dispatcher_Impl.h @@ -37,26 +37,24 @@ namespace Kokyu int init (const DSRT_ConfigInfo&); int schedule (guid_t guid, - const QoSDescriptor&); + const DSRT_QoSDescriptor&); int update_schedule (guid_t guid, - const QoSDescriptor&); + const DSRT_QoSDescriptor&); int cancel_schedule (guid_t guid, - const QoSDescriptor&); + const DSRT_QoSDescriptor&); private: - DSRT_Scheduler_Impl* create_scheduler (DSRT_Sched_t sched_type); int init_i (const DSRT_ConfigInfo&); int schedule_i (guid_t guid, - const QoSDescriptor&); + const DSRT_QoSDescriptor&); int update_schedule_i (guid_t guid, - const QoSDescriptor&); + const DSRT_QoSDescriptor&); int cancel_schedule_i (guid_t guid, - const QoSDescriptor&); + const DSRT_QoSDescriptor&); private: DSRT_ConfigInfo curr_config_info_; - DSRT_Sched_t sched_type_; DSRT_Scheduler_Impl* scheduler_impl_; }; diff --git a/Kokyu/DSRT_Dispatcher_Impl.i b/Kokyu/DSRT_Dispatcher_Impl.i index 10011d57c1a..96a0fbdd26c 100644 --- a/Kokyu/DSRT_Dispatcher_Impl.i +++ b/Kokyu/DSRT_Dispatcher_Impl.i @@ -16,21 +16,21 @@ int DSRT_Dispatcher_Impl::init (const DSRT_ConfigInfo& config_info) ACE_INLINE int DSRT_Dispatcher_Impl::schedule (guid_t guid, - const QoSDescriptor& qos) + const DSRT_QoSDescriptor& qos) { return this->schedule_i (guid, qos); } ACE_INLINE int DSRT_Dispatcher_Impl::update_schedule (guid_t guid, - const QoSDescriptor& qos) + const DSRT_QoSDescriptor& qos) { return this->update_schedule_i (guid, qos); } ACE_INLINE int DSRT_Dispatcher_Impl::cancel_schedule (guid_t guid, - const QoSDescriptor& qos) + const DSRT_QoSDescriptor& qos) { return this->cancel_schedule_i (guid, qos); } diff --git a/Kokyu/DSRT_Schedulers.cpp b/Kokyu/DSRT_Schedulers.cpp index 63f4360ae4d..ea320838205 100644 --- a/Kokyu/DSRT_Schedulers.cpp +++ b/Kokyu/DSRT_Schedulers.cpp @@ -20,10 +20,28 @@ DSRT_Scheduler_Impl::DSRT_Scheduler_Impl () min_prio_ (ACE_Sched_Params::priority_min (sched_policy_, sched_scope_)), max_prio_ (ACE_Sched_Params::priority_max (sched_policy_, sched_scope_)) { +#if defined (ACE_WIN32) + // Count up the number of distinct native priorities on current + // platform. + int n; + Priority_t current_priority = this->min_prio_; + for (n = 1; current_priority != this->max_; ++n) + { + current_priority = + ACE_Sched_Params::next_priority (this->sched_policy_, + current_priority); + } + + this->prio_range_ = n-1; + +#else + this->prio_range_ = this->max_prio_ - this->min_prio_; +#endif /* ACE_WIN32 */ + } int -DSRT_Scheduler_Impl::schedule (guid_t id, const QoSDescriptor& qos) +DSRT_Scheduler_Impl::schedule (guid_t id, const DSRT_QoSDescriptor& qos) { return this->schedule_i (id, qos); } @@ -94,8 +112,34 @@ MIF_Scheduler_Impl::init (int argc, ACE_TCHAR* argv[]) arg_shifter.consume_arg (); } } + else if (ACE_OS::strcasecmp (arg, ACE_LIB_TEXT("-min_importance")) == 0) + { + arg_shifter.consume_arg (); + + if (arg_shifter.is_parameter_next ()) + { + const ACE_TCHAR* opt = arg_shifter.get_current (); + this->min_importance_ = ACE_OS::atoi (opt); + arg_shifter.consume_arg (); + } + } + else if (ACE_OS::strcasecmp (arg, ACE_LIB_TEXT("-max_importance")) == 0) + { + arg_shifter.consume_arg (); + + if (arg_shifter.is_parameter_next ()) + { + const ACE_TCHAR* opt = arg_shifter.get_current (); + this->max_importance_ = ACE_OS::atoi (opt); + arg_shifter.consume_arg (); + } + } } + this->importance_range_ = this->max_importance_ - this->min_importance_; + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT("MIF_Scheduler: importance_range = %d\n"), + this->importance_range_)); return 0; } @@ -106,44 +150,14 @@ MIF_Scheduler_Impl::fini (void) } Priority_t -MIF_Scheduler_Impl::schedule_i (guid_t id, const QoSDescriptor& qos) +MIF_Scheduler_Impl::schedule_i (guid_t id, const DSRT_QoSDescriptor& qos) { ACE_UNUSED_ARG ((id)); ACE_DEBUG ((LM_DEBUG, "(%t) request for MIF schedule\n")); - switch (qos.importance_) - { - case VERY_LOW_IMPORTANCE: - return min_prio_; - break; - - case LOW_IMPORTANCE: - return ACE_Sched_Params::next_priority - (sched_policy_, min_prio_, sched_scope_); - break; - - case MEDIUM_IMPORTANCE: - return ACE_Sched_Params::next_priority - (sched_policy_, - ACE_Sched_Params::next_priority - (sched_policy_, min_prio_, sched_scope_), - sched_scope_); - break; - - case HIGH_IMPORTANCE: - return ACE_Sched_Params::previous_priority - (sched_policy_, max_prio_, sched_scope_); - break; - - case VERY_HIGH_IMPORTANCE: - return max_prio_; - break; - - default: - break; - } + Priority_t prio_ = qos.importance_ * this->prio_range_ / this->importance_range_; - return min_prio_; + return prio_; } @@ -151,6 +165,10 @@ MIF_Scheduler_Impl::schedule_i (guid_t id, const QoSDescriptor& qos) // **************************************************************** +//could not use ACE_FACTORY_DEFINE macro here because of Kokyu namespace +// see new Kokyu::MIF_Scheduler_Impl in _make_xx factory function +//need to revisit later + void _gobble_MIF_Scheduler_Impl (void *p) { \ ACE_Service_Object *_p = ACE_static_cast (ACE_Service_Object *, p); ACE_ASSERT (_p != 0); diff --git a/Kokyu/DSRT_Schedulers.h b/Kokyu/DSRT_Schedulers.h index 72856a7d479..fefaa7951e3 100644 --- a/Kokyu/DSRT_Schedulers.h +++ b/Kokyu/DSRT_Schedulers.h @@ -27,16 +27,17 @@ namespace Kokyu { public: DSRT_Scheduler_Impl (); - int schedule (guid_t, const QoSDescriptor&); + int schedule (guid_t, const DSRT_QoSDescriptor&); private: - virtual Priority_t schedule_i (guid_t, const QoSDescriptor&) = 0; + virtual Priority_t schedule_i (guid_t, const DSRT_QoSDescriptor&) = 0; protected: ACE_Sched_Params::Policy sched_policy_; int sched_scope_; Priority_t min_prio_; Priority_t max_prio_; + Priority_t prio_range_; }; class MIF_Scheduler_Impl : public DSRT_Scheduler_Impl @@ -48,7 +49,12 @@ namespace Kokyu static void init_svcs (void); private: - virtual Priority_t schedule_i (guid_t, const QoSDescriptor&); + virtual Priority_t schedule_i (guid_t, const DSRT_QoSDescriptor&); + + private: + short min_importance_; + short max_importance_; + short importance_range_; }; } diff --git a/Kokyu/Kokyu.cpp b/Kokyu/Kokyu.cpp index 3ac6789eea9..55da0b326ec 100644 --- a/Kokyu/Kokyu.cpp +++ b/Kokyu/Kokyu.cpp @@ -56,19 +56,19 @@ DSRT_Dispatcher::implementation (DSRT_Dispatcher_Impl* impl) } int -DSRT_Dispatcher::schedule (guid_t guid, const QoSDescriptor& qos) +DSRT_Dispatcher::schedule (guid_t guid, const DSRT_QoSDescriptor& qos) { return dispatcher_impl_->schedule (guid, qos); } ACE_INLINE int -DSRT_Dispatcher::update_schedule (guid_t guid, const QoSDescriptor& qos) +DSRT_Dispatcher::update_schedule (guid_t guid, const DSRT_QoSDescriptor& qos) { return dispatcher_impl_->update_schedule (guid, qos); } ACE_INLINE int -DSRT_Dispatcher::cancel_schedule (guid_t guid, const QoSDescriptor& qos) +DSRT_Dispatcher::cancel_schedule (guid_t guid, const DSRT_QoSDescriptor& qos) { return dispatcher_impl_->cancel_schedule (guid, qos); } diff --git a/Kokyu/Kokyu.h b/Kokyu/Kokyu.h index 72635645f48..9802c6a1dd5 100644 --- a/Kokyu/Kokyu.h +++ b/Kokyu/Kokyu.h @@ -55,7 +55,7 @@ namespace Kokyu enum Importance_t // Defines the importance of the operation, - // which can be used by the Scheduler as a + // which can be used by the RtecScheduler as a // "tie-breaker" when other scheduling // parameters are equal. { @@ -87,6 +87,11 @@ namespace Kokyu Importance_t importance_; }; + struct DSRT_QoSDescriptor + { + short importance_; + }; + class Kokyu_Export Dispatch_Command { public: @@ -111,21 +116,17 @@ namespace Kokyu class Dispatcher_Impl; class DSRT_Dispatcher_Impl; - enum DSRT_Sched_t {SCHED_MIF, SCHED_EDF}; - struct DSRT_ConfigInfo { - ACE_Sched_Params::Policy sched_policy_; - int sched_scope_; }; typedef int guid_t; class Kokyu_Export DSRT_Dispatcher { public: - int schedule (guid_t guid, const QoSDescriptor&); - int update_schedule (guid_t guid, const QoSDescriptor&); - int cancel_schedule (guid_t guid, const QoSDescriptor&); + int schedule (guid_t guid, const DSRT_QoSDescriptor&); + int update_schedule (guid_t guid, const DSRT_QoSDescriptor&); + int cancel_schedule (guid_t guid, const DSRT_QoSDescriptor&); void implementation (DSRT_Dispatcher_Impl*); private: diff --git a/Kokyu/tests/DSRT_MIF/MIF.cpp b/Kokyu/tests/DSRT_MIF/MIF.cpp index e47032873f4..b701fa1338a 100644 --- a/Kokyu/tests/DSRT_MIF/MIF.cpp +++ b/Kokyu/tests/DSRT_MIF/MIF.cpp @@ -12,7 +12,7 @@ public: MyTask (ACE_Barrier& barrier, Kokyu::DSRT_Dispatcher* dispatcher, - Kokyu::QoSDescriptor& qos) + Kokyu::DSRT_QoSDescriptor& qos) :barrier_ (barrier), dispatcher_ (dispatcher), qos_ (qos) @@ -49,7 +49,8 @@ public: private: ACE_Barrier& barrier_; Kokyu::DSRT_Dispatcher* dispatcher_; - Kokyu::QoSDescriptor& qos_; + Kokyu::DSRT_QoSDescriptor& qos_; + }; int main (int,char**) @@ -68,11 +69,11 @@ int main (int,char**) ACE_ASSERT (disp.get () != 0); - Kokyu::QoSDescriptor qos1, qos2, qos3; + Kokyu::DSRT_QoSDescriptor qos1, qos2, qos3; - qos1.importance_ = Kokyu::LOW_IMPORTANCE; - qos2.importance_ = Kokyu::HIGH_IMPORTANCE; - qos3.importance_ = Kokyu::VERY_HIGH_IMPORTANCE; + qos1.importance_ = 1; + qos2.importance_ = 2; + qos3.importance_ = 3; MyTask mytask1 (barrier, disp.get (), qos1); MyTask mytask2 (barrier, disp.get (), qos2); diff --git a/Kokyu/tests/DSRT_MIF/svc.conf b/Kokyu/tests/DSRT_MIF/svc.conf index fe4d89d5d3a..247c85945d9 100644 --- a/Kokyu/tests/DSRT_MIF/svc.conf +++ b/Kokyu/tests/DSRT_MIF/svc.conf @@ -1,2 +1,4 @@ # -dynamic DSRT_Scheduler_Impl Service_Object * Kokyu:_make_MIF_Scheduler_Impl() "-sched_scope thread -sched_policy fifo"
\ No newline at end of file +dynamic DSRT_Scheduler_Impl Service_Object * +Kokyu:_make_MIF_Scheduler_Impl() +"-sched_scope thread -sched_policy fifo -min_importance 0 -max_importance 10"
\ No newline at end of file diff --git a/Kokyu/tests/DSRT_MIF/svc.conf.xml b/Kokyu/tests/DSRT_MIF/svc.conf.xml index 14f783f0f35..aef4b3ea0a9 100644 --- a/Kokyu/tests/DSRT_MIF/svc.conf.xml +++ b/Kokyu/tests/DSRT_MIF/svc.conf.xml @@ -3,6 +3,6 @@ <ACE_Svc_Conf> <!-- --> <dynamic id="DSRT_Scheduler_Impl" type="Service_Object"> - <initializer path="Kokyu" init="_make_MIF_Scheduler_Impl" params="-sched_scope thread -sched_policy fifo"/> + <initializer path="Kokyu" init="_make_MIF_Scheduler_Impl" params="-sched_scope thread -sched_policy fifo -min_importance 0 -max_importance 10"/> </dynamic> </ACE_Svc_Conf> |