init
This commit is contained in:
251
src/org/cloudbus/cloudsim/CloudletScheduler.java
Normal file
251
src/org/cloudbus/cloudsim/CloudletScheduler.java
Normal file
@@ -0,0 +1,251 @@
|
||||
/*
|
||||
* Title: CloudSim Toolkit
|
||||
* Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation of Clouds
|
||||
* Licence: GPL - http://www.gnu.org/copyleft/gpl.html
|
||||
*
|
||||
* Copyright (c) 2009-2012, The University of Melbourne, Australia
|
||||
*/
|
||||
|
||||
package org.cloudbus.cloudsim;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* CloudletScheduler is an abstract class that represents the policy of scheduling performed by a
|
||||
* virtual machine. So, classes extending this must execute Cloudlets. Also, the interface for
|
||||
* cloudlet management is also implemented in this class.
|
||||
*
|
||||
* @author Rodrigo N. Calheiros
|
||||
* @author Anton Beloglazov
|
||||
* @since CloudSim Toolkit 1.0
|
||||
*/
|
||||
public abstract class CloudletScheduler {
|
||||
|
||||
/** The previous time. */
|
||||
private double previousTime;
|
||||
|
||||
/** The current mips share. */
|
||||
private List<Double> currentMipsShare;
|
||||
|
||||
/**
|
||||
* Creates a new CloudletScheduler object. This method must be invoked before starting the
|
||||
* actual simulation.
|
||||
*
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public CloudletScheduler() {
|
||||
setPreviousTime(0.0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the processing of cloudlets running under management of this scheduler.
|
||||
*
|
||||
* @param currentTime current simulation time
|
||||
* @param mipsShare array with MIPS share of each processor available to the scheduler
|
||||
* @return time predicted completion time of the earliest finishing cloudlet, or 0 if there is no
|
||||
* next events
|
||||
* @pre currentTime >= 0
|
||||
* @post $none
|
||||
*/
|
||||
public abstract double updateVmProcessing(double currentTime, List<Double> mipsShare);
|
||||
|
||||
/**
|
||||
* Receives an cloudlet to be executed in the VM managed by this scheduler.
|
||||
*
|
||||
* @param gl the submited cloudlet
|
||||
* @param fileTransferTime time required to move the required files from the SAN to the VM
|
||||
* @return expected finish time of this cloudlet, or 0 if it is in a waiting queue
|
||||
* @pre gl != null
|
||||
* @post $none
|
||||
*/
|
||||
public abstract double cloudletSubmit(Cloudlet gl, double fileTransferTime);
|
||||
|
||||
/**
|
||||
* Receives an cloudlet to be executed in the VM managed by this scheduler.
|
||||
*
|
||||
* @param gl the submited cloudlet
|
||||
* @return expected finish time of this cloudlet, or 0 if it is in a waiting queue
|
||||
* @pre gl != null
|
||||
* @post $none
|
||||
*/
|
||||
public abstract double cloudletSubmit(Cloudlet gl);
|
||||
|
||||
/**
|
||||
* Cancels execution of a cloudlet.
|
||||
*
|
||||
* @param clId ID of the cloudlet being cancealed
|
||||
* @return the canceled cloudlet, $null if not found
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public abstract Cloudlet cloudletCancel(int clId);
|
||||
|
||||
/**
|
||||
* Pauses execution of a cloudlet.
|
||||
*
|
||||
* @param clId ID of the cloudlet being paused
|
||||
* @return $true if cloudlet paused, $false otherwise
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public abstract boolean cloudletPause(int clId);
|
||||
|
||||
/**
|
||||
* Resumes execution of a paused cloudlet.
|
||||
*
|
||||
* @param clId ID of the cloudlet being resumed
|
||||
* @return expected finish time of the cloudlet, 0.0 if queued
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public abstract double cloudletResume(int clId);
|
||||
|
||||
/**
|
||||
* Processes a finished cloudlet.
|
||||
*
|
||||
* @param rcl finished cloudlet
|
||||
* @pre rgl != $null
|
||||
* @post $none
|
||||
*/
|
||||
public abstract void cloudletFinish(ResCloudlet rcl);
|
||||
|
||||
/**
|
||||
* Gets the status of a cloudlet.
|
||||
*
|
||||
* @param clId ID of the cloudlet
|
||||
* @return status of the cloudlet, -1 if cloudlet not found
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public abstract int getCloudletStatus(int clId);
|
||||
|
||||
/**
|
||||
* Informs about completion of some cloudlet in the VM managed by this scheduler.
|
||||
*
|
||||
* @return $true if there is at least one finished cloudlet; $false otherwise
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public abstract boolean isFinishedCloudlets();
|
||||
|
||||
/**
|
||||
* Returns the next cloudlet in the finished list, $null if this list is empty.
|
||||
*
|
||||
* @return a finished cloudlet
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public abstract Cloudlet getNextFinishedCloudlet();
|
||||
|
||||
/**
|
||||
* Returns the number of cloudlets runnning in the virtual machine.
|
||||
*
|
||||
* @return number of cloudlets runnning
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public abstract int runningCloudlets();
|
||||
|
||||
/**
|
||||
* Returns one cloudlet to migrate to another vm.
|
||||
*
|
||||
* @return one running cloudlet
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public abstract Cloudlet migrateCloudlet();
|
||||
|
||||
/**
|
||||
* Get utilization created by all cloudlets.
|
||||
*
|
||||
* @param time the time
|
||||
* @return total utilization
|
||||
*/
|
||||
public abstract double getTotalUtilizationOfCpu(double time);
|
||||
|
||||
/**
|
||||
* Gets the current requested mips.
|
||||
*
|
||||
* @return the current mips
|
||||
*/
|
||||
public abstract List<Double> getCurrentRequestedMips();
|
||||
|
||||
/**
|
||||
* Gets the total current mips for the Cloudlet.
|
||||
*
|
||||
* @param rcl the rcl
|
||||
* @param mipsShare the mips share
|
||||
* @return the total current mips
|
||||
*/
|
||||
public abstract double getTotalCurrentAvailableMipsForCloudlet(ResCloudlet rcl, List<Double> mipsShare);
|
||||
|
||||
/**
|
||||
* Gets the total current requested mips for cloudlet.
|
||||
*
|
||||
* @param rcl the rcl
|
||||
* @param time the time
|
||||
* @return the total current requested mips for cloudlet
|
||||
*/
|
||||
public abstract double getTotalCurrentRequestedMipsForCloudlet(ResCloudlet rcl, double time);
|
||||
|
||||
/**
|
||||
* Gets the total current allocated mips for cloudlet.
|
||||
*
|
||||
* @param rcl the rcl
|
||||
* @param time the time
|
||||
* @return the total current allocated mips for cloudlet
|
||||
*/
|
||||
public abstract double getTotalCurrentAllocatedMipsForCloudlet(ResCloudlet rcl, double time);
|
||||
|
||||
/**
|
||||
* Gets the current requested ram.
|
||||
*
|
||||
* @return the current requested ram
|
||||
*/
|
||||
public abstract double getCurrentRequestedUtilizationOfRam();
|
||||
|
||||
/**
|
||||
* Gets the current requested bw.
|
||||
*
|
||||
* @return the current requested bw
|
||||
*/
|
||||
public abstract double getCurrentRequestedUtilizationOfBw();
|
||||
|
||||
/**
|
||||
* Gets the previous time.
|
||||
*
|
||||
* @return the previous time
|
||||
*/
|
||||
public double getPreviousTime() {
|
||||
return previousTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the previous time.
|
||||
*
|
||||
* @param previousTime the new previous time
|
||||
*/
|
||||
protected void setPreviousTime(double previousTime) {
|
||||
this.previousTime = previousTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current mips share.
|
||||
*
|
||||
* @param currentMipsShare the new current mips share
|
||||
*/
|
||||
protected void setCurrentMipsShare(List<Double> currentMipsShare) {
|
||||
this.currentMipsShare = currentMipsShare;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current mips share.
|
||||
*
|
||||
* @return the current mips share
|
||||
*/
|
||||
public List<Double> getCurrentMipsShare() {
|
||||
return currentMipsShare;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user