| Nome: | Descrição: | Tamanho: | Formato: | |
|---|---|---|---|---|
| 1.24 MB | Adobe PDF |
Autores
Orientador(es)
Resumo(s)
The rise of concurrent programming revolutionized the world of computing by improving
program efficiency and performance. However, it introduced the state explosion problem
and troublesome data races. Since then, computer scientists have focused on continuously
abstracting programs, devising techniques and tools to help developers manage the
increasingly complex task of synchronizing shared data accesses.
State-of-the-art data race detectors like RacerD and SWORD are capable of capturing
concurrency bugs in multithreaded programs, but lack context reasoning, leading to false
positives, and rely on the programmer to explicitly adjust their programs based on the
output. Even if an object is never shared beyond the execution of a thread, static analysis
tools are conservative and may assume all accesses can run in parallel in the absence of
synchronization, reporting data races that cannot really occur.
This dissertation proposes a solution involving the static analysis of program classes,
without concurrency control, for the detection of memory accesses that lead to data races.
This is based on conflicting accesses involving class instances and their shared mutable
states to indicate the need to provide atomic accesses by annotating class fields. It is meant
to be utilized as input for the compilation of the AtomiS framework, which automatically
generates concurrency control based on annotated code, thereby removing the need for
programmers to manually address concurrency issues.
The solution can distinguish the instances that each thread accesses and associate
them with their execution contexts to output more precise reports than RacerD and
SWORD. Our approach identifies the instance fields that should be accessed atomically as
a consequence of being the target of data races between distinct threads, but still requires
inter-method access analysis to yield more precise and complete results and reduce false
negatives, and adequate annotation inference. In the future, once these improvements are
appropriately implemented and the current work is refined by modeling method calls, to
reflect changes to caller objects and parameters, programmers might not need to approach
their multithreaded programs to define synchronization for shared accesses.
Avanços na programação concorrente revolucionaram a eficiência e desempenho de programas. No entanto, também introduziram o problema da explosão de estados e data races. Desde então, os cientistas da computação têm-se focado na abstração de programas, desenvolvendo novas técnicas e ferramentas para ajudar os programadores a gerir a sincronização de acessos a dados partilhados. Detetores de data race do estado-da-arte como RacerD e SWORD são capazes de captar bugs em programas concorrentes, mas não contabilizam o contexto de execução e devolvem falsos positivos, e os programadores têm que ajustar os seus programas com base nesses resultados. Mesmo que um objeto nunca seja partilhado por várias threads, a análise estática é conservativa e pode assumir que os acessos são executados em paralelo fora de sincronização, resultando em data races que podem não ocorrer. Esta dissertação propõe uma solução de análise estática das classes de um programa, sem controle de concorrência, para a deteção de acessos que levam a potenciais data races. Isto é baseado em acessos conflituosos a instâncias de classe e os seus estados mutáveis partilhados para indicar a necessidade de anotar os campos das classes para acessos atómi- cos. Os resultados são prentendidos como valor de entrada à compilação da framework do AtomiS, que trata de gerar controle de concorrência automaticamente baseado em código anotado, eliminando a necessidade de abordar problemas de concorrência manualmente. A solução distingue as instâncias a que cada thread acede e associa-as com os contextos de execução das mesmas para obter resultados mais precisos que o RacerD e o SWORD. Esta abordagem identifica campos de instâncias que devem ser acedidos atomicamente por serem alvos de data race entre threads distintas, mas requer análise de acessos inter-método para obter resultados mais precisos e completos e reduzir falsos negativos, e inferência das anotações adequadas. No futuro, quando estes melhoramentos forem implementados e o trabalhado atual modelar chamadas de métodos, para refletir mudanças sobre objetos de chamada e parâmetros, os programadores podem não precisar de abordar os seus programas concorrentes para definir sincronização de acessos partilhados.
Avanços na programação concorrente revolucionaram a eficiência e desempenho de programas. No entanto, também introduziram o problema da explosão de estados e data races. Desde então, os cientistas da computação têm-se focado na abstração de programas, desenvolvendo novas técnicas e ferramentas para ajudar os programadores a gerir a sincronização de acessos a dados partilhados. Detetores de data race do estado-da-arte como RacerD e SWORD são capazes de captar bugs em programas concorrentes, mas não contabilizam o contexto de execução e devolvem falsos positivos, e os programadores têm que ajustar os seus programas com base nesses resultados. Mesmo que um objeto nunca seja partilhado por várias threads, a análise estática é conservativa e pode assumir que os acessos são executados em paralelo fora de sincronização, resultando em data races que podem não ocorrer. Esta dissertação propõe uma solução de análise estática das classes de um programa, sem controle de concorrência, para a deteção de acessos que levam a potenciais data races. Isto é baseado em acessos conflituosos a instâncias de classe e os seus estados mutáveis partilhados para indicar a necessidade de anotar os campos das classes para acessos atómi- cos. Os resultados são prentendidos como valor de entrada à compilação da framework do AtomiS, que trata de gerar controle de concorrência automaticamente baseado em código anotado, eliminando a necessidade de abordar problemas de concorrência manualmente. A solução distingue as instâncias a que cada thread acede e associa-as com os contextos de execução das mesmas para obter resultados mais precisos que o RacerD e o SWORD. Esta abordagem identifica campos de instâncias que devem ser acedidos atomicamente por serem alvos de data race entre threads distintas, mas requer análise de acessos inter-método para obter resultados mais precisos e completos e reduzir falsos negativos, e inferência das anotações adequadas. No futuro, quando estes melhoramentos forem implementados e o trabalhado atual modelar chamadas de métodos, para refletir mudanças sobre objetos de chamada e parâmetros, os programadores podem não precisar de abordar os seus programas concorrentes para definir sincronização de acessos partilhados.
Descrição
Palavras-chave
static analysis data race thread-awareness concurrency control
