120 int tiempo_total = 0;
122 for (
int i = 0; i < num_procesos; i++) {
127 printf(
"=== INICIO DE LA SIMULACIÓN COMPLEJA ===\n");
130 for (
int i = 0; i < tiempo_total; i++) {
132 avanzar_tiempo(&m, procesos, num_procesos, &reloj_sim, algoritmo_actual,
"particiones_tui.txt");
139 printf(
"COLA ESPERA: ");
141 for(
int j=0; j<4; j++) {
142 if (!procesos[j].en_memoria && !procesos[j].finalizado && procesos[j].t_llegada <= reloj_sim-1) {
143 printf(
"[%s req:%d] ", procesos[j].nombre, procesos[j].mem_requerida);
147 if(esperando == 0) printf(
"(Nadie)");
148 printf(
"\n----------------------------------------------------\n");
150 printf(
"Presiona ENTER para continuar...");
187 bool auto_play =
false;
188 float tiempo_acumulado = 0.0f;
189 float velocidad = 1.0f;
192 Color colores_prcesos[] = {
205 int num_colores =
sizeof(colores_prcesos) /
sizeof(colores_prcesos[0]);
208 while (!WindowShouldClose())
212 if (IsKeyPressed(KEY_SPACE))
213 avanzar_tiempo(m, procesos, num_procesos, &reloj_sim, algoritmo_actual,
"particiones.txt");
216 if (IsKeyPressed(KEY_P))
217 auto_play = !auto_play;
221 tiempo_acumulado += GetFrameTime();
222 if (tiempo_acumulado >= velocidad) {
223 avanzar_tiempo(m, procesos, num_procesos, &reloj_sim, algoritmo_actual,
"particiones.txt");
224 tiempo_acumulado = 0.0f;
229 if (IsKeyPressed(KEY_R)) {
241 ClearBackground(RAYWHITE);
244 DrawText(
"Simulador de Gestion de Memoria", 20, 20, 30, DARKGRAY);
245 DrawText(TextFormat(
"Instante Actual: %d", reloj_sim), 20, 60, 20, BLACK);
247 DrawText(
"Pulsa ESPACIO para avanzar, P para auto play, R para resetear", 20, 90, 20, DARKGRAY);
248 DrawText(
"Pulsa ESC para salir", 20, 120, 20, DARKGRAY);
250 if (auto_play) DrawText(
"Auto Play: ON (P para Desactivar)", 20, 150, 20, DARKGREEN);
251 else DrawText(
"Auto Play: OFF (P para Activar)", 20, 150, 20, RED);
253 DrawText(TextFormat(
"Procesos Cargados: %d", num_procesos), 20, 180, 15, DARKGRAY);
265 float ancho = p.
tamano * escala;
269 Color colorHueco = (Color){227, 217, 132, 255};
274 colorBloque = colorHueco;
277 int indice_color = 0;
278 for (
int j = 0; j < num_procesos; j++) {
281 indice_color = j % num_colores;
285 colorBloque = colores_prcesos[indice_color];
295 DrawText(TextFormat(
"%d", p.
tamano), x + 5,
Y_BARRA + 50, 15, DARKGRAY);
311 int ancho_columna = 120;
313 DrawText(
"ESTADO DE PROCESOS:", x_columna, y_inicio_tabla - 25, 20, DARKGRAY);
318 for (
int i = 0; i < num_procesos; i++) {
320 if (y_inicio_tabla + (i * 20) >
WIN_HEIGHT - 20)
break;
323 Color colorEstado = LIGHTGRAY;
324 const char* textoEstado =
"FUTURO";
326 if (procesos[i].finalizado) {
330 else if (procesos[i].en_memoria) {
332 textoEstado =
"ACTIVO";
334 else if (procesos[i].t_llegada <= reloj_sim) {
336 textoEstado =
"COLA DE ESPERA";
339 colorEstado = LIGHTGRAY;
340 textoEstado = TextFormat(
"T=%d", procesos[i].t_llegada);
345 int fila_y = y_inicio_tabla + (i * 20);
348 DrawText(TextFormat(
"%s (%d)", procesos[i].nombre, procesos[i].mem_requerida),
349 x_columna, fila_y, 20, BLACK);
352 if (procesos[i].en_memoria) {
354 float porcentaje = (float)procesos[i].t_restante / procesos[i].t_ejecucion;
355 DrawRectangle(x_columna + 100, fila_y + 5, 50 * porcentaje, 10, BLUE);
356 DrawRectangleLines(x_columna + 100, fila_y + 5, 50, 10, BLACK);
360 DrawText(textoEstado, x_columna + 160, fila_y, 20, colorEstado);
#define MARGEN_DER
Margen derecho de la interfaz.
void test_sim()
Ejecuta la simulación en modo terminal (TUI).
#define WIN_HEIGHT
Alto de la ventana gráfica en píxeles.
#define WIN_WIDTH
Ancho de la ventana gráfica en píxeles.
#define Y_BARRA
Posición Y de la barra de memoria.
#define ALTO_BARRA
Alto de la barra de memoria.
void run_gui(Memoria *m, Proceso *procesos, int num_procesos)
Ejecuta la interfaz gráfica con Raylib.
int main(int argc, char const *argv[])
Punto de entrada principal del programa.
#define MARGEN_IZQ
Margen izquierdo de la interfaz.