X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d8d122c3f5f13f494067f09a2daddfc091e4272a..bfed90d7c58bf90f06017312bc82965a416986eb:/src/surf/virtual_machine.cpp diff --git a/src/surf/virtual_machine.cpp b/src/surf/virtual_machine.cpp index 9fc07fc868..ea65bc75d1 100644 --- a/src/surf/virtual_machine.cpp +++ b/src/surf/virtual_machine.cpp @@ -4,13 +4,14 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include + #include "cpu_cas01.hpp" #include "virtual_machine.hpp" -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_vm, surf, - "Logging specific to the SURF VM module"); +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_vm, surf, "Logging specific to the SURF VM module"); -simgrid::surf::VMModel *surf_vm_model = NULL; +simgrid::surf::VMModel *surf_vm_model = nullptr; namespace simgrid { namespace surf { @@ -19,9 +20,9 @@ namespace surf { * Callbacks * *************/ -surf_callback(void, simgrid::surf::VirtualMachine*) VMCreatedCallbacks; -surf_callback(void, simgrid::surf::VirtualMachine*) VMDestructedCallbacks; -surf_callback(void, simgrid::surf::VirtualMachine*) VMStateChangedCallbacks; +simgrid::xbt::signal VMCreatedCallbacks; +simgrid::xbt::signal VMDestructedCallbacks; +simgrid::xbt::signal VMStateChangedCallbacks; /********* * Model * @@ -33,43 +34,51 @@ VMModel::vm_list_t VMModel::ws_vms; * Resource * ************/ -VirtualMachine::VirtualMachine(Model *model, const char *name, xbt_dict_t props, - RoutingEdge *netElm, Cpu *cpu) -: Host(model, name, props, NULL, netElm, cpu) +VirtualMachine::VirtualMachine(HostModel *model, const char *name, simgrid::s4u::Host *hostPM) +: HostImpl(model, name, nullptr, nullptr, nullptr) +, hostPM_(hostPM) { VMModel::ws_vms.push_back(*this); - simgrid::Host::by_name_or_create(name)->set_facet(this); + piface = simgrid::s4u::Host::by_name_or_create(name); + piface->extension_set(this); } /* - * A physical host does not disappear in the current SimGrid code, but a VM may - * disappear during a simulation. + * A physical host does not disappear in the current SimGrid code, but a VM may disappear during a simulation. */ VirtualMachine::~VirtualMachine() { - surf_callback_emit(VMDestructedCallbacks, this); + VMDestructedCallbacks(this); VMModel::ws_vms.erase(VMModel::vm_list_t::s_iterator_to(*this)); + /* Free the cpu_action of the VM. */ + XBT_ATTRIB_UNUSED int ret = action_->unref(); + xbt_assert(ret == 1, "Bug: some resource still remains"); } -void VirtualMachine::setState(e_surf_resource_state_t state){ - Resource::setState(state); - surf_callback_emit(VMStateChangedCallbacks, this); +e_surf_vm_state_t VirtualMachine::getState() { + return p_vm_state; } -/* - * A surf level object will be useless in the upper layer. Returning the - * dict_elm of the host. - **/ -sg_host_t VirtualMachine::getPm() -{ - return simgrid::Host::by_name_or_null(p_subWs->getName()); +void VirtualMachine::setState(e_surf_vm_state_t state) { + p_vm_state = state; +} +void VirtualMachine::turnOn() { + if (isOff()) { + Resource::turnOn(); + VMStateChangedCallbacks(this); + } +} +void VirtualMachine::turnOff() { + if (isOn()) { + Resource::turnOff(); + VMStateChangedCallbacks(this); + } } -/********** - * Action * - **********/ - -//FIME:: handle action cancel +/** @brief returns the physical machine on which the VM is running **/ +sg_host_t VirtualMachine::getPm() { + return hostPM_; +} } }