• CloudSim源代码学习——虚拟机(VM)


      1 package org.cloudbus.cloudsim;
      2 
      3 import java.util.ArrayList;//This class provides methods to manipulate the size of the array that is used internally to store the list.
      4 import java.util.List;
      5 
      6 /**【虚拟机】
      7  * Vm represents a VM: 【it runs inside a Host, sharing hostList
      8  * with other VMs. It processes cloudlets. 】This processing happens according
      9  * to a policy, defined by the CloudletScheduler. Each VM has a owner(每个虚拟机有一个所有者), which can
     10  * submit cloudlets to the VM to be executed
     11  *
     12  * @author        Rodrigo N. Calheiros
     13  * @author        Anton Beloglazov
     14  * @since        CloudSim Toolkit 1.0
     15  */
     16 public class Vm {
     17 
     18     /** The id.  ID号*/
     19     private int id;
     20 
     21     /** The user id. 用户编号*/
     22     private int userId;
     23 
     24     private String uid;
     25 
     26     /** The size. 大小 */
     27     private long size;
     28 
     29     /** The MIPS.处理速度MIPS */
     30     private double mips;
     31 
     32     /** The PEs number. PE数*/
     33     private int pesNumber;
     34 
     35     /** The ram. 内存*/
     36     private int ram;
     37 
     38     /** The bw.带宽 */
     39     private long bw;
     40 
     41     /** The vmm. 虚拟机管理程序*/
     42     private String vmm;
     43 
     44     /** The Cloudlet scheduler. 云任务调度程序*/
     45     private CloudletScheduler cloudletScheduler;
     46 
     47     /** The host.主机 */
     48     private Host host;
     49 
     50     /** In migration flag. 迁移标志*/
     51     private boolean inMigration;
     52 
     53     /** The current allocated size.当前分配大小 */
     54     private long currentAllocatedSize;
     55 
     56     /** The current allocated ram. 当前分配内存*/
     57     private int currentAllocatedRam;
     58 
     59     /** The current allocated bw. 当前分配带宽*/
     60     private long currentAllocatedBw;
     61 
     62     /** The current allocated mips. 当前分配mips*/
     63     private List<Double> currentAllocatedMips;
     64 
     65     /** The recently created. 最近创建*/
     66     private boolean recentlyCreated;
     67 
     68     /**【虚拟机特征对象】
     69      * Creates a new VMCharacteristics object.
     70      *
     71      * @param id unique ID of the VM
     72      * @param userId ID of the VM's owner
     73      * @param size amount of storage
     74      * @param ram amount of ram
     75      * @param bw amount of bandwidth
     76      * @param pesNumber amount of CPUs  CPU总和
     77      * @param vmm virtual machine monitor 虚拟机监控器
     78      * @param cloudletScheduler cloudletScheduler policy for cloudlets云任务调度协议
     79      * @param priority the priority 优先权
     80      * @param mips the mips
     81      *
     82      * @pre id >= 0
     83      * @pre userId >= 0
     84      * @pre size > 0
     85      * @pre ram > 0
     86      * @pre bw > 0
     87      * @pre cpus > 0
     88      * @pre priority >= 0
     89      * @pre cloudletScheduler != null
     90      * @post $none
     91      */
     92     public Vm(int id, int userId, double mips, int pesNumber, int ram, long bw, long size, String vmm, CloudletScheduler cloudletScheduler) {
     93         setId(id);
     94         setUserId(userId);
     95         setUid(getUid(userId, id));
     96         setMips(mips);
     97         setPesNumber(pesNumber);
     98         setRam(ram);
     99         setBw(bw);
    100         setSize(size);
    101         setVmm(vmm);
    102         setCloudletScheduler(cloudletScheduler);
    103 
    104         setInMigration(false);
    105         setRecentlyCreated(true);
    106 
    107         setCurrentAllocatedBw(0);
    108         setCurrentAllocatedMips(null);//怎么是null
    109         setCurrentAllocatedRam(0);
    110         setCurrentAllocatedSize(0);
    111     }
    112 
    113     /**【更新运行在虚拟机上云任务】
    114      * Updates the processing of cloudlets running on this VM.
    115      *
    116      * @param currentTime current simulation time
    117      * @param mipsShare array with MIPS share of each Pe available to the scheduler
    118      *
    119      * @return time predicted completion time【预测完成时间】 of the earliest finishing cloudlet, or 0
    120      * if there is no next events
    121      *
    122      * @pre currentTime >= 0
    123      * @post $none
    124      */
    125     public double updateVmProcessing(double currentTime, List<Double> mipsShare) {
    126         if (mipsShare != null) {
    127             return getCloudletScheduler().updateVmProcessing(currentTime, mipsShare);
    128         }
    129         return 0.0;
    130     }
    131 
    132     /**当前请求的MIPS
    133      * Gets the current requested mips.
    134      *
    135      * @return the current requested mips
    136      */
    137     public List<Double> getCurrentRequestedMips() {
    138         List<Double> currentRequestedMips = getCloudletScheduler().getCurrentRequestedMips();
    139 
    140         if (isRecentlyCreated()) {//新创建虚拟机
    141             boolean mipsIsNull = true;
    142             for (double mips : currentRequestedMips) {
    143                 if (mips > 0.0) {
    144                     mipsIsNull = false;
    145                     setRecentlyCreated(false);
    146                     break;
    147                 }
    148             }
    149 
    150             //if (mipsIsNull && isRecentlyCreated()) {
    151             if (mipsIsNull) {
    152                 currentRequestedMips = new ArrayList<Double>();
    153                 for (int i = 0; i < getPesNumber(); i++) {
    154                     currentRequestedMips.add(getMips());
    155                 }
    156             }
    157         }
    158 
    159         return currentRequestedMips;
    160     }
    161 
    162     /**当前请求的MIPS总数
    163      * Gets the current requested total mips.
    164      *
    165      * @return the current requested total mips
    166      */
    167     public double getCurrentRequestedTotalMips() {
    168         double totalRequestedMips = 0;
    169         for (double mips : getCurrentRequestedMips()) {
    170             totalRequestedMips += mips;
    171         }
    172         return totalRequestedMips;
    173     }
    174 
    175     /**请求的带宽
    176      * Gets the current requested bw.
    177      *
    178      * @return the current requested bw
    179      */
    180     public long getCurrentRequestedBw() {
    181         return getBw();
    182     }
    183 
    184     /**请求的内存
    185      * Gets the current requested ram.
    186      *
    187      * @return the current requested ram
    188      */
    189     public int getCurrentRequestedRam() {
    190         return getRam();
    191     }
    192 
    193     /**CPU利用率
    194      * Get utilization created by all clouddlets running on this VM.
    195      *
    196      * @param time the time
    197      *
    198      * @return total utilization
    199      */
    200     public double getTotalUtilizationOfCpu(double time) {
    201         return getCloudletScheduler().getTotalUtilizationOfCpu(time);
    202     }
    203 
    204     /**MIPS利用率
    205      * Get utilization created by all cloudlets running on this VM in MIPS.
    206      *
    207      * @param time the time
    208      *
    209      * @return total utilization
    210      */
    211     public double getTotalUtilizationOfCpuMips(double time) {
    212         return getTotalUtilizationOfCpu(time) * getMips();
    213     }
    214 
    215     public void setUid(String uid) {
    216         this.uid = uid;
    217     }
    218 
    219     /**虚拟机的唯一标示
    220      * Get unique string identificator of the VM.
    221      *
    222      * @return string uid
    223      */
    224     public String getUid() {
    225         return uid;
    226     }
    227 
    228     /**生成虚拟机标示
    229      * Generate unique string identificator of the VM.
    230      *
    231      * @param userId the user id
    232      * @param vmId the vm id
    233      *
    234      * @return string uid
    235      */
    236     public static String getUid(int userId, int vmId) {
    237         return userId + "-" + vmId;
    238     }
    239 
    240     /**取ID
    241      * Gets the id.
    242      *
    243      * @return the id
    244      */
    245     public int getId() {
    246         return id;
    247     }
    248 
    249     /**设置ID
    250      * Sets the id.
    251      *
    252      * @param id the new id
    253      */
    254     protected void setId(int id) {
    255         this.id = id;
    256     }
    257 
    258     /**设置用户ID
    259      * Sets the user id.
    260      *
    261      * @param userId the new user id
    262      */
    263     protected void setUserId(int userId) {
    264         this.userId = userId;
    265     }
    266 
    267     /**虚拟机所有者ID
    268      * Gets the ID of the owner of the VM.
    269      *
    270      * @return VM's owner ID
    271      *
    272      * @pre $none
    273      * @post $none
    274      */
    275     public int getUserId() {
    276         return userId;
    277     }
    278 
    279     /**取MIPS
    280      * Gets the mips.
    281      *
    282      * @return the mips
    283      */
    284     public double getMips() {
    285         return mips;
    286     }
    287 
    288     /**设置MIPS
    289      * Sets the mips.
    290      *
    291      * @param mips the new mips
    292      */
    293     protected void setMips(double mips) {
    294         this.mips = mips;
    295     }
    296 
    297     /**取pe数
    298      * Gets the pes number.
    299      *
    300      * @return the pes number
    301      */
    302     public int getPesNumber() {
    303         return pesNumber;
    304     }
    305 
    306     /**设置
    307      * Sets the pes number.
    308      *
    309      * @param pesNumber the new pes number
    310      */
    311     protected void setPesNumber(int pesNumber) {
    312         this.pesNumber = pesNumber;
    313     }
    314 
    315     /**总内存
    316      * Gets the amount of ram.
    317      *
    318      * @return amount of ram
    319      *
    320      * @pre $none
    321      * @post $none
    322      */
    323     public int getRam() {
    324         return ram;
    325     }
    326 
    327     /**设置内存
    328      * Sets the amount of ram.
    329      *
    330      * @param ram new amount of ram
    331      *
    332      * @pre ram > 0
    333      * @post $none
    334      */
    335     public void setRam(int ram) {
    336         this.ram = ram;
    337     }
    338 
    339     /**总带宽
    340      * Gets the amount of bandwidth.
    341      *
    342      * @return amount of bandwidth
    343      *
    344      * @pre $none
    345      * @post $none
    346      */
    347     public long getBw() {
    348         return bw;
    349     }
    350 
    351     /**设置带宽
    352      * Sets the amount of bandwidth.
    353      *
    354      * @param bw new amount of bandwidth
    355      *
    356      * @pre bw > 0
    357      * @post $none
    358      */
    359     public void setBw(long bw) {
    360         this.bw = bw;
    361     }
    362 
    363     /**取存储
    364      * Gets the amount of storage.
    365      *
    366      * @return amount of storage
    367      *
    368      * @pre $none
    369      * @post $none
    370      */
    371     public long getSize() {
    372         return size;
    373     }
    374 
    375     /**设置存储
    376      * Sets the amount of storage.
    377      *
    378      * @param size new amount of storage
    379      *
    380      * @pre size > 0
    381      * @post $none
    382      */
    383     public void setSize(long size) {
    384         this.size = size;
    385     }
    386 
    387     /**取VMM
    388      * Gets the VMM.
    389      *
    390      * @return VMM
    391      *
    392      * @pre $none
    393      * @post $none
    394      */
    395     public String getVmm(){
    396         return vmm;
    397     }
    398 
    399     /**设置VMM
    400      * Sets the VMM.
    401      *
    402      * @param vmm the new VMM
    403      */
    404     protected void setVmm(String vmm) {
    405         this.vmm = vmm;
    406     }
    407 
    408     /**设置主机
    409      * Sets the host that runs this VM.
    410      *
    411      * @param host Host running the VM
    412      *
    413      * @pre host != $null
    414      * @post $none
    415      */
    416     public void setHost(Host host){
    417         this.host = host;
    418     }
    419 
    420     /**获取主机
    421      * Gets the host.
    422      *
    423      * @return the host
    424      */
    425     public Host getHost() {
    426         return host;
    427     }
    428 
    429     /**虚拟机调度程序
    430      * Gets the vm scheduler.
    431      *
    432      * @return the vm scheduler
    433      */
    434     public CloudletScheduler getCloudletScheduler() {
    435         return cloudletScheduler;
    436     }
    437 
    438     /**设置虚拟机调度程序
    439      * Sets the vm scheduler.
    440      *
    441      * @param cloudletScheduler the new vm scheduler
    442      */
    443     protected void setCloudletScheduler(CloudletScheduler cloudletScheduler) {
    444         this.cloudletScheduler = cloudletScheduler;
    445     }
    446 
    447     /**是否迁移
    448      * Checks if is in migration.
    449      *
    450      * @return true, if is in migration
    451      */
    452     public boolean isInMigration() {
    453         return inMigration;
    454     }
    455 
    456     /**
    457      * Sets the in migration.
    458      *
    459      * @param inMigration the new in migration
    460      */
    461     public void setInMigration(boolean inMigration) {
    462         this.inMigration = inMigration;
    463     }
    464 
    465     /**当前分配大小
    466      * Gets the current allocated size.
    467      *
    468      * @return the current allocated size
    469      */
    470     public long getCurrentAllocatedSize() {
    471         return currentAllocatedSize;
    472     }
    473 
    474     /**
    475      * Sets the current allocated size.
    476      *
    477      * @param currentAllocatedSize the new current allocated size
    478      */
    479     protected void setCurrentAllocatedSize(long currentAllocatedSize) {
    480         this.currentAllocatedSize = currentAllocatedSize;
    481     }
    482 
    483     /**取当前分配的内存
    484      * Gets the current allocated ram.
    485      *
    486      * @return the current allocated ram
    487      */
    488     public int getCurrentAllocatedRam() {
    489         return currentAllocatedRam;
    490     }
    491 
    492     /**设置当前分配的内存
    493      * Sets the current allocated ram.
    494      *
    495      * @param currentAllocatedRam the new current allocated ram
    496      */
    497     public void setCurrentAllocatedRam(int currentAllocatedRam) {
    498         this.currentAllocatedRam = currentAllocatedRam;
    499     }
    500 
    501     /**取当前分配的带宽
    502      * Gets the current allocated bw.
    503      *
    504      * @return the current allocated bw
    505      */
    506     public long getCurrentAllocatedBw() {
    507         return currentAllocatedBw;
    508     }
    509 
    510     /**设置当前分配的带宽
    511      * Sets the current allocated bw.
    512      *
    513      * @param currentAllocatedBw the new current allocated bw
    514      */
    515     public void setCurrentAllocatedBw(long currentAllocatedBw) {
    516         this.currentAllocatedBw = currentAllocatedBw;
    517     }
    518 
    519     /**取当前分配的MIPS
    520      * Gets the current allocated mips.
    521      *
    522      * @return the current allocated mips
    523      */
    524     public List<Double> getCurrentAllocatedMips() {
    525         return currentAllocatedMips;
    526     }
    527 
    528     /**设置当前分配的MIPS
    529      * Sets the current allocated mips.
    530      *
    531      * @param currentAllocatedMips the new current allocated mips
    532      */
    533     public void setCurrentAllocatedMips(List<Double> currentAllocatedMips) {
    534         this.currentAllocatedMips = currentAllocatedMips;
    535     }
    536 
    537     /**是否最近创建
    538      * Checks if is recently created.
    539      *
    540      * @return true, if is recently created
    541      */
    542     public boolean isRecentlyCreated() {
    543         return recentlyCreated;
    544     }
    545 
    546     /**
    547      * Sets the recently created.
    548      *
    549      * @param recentlyCreated the new recently created
    550      */
    551     public void setRecentlyCreated(boolean recentlyCreated) {
    552         this.recentlyCreated = recentlyCreated;
    553     }
    554 
    555 }
  • 相关阅读:
    工厂方法模式
    命名空间的规划
    Download Manager
    Intent(二)
    Intent (一)
    Fragment (一)
    修改环境变量需不需要重启电脑
    Spring mvc和SSH如何取舍?
    ORA-01795: 列表中的最大表达式数为1000的解决方法详解
    apache与tomcate的区别
  • 原文地址:https://www.cnblogs.com/xiaoxiaoweng/p/7412160.html
Copyright © 2020-2023  润新知