|
Gestor de Memoria - Práctica 3 OS 1.0
Simulador de gestión de memoria con algoritmos de Primer Hueco y Siguiente Hueco.
|
#include "sim_engine.h"#include "ficheros.h"#include "file_utils.h"#include <stdio.h>#include <string.h>
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. | |
| 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.
| [in] | size | Tamaño solicitado original |
Definición en la línea 151 del archivo sim_engine.c.
Hace referencia a UNIDAD_MINIMA.
Referenciado por asignar_proceso().

Asigna un proceso a la memoria.
Realiza el flujo completo de asignación:
| [in,out] | m | Puntero a la estructura de memoria |
| [in] | p | Proceso a asignar |
| [in] | tipo_algo | Algoritmo de búsqueda a usar |
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().


| 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:
| [in,out] | m | Puntero a la estructura de memoria |
| [in,out] | procesos | Array de procesos a gestionar |
| [in] | num_procesos | Número de procesos en el array |
| [in,out] | reloj_actual | Puntero al reloj de simulación |
| [in] | algo | Algoritmo de asignación a utilizar |
| [in] | ruta_log | Ruta del archivo de log para guardar estado |
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().


Busca un hueco adecuado según el algoritmo especificado.
Implementa los algoritmos:
| [in] | m | Puntero a la estructura de memoria |
| [in] | mem_requerida | Memoria requerida (ya alineada) |
| [in] | tipo_algo | Algoritmo a utilizar |
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().

| 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.
| [in,out] | m | Puntero a la estructura de memoria |
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().

| 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).
| [out] | m | Puntero a la estructura de memoria a inicializar |
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().

| 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.
| [in,out] | m | Puntero a la estructura de memoria |
| [in] | nombre_proceso | Nombre del proceso a 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().


| void mostrar_estado | ( | Memoria * | m | ) |
Muestra el estado actual de la memoria en consola.
Imprime cada partición en formato: [dir_inicio nombre tamano]
| [in] | m | Puntero a la estructura de memoria |
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().

Ocupa un hueco de memoria con un proceso.
Maneja dos casos:
| [in,out] | m | Puntero a la estructura de memoria |
| [in] | indice_hueco | Índice del hueco en el array de particiones |
| [in] | p | Proceso a asignar (se usa nombre y mem_requerida) |
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().
