/**
* Copyright 2012-2013 University Of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.workflowsim;
import org.cloudbus.cloudsim.CloudletScheduler;
import org.cloudbus.cloudsim.Vm;
/**
* Condor Vm extends a VM: the difference is it has a locl storage system and it
* has a state to indicate whether it is busy or not
*
* @author Weiwei Chen
* @since WorkflowSim Toolkit 1.0
* @date Apr 9, 2013
*/
public class CondorVM extends Vm {
/*
* The state of a vm. It should be either WorkflowSimTags.VM_STATUS_IDLE
* or VM_STATUS_READY (not used in workflowsim) or VM_STATUS_BUSY
*/
private int state;
/**
* the cost of using memory in this resource
*/
private double costPerMem = 0.0;
/**
* the cost of using bandwidth in this resource
*/
private double costPerBW = 0.0;
/**
* the cost of using storage in this resource
*/
private double costPerStorage = 0.0;
/**
* the cost of using CPU in this resource
*/
private double cost = 0.0;
/**
* Creates a new CondorVM object.
*
* @param id unique ID of the VM
* @param userId ID of the VM's owner
* @param mips the mips
* @param numberOfPes amount of CPUs
* @param ram amount of ram
* @param bw amount of bandwidth
* @param size amount of storage
* @param vmm virtual machine monitor
* @param cloudletScheduler cloudletScheduler policy for cloudlets
* @pre id >= 0
* @pre userId >= 0
* @pre size > 0
* @pre ram > 0
* @pre bw > 0
* @pre cpus > 0
* @pre priority >= 0
* @pre cloudletScheduler != null
* @post $none
*/
public CondorVM(
int id,
int userId,
double mips,
int numberOfPes,
int ram,
long bw,
long size,
String vmm,
CloudletScheduler cloudletScheduler) {
super(id, userId, mips, numberOfPes, ram, bw, size, vmm, cloudletScheduler);
/*
* At the beginning all vm status is idle.
*/
setState(WorkflowSimTags.VM_STATUS_IDLE);
}
/**
* Creates a new CondorVM object.
*
* @param id unique ID of the VM
* @param userId ID of the VM's owner
* @param mips the mips
* @param numberOfPes amount of CPUs
* @param ram amount of ram
* @param bw amount of bandwidth
* @param size amount of storage
* @param vmm virtual machine monitor
* @param cost cost for CPU
* @param costPerBW cost for using bandwidth
* @param costPerStorage cost for using storage
* @param costPerMem cost for using memory
* @param cloudletScheduler cloudletScheduler policy for cloudlets
* @pre id >= 0
* @pre userId >= 0
* @pre size > 0
* @pre ram > 0
* @pre bw > 0
* @pre cpus > 0
* @pre priority >= 0
* @pre cloudletScheduler != null
* @post $none
*/
public CondorVM(
int id,
int userId,
double mips,
int numberOfPes,
int ram,
long bw,
long size,
String vmm,
double cost,
double costPerMem,
double costPerStorage,
double costPerBW,
CloudletScheduler cloudletScheduler) {
this(id, userId, mips, numberOfPes, ram, bw, size, vmm, cloudletScheduler);
this.cost = cost;
this.costPerBW = costPerBW;
this.costPerMem = costPerMem;
this.costPerStorage = costPerStorage;
}
/**
* Gets the CPU cost
*
* @return the cost
*/
public double getCost() {
return this.cost;
}
/**
* Gets the cost per bw
*
* @return the costPerBW
*/
public double getCostPerBW() {
return this.costPerBW;
}
/**
* Gets the cost per storage
*
* @return the costPerStorage
*/
public double getCostPerStorage() {
return this.costPerStorage;
}
/**
* Gets the cost per memory
*
* @return the costPerMem
*/
public double getCostPerMem() {
return this.costPerMem;
}
/**
* Sets the state of the task
*
* @param tag
*/
public final void setState(int tag) {
this.state = tag;
}
/**
* Gets the state of the task
*
* @return the state of the task
* @pre $none
* @post $none
*/
public final int getState() {
return this.state;
}
}