|
Поиск состояний гонки в программах на языке Java при помощи динамического анализа
М. К. Ермаков, С. П. Вартанов Факультет вычислительной математики и кибернетики, Московский государственный университет им. М.В. Ломоносова
Аннотация:
Язык программирования Java обладает встроенными средствами поддержки многопоточного выполнения программ. Из-за ошибок при создании подобных программ в процессе выполнения могут возникать ошибки синхронизации, одной из которых является возникновение состояния гонки между потоками, которые осуществляют доступ к разделяемому ресурсу (как минимум один поток модифицирует ресурс) и порядок работы потоков с ресурсом не фиксирован. В статье рассматривается подход к поиску состояний гонки при помощи динамического анализа. Преимущества динамического анализа по сравнению со статическим заключаются в отсутствии ложных срабатываний при определённых ограничениях, накладываемых на анализируемую программу. Для проведения динамического анализа предлагается использовать статическую инструментацию байт-кода программы, которая позволяет в ходе выполнения программы извлекать информацию о выполнении инструкций и методов, осуществляющих работу по синхронизации потоков. Построенная трасса представляет собой модель конкретного выполнения программы. На её основе с помощью отношений предшествования и механизма отслеживания блокировок определяется, возможна ли ситуация, при которой возникает состояние гонки. Для инструментации с целью сбора трассы используется инструмент динамического анализа Coffee Machine. Статическая инструментация, используемая в инструменте, позволяет проводить анализ программ на виртуальных машинах, не предоставляющих интерфейс для динамической инструментации. Анализ построенной модели и поиск потенциальных состояний гонки осуществляется при помощи инструмента ThreadSanitizer Offline. Благодаря использованию инструментации байт-кода наличие связи с исходным кодом для проведения анализа не является необходимым, однако это позволяет более точно определить причины возникновения ошибки. Реализация была проверена на ряде проектов с открытым исходным кодом и продемонстрировала свою эффективность для поиска состояний гонки.
Ключевые слова:
динамический анализ, состояния гонки, ошибки синхронизации.
Образец цитирования:
М. К. Ермаков, С. П. Вартанов, “Поиск состояний гонки в программах на языке Java при помощи динамического анализа”, Труды ИСП РАН, 27:2 (2015), 39–52
Образцы ссылок на эту страницу:
https://www.mathnet.ru/rus/tisp121 https://www.mathnet.ru/rus/tisp/v27/i2/p39
|
|