// src/backend/cpu_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 CPU_POLICY_HH #define CPU_POLICY_HH 1 #include "config.h" #include "gettext.h" #include "glibmm/ustring.h" #include "policy_parameters.hh" #include "user_interrupt_exception.hh" #include "malformed_policy_exception.hh" #include namespace sgpem { class CPUPolicy; /** \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 ReadyQueue. */ class SG_DLLEXPORT CPUPolicy { public: virtual ~CPUPolicy(); /** 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() throw(UserInterruptException, MalformedPolicyException) = 0; /** Sort the \ref ReadyQueue 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. */ virtual void sort_queue() const throw(UserInterruptException, MalformedPolicyException) = 0; /** 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; virtual Glib::ustring get_name() const = 0; /** Tell if this policy is preemptible. 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 throw(UserInterruptException, MalformedPolicyException) = 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 throw(UserInterruptException, MalformedPolicyException) = 0; virtual void activate() throw(UserInterruptException, MalformedPolicyException) = 0; virtual void deactivate() = 0; /** Gets the parameters related with this policy. \return The policy parameters. */ PolicyParameters& get_parameters(); /** This method is used only as a callback by scripting languages */ static CPUPolicy* callback_get_policy() throw(std::runtime_error); protected: PolicyParameters _parameters; static void set_callback_policy(CPUPolicy* ptr = NULL); private: // Used by callback_get_policy: static CPUPolicy* _callback_policy; }; }//~ namespace sgpem #endif //~ CPU_POLICY_HH