00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _strict_policy_impl_hh
00019 #define _strict_policy_impl_hh
00020
00021 #include "BrokerC.h"
00022 #include "BrokerS.h"
00023
00024 #include "StrictPolicyS.h"
00025
00026 #include "RealTimeSchedule.hh"
00027
00028 #include "listNode.h"
00029 #include "rt_scheduler.h"
00030
00031
00032
00033
00034 class StrictPolicyImpl : public virtual POA_BrokerPolicies::StrictPolicy
00035 {
00036
00037 public:
00038
00039
00040
00041
00042
00043
00044
00045 StrictPolicyImpl(const char *name);
00046
00047
00048
00049
00050 virtual ~StrictPolicyImpl();
00051
00052
00053 virtual char *Name(void)
00054 throw (CORBA::SystemException);
00055
00056
00057 virtual void AddTask(Broker::Task_ptr new_task,
00058 const Broker::ScheduleParameters &sp)
00059 throw (CORBA::SystemException,
00060 Broker::DuplicateScheduleParameter,
00061 Broker::InvalidScheduleParameter,
00062 Broker::MissingScheduleParameter);
00063
00064 virtual void RemoveTask(Broker::Task_ptr added_task)
00065 throw (CORBA::SystemException);
00066
00067
00068 virtual Broker::TaskList *GetTaskList(void)
00069 throw (CORBA::SystemException);
00070
00071
00072 virtual void Activate(const Broker::TaskList &tasks)
00073 throw (CORBA::SystemException);
00074
00075 virtual void Deactivate(void)
00076 throw (CORBA::SystemException);
00077
00078
00079 virtual Broker::CPUReserve ChangeTaskCPU(Broker::RealTimeTask_ptr task,
00080 const Broker::CPUReserve &advice)
00081 throw (CORBA::SystemException, Broker::InvalidState);
00082
00083
00084 virtual CORBA::Float GetMaxCPUAllocation(void)
00085 throw (CORBA::SystemException);
00086
00087 virtual void SetMaxCPUAllocation(CORBA::Float amount)
00088 throw (CORBA::SystemException);
00089
00090
00091 virtual void SetTaskPriority(Broker::Task_ptr task, CORBA::Short priority)
00092 throw (CORBA::SystemException);
00093
00094
00095 virtual CORBA::Short GetTaskPriority(Broker::Task_ptr task)
00096 throw (CORBA::SystemException);
00097
00098
00099
00100
00101 const static float DEFAULT_MAX_USED_CPU = 0.75;
00102
00103
00104
00105
00106 const static float DEFAULT_MIN_TASK_CPU = 0.02;
00107
00108 private:
00109
00110 struct TaskPriority;
00111
00112
00113
00114
00115 struct ChangeNode {
00116 struct lnMinNode cn_Link;
00117 struct TaskPriority *cn_Parent;
00118 CORBA::ULong cn_NewTime;
00119 };
00120
00121
00122
00123
00124 struct TaskPriority {
00125 struct lnNode tp_Link;
00126 RealTimeSchedule tp_Schedule;
00127 CORBA::ULong tp_ComputeTime;
00128 CORBA::ULong tp_RequestedTime;
00129 rts_schedulable_t tp_Schedulable;
00130 Broker::RealTimeTask_var tp_Task;
00131 struct ChangeNode tp_ChangeLink;
00132 };
00133
00134
00135
00136
00137 void RepairTaskList(void);
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147 struct TaskPriority *FindTaskPriority(Broker::RealTimeTask_ptr task);
00148
00149
00150
00151
00152
00153 void RedistributeCPU(void);
00154
00155
00156 CORBA::String_var sp_Name;
00157
00158
00159 float sp_MaxUsedCPU;
00160
00161
00162 float sp_MinTaskCPU;
00163
00164
00165 struct lnList sp_List;
00166
00167
00168 CORBA::ULong sp_MaxDeadline;
00169
00170 };
00171
00172 #endif