gridresource.java
来自「一个非常著名的网格模拟器,能够运行网格调度算法!」· Java 代码 · 共 1,005 行 · 第 1/3 页
JAVA
1,005 行
src_id = ( (Integer) ev.get_data() ).intValue(); super.send( super.output, 0.0, ev.get_tag(), new IO_data(policy_.getTotalLoad(), Accumulator.getByteSize(), src_id) ); break; case GridSimTags.RESOURCE_NUM_PE: src_id = ( (Integer) ev.get_data() ).intValue(); int numPE = resource_.getNumPE(); super.send( super.output, 0.0, ev.get_tag(), new IO_data(new Integer(numPE), SIZE, src_id) ); break; case GridSimTags.RESOURCE_NUM_FREE_PE: src_id = ( (Integer) ev.get_data() ).intValue(); int numFreePE = resource_.getNumFreePE(); super.send( super.output, 0.0, ev.get_tag(), new IO_data(new Integer(numFreePE), SIZE, src_id) ); break; // New Gridlet arrives case GridSimTags.GRIDLET_SUBMIT: processGridletSubmit(ev, false); break; // New Gridlet arrives, but the sender asks for an ack case GridSimTags.GRIDLET_SUBMIT_ACK: processGridletSubmit(ev, true); break; // Cancels a previously submitted Gridlet case GridSimTags.GRIDLET_CANCEL: processGridlet(ev, GridSimTags.GRIDLET_CANCEL); break; // Pauses a previously submitted Gridlet case GridSimTags.GRIDLET_PAUSE: processGridlet(ev, GridSimTags.GRIDLET_PAUSE); break; // Pauses a previously submitted Gridlet, but the sender // asks for an acknowledgement case GridSimTags.GRIDLET_PAUSE_ACK: processGridlet(ev, GridSimTags.GRIDLET_PAUSE_ACK); break; // Resumes a previously submitted Gridlet case GridSimTags.GRIDLET_RESUME: processGridlet(ev, GridSimTags.GRIDLET_RESUME); break; // Resumes a previously submitted Gridlet, but the sender // asks for an acknowledgement case GridSimTags.GRIDLET_RESUME_ACK: processGridlet(ev, GridSimTags.GRIDLET_RESUME_ACK); break; // Moves a previously submitted Gridlet to a different resource case GridSimTags.GRIDLET_MOVE: processGridletMove(ev, GridSimTags.GRIDLET_MOVE); break; // Moves a previously submitted Gridlet to a different resource case GridSimTags.GRIDLET_MOVE_ACK: processGridletMove(ev, GridSimTags.GRIDLET_MOVE_ACK); break; // Checks the status of a Gridlet case GridSimTags.GRIDLET_STATUS: processGridletStatus(ev); break; // Ping packet case GridSimTags.INFOPKT_SUBMIT: processPingRequest(ev); break; // other unknown tags are processed by this method default: processOtherEvent(ev); break; } } /** * Process the event for an User who wants to know the status of a Gridlet. * This GridResource will then send the status back to the User. * @param ev a Sim_event object * @pre ev != null * @post $none */ private void processGridletStatus(Sim_event ev) { int gridletId = 0; int userId = 0; int status = -1; try { // if a sender using gridletXXX() methods int data[] = (int[]) ev.get_data(); gridletId = data[0]; userId = data[1]; status = policy_.gridletStatus(gridletId, userId); } // if a sender using normal send() methods catch (ClassCastException c) { try { Gridlet gl = (Gridlet) ev.get_data(); gridletId = gl.getGridletID(); userId = gl.getUserID(); status = policy_.gridletStatus(gridletId, userId); } catch (Exception e) { System.out.println(super.get_name() + ": Error in processing GridSimTags.GRIDLET_STATUS"); System.out.println( e.getMessage() ); return; } } catch (Exception e) { System.out.println(super.get_name() + ": Error in processing GridSimTags.GRIDLET_STATUS"); System.out.println( e.getMessage() ); return; } int[] array = new int[2]; array[0] = gridletId; array[1] = status; int tag = GridSimTags.GRIDLET_STATUS; super.send( super.output, GridSimTags.SCHEDULE_NOW, tag, new IO_data(array, SIZE, userId) ); } /** * Processes a Gridlet based on the event type * @param ev a Sim_event object * @param type event type * @pre ev != null * @pre type > 0 * @post $none */ private void processGridlet(Sim_event ev, int type) { int gridletId = 0; int userId = 0; try { // if a sender using gridletXXX() methods int data[] = (int[]) ev.get_data(); gridletId = data[0]; userId = data[1]; } // if a sender using normal send() methods catch (ClassCastException c) { try { Gridlet gl = (Gridlet) ev.get_data(); gridletId = gl.getGridletID(); userId = gl.getUserID(); } catch (Exception e) { System.out.println(super.get_name() + ": Error in processing Gridlet"); System.out.println( e.getMessage() ); return; } } catch (Exception e) { System.out.println(super.get_name() + ": Error in processing a Gridlet."); System.out.println( e.getMessage() ); return; } // begins executing .... switch (type) { case GridSimTags.GRIDLET_CANCEL: policy_.gridletCancel(gridletId, userId); break; case GridSimTags.GRIDLET_PAUSE: policy_.gridletPause(gridletId, userId, false); break; case GridSimTags.GRIDLET_PAUSE_ACK: policy_.gridletPause(gridletId, userId, true); break; case GridSimTags.GRIDLET_RESUME: policy_.gridletResume(gridletId, userId, false); break; case GridSimTags.GRIDLET_RESUME_ACK: policy_.gridletResume(gridletId, userId, true); break; default: break; } } /** * Process the event for an User who wants to know the move of a Gridlet. * @param ev a Sim_event object * @param type event tag * @pre ev != null * @pre type > 0 * @post $none */ private void processGridletMove(Sim_event ev, int type) { boolean ack = false; if (type == GridSimTags.GRIDLET_MOVE_ACK) { ack = true; } try { // if a sender using gridletMove() methods int data[] = (int[]) ev.get_data(); int gridletId = data[0]; int userId = data[1]; int destId = data[2]; policy_.gridletMove(gridletId, userId, destId, ack); } catch (Exception e) { System.out.println(super.get_name()+": Error in moving a Gridlet."); System.out.println( e.getMessage() ); } } /** * Processes a Gridlet submission * @param ev a Sim_event object * @param ack an acknowledgement * @pre ev != null * @post $none */ private void processGridletSubmit(Sim_event ev, boolean ack) { try { // gets the Gridlet object Gridlet gl = (Gridlet) ev.get_data(); // checks whether this Gridlet has finished or not if (gl.isFinished() == true) { String name = GridSim.getEntityName( gl.getUserID() ); System.out.println(super.get_name() + ": Warning - Gridlet #" + gl.getGridletID() + " owned by " + name + " is already completed/finished."); System.out.println("Therefore, it is not being executed again"); System.out.println(); // NOTE: If a Gridlet has finished, then it won't be processed. // So, if ack is required, this method sends back a result. // If ack is not required, this method don't send back a result. // Hence, this might cause GridSim to be hanged since waiting // for this Gridlet back. if (ack == true) { int[] array = new int[2]; array[0] = gl.getGridletID(); array[1] = GridSimTags.FALSE; // unique tag = operation tag int tag = GridSimTags.GRIDLET_SUBMIT_ACK; super.send(super.output, GridSimTags.SCHEDULE_NOW, tag, new IO_data(array, SIZE, gl.getUserID()) ); } super.send(super.output, 0, GridSimTags.GRIDLET_RETURN, new IO_data(gl,gl.getGridletOutputSize(),gl.getUserID()) ); return; } // process this Gridlet to this GridResource gl.setResourceParameter(super.get_id(), resource_.getCostPerSec()); policy_.gridletSubmit(gl, ack); } catch (ClassCastException c) { System.out.println(super.get_name() + ".processGridletSubmit(): " + "ClassCastException error."); System.out.println( c.getMessage() ); } catch (Exception e) { System.out.println(super.get_name() + ".processGridletSubmit(): " + "Exception error."); System.out.println( e.getMessage() ); } } /** * Processes a ping request. * @param ev a Sim_event object * @pre ev != null * @post $none */ private void processPingRequest(Sim_event ev) { InfoPacket pkt = (InfoPacket) ev.get_data(); pkt.setTag(GridSimTags.INFOPKT_RETURN); pkt.setDestID( pkt.getSrcID() ); // sends back to the sender super.send( super.output, 0.0, GridSimTags.INFOPKT_RETURN, new IO_data(pkt, pkt.getSize(), pkt.getSrcID()) ); }} // end class
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?