Publication:
Detección estática de propiedades de ejecución de programas concurrentes con locks utilizando SACO

Loading...
Thumbnail Image
Official URL
Full text at PDC
Publication Date
2017
Editors
Journal Title
Journal ISSN
Volume Title
Publisher
Citations
Google Scholar
Research Projects
Organizational Units
Journal Issue
Abstract
Actualmente, la ejecución concurrente es una de las bases de la informática. Este tipo de ejecución ha llevado a tener que resolver problemas complejos como la sincronización de las variables compartidas entre programas, para evitar las carreras de datos. Las carreras de datos ocurren cuando varios procesos acceden simultáneamente a datos globales, y como consecuencia de los accesos simultáneos, el estado de las variables no es el esperado (o el correcto), es decir, los datos quedan “corrompidos”. Refiriéndonos a estas partes que queremos proteger como secciones críticas de nuestros programas, se han desarrollado múltiples mecanismos para poder ejecutarlas sin riesgo. El modelo más usado para esta protección de los datos es el uso en programas en lenguajes imperativos de primitivas lock y unlock para realizar la entrada y salida de la sección crítica, protegida por diferentes cerrojos o mútex. Sin embargo, aunque este modelo proporciona un mecanismo para evitar la corrupción de los datos, un uso incorrecto de los cerrojos no garantiza que no exista corrupción, ni tampoco ausencia de bloqueos (o deadlocks). Llegamos así al problema del deadlock, que sucede cuando varios programas están esperando a recursos que mantienen otros programas, de forma que ninguno puede avanzar. Este problema ha sido estudiado en numerosos lenguajes, muchos basados en paso de mensajes asíncrono, intentando encontrar un método para saber si un programa va o no a bloquearse. Un ejemplo de esto es ABS, un lenguaje basado en actores en el que se han desarrollado herramientas de análisis estático para detectar deadlock en programas basados en paso de mensajes y que se encuentran a nuestra disposición. La motivación de este trabajo es unir el modelo de concurrencia basado en lenguajes imperativos y locks y el uso de las herramientas de ABS en programas asíncronos basados en paso de mensajes para, así, beneficiarnos de ambos aspectos. Para ello, se plantea como objetivo implementar una traducción de programas en lenguaje imperativo que utilizan mútex a programas escritos en ABS, desarrollando un modelo apropiado que represente los cerrojos y demostrando la equivalencia entre ambos. Por ello, en el trabajo se desarrollan los siguientes puntos: • Planteamiento del mecanismo equivalente a los locks en ABS. • Desarrollo de un lenguaje imperativo genérico en el que poder implementar los programas que vamos a traducir. Se desarrollarán las posibles instrucciones, la estructura que deberá tener el programa, la semántica de las instrucciones, y la noción de deadlock en este lenguaje. • Introducción del lenguaje ABS, su semántica y el análisis de deadlock. • Traducción de las instrucciones, mediante la definición de la función apropiada. Demostraremos formalmente, utilizando mecanismos matemáticos, tanto la equivalencia de instrucciones en ambos lenguajes como la implicación de que si en el lenguaje imperativo hay deadlock, entonces lo habrá en ABS. • Implementación de la traducción mediante estructuras adecuadas y traducción de ejemplos utilizando la herramienta desarrollada. • Conclusiones y resultados del trabajo.
Nowadays, concurrent computing is one of the bases of computer science. Despite of its important benefits, this type of execution forced us to seek solutions for related complex problems, such as synchronization of accesses to shared resources in order to avoid data races. Data races occur when various processes simultaneously access global variables, which might result in unexpected results, e.g., the corresponding data remains corrupted. Calling these parts of the program that we want protect (to avoid accessing global data simultaneously) as critical sections, there are many techniques that can be used to execute them without any risk. The most used model to achieve such protection in imperative programming languages is based on the use of the lock and unlock primitives to enter and exit critical sections that are protected by different locks and mutex. However, even though this model provides a mechanism to avoid data races, and thus avoiding corruption of data, an incorrect use of it does not guarantee absence of data races and might lead to deadlocks. This lead us to the deadlock problem, which occurs when two or more processes are waiting to obtain resources held by others without the ability to make progress in any of them. This problem has been studied in different programming languages, many of them are based on asynchronous message passing, trying to develop algorithms (a.k.a., analysis) to check if a program can reach a deadlock state. An example of such language is ABS, an actor-based language for which several deadlock analysis tools have been developed, and, moreover, they are publicly available. The motivation of this work is to use of existing deadlock analysis tools of ABS, to analyze the deadlock behavior of imperative programs that are based on the use of locks, and thus taking advantage of these tools instead of developing them from scratch for the imperative language. This is challenging both settings are based on different concurrency models. Our approach is based on translating imperative programs with locks to ABS programs, while keeping the deadlock behavior. The challenge is how to mode locks in an appropriate way in ABS such that the corresponding analysis detect, or prove absence of, deadlock behavior. To achieve this, in this work we have done the following: • Development of a mechanism to model locks in ABS. • Definition of a simple generic imperative language with locks, in order to implement programs that we want to translate to ABS. We formally define the syntax, semantics, and the notion of deadlock in this language. • Overview of the ABS language: its syntax, semantics, the notion of deadlock, and corresponding deadlock analyses. • Definition of a function to translate programs in our imperative language to corresponding ABS programs, and formally proving, using mathematical techniques, the equivalence of these programs in particular when considering the deadlock property, i.e., if there is an execution in the imperative program that leads to a deadlock then there a corresponding execution in ABS that leads to a deadlock. • Implementation of the translation and its application to several examples. • Conclusions and results of this work.
Description
Trabajo de Fin de Grado en Ingeniería Informática y Matemáticas (Universidad Complutense, Facultad de Informática, curso 2016/2017)
Keywords
Citation