31. Memoria continua
Este desafío conceptualiza la gestión de un bloque de "memoria continua" y cómo se asignan y liberan fragmentos dentro de él. No se trata de manipular memoria real del sistema, sino de simular un gestor de memoria simple.
Crea una función o conjunto de funciones que simule un bloque de memoria como una lista o tupla, y permita: 1. asignar(tamaño): Encontrar un bloque contiguo de tamaño unidades de memoria disponible y "asignarlo", marcándolo como ocupado. Devuelve el índice de inicio del bloque asignado o None si no hay espacio. 2. liberar(inicio, tamaño): Marcar un bloque previamente asignado como disponible.
# Ejemplo de cómo podría usarse (representación simple de memoria)
# memoria_simulada = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # 0 = libre, 1 = ocupado
def inicializar_memoria(tamaño_total: int) -> list[int]:
# Inicializa un bloque de memoria todo libre
return [0] * tamaño_total
def asignar_memoria(memoria: list[int], tamaño: int) -> tuple[list[int], int]:
# Busca un bloque libre y lo "ocupa". Devuelve la nueva memoria y el índice de inicio.
pass
def liberar_memoria(memoria: list[int], inicio: int, tamaño: int) -> list[int]:
# Libera un bloque ocupado. Devuelve la nueva memoria.
pass
# Ejemplo de flujo
# mem = inicializar_memoria(10)
# mem, idx1 = asignar_memoria(mem, 3) # mem: [1,1,1,0,0,0,0,0,0,0], idx1: 0
# mem, idx2 = asignar_memoria(mem, 4) # mem: [1,1,1,1,1,1,1,0,0,0], idx2: 3
# mem = liberar_memoria(mem, idx1, 3) # mem: [0,0,0,1,1,1,1,0,0,0]
# mem, idx3 = asignar_memoria(mem, 2) # mem: [0,0,0,1,1,1,1,1,1,0], idx3: 7
Ratoncito
Implementa las funciones asignar_memoria (usando un enfoque de "first-fit", es decir, el primer bloque disponible que quepa) y liberar_memoria. La memoria se representará con una lista donde 0 es libre y 1 es ocupado.
Dragón
Mejora el algoritmo de asignación:
-
Implementa "best-fit" (encuentra el bloque libre más pequeño que quepa).
-
Implementa la "compactación" de memoria, donde los bloques ocupados se mueven para consolidar el espacio libre.
-
Considera la posibilidad de "fragmentación externa" y cómo el
first-fitobest-fitpueden contribuir a ella.
Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.
Apóyame en Ko-fi