Skip to content

Commit

Permalink
Merge branch 'main' of https://github.com/Jonathan-R0/TP2-9508 into main
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonathan-R0 committed Nov 1, 2020
2 parents a615067 + 7c44c0d commit eaa0434
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
45 changes: 45 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,48 @@

<h2 align="right">Jonathan David Rosenblatt</h2>
<h2 align="right">104105</h2>

## Introducción

Este es el segundo trabajo práctico de la materia en el que se debe entregar un producto programado y documentado. El mismo fue programado en C++ y requiere conocimientos en este lenguaje (además de ser capaz de adaptarse a los cambios que este trae sobre el lenguaje C) además de conocimientos en la programación multi-hilos. Un objetivo de este tp es nivelar la capacidad de programación en C++ del alumnado, adquiriendo buenas prácticas y escribiendo buen código en el camino.

## Configuración del Proyecto

Para configurar y ejecutar el código lo primero que se debe hacer es clonar el repositorio. Luego para compilar y enlazar se debe ejecutar el Makefile incluido (ejecutando ```make```). En caso de tener errores con el compilador o el enlazador se verán escritos por stderr.

Se debe ejecutar con

```
./client <NUMBER-OF-THREADS> <FILE-1> <FILE-2> ... <FILE-N>
```

Siendo:

- ```<NUMBER-OF-THREADS>```: El número de hilos con los que se va a ejecutar el programa
- ```<FILE-i>```: El i-ésimo archivo a procesar.

***Aclaración: no necesariamente se debe tener un hilo por archivo.***

## Diseño y Clases

La naturaleza de este programa requiere la existencia de una clase thread. Esta clase abstracta implementa todos los métodos necesarios para que este funcione y particularmente tenemos el método abstracto run, el cual es redefinido por el eBPF para que cada hilo pueda ejecutar de forma concurrente sus tareas.

El eBPF tiene a las clases fileRepository y results para obtener y guardar la información de la lectura de cada archivo, respectivamente.

Luego la clase graphFiller actua como una abstracción para el eBPF. Esto permite encapsular al grafo, parser y gestor de información de línea (clase asmline).

Diagrama de clases general del programa:

<br><p align="center"><img src="img/classdiag.png"/></p>

Diagrama de secuencia del programa cuando se lo llama para leer n archivos, de principio a fin:

<br><p align="center"><img src="img/seqdiag.png"/></p>

## Herramientas Utilizadas

Las herramientas más utilizadas en este tp fueron:

- ***Valgrind***: el glorioso programa que tanto nos ayuda a debuggear el código. Con flags como ```--track-origins=yes``` para ver donde se nos generan variables no inicializadas que puedan causar problemas, entre otros.

- ***Gdb***: el debugger de GNU, súper útil para revisar con detalle el código y encontrar más facilmente la causa de problemas como segmentation faults, loops infinitos, entre otros.
6 changes: 6 additions & 0 deletions diags/seqdiag.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
@startuml

actor "user"
user -> eBPF: "files"

@enduml
Binary file added img/seqdiag.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit eaa0434

Please sign in to comment.