/*
* 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-2010, The University of Melbourne, Australia
*/
package org.cloudbus.cloudsim;
import org.cloudbus.cloudsim.provisioners.PeProvisioner;
/**
* Pe代表cpu单元,字段:pe状态和分配策略peProvisioner
* 同一台主机所有pe有相同的处理能力
* CloudSim Pe (Processing Element) class represents CPU unit,
* defined in terms of Millions Instructions Per Second (MIPS) rating.<br>
* <b>ASSUMPTION:<b> All PEs under the same Machine have the same MIPS rating.
*
* @author Manzur Murshed
* @author Rajkumar Buyya
* @since CloudSim Toolkit 1.0
*/
public class Pe {
/** Denotes Pe is FREE for allocation. */
public static final int FREE = 1;
/** Denotes Pe is allocated and hence busy in processing Cloudlet. */
public static final int BUSY = 2;
/** Denotes Pe is failed and hence it can't process any Cloudlet at this moment. This Pe is failed because it belongs to a machine which is also failed. */
public static final int FAILED = 3;
/** The id. */
private int id;
// FOR SPACE SHARED RESOURCE: Jan 21
/** The status of Pe: FREE, BUSY, FAILED: . */
private int status;
/** The pe provisioner.pe分配策略 */
private PeProvisioner peProvisioner;
/**
* Allocates a new Pe object.
*
* @param id the Pe ID
* @param peProvisioner the pe provisioner
*
* @pre id >= 0
* @pre peProvisioner != null
* @post $none
*/
public Pe(int id, PeProvisioner peProvisioner) {
setId(id);
setPeProvisioner(peProvisioner);
// when created it should be set to FREE, i.e. available for use.
this.status = FREE;
}
/**
* Sets the id.
*
* @param id the new id
*/
protected void setId(int id) {
this.id = id;
}
/**
* Gets the id.
*
* @return the id
*/
public int getId() {
return id;
}
/**
* Sets the MIPS Rating of this Pe.
*
* @param d the mips
*
* @pre mips >= 0
* @post $none
*/
public void setMips(double d) {
getPeProvisioner().setMips(d);
}
/**
* Gets the MIPS Rating of this Pe.
*
* @return the MIPS Rating
*
* @pre $none
* @post $result >= 0
*/
public int getMips() {
return (int) getPeProvisioner().getMips();
}
/**
* Gets the status of this Pe.
*
* @return the status of this Pe
*
* @pre $none
* @post $none
*/
public int getStatus() {
return status;
}
/**
* Sets Pe status to free, meaning it is available for processing.
* This should be used by SPACE shared hostList only.
*
* @pre $none
* @post $none
*/
public void setStatusFree() {
setStatus(FREE);
}
/**
* Sets Pe status to busy, meaning it is already executing Cloudlets.
* This should be used by SPACE shared hostList only.
*
* @pre $none
* @post $none
*/
public void setStatusBusy() {
setStatus(BUSY);
}
/**
* Sets this Pe to FAILED.
*
* @pre $none
* @post $none
*/
public void setStatusFailed() {
setStatus(FAILED);
}
/**
* Sets Pe status to either <tt>Pe.FREE</tt> or <tt>Pe.BUSY</tt>
*
* @param status Pe status, <tt>true</tt> if it is FREE, <tt>false</tt>
* if BUSY.
*
* @pre $none
* @post $none
*/
public void setStatus(int status) {
this.status = status;
}
/**
* Sets the pe provisioner.
*
* @param peProvisioner the new pe provisioner
*/
protected void setPeProvisioner(PeProvisioner peProvisioner) {
this.peProvisioner = peProvisioner;
}
/**
* Gets the Pe provisioner.
*
* @return the Pe provisioner
*/
public PeProvisioner getPeProvisioner() {
return this.peProvisioner;
}
}