Gestión de Memoria: Técnicas con Bloques Marcados y División Fija
Enviado por Programa Chuletas y clasificado en Geología
Escrito el en español con un tamaño de 3,39 KB
4 Estructura de Bloques Marcados
Estructura de los bloques: La zona de datos incluye la zona libre y los enlaces.
Alojamiento
Admite las mismas estrategias que la estructura simple.
Desalojo
- Bloques anterior y posterior ocupados: Se marca el bloque como libre y se asignan los enlaces para insertar el bloque al comienzo de la lista de bloques libres.
- Bloque anterior libre y posterior ocupado: Se amplía el bloque anterior uniéndole el bloque a liberar. Los valores de los enlaces corresponden a los del bloque anterior (ahora ampliado).
- Bloque anterior ocupado y posterior libre: Se amplía el bloque posterior uniéndole el bloque a liberar. Los valores de los enlaces corresponden a los del bloque posterior (ahora ampliado y reposicionado lógicamente).
- Bloques anterior y posterior libres: Se extrae el bloque posterior de la lista de libres (actualizando los enlaces correspondientes). Se amplía el bloque anterior con el espacio del bloque a liberar y el del bloque posterior. Los enlaces son los correspondientes al bloque anterior (ahora ampliado).
5 Estructura de División Fija
Solo admite bloques de ciertos tamaños predefinidos y mantiene listas doblemente enlazadas para cada uno de los tamaños disponibles.
Tamaños Disponibles
Se definen generalmente mediante series:
- Bytes de control (C): Información necesaria en cada bloque (estado libre/ocupado, tamaño, código de división, enlaces).
- Serie de Fibonacci: Fn = Fn-1 + Fn-2 + C.
- Serie de división binaria (Buddy System): Fn = Fn-1 + Fn-1 + C (tamaños potencia de 2).
Alojamiento
- Dada una petición de tamaño L, buscar el tamaño Fn en la serie que sea igual o inmediatamente superior (Fn-1 < L <= Fn).
- Si no hay bloques libres de tamaño Fn, buscar el primer bloque disponible de tamaño mayor (Fm, donde m > n).
- Si se encuentra un bloque Fm > Fn, dividir recursivamente el bloque Fm en subbloques ("compañeros" o "buddies") siguiendo la serie (binaria o Fibonacci) hasta obtener un bloque de tamaño Fn. Actualizar los enlaces para mantener las listas de libres de cada tamaño.
- Cada vez que se divide un bloque, se marca adecuadamente cada subbloque (por ejemplo, con un código de división o identificando si es izquierdo/derecho).
Desalojo
- Marcar el bloque como libre.
- Determinar el tamaño del bloque liberado y buscar su bloque "compañero" (el otro bloque resultante de la división que los originó). La forma de encontrarlo depende de si es un bloque izquierdo o derecho y de la serie utilizada (binaria o Fibonacci).
- Si el bloque compañero también está libre, fusionar ambos bloques para formar el bloque original de mayor tamaño del que provenían.
- Repetir el proceso de fusión hacia arriba (con el nuevo bloque fusionado y su compañero) hasta que el compañero esté ocupado o se alcance el tamaño máximo.
- Actualizar los enlaces de las listas de libres a medida que se realizan las operaciones de liberación y fusión.