public void body()
	    {
	        // Gets the PE's rating for each Machine in the list.
	        // Assumed one Machine has same PE rating.
	        MachineList list = super.resource_.getMachineList();
	        int size = list.size();
	        machineRating_ = new int[size];
	        for (int i = 0; i < size; i++) {
	            machineRating_[i] = super.resource_.getMIPSRatingOfOnePE(i, 0);
	        }

	        // a loop that is looking for internal events only
	        Sim_event ev = new Sim_event();
	        while ( Sim_system.running() )
	        {
	            super.sim_get_next(ev);

	            // if the simulation finishes then exit the loop
	            if (ev.get_tag() == GridSimTags.END_OF_SIMULATION ||
	                super.isEndSimulation())
	            {
	                break;
	            }

	            // Internal Event if the event source is this entity
	            if (ev.get_src() == super.myId_ && gridletInExecList_.size() > 0)
	            {
	                updateGridletProcessing();   // update Gridlets
	                checkGridletCompletion();    // check for finished Gridlets
	            }

	            // Internal Event if the event source is this entity
	            if (ev.get_src() == super.myId_ && gridletQueueList_.size() > 0)
	            {
	                updateGridletProcessing();   // update Gridlets
	                checkGridletCompletion();    // check for finished Gridlets
	                allocateQueueGridlet();		// 	check for new Gridlet allocation
	            }
	        }

	        // CHECK for ANY INTERNAL EVENTS WAITING TO BE PROCESSED
	        while (super.sim_waiting() > 0)
	        {
	            // wait for event and ignore since it is likely to be related to
	            // internal event scheduled to update Gridlets processing
	            super.sim_get_next(ev);
	            logger.log(Level.INFO,super.resName_ +
	                    ".PerfectCheckPointing.body(): ignore internal events");
	        }
	    }