| 
 Hi all, 
I am studing MOESI_CMP_directory and I am really confused 
about the action e_sendData: 
  
  action(e_sendData, "e", desc="Send data from cache to 
requestor") {     peek(requestNetwork_in, RequestMsg) 
{       if (in_msg.RequestorMachine == 
MachineType:L2Cache) {         
enqueue(responseNetwork_out, ResponseMsg, latency="L1_REQUEST_LATENCY") 
{            
***;         
}            
***;       }       else 
{         enqueue(responseNetwork_out, 
ResponseMsg, latency="L1_REQUEST_LATENCY") 
{           ***; 
          out_msg.Destination.add(in_msg.Requestor);           ***;           
out_msg.MessageSize := 
MessageSizeType:ResponseLocal_Data;         
}         DEBUG_EXPR("Sending data to 
L1");       }     }   
} 
  
It seems that the action's "else{***;}" codes are 
used to send data to other processors who request 
L1_GETS. 
But here it uses MessageBuffer requestNetwork_out which are 
connected with L2 cache's corresponding MessageBuffer. 
  
Meanwhile, L1 cache with block state IS can just get data 
message from another MessageBuffer of L1--responseToL1Cache_in,  
So I am confused about how the data message from L1 
owner is transferred to the L1 with IS state. 
  
Thanks. 
 |