ISSN 2305-5626. Вестник МГТУ им. Н.Э. Баумана: электронное издание. 2013
2
ступе к памяти. Кроме того, для этого подхода требуется переопреде-
ление системных функций синхронизации. Использование инстру-
ментирования кода для динамического поиска гонок могло бы сокра-
тить накладные расходы. В качестве средства инструментирования
кода можно применять Low Level Virtual Machine (LLVM) — универ-
сальную систему анализа, трансформации и оптимизации программ,
в которой используется промежуточный код с RISC-подобными ин-
струкциями [3].
Метод динамического поиска гонок.
Динамические средства по-
иска гонок проводят анализ программы в ходе ее выполнения, прове-
ряя журналы обращений по всем адресам памяти и операций с при-
митивами синхронизации (рис. 1). Результатом анализа является
сообщение о найденных гонках, включающее в себя стеки вызовов
потоков выполнения, которые привели к состоянию гонки при обра-
щении к какой-либо области памяти.
Рис. 1. Динамический поиск гонок
Динамический анализатор основан на анализе потока событий,
генерируемых программой во время выполнения. Программа являет-
ся «черным ящиком», подающим поток событий в регистратор собы-
тий, который обрабатывает полученные событий и сохраняет их в
журнал выполнения потока. Далее анализатор по этому журналу про-
веряет наличие гонок, если текущее событие может быть источником
гонок (рис. 2).
Выделяют следующие типы событий, необходимых анализатору
[4]:
– события доступа к памяти на чтение или запись;
– захват или освобождение блокировок семафоров или мьютексов;
– прием или генерация событий, упорядочивающих выполнение
программы.
1 3,4,5,6,7,8