1 / 10

Реализация и формальная верификация динамического распределителя памяти без блокировок

Реализация и формальная верификация динамического распределителя памяти без блокировок. Александр Ситников. Санкт-Петербургский Государственный Университет Факультет Прикладной Математики – Процессов Управления Кафедра Технологии Программирования. Научный руководитель: Стученков А. Б.

lixue
Download Presentation

Реализация и формальная верификация динамического распределителя памяти без блокировок

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Реализация и формальная верификация динамического распределителя памяти без блокировок Александр Ситников Санкт-Петербургский Государственный Университет Факультет Прикладной Математики – Процессов Управления Кафедра Технологии Программирования Научный руководитель: Стученков А. Б. 16 апреля 2014

  2. Параллельные алгоритмы • Несколько потоков управления с общей памятью • Разделение задач • Повышение производительности Недостатки параллельности • Синхронизация потоков • Сложность разработки • Состоние гонки (race condition) • Взаимная блокировка (deadlock)

  3. Типы синхронизаций Блокирующая Неблокирующая Атомарные операции Чтение Запись Чтение-сравнение-запись Краеугольный камень – CAS (Compare-And-Swap/Set) bool CAS(addr, exp, nval) atomic { if (*addr == exp) { *addr = nval; return true; } return false; }

  4. Свобода от блокировок (Lock-free) • Ограничение CAS: 64 бита • Комбинаторный взрыв числа состояний • Состояние гонки, активная блокировка • Если нет сборщика мусора (Garbage collector) • Ложное освобождение используемой памяти • Проблема ABA Пример • Процесс P1 читает значение Aиз разделяемой памяти; • P1приостанавливается и начинается выполнение процесса P2; • P2меняет значение Aна Bи затем обратно на A; • P1возобновляет работу, видит, что значение в памяти не изменилось, и продолжает работу.

  5. Распределитель памяти (allocator) • Системная куча (heap) • Использует блокировку • Неэффективна при частых обращениях и для небольших участков памяти Требования • Lock-free • Поддержка 64-разрядных указателей • Эффективность Определение Динамический распределитель памяти – алгоритм, обрабатывающий запросы на выделение и освобождение динамической памяти

  6. Реализация аллокатора на C++11 • Scalable Lock-Free Dynamic Memory Allocation by Maged M. Michael (2004 год) • Удовлетворяет всем требованиям • Наиболее известная разработка • Нет общедоступной реализации • Задача: реализовать аллокатор на C++11 • C++: быстрота, универсальность, отсутствие GC • Поддержка параллельной модели памяти • Атомарные типы данных (std::atomic<T>) • Проблема: нет гарантии корректности

  7. Проверка корректности • Тестирование оказывается несостоятельным • Альтернатива: формальная верификация • Проверка всех путей исполнения параллельной системы • Доказательство выполнимости инвариантов • Моделирование пути, на котором не выполняется свойство (инвариант) системы • Автоматическая проверка модели и выполнимости на ней заданных свойств • Задача: верифицировать аллокатор

  8. Проверка модели (model checking) Определение Проверка модели – метод автоматической формальной верификации параллельных систем с конечным числом состояний Определение Определение

  9. Система SPIN и язык Promela • SPIN – Simple Promela Interpreter • Promela – Process Meta Language • Язык высокого уровня с C-подобным синтаксисом • Включает 5 базовых интегральных типов • Объявление асинхронных процессов • Операторы: выполняемые и заблокированные • Недетерминированные циклы Дейкстры • Атомарные блоки • Каналы передачи переменных • Формулы линейной темпоральной логики

  10. Аллокатор на Promela • В Promela нет указателей • Невозможность адресной арифметики • Отсутствие динамической памяти • Нет 64-битных типов данных

More Related