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.
|