Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- class Cache:
- tipmap = 0
- conjunto = 0
- quantlinhas = 0
- npalavraslinha = 0
- metodoescrita = 0
- polsub = 0
- trace = ""
- index = ""
- indexdef = ""
- hit = 0
- miss =0
- barramento = 0
- Vet = []
- tag = ""
- def tracoBinario(self):
- '''transforma o trço de memória de hexadecimal para binário'''
- self.trace = bin(int(self.trace,16))[2:].zfill(int(self.index))
- def indexsize(self):
- '''calcula o npumero de bits necessários para representar o index'''
- self.index = math.log(self.quantlinhas, 2)
- def makeIndexdef(self):
- '''calcula o index do traço de memória'''
- for i in range(int((len(self.trace)) - int(self.index) - 2)*4, (len(self.trace) - 3)*4, 1):
- self.indexdef += self.trace[i]
- def maketag(self):
- for i in range(3, (len(self.trace)-int(self.index-3)*4)):
- self.tag += self.trace[i]
- def hitmiss(self):
- '''calcula os hit e miss, além do número de acessos ao barramento'''
- if self.tipmap == 0:
- '''mapeamento direto'''
- self.Vet = [self.quantlinhas]
- self.makeIndexdef()
- self.tracoBinario()
- self.indexsize()
- self.maketag()
- while self.trace != "fim":
- if self.trace == 0:
- pass
- else:
- if self.trace[1] == "L":
- '''Carregamento de dados'''
- if not self.Vet[int(self.indexdef,2)]:
- self.miss += 1
- if self.polsub == 0:
- self.barramento += 1
- self.Vet[int(self.indexdef, 2)] = self.tag
- else:
- if self.Vet[int(self.indexdef,2)] == self.tag:
- self.hit +=1
- else:
- self.miss+=1
- self.Vet[int(self.indexdef,2)] = self.tag
- elif self.trace[1] == 'S':
- '''Armazenamento de dados'''
- if self.Vet[int(self.indexdef,2)]:
- self.barramento += 1
- self.Vet[int(self.indexdef, 2)] = self.tag
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement