37 printf(
"ERROR: no se puede asignar el proceso \n");
138 for (
int j = 0; j < total; j++) {
140 int i = (inicio + j) % total;
156 int bloques = size / 100;
160 tam_final = bloques * 100;
173 printf(
"[DEBUG Alineacion] Proceso %s pide %d pero ocupara %d\n", p.
nombre, p.
mem_requerida, tam_real);
190 printf(
"\n-----INSTANTE %d----\n", *reloj_actual);
193 for (
int i = 0; i < num_procesos; i++) {
195 if (procesos[i].en_memoria && !procesos[i].finalizado) {
197 printf(
"[DEBUG Vida] %s tiene %d ticks restantes.\n", procesos[i].nombre , procesos[i].t_restante);
201 if (procesos[i].t_restante <= 0) {
202 printf(
"-> FIN: El proceso %s ha terminado. Liberando memoria...\n", procesos[i].nombre);
215 for (
int i = 0; i < num_procesos; i++) {
217 if (!procesos[i].en_memoria && !procesos[i].finalizado && procesos[i].t_llegada <= *reloj_actual) {
218 printf(
"-> LLEGADA: %s intenta entrar (Requiere %d)\n", procesos[i].nombre, procesos[i].mem_requerida);
222 printf(
"EXITO: %s asignado en memoria \n", procesos[i].nombre);
228 printf(
"ESPERA: No hay hueco para %s. Esperara al siguente tick \n", procesos[i].nombre);
void guardar_estado(const char *ruta, Memoria *m, int instante)
Guarda el estado actual de la memoria en un archivo de log.
Módulo de entrada/salida para la simulación de memoria.
Librería de utilidades para operaciones de E/S con descriptores de fichero.
#define MEMORIA_TOTAL
Tamaño total de la memoria simulada (en unidades).
#define UNIDAD_MINIMA
Unidad mínima de asignación. Toda memoria se alinea a múltiplos de este valor.
#define MAX_PARTICIONES
Máximo número de particiones simultáneas en 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.
bool asignar_proceso(Memoria *m, Proceso p, TipoAlgo tipo_algo)
Asigna un proceso a la memoria.
int ocupar_memoria(Memoria *m, int indice_hueco, Proceso p)
Ocupa un hueco de memoria con un proceso.
void mostrar_estado(Memoria *m)
Muestra el estado actual de la memoria en consola.
void inicializar_memoria(Memoria *m)
Inicializa la memoria con un único hueco libre.
int buscar_hueco(Memoria *m, int mem_requerida, TipoAlgo tipo_algo)
Busca un hueco adecuado según el algoritmo especificado.
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 alinear_size(int size)
Alinea un tamaño a múltiplos de UNIDAD_MINIMA.
Motor de simulación de gestión de memoria con particiones variables.
TipoAlgo
Algoritmos de asignación de memoria disponibles.
Estructura principal que representa la memoria del sistema.
int ultimo_indice_asignado
Particion particiones[MAX_PARTICIONES]
Estructura que representa una partición de memoria.
Estructura que representa un proceso en el simulador.