summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvenkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-04-14 18:11:53 +0000
committervenkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-04-14 18:11:53 +0000
commit10fd5bb59cfd0e1d9a25164ec06782bc957e64a2 (patch)
tree0efa930f7cc394246467766fd015aef9f6d6f303
parent02b70d21b5b2fb3c8ef6c74cb838526f18b2956e (diff)
downloadATCD-10fd5bb59cfd0e1d9a25164ec06782bc957e64a2.tar.gz
ChangeLogTag: Mon Apr 14 12:56:07 2003 Venkita Subramonian <venkita@cs.wustl.edu>
-rw-r--r--ChangeLog8
-rw-r--r--Kokyu/DSRT_Dispatcher_Impl.cpp127
-rw-r--r--Kokyu/DSRT_Dispatcher_Impl.h62
-rw-r--r--Kokyu/DSRT_Dispatcher_Impl.i37
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);
+}
+
+}