Question: here is my log file and python code I am simulating mesi protocol, lecturer said there is a small bug I cannot find it can

here is my log file and python code I am simulating mesi protocol, lecturer said there is a small bug
I cannot find it can you spot any bug here
C3 WR 41 at address 7- Hit
C1 WR 48 at address 10- Hit
C1 WR 10 at address 10- Hit
C1 RD None at address 11- Miss
C2 RD None at address 0- Miss
C3 WR 50 at address 14- Hit
C0 WR 68 at address 7- Hit
C1 RD None at address 8- Miss
C2 WR 39 at address 6- Hit
C3 RD None at address 0- Miss
C0 WR 41 at address 9- Hit
C3 WR 14 at address 10- Hit
C0 WR 17 at address 5- Hit
C3 WR 79 at address 8- Hit
C0 RD None at address 15- Miss
C3 RD None at address 2- Miss
C2 RD None at address 0- Miss
C3 RD None at address 6- Miss
C1 RD None at address 4- Miss
C0 WR 8 at address 0- Hit
C3 WR 65 at address 13- Hit
C2 RD None at address 14- Miss
C2 WR 24 at address 10- Hit
C2 RD None at address 3- Miss
C0 RD None at address 12- Miss
C0 RD None at address 10- Miss
C1 WR 69 at address 4- Hit
C1 RD None at address 15- Miss
C1 WR 83 at address 2- Hit
C1 WR 32 at address 6- Hit
C1 RD None at address 15- Miss
C3 RD None at address 12- Miss
C0 RD None at address 11- Miss
C0 WR 53 at address 6- Hit
C1 RD None at address 11- Miss
C2 RD None at address 4- Miss
C0 RD None at address 10- Miss
C0 RD 8 at address 12- Hit
class MESIProtocol:
def __init__(self, cores):
self.cores = cores
def read(self, core, address):
sharing_cores =[c for c in self.cores if c != core and self.find_line_in_cache(c.cache, address)]
line = self.find_line_in_cache(core.cache, address)
if not line:
line = self.load_line_from_memory(core, address, sharing_cores)
if line.state =='I':
if any(c.cache.find_line_in_cache(address).state =='M' for c in sharing_cores):
for c in sharing_cores:
self.flush_if_modified(c.cache.find_line_in_cache(address))
c.cache.find_line_in_cache(address).state ='S'
line.state ='S' if sharing_cores else 'E'
return line.value
def write(self, core, address, value):
self.invalidate_others(core, address)
line = self.find_line_in_cache(core.cache, address)
if not line:
line = self.load_line_from_memory(core, address)
if line.state =='E' or line.state =='S':
self.flush_if_modified(line)
line.value = value
line.state ='M'
def invalidate_others(self, core, address):
for other_core in self.cores:
if other_core != core:
line = self.find_line_in_cache(other_core.cache, address)
if line and line.state !='I':
self.flush_if_modified(line)
line.state ='I'
def load_line_from_memory(self, core, address, sharing_cores):
is_shared = any(self.find_line_in_cache(c.cache, address) for c in sharing_cores if c != core)
line = core.cache.replace_line(core.cache.find_line(address), address, core.memory.storage[address], False)
line.state ='S' if is_shared else 'E'
return line
def find_line_in_cache(self, cache, address):
set_index = cache.find_line(address)
set_= cache.sets[set_index]
for line in set_:
if line.address == address and line.valid:
return line
return None
def flush_if_modified(self, line):
if line.state =='M':
line.memory.storage[line.address]= line.value # Flush to memory
line.dirty = False

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!