Skip to content

Instantly share code, notes, and snippets.

@jarodsim
Created December 7, 2024 20:45
Show Gist options
  • Save jarodsim/587abe0c2e8046941455be9222f893bd to your computer and use it in GitHub Desktop.
Save jarodsim/587abe0c2e8046941455be9222f893bd to your computer and use it in GitHub Desktop.
Cálculo do número das páginas virtuais
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