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-fit o best-fit pueden contribuir a ella.

Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.

¿Me invitas a un café?

Visitantes en tiempo real

Estás solo: 🐱