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


Верификация потокобезопасности структур данных с помощью управляемых точек синхронизации

Работа №129970

Тип работы

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

Предмет

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

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

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


Введение 4
1. Постановка задачи 6
2. Обзор 7
2.1. Классификация методов проверки линеаризуемости . . 7
2.2. jcstress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3. jPredictor . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4. Penelope . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5. Chess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.6. STORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.7. Текущая реализация . . . . . . . . . . . . . . . . . . . . . 11
3. Формализация операций виртуальной машины Java 12
4. Архитектура системы управления ходом исполнения про-
граммы 14
5. Доработка существующего алгоритма 16
6. Разработка алгоритма, предоставляющего гарантии над
пространством переключений 17
6.1. Неформальное описание работы алгоритма . . . . . . . 19
6.2. Формальное описание работы алгоритма . . . . . . . . . 22
7. Сравнение 24
8. Заключение 28
Список литературы 29

Разработка промышленных систем требует создания высокопроиз-
водительных алгоритмов. Одним из способов увеличения производи-
тельности является многопоточность. Многопоточное программирова-
ние становится более популярным с распространением многоядерных
процессоров. Однако, многопоточное программирование ставит перед
программистом вопрос построения и тестирования потокобезопасных
компонент, чьи методы корректны в многопоточной среде без исполь-
зования неуместных барьеров и иных методов синхронизации.
Потокобезопасность компонент не является четко формализован-
ным термином. Более корректные условия корректности типов данных
включают отсутствие гонок [2], сериализуемость [8], линеаризуемость
[4]. Последнее время общепринятым стандартом потокобезопасности
является наличие линеаризуемости [3]. Говоря неформально, структура
данных является линеаризуемой, если результат любого многопоточ-
ного алгоритма над этой структурой данных эквивалентен результату
некоторого последовательного алгоритма. Иными словами многопоточ-
ное поведения можно рассматривать как набор последовательных операций.
Наиболее известными примерами линеаризуемых компонент явля-
ются типы данных, такие как очереди или множества, которые предо-
ставлены множеством различных библиотек, таких как Java Concurrency
[7] и PLINQ [9]. Классические подходы к тестированию [13] в целом
оказываются мало эффективны в многопоточном окружении, так как
программа может работать без ошибок почти всегда, кроме редких си-
туаций, когда ошибка проявит себя вследствие особой конфигурации
потоков и чередования операций в них. Это порождает необходимость
инструмента, который проверяет корректность реализации многопоточ-
ной структуры данных.
Объектно-ориентированная парадигма программирования подразу-
мевает взаимодействие структуры данных с внешним миром при помо-
щи некоторого конечного набора методов. Таким образом, любой алго-
ритм над структурой данных можно рассматривать как последователь-
ность методов этой структуры и набор входных данных.
Задача доказательства линеаризуемости является довольно трудо-
емкой и зачастую проводится вручную. Однако, на практике оказы-
вается довольно удобным альтернативный подход путем приведения
контрпримеров [14], то есть таких алгоритмов, которые могут работать
некорректно. Соответственно, при достаточно большом количестве рас-
смотренных алгоритмов можно дать вероятностную оценку линеаризу-
емости всей структуры данных в целом.
Одним из инструментов, предлагающих автоматизировать провер-
ку линеаризуемости, является lin-check [18] — библиотека, генериру-
ющая большой набор тестовых алгоритмов над структурой данных и
проверяющая их корректность путем многократного исполнения в мно-
гопоточной среде и проверки результатов на соответствие некоторому
последовательному исполнению. Однако, данная библиотека не учиты-
вает внутреннюю структуру функций тестируемых типов данных и не
имеет планировщика выполнения для управления ходом исполнения те-
стового алгоритма, что порождает множество ненужных запусков для
корректного (с точки зрения линеаризуемости) алгоритма, что в свою
очередь отрицательно влияет на производительность всей системы в целом.

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

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

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


В ходе работы были достигнуты следующие результаты:
• проведен обзор методологий проверки линеаризуемости многопоточных программ;
• разработана архитектура для создания стратегий управления ходом исполнения программы;
• формализованы операции виртуальной машины Java, влияющие на поведение алгоритма в многопоточной среде ;
• доработан существующий алгоритм управления порядком исполнения с учетом формализованых операций виртуальной машины Java;
• разработан алгоритм управления порядком исполнения многопоточных программ на языке Java;
• сравнение полученных алгоритмов с текущей реализацией выявило увеличение производительности разработанного алгоритма.


[1] Emmi Michael, Qadeer Shaz, Rakamaric Zvonimir. Delay-bounded
scheduling // POPL. –– 2011.
[2] Flanagan C. Freund S. Efficient and precise dynamic race detection //
Programming Languages: Design and Implementation / ACM. ––
2009. –– P. 121–133.
[3] Fraser Keir, Harris Timothy L. Concurrent programming without
locks // ACM Trans. Comput. Syst. –– 2007. –– Vol. 25. –– P. 5.
[4] Herlihy Maurice, Wing Jeannette M. Linearizability: A Correctness
Condition for Concurrent Objects // ACM Trans. Program. Lang.
Syst. –– 1990. –– Vol. 12. –– P. 463–492.
[5] Musuvathi Madanlal, Qadeer Shaz, Ball Thomas. CHESS: A
Systematic Testing Tool for Concurrent Software. –– 2007.
[6] P. Godefroid. Model Checking for Programming Languages using
Verisoft // POPL. –– 1997.
[7] Package java.util.concurrent. –– URL: https://docs.oracle.com/
javase/7/docs/api/java/util/concurrent/package-summary.html.
[8] Papadimitriou Christos H. The serializability of concurrent database
updates // J. ACM. –– 1979. –– Vol. 26. –– P. 631–653.
[9] Parralel LINQ (PLNQ). –– URL: https://msdn.microsoft.com/
ru-ru/library/dd460688(v=vs.110).aspx.
[10] Qadeer S. Rehof J. Context-Bounded Model Checking of Concurrent
Software // TACAS. –– 2005.
[11] Sorrentino F. Farzan F. Madhusudan P. PENELOPE: Weaving
Threads to Expose Atomicity Violations // FSE. –– 2010. –– P. 37–46.
[12] The Structure of the Java Virtual Machine, Oracle. –– URL:
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.
html#jvms-2.11.1.
[13] Unit testing. –– URL: https://en.wikipedia.org/wiki/Unit_testing.
[14] Vechev M. Yahav E. Yorsh G. Experience with model checking
linearizability // SPIN. –– 2009. –– P. 261–278.
[15] Z. Rakamaric. STORM: static unit checking of concurrent programs //
2010 ACM/IEEE 32nd International Conference on Software
Engineering. –– 2010. –– Vol. 2. –– P. 519–520.
...


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




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