Created
December 7, 2024 20:45
-
-
Save jarodsim/587abe0c2e8046941455be9222f893bd to your computer and use it in GitHub Desktop.
Cálculo do número das páginas virtuais
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
enderecos = [4669, 2227, 13916, 34587, 48870, 12608, 49225] | |
tamanho_pagina = 4096 # 4 KiB | |
tlb = [ | |
[1, 11, 12], | |
[1, 7, 2004], | |
[1, 3, 2006], | |
[2000, 4, 9] | |
] | |
tabela_paginas = [ | |
[1, 5], | |
[0, "Disco"], | |
[0, "Disco"], | |
[1, 6], | |
[1, 9], | |
[1, 11], | |
[0, "Disco"], | |
[1, 4], | |
[0, "Disco"], | |
[0, "Disco"], | |
[1, 3], | |
[1, 12] | |
] | |
def simular_memoria(enderecos, tamanho_pagina, tlb, tabela_paginas): | |
resultado = [] | |
tlb_uso = [0, 1, 2, 3] | |
for acesso in enderecos: | |
vpn = acesso // tamanho_pagina | |
tlb_hit = False | |
tabela_hit = False | |
falta_pagina = False | |
for i, entrada in enumerate(tlb): | |
if entrada[0] == 1 and entrada[1] == vpn: | |
tlb_hit = True | |
tlb_uso[i] = max(tlb_uso) + 1 | |
break | |
if not tlb_hit: | |
if vpn < len(tabela_paginas) and tabela_paginas[vpn][0] == 1: | |
tabela_hit = True | |
num_fisico = tabela_paginas[vpn][1] | |
lru_index = tlb_uso.index(min(tlb_uso)) | |
tlb[lru_index] = [1, vpn, num_fisico] | |
tlb_uso[lru_index] = max(tlb_uso) + 1 | |
else: | |
# Falta de página | |
falta_pagina = True | |
proximo_num_fisico = max( | |
[entrada[2] for entrada in tlb if entrada[0] == 1] + | |
[pagina[1] for pagina in tabela_paginas if isinstance(pagina[1], int)] | |
) + 1 | |
if vpn >= len(tabela_paginas): | |
tabela_paginas.extend([[0, "Disco"]] * (vpn - len(tabela_paginas) + 1)) | |
tabela_paginas[vpn] = [1, proximo_num_fisico] | |
lru_index = tlb_uso.index(min(tlb_uso)) | |
tlb[lru_index] = [1, vpn, proximo_num_fisico] | |
tlb_uso[lru_index] = max(tlb_uso) + 1 | |
resultado.append({ | |
"Endereço": acesso, | |
"VPN": vpn, | |
"Acerto TLB": tlb_hit, | |
"Acerto Tabela": tabela_hit, | |
"Falta Página": falta_pagina, | |
"TLB Final": tlb.copy(), | |
"Tabela Final": tabela_paginas.copy() | |
}) | |
return resultado | |
resultado = simular_memoria(enderecos, tamanho_pagina, tlb, tabela_paginas) | |
df_resultado = pd.DataFrame([ | |
{ | |
"Endereço": r["Endereço"], | |
"VPN": r["VPN"], | |
"Acerto na TLB": r["Acerto TLB"], | |
"Acerto na Tabela de Página": r["Acerto Tabela"], | |
"Falta de Página": r["Falta Página"] | |
} for r in resultado | |
]) | |
df_resultado |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment