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 }
原文地址:https://www.cnblogs.com/xiaoxiaoweng/p/7412160.html