Skip to content

Lamport, un lenguaje de programación para simular sistemas concurrentes. (TFG Universidad De Granada - 23/24)

License

Notifications You must be signed in to change notification settings

danielsp13/lamport

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Trabajo de Fin de Grado

Lamport: Simulador de Sistemas Concurrentes y Distribuidos

Autor: Daniel Pérez Ruiz

Tutor: Carlos Ureña Almagro


🗂️ Contenidos del README

En el siguiente índice se resumen los contenidos principales de este README:


🎉 Uso del repositorio

GitHub es un cliente de Git. Una de las formas para poder descargar el contenido completo del repositorio es instalando git en su sistema. Para sistemas Linux que usen APT como gestor de paquetes, esto se puede hacer con la siguiente orden:

$ sudo apt install git

Y a continuación, para clonar el repositorio y acceder a todos los fuentes, puede usar la siguiente orden:

$ git clone https://github.com/danielsp13/lamport.git

La orden anterior generará una carpeta en el directorio donde ejecutó la orden con todo el proyecto.

Otra opción de descarga es pulsando este enlace, que descargará un zip con la rama principal del proyecto.


Resumen del proyecto

Lamport es un lenguaje de programación para la simulación de sistemas concurrentes y distribuidos. Utiliza una máquina virtual para la ejecución de las instrucciones, por lo que su uso no necesita de una arquitectura hardware específica.

Su nombre es en honor al informático Leslie Lamport, una de las mayores eminencias en el campo de la programación concurrente, y que dentro de las muchas contribuciones que realizó uno muy notorio es la introducción de un sistema lógico formal para la verificación de las propiedades de los sistemas concurrentes, denominado: Lógica Temporal de Acciones.

En este repositorio se encuentra el código fuente del compilador en tiempo de ejecución (Just-In-Time) desarrollado, así como el estudio teórico del trabajo de Lamport en la materia de verificación.


📖 Documentación del proyecto

Novedad: Ahora puede acceder directamente a la documentación final del proyecto en el PDF en este enlace.

La documentación completa de este proyecto está redactada en LaTeX, en el directorio tex/. Para poder recuperar el informe, es necesario instalar el paquete texlive en la distribución donde se clone este repositorio.

En el Makefile del proyecto se han definido unas reglas para su construcción (siempre y cuando se encuentre en un sistema basado en Debian, o cualquiera que utilice el gestor de paquetes APT) .

Si desea construir el informe TeX ejecute la siguiente orden:

$ make build_tex

Esta orden además se encargará de instalar todas las dependencias en el sistema en caso de que no se encuentren. El resultado se encontrará dentro del directorio tex/con el nombre de archivo proyecto.pdf.

Si desea eliminar el informe TeX y todos los demás ficheros generados en la compilación:

$ make clean_tex

Recomendaciones

Para poder tener una mejor experiencia en el uso del compilador Lamport, puede considerar alguna de estas dos alternativas:

  1. Utilizar un entorno Linux para la instalación de dependencias y compilación del compilador.
  2. Utilizar el contenedor virtual Docker mediante el script proporcionado. Este contenedor contiene todas las dependencias integradas, por lo que lo único que se necesita es tener docker instalado en el sistema, compatible con Windows, Linux y Mac.

🐚 Instalación y verificación de dependencias

En este proyecto hay diferentes bibliotecas y programas que son necesarias para poder construir el compilador adecuadamente. Para ello, se han definido reglas en el Makefile que permiten la gestión de dichas dependencias:

Si desea instalar todas las dependencias del proyecto:

$ make install_dependencies

Otra opción podría ser la instalación por separado de las dependencias:

# Instala dependencias sólo para informe TeX
$ make install_tex_dependencies

# Instala dependencias sólo del compilador
$ make install_compiler_dependencies

# Instala dependencias sólo de tests sobre compilador
$ make install_tests_dependencies

Si desea desinstalar todas las dependencias del proyecto:

$ make uninstall_dependencies

Otra opción podría ser la desinstalación por separado de las dependencias:

# Desinstala dependencias sólo para informe TeX
$ make uninstall_tex_dependencies

# Desinstala dependencias sólo del compilador
$ make uninstall_compiler_dependencies

# Desinstala dependencias sólo de tests sobre compilador
$ make uninstall_tests_dependencies

Si desea comprobar las versiones instaladas de las dependencias:

$ make version_dependencies

Otra opción podría ser la comprobación de versiones por separado:

# Muestra las versiones instaladas de las dependencias de TeX
$ make version_tex_dependencies

# Muestra las versiones instaladas de las dependencias del compilador
$ make version_compiler_dependencies

# Muestra las versiones instaladas de las dependencias de tests sobre compilador
$ make version_tests_dependencies

🏗️ Construcción del compilador

Para poder utilizar el compilador desarrollado para el lenguaje de lamport, hay que compilar todos los módulos implementados.

Para constuir el compilador completo:

$ make compile

Esto hará que el ejecutable final se encuentre en el directorio bin/.

Puede además utilizar la orden de ejecución paralela, para reducir el tiempo:

$ make parallel

con el mismo efecto que la orden anterior.

Para eliminar todos los ficheros ejecutables generados:

$ make clean

🐋 Uso del compilador en contenedor Docker

Este proyecto dispone de un Dockerfile que construye un contenedor virtual con todas las dependencias necesarias para el funcionamiento del compilador, aislándolo del SO por completo.

⚠️ Nota: Es imprescindible tener Docker instalado en el sistema, puede instalarlo con la orden:

$ make install_virtualenv_dependencies

Para construir y ejecutar el compilador dockerizado, utilice el script de la siguiente forma:

$ ./lmp_docker.sh <fichero_lamport.lmp>

Esto hará que se ejecute directamente el compilador desde el contenedor de la misma manera que si se compilara de la forma tradicional.

Para eliminar el contenedor docker construido:

$ make rmi_docker

Testeo de módulos

En este proyecto se ha utilizado una herramienta de análisis (cppcheck) para analizar las clases en búsqueda de errores / fallos que el compilador no es capaz de detectar.

Si desea comprobar la sintaxis y lanzar un análisis (sin compilación) de todas las clases:

$ make check

About

Lamport, un lenguaje de programación para simular sistemas concurrentes. (TFG Universidad De Granada - 23/24)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published