// src/backend/policy.hh - Copyright 2005, 2006, University // of Padova, dept. of Pure and Applied // Mathematics // // This file is part of SGPEMv2. // // This is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // SGPEMv2 is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with SGPEMv2; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #ifndef POLICY_HH #define POLICY_HH 1 #include "config.h" #include "gettext.h" #include "glibmm/ustring.h" #include "scheduler.hh" #include "policy_parameters.hh" namespace sgpem { class Policy; /** \brief It's a Strategy wich stay for a scheduling algorithm. It implements the related scheduling policy. Its goal is, usually, to keep a list of Schedulable objects mantained in a SchedulableQueue. */ class SG_DLLEXPORT Policy { public: virtual ~Policy(); /** Initialize the inner components of the policy. Because it's a pure virtual method, must be re-implemented in concrete derived classes. */ virtual void configure() = 0; /** Sort the \ref SchedulableQueue object that contain all the Schedulable objects (Processes, Threads) still active managed by the scheduler. Because it's a pure virtual method, must be re-implemented in concrete derived classes. \param event Call reason. Needed only by some scheduling policies. */ virtual void sort_queue(Scheduler::event event) const = 0; /** Gets the unique identifier (id) of this Policy. \return The Policy id. */ int get_id() const; /** Gets a string description of the policy. Because it's a pure virtual method, must be re-implemented in concrete derived classes. \return String description of the policy. */ virtual Glib::ustring get_description() const = 0; /** Tell if this policy is preemptible. If true, for the \ref Scheduler::SCHEDULABLE_ARRIVAL event, the ready queue will contain also the running \ref Schedulable; else the running Schedulable will not be in the queue. Because it's a pure virtual method, must be re-implemented in concrete derived classes. \return True if this policy is preemptible. */ virtual bool is_pre_emptive() const = 0; /** Gets the time quantum for the policy. Because it's a pure virtual method, must be re-implemented in concrete derived classes. \return Time quantum for the policy. */ virtual int get_time_slice() const = 0; /** Sets the time quantum for the policy. Because it's a pure virtual method, must be re-implemented in concrete derived classes. \param quantum The desired time quantum for the policy. */ virtual void set_time_slice(const int& quantum) = 0; /** Gets the parameters related with this policy. Because it's a pure virtual method, must be re-implemented in concrete derived classes. \return The policy parameters. */ PolicyParameters& get_parameters(); protected: PolicyParameters _parameters; int _id; }; }//~ namespace sgpem #endif