- Another bit of auditing
git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@1202 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
parent
ee1810df10
commit
ec84480e2d
|
@ -21,20 +21,23 @@
|
||||||
#ifndef CONCRETE_ENVIRONMENT_HH
|
#ifndef CONCRETE_ENVIRONMENT_HH
|
||||||
#define CONCRETE_ENVIRONMENT_HH 1
|
#define CONCRETE_ENVIRONMENT_HH 1
|
||||||
|
|
||||||
|
namespace sgpem
|
||||||
|
{
|
||||||
|
class ConcreteEnvironment;
|
||||||
|
class SerializeVisitor;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "dynamic_process.hh"
|
||||||
|
#include "dynamic_request.hh"
|
||||||
|
|
||||||
#include <sgpemv2/environment.hh>
|
#include <sgpemv2/environment.hh>
|
||||||
#include <sgpemv2/resource.hh>
|
#include <sgpemv2/resource.hh>
|
||||||
#include "dynamic_process.hh"
|
|
||||||
#include "dynamic_request.hh"
|
|
||||||
#include <sgpemv2/ready_queue.hh>
|
#include <sgpemv2/ready_queue.hh>
|
||||||
|
|
||||||
|
|
||||||
namespace sgpem
|
namespace sgpem
|
||||||
{
|
{
|
||||||
class SerializeVisitor;
|
/// \brief An implementation of the Environment class.
|
||||||
|
///
|
||||||
|
|
||||||
/// \brief An implementation of the Environment class
|
|
||||||
/// Class ConcreteEnvironment implements the Environment
|
/// Class ConcreteEnvironment implements the Environment
|
||||||
/// abstract class.
|
/// abstract class.
|
||||||
///
|
///
|
||||||
|
@ -45,18 +48,26 @@ namespace sgpem
|
||||||
/// \see Environment
|
/// \see Environment
|
||||||
class SG_DLLLOCAL ConcreteEnvironment : public Environment
|
class SG_DLLLOCAL ConcreteEnvironment : public Environment
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
typedef std::map<resource_key_t, SubRequestQueue> SubRequestQueues;
|
||||||
|
|
||||||
/// \brief Standard constructor.
|
/// \brief Standard constructor.
|
||||||
|
///
|
||||||
/// Builds an empty environment.
|
/// Builds an empty environment.
|
||||||
ConcreteEnvironment();
|
ConcreteEnvironment();
|
||||||
|
|
||||||
/// \brief Copy constructor.
|
/// \brief Copy constructor.
|
||||||
|
///
|
||||||
/// Performs a deep copy of all structures.
|
/// Performs a deep copy of all structures.
|
||||||
ConcreteEnvironment(const ConcreteEnvironment& c);
|
ConcreteEnvironment(const ConcreteEnvironment& c);
|
||||||
|
|
||||||
|
/// \brief The standard virtual destructor.
|
||||||
|
///
|
||||||
|
/// The standard virtual destructor.
|
||||||
|
virtual ~ConcreteEnvironment();
|
||||||
|
|
||||||
/// \brief Returns an indexed set of snapshots of the processes
|
/// \brief Returns an indexed set of snapshots of the processes
|
||||||
|
///
|
||||||
/// Returns a standard vector of Process objects describing
|
/// Returns a standard vector of Process objects describing
|
||||||
/// all the processes of the simulated environment at the
|
/// all the processes of the simulated environment at the
|
||||||
/// considered instant.
|
/// considered instant.
|
||||||
|
@ -66,21 +77,16 @@ namespace sgpem
|
||||||
/// always safe.
|
/// always safe.
|
||||||
///
|
///
|
||||||
/// \return a constant set of snapshots of processes
|
/// \return a constant set of snapshots of processes
|
||||||
virtual const Processes&
|
virtual const Processes& get_processes() const;
|
||||||
get_processes() const;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// \brief Non-constant version of get_processes()
|
/// \brief Non-constant version of get_processes()
|
||||||
///
|
///
|
||||||
/// \return a set of snapshots of processes
|
/// \return a set of snapshots of processes
|
||||||
/// \see get_processes()
|
/// \see get_processes()
|
||||||
virtual Processes&
|
virtual Processes& get_processes();
|
||||||
get_processes();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// \brief Returns an indexed set of snapshots of the resources
|
/// \brief Returns an indexed set of snapshots of the resources
|
||||||
|
///
|
||||||
/// Returns a standard map of \code int \endcode to Resource
|
/// Returns a standard map of \code int \endcode to Resource
|
||||||
/// objects describing the all resources of the simulated environment
|
/// objects describing the all resources of the simulated environment
|
||||||
/// at the considered instant.
|
/// at the considered instant.
|
||||||
|
@ -98,21 +104,16 @@ namespace sgpem
|
||||||
///
|
///
|
||||||
/// \return a indexed constant set of snapshot of resources.
|
/// \return a indexed constant set of snapshot of resources.
|
||||||
/// \see DynamicSybrequest::get_resource()
|
/// \see DynamicSybrequest::get_resource()
|
||||||
virtual const Resources&
|
virtual const Resources& get_resources() const;
|
||||||
get_resources() const;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// \brief Non-constant version of get_resources()
|
/// \brief Non-constant version of get_resources()
|
||||||
///
|
///
|
||||||
/// \return an indexed set of snapshots of resources
|
/// \return an indexed set of snapshots of resources
|
||||||
/// \see get_resources()
|
/// \see get_resources()
|
||||||
virtual Resources&
|
virtual Resources& get_resources();
|
||||||
get_resources();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// \brief Returns a snapshot of the current request queue for a resource.
|
/// \brief Returns a snapshot of the current request queue for a resource.
|
||||||
|
///
|
||||||
/// Returns a standard vector of Request objects
|
/// Returns a standard vector of Request objects
|
||||||
/// representing the queue of ready requests of threads which
|
/// representing the queue of ready requests of threads which
|
||||||
/// are waiting for getting control of a limited-access resource.
|
/// are waiting for getting control of a limited-access resource.
|
||||||
|
@ -123,72 +124,55 @@ namespace sgpem
|
||||||
///
|
///
|
||||||
/// \param resource The resource the requests are for
|
/// \param resource The resource the requests are for
|
||||||
/// \return The current ready requests queue.
|
/// \return The current ready requests queue.
|
||||||
virtual const SubRequestQueue&
|
virtual const SubRequestQueue& get_request_queue(resource_key_t resource_key) const;
|
||||||
get_request_queue(resource_key_t resource_key) const;
|
|
||||||
|
|
||||||
SubRequestQueue&
|
|
||||||
get_request_queue(resource_key_t resource_key);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef std::map<resource_key_t, SubRequestQueue> SubRequestQueues;
|
|
||||||
|
|
||||||
|
SubRequestQueue& get_request_queue(resource_key_t resource_key);
|
||||||
|
|
||||||
/// \brief Returns the set of request queues.
|
/// \brief Returns the set of request queues.
|
||||||
|
///
|
||||||
/// Returns a reference to the map from resources to subreuqest queues.
|
/// Returns a reference to the map from resources to subreuqest queues.
|
||||||
/// It is needed by history to delete the queue associated to a deleted
|
/// It is needed by history to delete the queue associated to a deleted
|
||||||
/// resource.
|
/// resource.
|
||||||
|
SubRequestQueues& get_subrequest_queues();
|
||||||
SubRequestQueues&
|
|
||||||
get_subrequest_queues();
|
|
||||||
|
|
||||||
/// \brief Returns a snapshot of the current scheduler's ready queue.
|
/// \brief Returns a snapshot of the current scheduler's ready queue.
|
||||||
|
///
|
||||||
/// Returns a ReadyQueue object representing the queue
|
/// Returns a ReadyQueue object representing the queue
|
||||||
/// of ready processes or ready threads, depending on the
|
/// of ready processes or ready threads, depending on the
|
||||||
/// scheduling policy, which are waiting for getting control
|
/// scheduling policy, which are waiting for getting control
|
||||||
/// of the CPU.
|
/// of the CPU.
|
||||||
///
|
///
|
||||||
/// \return the current ready queue (constant).
|
/// \return the current ready queue (constant).
|
||||||
virtual const ReadyQueue&
|
virtual const ReadyQueue& get_sorted_queue() const;
|
||||||
get_sorted_queue() const;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// \brief Non-constant version of get_sorted_queue()
|
/// \brief Non-constant version of get_sorted_queue()
|
||||||
///
|
///
|
||||||
/// \return the current ready queue.
|
/// \return the current ready queue.
|
||||||
/// \see get_sorted_queue()
|
/// \see get_sorted_queue()
|
||||||
virtual ReadyQueue&
|
virtual ReadyQueue& get_sorted_queue();
|
||||||
get_sorted_queue();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// \brief The standard virtual destructor.
|
|
||||||
/// The standard virtual destructor.
|
|
||||||
virtual
|
|
||||||
~ConcreteEnvironment();
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/// \brief The container of all Resource objecs.
|
/// \brief The container of all Resource objecs.
|
||||||
|
///
|
||||||
/// Actually contains only DynamicResource objects.
|
/// Actually contains only DynamicResource objects.
|
||||||
// resources come before processes because of
|
// resources come before processes because of
|
||||||
// destruction order. See destructor implementation
|
// destruction order. See destructor implementation
|
||||||
Resources _resources;
|
Resources _resources;
|
||||||
|
|
||||||
/// \brief The container of all Process objecs.
|
/// \brief The container of all Process objecs.
|
||||||
|
///
|
||||||
/// Actually contains only DynamicProcess objects.
|
/// Actually contains only DynamicProcess objects.
|
||||||
Processes _processes;
|
Processes _processes;
|
||||||
|
|
||||||
/// \brief The queue of the ready schedulables
|
/// \brief The queue of the ready schedulables
|
||||||
|
///
|
||||||
/// Does not contain the running process.
|
/// Does not contain the running process.
|
||||||
ReadyQueue _sched_queue;
|
ReadyQueue _sched_queue;
|
||||||
|
|
||||||
SubRequestQueues _sreq_queues;
|
SubRequestQueues _sreq_queues;
|
||||||
|
|
||||||
}
|
}; //~ class ConcreteEnvironment
|
||||||
; //~ class ConcreteEnvironment
|
|
||||||
|
|
||||||
} //~ namespace sgpem
|
} //~ namespace sgpem
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,10 @@
|
||||||
#ifndef CONCRETE_HISTORY_HH
|
#ifndef CONCRETE_HISTORY_HH
|
||||||
#define CONCRETE_HISTORY_HH 1
|
#define CONCRETE_HISTORY_HH 1
|
||||||
|
|
||||||
|
namespace sgpem
|
||||||
|
{
|
||||||
|
class ConcreteHistory;
|
||||||
|
}
|
||||||
|
|
||||||
#include "concrete_environment.hh"
|
#include "concrete_environment.hh"
|
||||||
#include "dynamic_process.hh"
|
#include "dynamic_process.hh"
|
||||||
|
@ -29,6 +32,7 @@
|
||||||
#include "dynamic_resource.hh"
|
#include "dynamic_resource.hh"
|
||||||
#include "dynamic_sub_request.hh"
|
#include "dynamic_sub_request.hh"
|
||||||
#include "dynamic_thread.hh"
|
#include "dynamic_thread.hh"
|
||||||
|
|
||||||
#include <sgpemv2/history.hh>
|
#include <sgpemv2/history.hh>
|
||||||
|
|
||||||
#include <glibmm/ustring.h>
|
#include <glibmm/ustring.h>
|
||||||
|
@ -40,8 +44,6 @@
|
||||||
|
|
||||||
namespace sgpem
|
namespace sgpem
|
||||||
{
|
{
|
||||||
class ConcreteHistory;
|
|
||||||
|
|
||||||
class SG_DLLLOCAL ConcreteHistory : public History
|
class SG_DLLLOCAL ConcreteHistory : public History
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -63,15 +65,15 @@ namespace sgpem
|
||||||
virtual void clear();
|
virtual void clear();
|
||||||
|
|
||||||
virtual ResourcePair add_resource(const Glib::ustring& name,
|
virtual ResourcePair add_resource(const Glib::ustring& name,
|
||||||
bool preemptable = false,
|
bool preemptable = false,
|
||||||
size_t places = 1,
|
size_t places = 1,
|
||||||
size_t availability = 0);
|
size_t availability = 0);
|
||||||
|
|
||||||
virtual void edit_resource(Resource& resource,
|
virtual void edit_resource(Resource& resource,
|
||||||
const Glib::ustring& name,
|
const Glib::ustring& name,
|
||||||
bool preemptable = false,
|
bool preemptable = false,
|
||||||
size_t places = 1,
|
size_t places = 1,
|
||||||
size_t availability = 0);
|
size_t availability = 0);
|
||||||
|
|
||||||
virtual DynamicProcess& add_process(const Glib::ustring& name,
|
virtual DynamicProcess& add_process(const Glib::ustring& name,
|
||||||
time_t arrival_time,
|
time_t arrival_time,
|
||||||
|
@ -112,10 +114,10 @@ namespace sgpem
|
||||||
// sets the front to position p
|
// sets the front to position p
|
||||||
virtual void set_front(position p);
|
virtual void set_front(position p);
|
||||||
|
|
||||||
bool is_sealed() const;
|
bool is_sealed() const;
|
||||||
|
|
||||||
// (Returns if the History was sealed before this call)
|
// (Returns if the History was sealed before this call)
|
||||||
bool seal();
|
bool seal();
|
||||||
|
|
||||||
void reset(); // Implements a virtual method
|
void reset(); // Implements a virtual method
|
||||||
|
|
||||||
|
@ -127,7 +129,7 @@ namespace sgpem
|
||||||
// Disable assignment, implement it only if needed
|
// Disable assignment, implement it only if needed
|
||||||
ConcreteHistory& operator=(const ConcreteHistory& op2);
|
ConcreteHistory& operator=(const ConcreteHistory& op2);
|
||||||
|
|
||||||
bool _sealed;
|
bool _sealed;
|
||||||
}
|
}
|
||||||
; //~ class ConcreteHistory
|
; //~ class ConcreteHistory
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,8 @@
|
||||||
#include "dynamic_process.hh"
|
#include "dynamic_process.hh"
|
||||||
#include "static_process.hh"
|
#include "static_process.hh"
|
||||||
#include "dynamic_thread.hh"
|
#include "dynamic_thread.hh"
|
||||||
#include <sgpemv2/serialize_visitor.hh>
|
|
||||||
|
|
||||||
|
#include <sgpemv2/serialize_visitor.hh>
|
||||||
#include <sgpemv2/templates/deletor.tcc>
|
#include <sgpemv2/templates/deletor.tcc>
|
||||||
#include <sgpemv2/templates/sequences.tcc>
|
#include <sgpemv2/templates/sequences.tcc>
|
||||||
|
|
||||||
|
@ -54,7 +54,8 @@ DynamicProcess::DynamicProcess(const DynamicProcess &other) :
|
||||||
|
|
||||||
DynamicProcess::~DynamicProcess()
|
DynamicProcess::~DynamicProcess()
|
||||||
{
|
{
|
||||||
for_each(_dynamic_threads.begin(), _dynamic_threads.end(),
|
for_each(_dynamic_threads.begin(),
|
||||||
|
_dynamic_threads.end(),
|
||||||
memory::deletor<DynamicThread>());
|
memory::deletor<DynamicThread>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,7 +74,7 @@ DynamicProcess::get_threads() const
|
||||||
Schedulable::state
|
Schedulable::state
|
||||||
DynamicProcess::get_state() const
|
DynamicProcess::get_state() const
|
||||||
{
|
{
|
||||||
static const int uninitialized = -1;
|
const int uninitialized = -1;
|
||||||
|
|
||||||
state result = state_terminated;
|
state result = state_terminated;
|
||||||
int next_thread_starts_at = uninitialized;
|
int next_thread_starts_at = uninitialized;
|
||||||
|
@ -99,7 +100,7 @@ DynamicProcess::get_state() const
|
||||||
|
|
||||||
for(Iseq<ConstThreadIt> seq = iseq(_dynamic_threads); seq; ++seq)
|
for(Iseq<ConstThreadIt> seq = iseq(_dynamic_threads); seq; ++seq)
|
||||||
{
|
{
|
||||||
state thread_state = (*seq)->get_state();
|
const state thread_state = (*seq)->get_state();
|
||||||
|
|
||||||
switch(thread_state)
|
switch(thread_state)
|
||||||
{
|
{
|
||||||
|
@ -133,7 +134,8 @@ DynamicProcess::get_state() const
|
||||||
// the next thread to start, e.g. the one with the least arrival_time,
|
// the next thread to start, e.g. the one with the least arrival_time,
|
||||||
// has start time greater than the current process elapsed time, then
|
// has start time greater than the current process elapsed time, then
|
||||||
// pass from state_future to state_terminated:
|
// pass from state_future to state_terminated:
|
||||||
if (result == state_future && next_thread_starts_at > static_cast<int>(get_elapsed_time()))
|
if (result == state_future &&
|
||||||
|
next_thread_starts_at > static_cast<int>(get_elapsed_time()))
|
||||||
return state_terminated;
|
return state_terminated;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -21,23 +21,27 @@
|
||||||
#ifndef DYNAMIC_REQUEST_HH
|
#ifndef DYNAMIC_REQUEST_HH
|
||||||
#define DYNAMIC_REQUEST_HH 1
|
#define DYNAMIC_REQUEST_HH 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <sgpemv2/request.hh>
|
|
||||||
#include "static_request.hh"
|
|
||||||
#include "dynamic_thread.hh"
|
|
||||||
|
|
||||||
#include <sgpemv2/templates/smartp.hh>
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace sgpem
|
namespace sgpem
|
||||||
{
|
{
|
||||||
class DynamicRequest;
|
class DynamicRequest;
|
||||||
class SerializeVisitor;
|
class SerializeVisitor;
|
||||||
class SubRequest;
|
class SubRequest;
|
||||||
class DynamicSubRequest;
|
class DynamicSubRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "static_request.hh"
|
||||||
|
#include "dynamic_thread.hh"
|
||||||
|
|
||||||
|
#include <sgpemv2/request.hh>
|
||||||
|
#include <sgpemv2/templates/smartp.hh>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace sgpem
|
||||||
|
{
|
||||||
|
/** \brief A "dynamic" request, which represents the state
|
||||||
|
* of a request at a particular temporal instant
|
||||||
|
*/
|
||||||
class SG_DLLLOCAL DynamicRequest : public Request
|
class SG_DLLLOCAL DynamicRequest : public Request
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -60,9 +64,9 @@ namespace sgpem
|
||||||
StaticRequest& get_core();
|
StaticRequest& get_core();
|
||||||
const StaticRequest& get_core() const;
|
const StaticRequest& get_core() const;
|
||||||
|
|
||||||
// Since this method is visible only by the backend,
|
/// \internal Since this method is visible only by the backend,
|
||||||
// return directly a reference that lets us to
|
/// return directly a reference that lets us to
|
||||||
// add and remove subrequests at will.
|
/// add and remove subrequests at will.
|
||||||
std::vector<DynamicSubRequest*>& get_dynamic_subrequests();
|
std::vector<DynamicSubRequest*>& get_dynamic_subrequests();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
|
|
||||||
#include "dynamic_sub_request.hh"
|
#include "dynamic_sub_request.hh"
|
||||||
#include "dynamic_request.hh"
|
#include "dynamic_request.hh"
|
||||||
|
|
||||||
#include <sgpemv2/request.hh>
|
#include <sgpemv2/request.hh>
|
||||||
#include <sgpemv2/serialize_visitor.hh>
|
#include <sgpemv2/serialize_visitor.hh>
|
||||||
|
|
||||||
#include <sgpemv2/templates/down_cast.tcc>
|
#include <sgpemv2/templates/down_cast.tcc>
|
||||||
#include <sgpemv2/templates/smartp.tcc>
|
#include <sgpemv2/templates/smartp.tcc>
|
||||||
|
|
||||||
|
@ -38,8 +38,9 @@ DynamicSubRequest::DynamicSubRequest(StaticSubRequest* core,
|
||||||
{
|
{
|
||||||
assert(core != NULL);
|
assert(core != NULL);
|
||||||
assert(owner != NULL);
|
assert(owner != NULL);
|
||||||
// Leave this line: it helps us with a compiler warning if
|
|
||||||
// the get_dynamic* method signature changes:
|
// Leave this line: it helps us with a compiler warning if
|
||||||
|
// the get_dynamic* method signature changes:
|
||||||
std::vector<DynamicSubRequest*>& siblings = owner->get_dynamic_subrequests();
|
std::vector<DynamicSubRequest*>& siblings = owner->get_dynamic_subrequests();
|
||||||
siblings.push_back(this);
|
siblings.push_back(this);
|
||||||
}
|
}
|
||||||
|
@ -52,8 +53,8 @@ DynamicSubRequest::DynamicSubRequest(const DynamicSubRequest& other,
|
||||||
{
|
{
|
||||||
assert(owner != NULL);
|
assert(owner != NULL);
|
||||||
|
|
||||||
// Leave this line: it helps us with a compiler warning if
|
// Leave this line: it helps us with a compiler warning if
|
||||||
// the get_dynamic* method signature changes:
|
// the get_dynamic* method signature changes:
|
||||||
std::vector<DynamicSubRequest*>& siblings = owner->get_dynamic_subrequests();
|
std::vector<DynamicSubRequest*>& siblings = owner->get_dynamic_subrequests();
|
||||||
siblings.push_back(this);
|
siblings.push_back(this);
|
||||||
}
|
}
|
||||||
|
@ -61,11 +62,11 @@ DynamicSubRequest::DynamicSubRequest(const DynamicSubRequest& other,
|
||||||
DynamicSubRequest::~DynamicSubRequest()
|
DynamicSubRequest::~DynamicSubRequest()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
DynamicSubRequest::operator==(const SubRequest& op2) const
|
DynamicSubRequest::operator==(const SubRequest& op2) const
|
||||||
{
|
{
|
||||||
return _static_subrequest == down_cast<const DynamicSubRequest&>(op2)._static_subrequest;
|
return _static_subrequest ==
|
||||||
|
down_cast<const DynamicSubRequest&>(op2)._static_subrequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,7 +76,6 @@ DynamicSubRequest::get_resource_key() const
|
||||||
return _static_subrequest->get_resource_key();
|
return _static_subrequest->get_resource_key();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned int
|
unsigned int
|
||||||
DynamicSubRequest::get_length() const
|
DynamicSubRequest::get_length() const
|
||||||
{
|
{
|
||||||
|
@ -129,6 +129,7 @@ unsigned int
|
||||||
DynamicSubRequest::decrease_remaining_time()
|
DynamicSubRequest::decrease_remaining_time()
|
||||||
{
|
{
|
||||||
assert(_state == Request::state_allocated);
|
assert(_state == Request::state_allocated);
|
||||||
|
|
||||||
unsigned int temp = get_remaining_time();
|
unsigned int temp = get_remaining_time();
|
||||||
if (temp > 0)
|
if (temp > 0)
|
||||||
_ran_for++;
|
_ran_for++;
|
||||||
|
|
|
@ -27,7 +27,8 @@ using Glib::ustring;
|
||||||
|
|
||||||
|
|
||||||
// instantiate Parameter template for use outside this DSO
|
// instantiate Parameter template for use outside this DSO
|
||||||
namespace sgpem {
|
namespace sgpem
|
||||||
|
{
|
||||||
template class SG_DLLEXPORT PolicyParameters::Parameter<int>;
|
template class SG_DLLEXPORT PolicyParameters::Parameter<int>;
|
||||||
template class SG_DLLEXPORT PolicyParameters::Parameter<float>;
|
template class SG_DLLEXPORT PolicyParameters::Parameter<float>;
|
||||||
template class SG_DLLEXPORT PolicyParameters::Parameter<Glib::ustring>;
|
template class SG_DLLEXPORT PolicyParameters::Parameter<Glib::ustring>;
|
||||||
|
@ -39,14 +40,23 @@ namespace sgpem {
|
||||||
If there is a parameter with the same name and type it will be overwritten.
|
If there is a parameter with the same name and type it will be overwritten.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
PolicyParameters::register_int(Glib::ustring name, const int& lower_bound, const int& upper_bound, const bool& required, const int& default_value)
|
PolicyParameters::register_int(Glib::ustring name,
|
||||||
|
const int& lower_bound,
|
||||||
|
const int& upper_bound,
|
||||||
|
const bool& required,
|
||||||
|
const int& default_value)
|
||||||
{
|
{
|
||||||
//there is a parameter with the same name!!
|
//there is a parameter with the same name!!
|
||||||
map<ustring, Parameter<int> >::iterator i = int_map.find(name);
|
map<ustring, Parameter<int> >::iterator i = int_map.find(name);
|
||||||
if (i != int_map.end())
|
if (i != int_map.end())
|
||||||
int_map.erase(i);
|
int_map.erase(i);
|
||||||
|
|
||||||
map<ustring, Parameter<int> >::value_type v(name, Parameter<int>(name, default_value, lower_bound, upper_bound, required, default_value));
|
map<ustring, Parameter<int> >::value_type v(name, Parameter<int>(name,
|
||||||
|
default_value,
|
||||||
|
lower_bound,
|
||||||
|
upper_bound,
|
||||||
|
required,
|
||||||
|
default_value));
|
||||||
int_map.insert(v);
|
int_map.insert(v);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -56,14 +66,24 @@ PolicyParameters::register_int(Glib::ustring name, const int& lower_bound, const
|
||||||
If there is a parameter with the same name and type it will be overwritten.
|
If there is a parameter with the same name and type it will be overwritten.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
PolicyParameters::register_float(Glib::ustring name, const float& lower_bound, const float& upper_bound, const bool& required, const float& default_value)
|
PolicyParameters::register_float(Glib::ustring name,
|
||||||
|
const float& lower_bound,
|
||||||
|
const float& upper_bound,
|
||||||
|
const bool& required,
|
||||||
|
const float& default_value)
|
||||||
{
|
{
|
||||||
//there is a parameter with the same name!!
|
//there is a parameter with the same name!!
|
||||||
map<ustring, Parameter<float> >::iterator i = float_map.find(name);
|
map<ustring, Parameter<float> >::iterator i = float_map.find(name);
|
||||||
if (i != float_map.end())
|
if (i != float_map.end())
|
||||||
float_map.erase(i);
|
float_map.erase(i);
|
||||||
|
|
||||||
map<ustring, Parameter<float> >::value_type v(name, Parameter<float>(name, default_value, lower_bound, upper_bound, required, default_value));
|
map<ustring, Parameter<float> >::value_type v(name, Parameter<float>(name,
|
||||||
|
default_value,
|
||||||
|
lower_bound,
|
||||||
|
upper_bound,
|
||||||
|
required,
|
||||||
|
default_value));
|
||||||
|
|
||||||
float_map.insert(v);
|
float_map.insert(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +99,12 @@ PolicyParameters::register_string(Glib::ustring name, const bool& required, cons
|
||||||
if (i != string_map.end())
|
if (i != string_map.end())
|
||||||
string_map.erase(i);
|
string_map.erase(i);
|
||||||
|
|
||||||
map<ustring, Parameter<Glib::ustring> >::value_type v(name, Parameter<Glib::ustring>(name, default_value, "", "", required, default_value));
|
map<ustring, Parameter<Glib::ustring> >::value_type v(name, Parameter<Glib::ustring>(name,
|
||||||
|
default_value,
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
required,
|
||||||
|
default_value));
|
||||||
string_map.insert(v);
|
string_map.insert(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,7 +214,7 @@ PolicyParameters::set_string(ustring name, const ustring& value)
|
||||||
\throws A PolicyParametersException if the parameter has not been found.
|
\throws A PolicyParametersException if the parameter has not been found.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
PolicyParameters::get_int(ustring name) const
|
PolicyParameters::get_int(ustring name) const throw(PolicyParametersException)
|
||||||
{
|
{
|
||||||
map<ustring, Parameter<int> >::const_iterator i = int_map.find(name);
|
map<ustring, Parameter<int> >::const_iterator i = int_map.find(name);
|
||||||
if (i == int_map.end())
|
if (i == int_map.end())
|
||||||
|
@ -205,7 +230,7 @@ PolicyParameters::get_int(ustring name) const
|
||||||
\throws A PolicyParametersException if the parameter has not been found.
|
\throws A PolicyParametersException if the parameter has not been found.
|
||||||
*/
|
*/
|
||||||
float
|
float
|
||||||
PolicyParameters::get_float(ustring name) const
|
PolicyParameters::get_float(ustring name) const throw(PolicyParametersException)
|
||||||
{
|
{
|
||||||
map<ustring, Parameter<float> >::const_iterator i = float_map.find(name);
|
map<ustring, Parameter<float> >::const_iterator i = float_map.find(name);
|
||||||
if (i == float_map.end())
|
if (i == float_map.end())
|
||||||
|
@ -221,7 +246,7 @@ PolicyParameters::get_float(ustring name) const
|
||||||
\throws A PolicyParametersException if the parameter has not been found.
|
\throws A PolicyParametersException if the parameter has not been found.
|
||||||
*/
|
*/
|
||||||
ustring
|
ustring
|
||||||
PolicyParameters::get_string(ustring name) const
|
PolicyParameters::get_string(ustring name) const throw(PolicyParametersException)
|
||||||
{
|
{
|
||||||
map<ustring, Parameter<ustring> >::const_iterator i = string_map.find(name);
|
map<ustring, Parameter<ustring> >::const_iterator i = string_map.find(name);
|
||||||
if (i == string_map.end())
|
if (i == string_map.end())
|
||||||
|
|
|
@ -229,19 +229,19 @@ namespace sgpem
|
||||||
\returns the INTEGER value of the parameter named \e name
|
\returns the INTEGER value of the parameter named \e name
|
||||||
\throws PolicyParametersException if the parameter named \e name has not been registered
|
\throws PolicyParametersException if the parameter named \e name has not been registered
|
||||||
*/
|
*/
|
||||||
int get_int(Glib::ustring name) const;
|
int get_int(Glib::ustring name) const throw(PolicyParametersException);
|
||||||
|
|
||||||
/** \brief Returns the value of an FLOAT parameter
|
/** \brief Returns the value of an FLOAT parameter
|
||||||
\returns the FLOAT value of the parameter named \e name
|
\returns the FLOAT value of the parameter named \e name
|
||||||
\throws PolicyParametersException if the parameter named \e name has not been registered
|
\throws PolicyParametersException if the parameter named \e name has not been registered
|
||||||
*/
|
*/
|
||||||
float get_float(Glib::ustring name) const;
|
float get_float(Glib::ustring name) const throw(PolicyParametersException);
|
||||||
|
|
||||||
/** \brief Returns the value of an STRING parameter
|
/** \brief Returns the value of an STRING parameter
|
||||||
\returns the STRING value of the parameter named \e name
|
\returns the STRING value of the parameter named \e name
|
||||||
\throws PolicyParametersException if the parameter named \e name has not been registered
|
\throws PolicyParametersException if the parameter named \e name has not been registered
|
||||||
*/
|
*/
|
||||||
Glib::ustring get_string(Glib::ustring name) const;
|
Glib::ustring get_string(Glib::ustring name) const throw(PolicyParametersException);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// src/backend/process_statistics.hh - Copyright 2005, 2006, University
|
// src/backend/sgpemv2/process_statistics.hh - Copyright 2005, 2006, University
|
||||||
// of Padova, dept. of Pure and Applied
|
// of Padova, dept. of Pure and Applied
|
||||||
// Mathematics
|
// Mathematics
|
||||||
//
|
//
|
||||||
|
@ -21,41 +21,32 @@
|
||||||
#ifndef PROCESS_STATISTICS_HH
|
#ifndef PROCESS_STATISTICS_HH
|
||||||
#define PROCESS_STATISTICS_HH 1
|
#define PROCESS_STATISTICS_HH 1
|
||||||
|
|
||||||
#include <sgpemv2/sgpemv2-visibility.hh>
|
#include "thread_statistics.hh"
|
||||||
|
|
||||||
|
#include <sgpemv2/sgpemv2-visibility.hh>
|
||||||
#include <sgpemv2/schedulable_statistics.hh>
|
#include <sgpemv2/schedulable_statistics.hh>
|
||||||
#include <sgpemv2/thread_statistics.hh>
|
#include <sgpemv2/thread_statistics.hh>
|
||||||
#include <sgpemv2/process.hh>
|
#include <sgpemv2/process.hh>
|
||||||
#include "thread_statistics.hh"
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include <glibmm/ustring.h>
|
#include <glibmm/ustring.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace sgpem
|
namespace sgpem
|
||||||
{
|
{
|
||||||
class ProcessStatistics : public SchedulableStatistics
|
class ProcessStatistics : public SchedulableStatistics
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
~ProcessStatistics();
|
~ProcessStatistics();
|
||||||
|
|
||||||
int get_execution_time() const =0;
|
virtual float get_average_response_time() const = 0;
|
||||||
int get_execution_progress() const =0;
|
virtual const Process* get_core() const = 0;
|
||||||
int get_total_inactivity() const =0;
|
|
||||||
int get_response_time() const =0;
|
virtual std::vector<const ThreadStatistics*> get_threads_statistics() const = 0;
|
||||||
virtual float get_average_response_time() const =0;
|
|
||||||
int get_turn_around() const =0;
|
protected:
|
||||||
int get_efficiency() const =0;
|
ProcessStatistics();
|
||||||
int get_resource_usage_time() const =0;
|
};
|
||||||
int get_resource_waitings_time() const =0;
|
|
||||||
|
|
||||||
const Process* get_core() const =0;
|
|
||||||
|
|
||||||
virtual std::vector<const ThreadStatistics*> get_threads_statistics() const =0;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
ProcessStatistics();
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// src/backend/resource_policy.hh - Copyright 2005, 2006, University
|
// src/backend/sgpemv2/resource_policy.hh - Copyright 2005, 2006, University
|
||||||
// of Padova, dept. of Pure and Applied
|
// of Padova, dept. of Pure and Applied
|
||||||
// Mathematics
|
// Mathematics
|
||||||
//
|
//
|
||||||
|
@ -21,31 +21,34 @@
|
||||||
#ifndef RESOURCE_POLICY_HH
|
#ifndef RESOURCE_POLICY_HH
|
||||||
#define RESOURCE_POLICY_HH 1
|
#define RESOURCE_POLICY_HH 1
|
||||||
|
|
||||||
#include <sgpemv2/sgpemv2-visibility.hh>
|
namespace sgpem
|
||||||
|
{
|
||||||
|
class ResourcePolicy;
|
||||||
|
}
|
||||||
|
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
|
|
||||||
#include "glibmm/ustring.h"
|
#include <sgpemv2/sgpemv2-visibility.hh>
|
||||||
|
|
||||||
#include <sgpemv2/policy_parameters.hh>
|
#include <sgpemv2/policy_parameters.hh>
|
||||||
#include <sgpemv2/user_interrupt_exception.hh>
|
#include <sgpemv2/user_interrupt_exception.hh>
|
||||||
#include <sgpemv2/environment.hh>
|
#include <sgpemv2/environment.hh>
|
||||||
#include <sgpemv2/sub_request.hh>
|
#include <sgpemv2/sub_request.hh>
|
||||||
|
|
||||||
|
#include <glibmm/ustring.h>
|
||||||
|
|
||||||
namespace sgpem
|
namespace sgpem
|
||||||
{
|
{
|
||||||
class ResourcePolicy;
|
/** \brief It's a Strategy wich stay for a resource allocating algorithm.
|
||||||
|
|
||||||
/** \brief
|
It implements the related resource allocation policy.
|
||||||
It's a Strategy wich stay for a resource allocating algorithm.
|
*/
|
||||||
It implements the related resource allocation policy.
|
|
||||||
*/
|
|
||||||
class SG_DLLEXPORT ResourcePolicy
|
class SG_DLLEXPORT ResourcePolicy
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~ResourcePolicy();
|
virtual ~ResourcePolicy();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Initialize the inner components of the policy.
|
\brief Initialize the inner components of the policy.
|
||||||
|
|
||||||
Because it's a pure virtual method, must be re-implemented
|
Because it's a pure virtual method, must be re-implemented
|
||||||
in concrete derived classes.
|
in concrete derived classes.
|
||||||
|
@ -53,7 +56,7 @@ namespace sgpem
|
||||||
virtual void configure() throw(UserInterruptException) = 0;
|
virtual void configure() throw(UserInterruptException) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Allocate resources to the threads
|
\brief Allocate resources to the threads
|
||||||
|
|
||||||
Because it's a pure virtual method, must be re-implemented
|
Because it's a pure virtual method, must be re-implemented
|
||||||
in concrete derived classes.
|
in concrete derived classes.
|
||||||
|
@ -61,7 +64,7 @@ namespace sgpem
|
||||||
virtual void enforce(Environment& environment, Environment::SubRequestQueue& queue, SubRequest& sr) throw(UserInterruptException) = 0;
|
virtual void enforce(Environment& environment, Environment::SubRequestQueue& queue, SubRequest& sr) throw(UserInterruptException) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Gets a string description of the policy.
|
\brief Gets a string description of the policy.
|
||||||
|
|
||||||
Because it's a pure virtual method, must be re-implemented
|
Because it's a pure virtual method, must be re-implemented
|
||||||
in concrete derived classes.
|
in concrete derived classes.
|
||||||
|
@ -76,7 +79,7 @@ namespace sgpem
|
||||||
virtual void deactivate() = 0;
|
virtual void deactivate() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Gets the parameters related with this policy.
|
\brief Gets the parameters related with this policy.
|
||||||
|
|
||||||
\return The policy parameters.
|
\return The policy parameters.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// src/backend/serializers_gatekeeper.hh - Copyright 2005, 2006, University
|
// src/backend/sgpemv2/serializers_gatekeeper.hh - Copyright 2005, 2006, University
|
||||||
// of Padova, dept. of Pure and Applied
|
// of Padova, dept. of Pure and Applied
|
||||||
// Mathematics
|
// Mathematics
|
||||||
//
|
//
|
||||||
|
@ -24,23 +24,23 @@
|
||||||
namespace sgpem
|
namespace sgpem
|
||||||
{
|
{
|
||||||
class Serializer;
|
class Serializer;
|
||||||
|
class SerializersGatekeeper;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <sgpemv2/sgpemv2-visibility.hh>
|
#include <sgpemv2/sgpemv2-visibility.hh>
|
||||||
|
#include <sgpemv2/templates/singleton.hh>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <sgpemv2/templates/singleton.hh>
|
|
||||||
|
|
||||||
namespace sgpem
|
namespace sgpem
|
||||||
{
|
{
|
||||||
class SerializersGatekeeper;
|
|
||||||
|
|
||||||
/** \brief FIXME document me
|
|
||||||
|
|
||||||
|
|
||||||
|
/** \brief Manages instances of Serializer subclasses
|
||||||
|
*
|
||||||
|
* Normally you will use only the get_registered method, since
|
||||||
|
* the Serializer base class automatically registers/unregisters
|
||||||
|
* himself when appropriate.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class SG_DLLEXPORT SerializersGatekeeper : public Singleton<SerializersGatekeeper>
|
class SG_DLLEXPORT SerializersGatekeeper : public Singleton<SerializersGatekeeper>
|
||||||
{
|
{
|
||||||
friend class Singleton<SerializersGatekeeper>;
|
friend class Singleton<SerializersGatekeeper>;
|
||||||
|
@ -48,8 +48,15 @@ namespace sgpem
|
||||||
public:
|
public:
|
||||||
std::vector<Serializer*> get_registered() const;
|
std::vector<Serializer*> get_registered() const;
|
||||||
|
|
||||||
|
/** \brief Registers a serializer
|
||||||
|
* \param serializer The serializer, cannot be NULL
|
||||||
|
*/
|
||||||
void register_serializer(Serializer* serializer);
|
void register_serializer(Serializer* serializer);
|
||||||
|
|
||||||
|
/** \brief Unregisters a serializer
|
||||||
|
* \param serializer The serializer, cannot be NULL. If the serializer
|
||||||
|
* wasn't previously registered, this method is a no-op.
|
||||||
|
*/
|
||||||
void unregister_serializer(Serializer* serializer);
|
void unregister_serializer(Serializer* serializer);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -18,11 +18,10 @@
|
||||||
// along with SGPEMv2; if not, write to the Free Software
|
// along with SGPEMv2; if not, write to the Free Software
|
||||||
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
#include <sgpemv2/statistics.hh>
|
|
||||||
#include "concrete_statistics.hh"
|
#include "concrete_statistics.hh"
|
||||||
|
|
||||||
// Do not include in header file:
|
#include <sgpemv2/statistics.hh>
|
||||||
#include "sgpemv2/templates/singleton.tcc"
|
#include <sgpemv2/templates/singleton.tcc>
|
||||||
|
|
||||||
using namespace sgpem;
|
using namespace sgpem;
|
||||||
|
|
||||||
|
@ -35,7 +34,7 @@ Statistics::Statistics()
|
||||||
Statistics&
|
Statistics&
|
||||||
Statistics::get_instance()
|
Statistics::get_instance()
|
||||||
{
|
{
|
||||||
return Singleton<ConcreteStatistics>::get_instance();
|
return Singleton<ConcreteStatistics>::get_instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue