X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/54e35ebda7e4ffacd769653b8ebb8ba93c7298bf..0e21809119a2053427dfbb553cec0f4b48ba038f:/src/surf/vm_interface.hpp diff --git a/src/surf/vm_interface.hpp b/src/surf/vm_interface.hpp index 0dede2e71f..efcefc4cc7 100644 --- a/src/surf/vm_interface.hpp +++ b/src/surf/vm_interface.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2014. The SimGrid Team. +/* Copyright (c) 2004-2015. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -24,53 +24,20 @@ class VM; *************/ /** @ingroup SURF_callbacks - * @brief Callbacks handler which emit the callbacks after VM creation * - * @details Callback functions have the following signature: `void(VMPtr)` + * @brief Callbacks fired after VM creation. Signature: `void(VM*)` */ extern surf_callback(void, VM*) VMCreatedCallbacks; /** @ingroup SURF_callbacks - * @brief Callbacks handler which emit the callbacks after VM destruction * - * @details Callback functions have the following signature: `void(VMPtr)` + * @brief Callbacks fired after VM destruction. Signature: `void(VM*)` */ extern surf_callback(void, VM*) VMDestructedCallbacks; /** @ingroup SURF_callbacks - * @brief Callbacks handler which emit the callbacks after VM State changed * - * @details Callback functions have the following signature: `void(VMActionPtr)` + * @brief Callbacks after VM State changes. Signature: `void(VMAction*)` */ extern surf_callback(void, VM*) VMStateChangedCallbacks; -/********* - * Model * - *********/ -/** @ingroup SURF_vm_interface - * @brief SURF VM model interface class - * @details A model is an object which handle the interactions between its Resources and its Actions - */ -class VMModel : public HostModel { -public: - VMModel(); - ~VMModel(){}; - - Host *createHost(const char *name){DIE_IMPOSSIBLE;} - - /** - * @brief Create a new VM - * - * @param name The name of the new VM - * @param host_PM The real machine hosting the VM - * - */ - virtual VM *createVM(const char *name, surf_resource_t host_PM)=0; - void adjustWeightOfDummyCpuActions() {}; - - typedef boost::intrusive::list > - vm_list_t; - static vm_list_t ws_vms; -}; - /************ * Resource * ************/ @@ -79,11 +46,10 @@ public: * @brief SURF VM interface class * @details A VM represent a virtual machine */ -class VM : public Host, - public boost::intrusive::list_base_hook<> { +class VM : public Host { public: /** - * @brief VM constructor + * @brief Constructor * * @param model VMModel associated to this VM * @param name The name of the VM @@ -94,44 +60,27 @@ public: VM(Model *model, const char *name, xbt_dict_t props, RoutingEdge *netElm, Cpu *cpu); - /** - * @brief WdorkstationVM destructor - */ + /** @brief Destructor */ ~VM(); void setState(e_surf_resource_state_t state); - /** - * @brief Suspend the VM - */ + /** @brief Suspend the VM */ virtual void suspend()=0; - /** - * @brief Resume the VM - */ + /** @brief Resume the VM */ virtual void resume()=0; - /** - * @brief Save the VM (Not yet implemented) - */ + /** @brief Save the VM (Not yet implemented) */ virtual void save()=0; - /** - * @brief Restore the VM (Not yet implemented) - */ + /** @brief Restore the VM (Not yet implemented) */ virtual void restore()=0; - /** - * @brief Migrate the VM to the destination host - * - * @param ind_vm_ws_dest The destination host - */ - virtual void migrate(surf_resource_t ind_vm_ws_dest)=0; + /** @brief Migrate the VM to the destination host */ + virtual void migrate(surf_resource_t dest_PM)=0; - /** - * @brief Get the physical machine hosting the VM - * @return The physical machine hosting the VM - */ + /** @brief Get the physical machine hosting the VM */ virtual surf_resource_t getPm()=0; virtual void setBound(double bound)=0; @@ -141,6 +90,38 @@ public: CpuAction *p_action; Host *p_subWs; // Pointer to the ''host'' OS e_surf_vm_state_t p_currentState; +public: + boost::intrusive::list_member_hook<> vm_hook; +}; + +/********* + * Model * + *********/ +/** @ingroup SURF_vm_interface + * @brief SURF VM model interface class + * @details A model is an object which handle the interactions between its Resources and its Actions + */ +class VMModel : public HostModel { +public: + VMModel() :HostModel(){} + ~VMModel(){}; + + Host *createHost(const char *name){DIE_IMPOSSIBLE;} + + /** + * @brief Create a new VM + * + * @param name The name of the new VM + * @param host_PM The real machine hosting the VM + * + */ + virtual VM *createVM(const char *name, surf_resource_t host_PM)=0; + void adjustWeightOfDummyCpuActions() {}; + + typedef boost::intrusive::member_hook< + VM, boost::intrusive::list_member_hook<>, &VM::vm_hook> VmOptions; + typedef boost::intrusive::list > vm_list_t; + static vm_list_t ws_vms; }; /**********