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.c
#include "sim_engine.h"
#include "ficheros.h"
#include "file_utils.h"
#include <stdio.h>
#include <string.h>
Gráfico de dependencias incluidas en sim_engine.c:

Ir al código fuente de este archivo.

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.

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
Ejemplos
/Users/julianhinojosagil/Documents/Dev/noob-code/UA/year-2/OS/practica3/src/sim_engine.h.

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()
Ejemplos
/Users/julianhinojosagil/Documents/Dev/noob-code/UA/year-2/OS/practica3/src/sim_engine.h.

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
Ejemplos
/Users/julianhinojosagil/Documents/Dev/noob-code/UA/year-2/OS/practica3/src/sim_engine.h.

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
Ejemplos
/Users/julianhinojosagil/Documents/Dev/noob-code/UA/year-2/OS/practica3/src/sim_engine.h.

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
Ejemplos
/Users/julianhinojosagil/Documents/Dev/noob-code/UA/year-2/OS/practica3/src/sim_engine.h.

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
Ejemplos
/Users/julianhinojosagil/Documents/Dev/noob-code/UA/year-2/OS/practica3/src/sim_engine.h.

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
Ejemplos
/Users/julianhinojosagil/Documents/Dev/noob-code/UA/year-2/OS/practica3/src/sim_engine.h.

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
Ejemplos
/Users/julianhinojosagil/Documents/Dev/noob-code/UA/year-2/OS/practica3/src/sim_engine.h.

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
Ejemplos
/Users/julianhinojosagil/Documents/Dev/noob-code/UA/year-2/OS/practica3/src/sim_engine.h.

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: