Тип работы:
Предмет:
Язык работы:


Верификация многопоточных алгоритмов методом управляемого исполнения легковесных потоков

Работа №125011

Тип работы

Дипломные работы, ВКР

Предмет

программирование

Объем работы28
Год сдачи2017
Стоимость4650 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
20
Не подходит работа?

Узнай цену на написание


1. Введение 4
2. Постановка задачи 6
3. Обзор библиотек легковесных потоков 7
3.1. Kilim 7
3.2. Quasar 8
3.3. Jephyr 9
4. Требования к системе 10
5. Архитектура системы 11
6. Реализация 13
6.1. Преобразование байт-кода 14
6.2. Создание и управление потоками 18
6.3. Параллельный запуск легковесных потоков 20
6.4. Ограничения 21
7. Оценка производительности 22
8. Заключение 25
Список литературы 26
9. Приложение 27

С ростом количества многопоточных алгоритмов растёт потребность в их тестировании и доказательстве корректности работы. Одним из базовых критериев корректности многопоточных алгоритмов является линеаризуемость [2] — свойство программы, при котором результат лю­бого параллельного выполнения операций эквивалентен некоторому по­следовательному. Для проверки линеаризуемости существует несколь­ко подходов [4]. Одним из них является поиск последовательности опе­раций, при многопоточном исполнении которой результат выполнения не совпадает ни с одним результатом из множества последовательных выполнений. Если такая последовательность существует, то алгоритм нелинеаризуем. В противном случае, утверждать обратного нельзя.
Для поиска такого множества операций существует инструмент lin- check [11]. Он генерирует множества результатов последовательных ис­полнений. Затем составляет наборы операций и запускает их на несколь­ких потоках. Процесс тестирования является псевдослучайным, так как между операциями вставляются различные задержки. Это вызвано от­сутствием необходимого для тестирования механизма синхронизации в проверяемых структурах. Данный фактор заставляет осуществлять многократный запуск одних и тех же тестовых данных и надеяться, что переключение потоков произойдёт в отличных от предыдущего запуска точках. Этого можно избежать в случае контролируемого переключе­ния между потоками изнутри структуры.
Ход работы инструмента lin-check состоит из множества независи­мых друг от друга итераций. Данное утверждение позволяет выдвинуть гипотезу об увеличении скорости проверки структуры, если запускать каждую итерацию в своём потоке. Но такое улучшение вызовет значи­тельное падение производительности при большом значении параметра запущенных одновременно исполнений. Это связано с особенностями модели работы стандартных JVM потоков.
На текущий момент виртуальная машина Java стандартно использу­ет native модель для расспаралеливания потоков. Native-потоки — это потоки, за управление которыми отвечает операционная система. Со­здание большого их количества нагружает систему. Кроме того, стан­дартные средства Java не позволяют эффективно управлять их пере­ключением [7, 8]. В целях решения этой проблемы были созданы легко­весные потоки (Green Threads). Они эмулируют многопоточное испол­нение, являясь по сути либо корутинами либо континуациями [9]. Кон- тинуации — это функции, чьё выполение может быть приостановлено и возобновлено. Корутины — механизм управления ходом выполнения программы, позволяющий приостанавливать выполняемую задачу, со­хранять её состояние и выключать из потока. Проблема управления потоками заключается в том, что тестируемые структуры не обладают нужными точками переключений потоков. Устанавливать такие точки вручную внутри структур является сложной задачей, так как требует глубокого понимания логики работы многопоточного алгоритма.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В рамках данной работы были достигнуты следующие результаты.
• Проведён обзор библиотек Quasar и Kilim легковесных потоков для языка Java.
• Разработаны функциональные требования выделяющие фазы ра­боты.
• Спроектирована новая архитектура инструмента Lin-Checker об­ладающая гибкостью для дальнейших усовершенствований.
• Выполнена реализация:
— Средства внедрения точек синхронизации путем трансфор­мации кода на лету;
— Функциональности тестирования алгоритмов на легковесных потоках;
— Системы управления легковесными потоками.
• Проведена апробация для существующих структур данных и про­ведены замеры скорости работ.


[1] Bruneton Eric. ASM 4.0. A Java bytecode engineering library. — 2011.— URL: http://download.forge.objectweb.org/asm/ asm4-guide.pdf.
[2] Herlihy M., Shavit N. The Art of Multiprocessor Programming, 1st ed. — Morgan Kaufmann, 2008.
[3] Jephyr. — URL: https://github.com/yngui/jephyr.
[4] Lowe Gavin. Testing for linearizability // Concurrency and Computation: Practice and Experience. — 2017. — Vol. 29.
[5] Mann Matthias. Continuations library.— URL: http://www. matthiasmann.de/content/view/24/26/.
[6] Quasar, Parallel Universe.— URL: docs.paralleluniverse.co/ quasar/.
[7] Srinivasan Sriram. A Thread of One’s Own.
[8] Srinivasan Sriram, Mycroft Alan. Kilim: Isolation-Typed Actors for Java // ECOOP. — 2008.
[9] de Moura Ana Lucia, lerusalimschy Roberto. Revisiting coroutines // ACM Trans. Program. Lang. Syst.— 2009. — Vol. 31. — P. 6:1-6:31.
[10] А.С. Озерцов. Оптимизация покрытия графа управления при те­стировании многопоточных алгоритмов путём внедрения управля­емых точек синхронизации. — 2017.
[11] Евдокимов А.А. Цителов Д.И. Елизаров Р.А. Трифа­нов В.Ю. Автоматическое тестирование линеаризуемости реализаций многопоточных структур данных. — 2015.— URL: http://tmpaconf.org/images/pdf/2015/evdokimov-tsytelov-elizarov-trifanov-automat-testing.pdf.


Работу высылаем на протяжении 30 минут после оплаты.




©2025 Cервис помощи студентам в выполнении работ