- Separate template definition from template declaration
- Explicitly instantiate Singleton templates to be exported from libbackend.so - Install only header files that are backend interfaces to be exposed to the user - Don't use full path for including templates in header files - Instantiate a couple of smart_ptr templates to have their symbols exported outside the DSO. This happens in history.cc. FIXME: the interface for History will definitely need to be reworked, and the two smart_ptr explicit instantiations removed. - Change SWIG exported interface to make use of Schedulable instead of (Dynamic|Static)Schedulable - Fix provided policies to make use of the new interface - TODO: limit the use of smart_ptrs. git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@653 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
parent
56db7cd6a2
commit
66d46db357
37 changed files with 153 additions and 145 deletions
|
@ -41,6 +41,6 @@ class fcfs(Policy) :
|
|||
|
||||
def sort_queue(self, queue):
|
||||
cmpf = lambda a, b: \
|
||||
a.get_schedulable().get_arrival_time() < \
|
||||
b.get_schedulable().get_arrival_time()
|
||||
a.get_arrival_time() < \
|
||||
b.get_arrival_time()
|
||||
self.sort(queue,cmpf)
|
||||
|
|
|
@ -41,6 +41,6 @@ class sjf(Policy) :
|
|||
|
||||
def sort_queue(self, queue):
|
||||
cmpf = lambda a, b: \
|
||||
a.get_cpu_time_left() < \
|
||||
b.get_cpu_time_left()
|
||||
a.get_remaining_time() < \
|
||||
b.get_remaining_time()
|
||||
self.sort(queue,cmpf)
|
||||
|
|
|
@ -130,21 +130,33 @@ namespace sgpem {
|
|||
}; //~ class PolicyParameters
|
||||
|
||||
// --------------------------------------------
|
||||
class StaticSchedulable
|
||||
class Schedulable
|
||||
{
|
||||
public:
|
||||
virtual ~StaticSchedulable() = 0;
|
||||
|
||||
virtual unsigned int get_arrival_time() const;
|
||||
int get_priority() const;
|
||||
unsigned int get_total_cpu_time() const;
|
||||
virtual ~Schedulable() = 0;
|
||||
|
||||
enum state
|
||||
{
|
||||
state_running = 1<<0,
|
||||
state_ready = 1<<1,
|
||||
state_blocked = 1<<2,
|
||||
state_future = 1<<3,
|
||||
state_terminated = 1<<4
|
||||
};
|
||||
|
||||
%ignore StaticSchedulable::get_name() const;
|
||||
%extend {
|
||||
const char* get_name() const
|
||||
virtual unsigned int get_arrival_time() const = 0;
|
||||
virtual unsigned int get_remaining_time() const = 0;
|
||||
virtual int get_base_priority() const = 0;
|
||||
virtual int get_current_priority() const = 0;
|
||||
virtual unsigned int get_total_cpu_time() const = 0;
|
||||
virtual state get_state() const = 0;
|
||||
|
||||
%ignore Schedulable::get_name() const;
|
||||
%extend {
|
||||
const char* get_name() const
|
||||
{ return self->get_name().c_str(); }
|
||||
}
|
||||
}; //~ class StaticSchedulable
|
||||
}
|
||||
}; //~ class Schedulable
|
||||
|
||||
|
||||
// --------------------------------------------
|
||||
|
@ -152,7 +164,7 @@ namespace sgpem {
|
|||
{
|
||||
public:
|
||||
unsigned int size() const;
|
||||
const sgpem::DynamicSchedulable* get_item_at(const unsigned int&) const;
|
||||
const sgpem::Schedulable* get_item_at(const unsigned int&) const;
|
||||
void swap(unsigned int positionA, unsigned int positionB) throw();
|
||||
|
||||
private:
|
||||
|
@ -163,36 +175,15 @@ namespace sgpem {
|
|||
~SchedulableQueue();
|
||||
}; //~ class Schedulable
|
||||
|
||||
// ---------------------------------------------
|
||||
class DynamicSchedulable
|
||||
{
|
||||
public:
|
||||
enum state
|
||||
{
|
||||
state_running = 1<<0,
|
||||
state_ready = 1<<1,
|
||||
state_blocked = 1<<2,
|
||||
state_future = 1<<3,
|
||||
state_terminated = 1<<4
|
||||
// ---------------------------------------------
|
||||
class Scheduler {
|
||||
public:
|
||||
sgpem::Policy& get_policy();
|
||||
static sgpem::Scheduler& get_instance();
|
||||
sgpem::SchedulableQueue* get_ready_queue();
|
||||
private:
|
||||
Scheduler();
|
||||
~Scheduler();
|
||||
};
|
||||
|
||||
DynamicSchedulable(const DynamicSchedulable& obj);
|
||||
|
||||
int get_cpu_time_left() const;
|
||||
int get_last_scheduled() const;
|
||||
state get_state() const;
|
||||
const sgpem::StaticSchedulable* get_schedulable() const;
|
||||
};
|
||||
|
||||
// ---------------------------------------------
|
||||
class Scheduler {
|
||||
public:
|
||||
sgpem::Policy& get_policy();
|
||||
static sgpem::Scheduler& get_instance();
|
||||
sgpem::SchedulableQueue* get_ready_queue();
|
||||
private:
|
||||
Scheduler();
|
||||
~Scheduler();
|
||||
};
|
||||
|
||||
} //~ namespace sgpem
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue