kirikiri g线上的魔王:GridSim例子二:实现如何创建网格用户,以及网格作业的创建

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 08:43:15
 /*
 * 这个例子主要实现如何创建网格用户,以及网格作业的创建
 */
/*
 * 步骤:
 * 1.创建一个网格任务列表,通过自己编写的方法createGridlet()方法来实现
   GridletList list = createGridlet();
   1.1 在createGridlet()方法内,创建一个存储网格作业的容器 
       GridletList list = new GridletList();
   1.2 在没有GridSimRandom类的帮助下,人为的创建三个网格作业(任务)
       Gridlet gridlet1 = new Gridlet(id, length, file_size, output_size);
   1.3 我们在类GridSimRandom and GriSimStandardPE的帮助下创建5个作业
 * 2.创建一个网格用户列表 ResourceUserList userList = createGridUser(list);然后给这些用户指派作业
 * 3.打印出网格任务列表   printGridletList(list);
 */
 import java.util.*;
import gridsim.*;class example21 {
    public static void main(String[] agrs)
    {
     System.out.println("开始怎样创建网格用户的例子");
     System.out.println();
     try
     {
      //创建一个网格任务列表
      GridletList list = createGridlet();
      System.out.println("创建 " + list.size() + " 网格作业");
      ResourceUserList userList = createGridUser(list);
      System.out.println("创建 " + userList.size() + "网格用户");
      //打印出网格任务
      printGridletList(list);
      System.out.println("完成这个例子");
     }
     catch (Exception e)
     {
      e.printStackTrace();
      System.out.println("发生的错误");
     }
    }
    /**
     * 一个网格用户有许多要处理的作业
     * 这个方法告诉你用或者不用GridSimRandom类去创建网格作业
     * @return a GridletList 对象
     */
    private static GridletList createGridlet()
    {
     //创建一个存储网格作业的容器
     GridletList list = new GridletList();
     //我们在没有GridSimRandom类的帮助下,人为的创建三个网格作业(任务)
     int id = 0;
     double length = 3500.0;
     long file_size = 300;
     long output_size = 300;
     Gridlet gridlet1 = new Gridlet(id, length, file_size, output_size);
     id++;
     Gridlet gridlet2 = new Gridlet(id, 5000, 500, 500);
     id++;
     Gridlet gridlet3 = new Gridlet(id, 9000, 900, 900);
     //把这些作业存放在一个列表中
     list.add(gridlet1);
     list.add(gridlet2);
     list.add(gridlet3);
     //我们在类GridSimRandom and GriSimStandardPE
     //的帮助下创建5个作业
     Random random = new Random();
     //设置PE MIPS Rating
     GridSimStandardPE.setRating(100);
     //创建5个作业
     int count = 5;
     double min_range = 0.10;
     double max_range = 0.50;
     for (int i = 1; i< count+1; i++)
     {
      //作业的长度由random的值决定,当前的MIPS Rating for a PE
      length = GridSimStandardPE.toMIs(random.nextDouble()*output_size);
      // 决定作业文件的大小(100+(10% to 50%))
      file_size = (long) GridSimRandom.real(100, min_range, max_range,
                          random.nextDouble());
      //决定作业输出文件的大小250 + (10% to 50%)
      output_size = (long) GridSimRandom.real(250, min_range, max_range,
                          random.nextDouble());
      //创建一个新的网格作业对象
      Gridlet gridlet = new Gridlet(id+i, length, file_size, output_size);
      //把网格作业添加到列表中
      list.add(gridlet);
     }
     return list;
    }
    /*
     * 创建网格用户,在这个例子里面,我们创建3各用户,然后给这些用户指派作业
     * 返回一个网格用户列表
     */
    private static ResourceUserList createGridUser(GridletList list)
    {
     ResourceUserList userList = new ResourceUserList();
     userList.add(0);    //用户id从0开始
     userList.add(1);
     userList.add(2);
     int userSize = userList.size();
     int gridletSize = list.size();
     int id = 0;
     //指派用户id给特定的作业
     for (int i = 0; i < gridletSize; i++)
     {
      if (i !=0&& i % userSize ==0)  //因为这个例子里面,userSize为3,所以一个用户指派3作业
       id++;
      ((Gridlet) list.get(i)).setUserID(id);
     }
     return userList;
    }
    private static void printGridletList(GridletList list)
    {
     int size = list.size();
     Gridlet gridlet;
     String indent = "  ";  //打印时列之间的距离大小
     System.out.println();
        System.out.println("作业ID" + indent + "用户ID" + indent +
                "长度" + indent + " 文件大小" + indent +
                "输出文件大小");
        for (int i = 0; i < size; i++)
        {
         gridlet = (Gridlet) list.get(i);
         System.out.println(indent + gridlet.getGridletID() + indent +
                    indent + indent + gridlet.getUserID() + indent + indent +
                    (int) gridlet.getGridletLength() + indent + indent +
                    (int) gridlet.getGridletFileSize() + indent + indent +
                    (int) gridlet.getGridletOutputSize() );
        }
    }
} // end class