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 + -
显示快捷键?