云计算仿真工具中文注释VmSchedulerSpaceShared.java

来源:互联网 发布:网络语草根是什么意思 编辑:程序博客网 时间:2024/06/13 11:49
/* * 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 java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;/** * 空间共享虚拟机调度策略,pe不可以共享 * 当没有pe时候,分配会失败 * VmSchedulerSpaceShared is a VMM allocation policy that * allocates one or more Pe to a VM, and doesn't allow sharing * of PEs. If there is no free PEs to the VM, allocation fails. * Free PEs are not allocated to VMs * * @authorRodrigo N. Calheiros * @authorAnton Beloglazov * @sinceCloudSim Toolkit 1.0 */public class VmSchedulerSpaceShared extends VmScheduler {/** Map containing VM ID and a vector of PEs allocated to this VM. */private Map<String, List<Pe>> peAllocationMap;/** The free pes vector. */private List<Pe> freePes;/** * Instantiates a new vm scheduler space shared. * * @param pelist the pelist */public VmSchedulerSpaceShared(List<? extends Pe> pelist) {super(pelist);setPeAllocationMap(new HashMap<String, List<Pe>>());setFreePes(new ArrayList<Pe>());getFreePes().addAll(pelist);}/* (non-Javadoc) * 分配pes给vm * mipshare中的数值表示一个pe需要分配的mips,mipshare列表大小表示需要的cpu的个数 * @see org.cloudbus.cloudsim.VmScheduler#allocatePesForVm(org.cloudbus.cloudsim.Vm, java.util.List) */@Overridepublic boolean allocatePesForVm(Vm vm, List<Double> mipsShare) {//if there is no enough free PEs, failsif (getFreePes().size() < mipsShare.size()) {return false;}List<Pe> selectedPes = new ArrayList<Pe>();Iterator<Pe> peIterator = getFreePes().iterator();Pe pe = peIterator.next();double totalMips = 0;for (Double mips : mipsShare) {if (mips <= pe.getMips()) {selectedPes.add(pe);if (!peIterator.hasNext()) {break;}pe = peIterator.next();totalMips += mips;}}if (mipsShare.size() > selectedPes.size()) {  //free的pe不够return false;}getFreePes().removeAll(selectedPes);          //从空闲列表中移走getPeAllocationMap().put(vm.getUid(), selectedPes);  //加入已分配的pe map中getMipsMap().put(vm.getUid(), mipsShare);            //对应的分配得到每个pe的mips放到mips map中setAvailableMips(getAvailableMips() - totalMips);return true;}/* (non-Javadoc) * 回收vm的pes * @see org.cloudbus.cloudsim.VmScheduler#deallocatePesForVm(org.cloudbus.cloudsim.Vm) */@Overridepublic void deallocatePesForVm(Vm vm) {getFreePes().addAll(getPeAllocationMap().get(vm.getUid()));      //vm占用的pe加到free pe列表中getPeAllocationMap().remove(vm.getUid());                        //从已分配的pe map中删除double totalMips = 0;                                            //更新availablemipsfor (double mips : getMipsMap().get(vm.getUid())) {totalMips += mips;}setAvailableMips(getAvailableMips() + totalMips);getMipsMap().remove(vm.getUid());                                //山粗对应的mips map中对应此虚拟机部分}/** * Sets the pe allocation map. * * @param peAllocationMap the pe allocation map */protected void setPeAllocationMap(Map<String, List<Pe>> peAllocationMap) {this.peAllocationMap = peAllocationMap;}/** * Gets the pe allocation map. * * @return the pe allocation map */protected Map<String, List<Pe>> getPeAllocationMap() {return peAllocationMap;}/** * Sets the free pes vector. * * @param freePes the new free pes vector */protected void setFreePes(List<Pe> freePes) {this.freePes = freePes;}/** * Gets the free pes vector. * * @return the free pes vector */protected List<Pe> getFreePes() {return freePes;}}