Loading repository data…
Loading repository data…
marichu-kt / repository
SecureBank es un proyecto académico que simula un sistema bancario concurrente en C, permitiendo operaciones como depósitos, retiros, transferencias y consultas de saldo. Está diseñado para manejar múltiples usuarios simultáneamente utilizando procesos, hilos, semáforos y comunicación entre procesos en Linux.
Asignatura: Sistemas Operativos (Curso 2024-2025)
Práctica Final de Asignatura – Parte I
| Nombre Completo | Usuario GitHub | Rol en el Proyecto |
|---|---|---|
| Mario Martínez | @marichu-kt | Desarrollador |
El proyecto SecureBank consiste en un sistema bancario concurrente avanzado desarrollado en C sobre Linux. El objetivo es gestionar múltiples usuarios, realizar transacciones simultáneas y detectar patrones de actividad sospechosos en tiempo real.
Se aprovechan conceptos clave de Sistemas Operativos:
fork())pthread)Debes crear un sistema bancario concurrente que:
Para ello, se propone aprovechar características avanzadas de Linux:
sem_open)El lenguaje C permitirá un control de bajo nivel y acceso directo al sistema operativo.
init_cuentas.c):
cuentas.dat con datos iniciales.struct Cuenta {
int numero_cuenta;
char titular[50];
float saldo;
int num_transacciones;
};
1001,John Doe,5000.00,0
1002,Jane Smith,3000.00,0
sem_t *semaforo = sem_open("/cuentas_sem", O_CREAT, 0644, 1);
banco.c):
fork() para crear el proceso hijo que ejecuta el menú de usuario.while(1) con printf y scanf para seleccionar operación:
1. Depósito
2. Retiro
3. Transferencia
4. Consultar saldo
5. Salir
pthread_t para manejar la operación.pthread_create(&hilo, NULL, ejecutar_operacion, (void *)&datos_operacion);sem_wait(semaforo);
// Actualizar archivo
sem_post(semaforo);
cuentas.dat en modo rb+, busca la posición de la cuenta, y la reescribe con los cambios de saldo o transacciones.monitor.c):
fork()).msgrcv) u otro método.write(pipe_monitor_hijos[1], "ALERTA: Transacción sospechosa en cuenta 1002\n", 50);
sem_unlink("/cuentas_sem");
transacciones.log):
[2024-12-01 12:00:00] Depósito en cuenta 1001: +1000.00
[2024-12-01 12:01:00] Retiro en cuenta 1002: -500.00
cuentas.dat con datos de ejemplo.config.txtDebe incluir parámetros como:
LIMITE_RETIRO: monto máximo por cada retiro.LIMITE_TRANSFERENCIA: monto máximo por transferencia.UMBRAL_RETIROS: número de retiros consecutivos altos para generar alerta.UMBRAL_TRANSFERENCIAS: número de transferencias repetitivas entre las mismas cuentas.NUM_HILOS: número máximo de hilos simultáneos por proceso hijo.ARCHIVO_CUENTAS: ruta al archivo binario de cuentas (ej. cuentas.dat).ARCHIVO_LOG: ruta al archivo de log (ej. transacciones.log).Ejemplo de config.txt:
# Límites de Operaciones
LIMITE_RETIRO=5000
LIMITE_TRANSFERENCIA=10000
# Umbrales de Detección de Anomalías
UMBRAL_RETIROS=3
UMBRAL_TRANSFERENCIAS=5
# Parámetros de Ejecución
NUM_HILOS=4
ARCHIVO_CUENTAS=cuentas.dat
ARCHIVO_LOG=transacciones.log