Gestor de Memoria - Práctica 3 OS 1.0
Simulador de gestión de memoria con algoritmos de Primer Hueco y Siguiente Hueco.
Cargando...
Buscando...
Nada coincide
Referencia del archivo sim_engine.h

Motor de simulación de gestión de memoria con particiones variables. Más...

#include <stdbool.h>
Gráfico de dependencias incluidas en sim_engine.h:
Gráfico de los archivos que directa o indirectamente incluyen a este archivo:

Ir al código fuente de este archivo.

Estructuras de datos

struct  Proceso
 Estructura que representa un proceso en el simulador. Más...
struct  Particion
 Estructura que representa una partición de memoria. Más...
struct  Memoria
 Estructura principal que representa la memoria del sistema. Más...

defines

#define MEMORIA_TOTAL   2000
 Tamaño total de la memoria simulada (en unidades).
#define UNIDAD_MINIMA   100
 Unidad mínima de asignación. Toda memoria se alinea a múltiplos de este valor.
#define MAX_PARTICIONES   50
 Máximo número de particiones simultáneas en memoria.
#define MAX_PROCESOS   100
 Máximo número de procesos que puede manejar la simulación.

Enumeraciones

enum  TipoAlgo { ALGO_PRIMER_HUECO , ALGO_SIGUIENTE_HUECO }
 Algoritmos de asignación de memoria disponibles. Más...

Funciones

void inicializar_memoria (Memoria *m)
 Inicializa la memoria con un único hueco libre.
void mostrar_estado (Memoria *m)
 Muestra el estado actual de la memoria en consola.
int ocupar_memoria (Memoria *m, int indice_hueco, Proceso p)
 Ocupa un hueco de memoria con un proceso.
void compactar (Memoria *m)
 Compacta la memoria uniendo huecos adyacentes.
bool liberar_proceso (Memoria *m, char *nombre_proceso)
 Libera un proceso de la memoria.
int buscar_hueco (Memoria *m, int mem_requerida, TipoAlgo tipo_algo)
 Busca un hueco adecuado según el algoritmo especificado.
int alinear_size (int size)
 Alinea un tamaño a múltiplos de UNIDAD_MINIMA.
bool asignar_proceso (Memoria *m, Proceso p, TipoAlgo tipo_algo)
 Asigna un proceso a la memoria.
void avanzar_tiempo (Memoria *m, Proceso procesos[], int num_procesos, int *reloj_actual, TipoAlgo algo, const char *ruta_log)
 Avanza un tick en la simulación.

Descripción detallada

Motor de simulación de gestión de memoria con particiones variables.

Este módulo implementa la lógica central del simulador, incluyendo:

  • Gestión de particiones de memoria (asignación/liberación)
  • Algoritmos First Fit y Next Fit
  • Compactación de huecos adyacentes
  • Alineación de memoria a múltiplos de UNIDAD_MINIMA
Autor
Julian Hinojosa Gil
Fecha
2025
Versión
1.0

Definición en el archivo sim_engine.h.

Documentación de enumeraciones

◆ TipoAlgo

enum TipoAlgo

Algoritmos de asignación de memoria disponibles.

Ver también
buscar_hueco()
asignar_proceso()
Valores de enumeraciones
ALGO_PRIMER_HUECO 

First Fit: busca desde el inicio de memoria

ALGO_SIGUIENTE_HUECO 

Next Fit: busca desde la última posición asignada

Ejemplos
/Users/julianhinojosagil/Documents/Dev/noob-code/UA/year-2/OS/practica3/src/sim_engine.h.

Definición en la línea 102 del archivo sim_engine.h.

Documentación de funciones

◆ alinear_size()

int alinear_size ( int size)

Alinea un tamaño a múltiplos de UNIDAD_MINIMA.

Redondea hacia arriba para garantizar que la memoria asignada sea siempre múltiplo de 100.

Parámetros
[in]sizeTamaño solicitado original
Devuelve
Tamaño alineado (múltiplo de UNIDAD_MINIMA)
Ejemplos:
  • alinear_size(50) → 100
  • alinear_size(100) → 100
  • alinear_size(243) → 300

Definición en la línea 151 del archivo sim_engine.c.

Hace referencia a UNIDAD_MINIMA.

Referenciado por asignar_proceso().

Gráfico de llamadas a esta función:

◆ asignar_proceso()

bool asignar_proceso ( Memoria * m,
Proceso p,
TipoAlgo tipo_algo )

Asigna un proceso a la memoria.

Realiza el flujo completo de asignación:

  1. Alinea la memoria requerida
  2. Busca un hueco según el algoritmo
  3. Ocupa el hueco encontrado
Parámetros
[in,out]mPuntero a la estructura de memoria
[in]pProceso a asignar
[in]tipo_algoAlgoritmo de búsqueda a usar
Devuelve
true si se asignó correctamente
false si no hay espacio suficiente
Ver también
alinear_size(), buscar_hueco(), ocupar_memoria()

Definición en la línea 167 del archivo sim_engine.c.

Hace referencia a alinear_size(), buscar_hueco(), Proceso::mem_requerida, Proceso::nombre y ocupar_memoria().

Referenciado por avanzar_tiempo().

Gráfico de llamadas de esta función:
Gráfico de llamadas a esta función:

◆ avanzar_tiempo()

void avanzar_tiempo ( Memoria * m,
Proceso procesos[],
int num_procesos,
int * reloj_actual,
TipoAlgo algo,
const char * ruta_log )

Avanza un tick en la simulación.

Ejecuta la lógica de un instante de tiempo:

  1. Envejece procesos en memoria (decrementa t_restante)
  2. Finaliza procesos cuyo tiempo restante llegó a 0
  3. Intenta cargar nuevos procesos de la cola
  4. Guarda el estado en el log
  5. Incrementa el reloj
Parámetros
[in,out]mPuntero a la estructura de memoria
[in,out]procesosArray de procesos a gestionar
[in]num_procesosNúmero de procesos en el array
[in,out]reloj_actualPuntero al reloj de simulación
[in]algoAlgoritmo de asignación a utilizar
[in]ruta_logRuta del archivo de log para guardar estado
Postcondición
(*reloj_actual) se incrementa en 1

Definición en la línea 189 del archivo sim_engine.c.

Hace referencia a asignar_proceso(), Proceso::en_memoria, Proceso::finalizado, guardar_estado(), liberar_proceso(), Proceso::t_ejecucion y Proceso::t_restante.

Referenciado por run_gui() y test_sim().

Gráfico de llamadas de esta función:
Gráfico de llamadas a esta función:

◆ buscar_hueco()

int buscar_hueco ( Memoria * m,
int mem_requerida,
TipoAlgo tipo_algo )

Busca un hueco adecuado según el algoritmo especificado.

Implementa los algoritmos:

  • First Fit: Busca desde el inicio (O(n) peor caso)
  • Next Fit: Busca desde última posición (búsqueda circular)
Parámetros
[in]mPuntero a la estructura de memoria
[in]mem_requeridaMemoria requerida (ya alineada)
[in]tipo_algoAlgoritmo a utilizar
Devuelve
Índice del hueco encontrado (0 a cant_particiones-1)
-1 si no hay hueco suficiente

Definición en la línea 118 del archivo sim_engine.c.

Hace referencia a ALGO_PRIMER_HUECO, ALGO_SIGUIENTE_HUECO, Memoria::cant_particiones, Particion::estado, Memoria::particiones, Particion::tamano y Memoria::ultimo_indice_asignado.

Referenciado por asignar_proceso().

Gráfico de llamadas a esta función:

◆ compactar()

void compactar ( Memoria * m)

Compacta la memoria uniendo huecos adyacentes.

Recorre las particiones y fusiona huecos consecutivos en uno solo. Se llama automáticamente después de liberar un proceso.

Parámetros
[in,out]mPuntero a la estructura de memoria
Postcondición
No hay dos huecos consecutivos en el array
cant_particiones puede disminuir

Definición en la línea 79 del archivo sim_engine.c.

Hace referencia a Memoria::cant_particiones, Particion::estado, Particion::nombre_proceso, Memoria::particiones y Particion::tamano.

Referenciado por liberar_proceso().

Gráfico de llamadas a esta función:

◆ inicializar_memoria()

void inicializar_memoria ( Memoria * m)

Inicializa la memoria con un único hueco libre.

Configura la memoria con una sola partición de tipo hueco que ocupa todo el espacio disponible (MEMORIA_TOTAL).

Parámetros
[out]mPuntero a la estructura de memoria a inicializar
Precondición
m != NULL
Postcondición
m->cant_particiones == 1
m->particiones[0].tamano == MEMORIA_TOTAL

Definición en la línea 7 del archivo sim_engine.c.

Hace referencia a Memoria::cant_particiones, Particion::dir_inicio, Particion::estado, MEMORIA_TOTAL, Particion::nombre_proceso, Memoria::particiones, Particion::tamano y Memoria::ultimo_indice_asignado.

Referenciado por main(), run_gui() y test_sim().

Gráfico de llamadas a esta función:

◆ liberar_proceso()

bool liberar_proceso ( Memoria * m,
char * nombre_proceso )

Libera un proceso de la memoria.

Busca el proceso por nombre, lo convierte en hueco y compacta.

Parámetros
[in,out]mPuntero a la estructura de memoria
[in]nombre_procesoNombre del proceso a liberar
Devuelve
true si se encontró y liberó el proceso
false si el proceso no estaba en memoria
Nota
Llama automáticamente a compactar() tras liberar

Definición en la línea 100 del archivo sim_engine.c.

Hace referencia a Memoria::cant_particiones, compactar(), Particion::dir_inicio, Particion::estado, Particion::nombre_proceso y Memoria::particiones.

Referenciado por avanzar_tiempo().

Gráfico de llamadas de esta función:
Gráfico de llamadas a esta función:

◆ mostrar_estado()

void mostrar_estado ( Memoria * m)

Muestra el estado actual de la memoria en consola.

Imprime cada partición en formato: [dir_inicio nombre tamano]

Parámetros
[in]mPuntero a la estructura de memoria
Nota
Solo para depuración/TUI, no afecta el estado

Definición en la línea 23 del archivo sim_engine.c.

Hace referencia a Memoria::cant_particiones, Particion::dir_inicio, Particion::nombre_proceso, Memoria::particiones y Particion::tamano.

Referenciado por test_sim().

Gráfico de llamadas a esta función:

◆ ocupar_memoria()

int ocupar_memoria ( Memoria * m,
int indice_hueco,
Proceso p )

Ocupa un hueco de memoria con un proceso.

Maneja dos casos:

  • Ajuste exacto: El proceso ocupa todo el hueco
  • División: Se crea una nueva partición con el espacio sobrante
Parámetros
[in,out]mPuntero a la estructura de memoria
[in]indice_huecoÍndice del hueco en el array de particiones
[in]pProceso a asignar (se usa nombre y mem_requerida)
Devuelve
1 si se asignó correctamente
0 si hubo error (hueco ocupado, tamaño insuficiente o array lleno)
Precondición
0 <= indice_hueco < m->cant_particiones
m->particiones[indice_hueco].estado == 0 (es un hueco)
Atención
No verifica si el proceso ya existe en memoria

Definición en la línea 31 del archivo sim_engine.c.

Hace referencia a Memoria::cant_particiones, Particion::dir_inicio, Particion::estado, MAX_PARTICIONES, Proceso::mem_requerida, Proceso::nombre, Particion::nombre_proceso, Memoria::particiones, Particion::tamano y Memoria::ultimo_indice_asignado.

Referenciado por asignar_proceso().

Gráfico de llamadas a esta función: