I've never worked with this protocol, but in my view (please correct me
if I'm wrong) it is correct because the request is a GETS, so a
non-exclusive read. The cache receiving the block will store it in the S
state, (transition(IS, Data, S){...}), so the block has not to be
considered dirty for the requesting node; instead, the dirty information
is still held by the sender cache, that changes the state from M to O.
In fact, when the Ownership changes (in case of a GETX forwarded to a
cache that holds a block in either M or O), the action used to provide
the requesting cache with the block is not e_sendData, instead it is
e_sendDataExclusive (transition(M, Fwd_GETX, I){...} and transition(O,
Fwd_GETX, I){...} for example). This action set the Dirty flag of the
outgoing message to the same value of the Dirty flag of the cache tag.
Marco
Hui Li ha scritto:
hello,
the action e_sendData in MOESI_CMP_directory-L1cache.sm always does this:
out_msg.Dirty := false;
so it means that the contents in the cache entry are the same with memory.
however, in transition:
transition(M, Fwd_GETS, O) {
e_sendData;
l_popForwardQueue;
}
the Dirty flag should be true, right? or I missed some point?
regards,
lihui
_______________________________________________
Gems-users mailing list
Gems-users@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/gems-users
Use Google to search the GEMS Users mailing list by adding "site:https://lists.cs.wisc.edu/archive/gems-users/" to your search.
|