SecureBank
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.
Install / Use
/learn @marichu-kt/SecureBankREADME
Simulador de un Sistema Bancario Concurrente Avanzado (SecureBank)

Asignatura: Sistemas Operativos (Curso 2024-2025)
Práctica Final de Asignatura – Parte I
👥 Integrantes del Grupo
| Nombre Completo | Usuario GitHub | Rol en el Proyecto | |--------------------|----------------------------|----------------------------------------------| | Mario Martínez | @marichu-kt | Desarrollador |
Índice de Contenidos
- Introducción
- Contexto del Problema
- Especificaciones Generales
- Flujo Completo del Sistema
- Estructura del Sistema
- Configuración del Sistema (config.txt)
Introducción
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:
- Creación y gestión de procesos (
fork()) - Comunicaciones entre procesos (tuberías, colas de mensajes, señales)
- Sincronización con semáforos y mutex
- Manejo de hilos (
pthread) - Estructuras y ficheros para almacenar cuentas y logs
Contexto del Problema
Debes crear un sistema bancario concurrente que:
- Cree procesos hijos para gestionar cada usuario.
- Use hilos para manejar operaciones dentro de cada usuario (depósitos, retiros, transferencias).
- Sincronice el acceso a recursos compartidos (archivo de cuentas y logs) mediante semáforos y mutex.
- Detecte y reporte transacciones sospechosas en tiempo real.
Para ello, se propone aprovechar características avanzadas de Linux:
- Tuberías (pipes)
- Señales
- Semáforos POSIX (
sem_open) - Colas de mensajes (Message Queues)
El lenguaje C permitirá un control de bajo nivel y acceso directo al sistema operativo.
Especificaciones Generales
a) Programa Principal (banco.c)
- Inicializa el sistema, administra las cuentas y coordina los procesos hijos.
- Comunicación con procesos hijo mediante tuberías y señales.
- Gestiona el log de transacciones y la creación del proceso monitor para las anomalías.
b) Procesos Hijos (Usuarios)
- Cada usuario es un proceso independiente con un menú interactivo: depósito, retiro, transferencia, consultar saldo, salir.
- Dentro de cada proceso hijo, se crean hilos para ejecutar las operaciones bancarias de forma concurrente.
c) Sincronización y Exclusión Mutua
- Semáforos para controlar el acceso al archivo de cuentas (evitando escrituras simultáneas incorrectas).
- Mutex en caso de operaciones más finas que requieran exclusión mutua dentro del mismo proceso hijo.
d) Detección de Anomalías
- Un proceso monitor independiente que analiza transacciones en tiempo real (por tuberías o colas de mensajes).
- Envía alertas cuando detecta:
- Retiros consecutivos mayores a un monto límite.
- Transferencias repetitivas entre las mismas cuentas.
- Uso simultáneo de una cuenta desde varios procesos.
Flujo Completo del Sistema
1. Inicio del Sistema
- Inicialización del archivo de cuentas (con
init_cuentas.c):- Crea un archivo binario
cuentas.datcon datos iniciales. - Estructura recomendada:
struct Cuenta { int numero_cuenta; char titular[50]; float saldo; int num_transacciones; }; - Ejemplo en texto:
1001,John Doe,5000.00,0 1002,Jane Smith,3000.00,0
- Crea un archivo binario
- Inicialización de semáforos:
- Semáforo nombrado con:
sem_t *semaforo = sem_open("/cuentas_sem", O_CREAT, 0644, 1);
- Semáforo nombrado con:
- Lanzamiento del proceso principal (
banco.c):- Espera conexiones de usuarios (por ejemplo en un bucle).
- Al recibir solicitud, hace
fork()para crear el proceso hijo que ejecuta el menú de usuario.
2. Gestión de Usuarios
- Menú de Usuario:
- Un bucle
while(1)conprintfyscanfpara seleccionar operación:1. Depósito 2. Retiro 3. Transferencia 4. Consultar saldo 5. Salir
- Un bucle
- Comunicación con el proceso principal:
- Cada proceso hijo puede enviar detalles de la operación (tipo, monto, cuenta origen/destino, etc.) al proceso padre mediante tubería o cola de mensajes.
3. Ejecución de Operaciones Bancarias
- Hilos por operación:
- Dentro del proceso hijo, se crea un
pthread_tpara manejar la operación. pthread_create(&hilo, NULL, ejecutar_operacion, (void *)&datos_operacion);
- Dentro del proceso hijo, se crea un
- Protección del archivo de cuentas:
- Antes de leer/escribir:
sem_wait(semaforo); // Actualizar archivo sem_post(semaforo);
- Antes de leer/escribir:
- Actualización de cuentas:
- Abre
cuentas.daten modorb+, busca la posición de la cuenta, y la reescribe con los cambios de saldo o transacciones.
- Abre
4. Detección de Anomalías
- Proceso Monitor (
monitor.c):- Se ejecuta independiente (otro
fork()). - Lee transacciones usando colas de mensajes (
msgrcv) u otro método.
- Se ejecuta independiente (otro
- Identificación de patrones:
- Retiros consecutivos altos.
- Muchas transferencias idénticas en poco tiempo.
- Uso simultáneo de la misma cuenta desde varios procesos.
- Alertas en tiempo real:
- Escribe en tuberías:
write(pipe_monitor_hijos[1], "ALERTA: Transacción sospechosa en cuenta 1002\n", 50);
- Escribe en tuberías:
5. Finalización del Sistema
- Cierre controlado:
- Al terminar, destruir semáforo:
sem_unlink("/cuentas_sem");
- Al terminar, destruir semáforo:
- Generación del Log Final:
- El proceso principal registra operaciones en un archivo de log (ej.
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
- El proceso principal registra operaciones en un archivo de log (ej.
Estructura del Sistema
- banco.c
Programa principal que coordina procesos hijos y el monitor. - usuario.c
Implementa el menú interactivo y la lógica de hilos para operaciones bancarias. - monitor.c
Realiza la detección de anomalías y envía alertas. - init_cuentas.c
Crea el archivo binariocuentas.datcon datos de ejemplo.
Configuración del Sistema mediante Ficheros de Parametrización
Archivo config.txt
Debe incluir parámetros como:
- Límites de operaciones:
LIMITE_RETIRO: monto máximo por cada retiro.LIMITE_TRANSFERENCIA: monto máximo por transferencia.
- Umbrales para detección de anomalías:
UMBRAL_RETIROS: número de retiros consecutivos altos para generar alerta.UMBRAL_TRANSFERENCIAS: número de transferencias repetitivas entre las mismas cuentas.
- Parámetros de ejecución:
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
Related Skills
node-connect
352.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.5kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
