Найти в Дзене
Мир инфо..

Безопасная отсроченная рекультивация памяти

Оглавление

https://stock.adobe.com/ru/search/images?filters%5Bcontent_type%3Aphoto%5D=1&filters%5Bcontent_type%3Aillustration%5D=1&filters%5Bcontent_type%3Azip_vector%5D=1&filters%5Bcontent_type%3Aimage%5D=1&k=%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&order=relevance&price%5B%24%5D=1&safe_search=1&search_page=1&search_type=usertyped&acp=&aco=%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&limit=100&get_facets=0&asset_id=245601545
https://stock.adobe.com/ru/search/images?filters%5Bcontent_type%3Aphoto%5D=1&filters%5Bcontent_type%3Aillustration%5D=1&filters%5Bcontent_type%3Azip_vector%5D=1&filters%5Bcontent_type%3Aimage%5D=1&k=%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&order=relevance&price%5B%24%5D=1&safe_search=1&search_page=1&search_type=usertyped&acp=&aco=%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&limit=100&get_facets=0&asset_id=245601545

Для многих рабочих нагрузок синхронизация на основе замковдаже мелкозернистая блокировка, имеет следующие преимущества в плохой работе.

Часто без блокировочные алгоритмы обеспечивают лучшую производительность, за счет более сложного осуществления и дополнительных трудностей с рассуждениями о кодексе. Большая часть этой сложности связана с управлением памятью. Разработчики должны рассуждать не только о других потоках, но и нарушающие локальных допущениях.

А так же о других проблемах, как завершение доступа другим потокам к узлам, чтобы освободить их. В то время узел отделен от структуры данных, и неизвестно количество дополнительных потоков. Возможно уже использовали узел, прочитав указатель на нем, до того, как он стал не связан в кучу.


Ключевым моментом в поиске управляемых решений этой проблемы является то, что и как при традиционном сборе мусора, несвязанные узлы не нуждаются в рекультивации немедленно, но могут быть восстановлены позже, после того, как некоторые протоколы завершатся. Классическим примером являются указатели опасности: все нити активно сотрудничают друг с другом по структурам бухгалтерских данных для отслеживания того, кто использует ту или иную ссылку.

Для структуры с рабочей нагрузкой на чтение, Read-Copy-Update (RCU) обеспечивается следующая привлекательная альтернатива. Стиль программирования похож на комбинацию замков, типа "считыватель — писатель" и "без замка". Многочисленные читатели одновременно ведут минимальный бухгалтерский учет — зачастую ничего, чего бы они еще не сделали.

Одиночный писатель одновременно работает параллельно с читателями, выполняя дополнительную работу по отслеживанию, какие читатели могли заметить в узле, какие они хотели бы разместить. Сейчас внедрение RCU находится во многих общих древовидных структурных данных, и RCU играет ключевую роль в управлении памятью ядра Linux.


Однако примитивы RCU остаются нетривиальными для корректного использования: разработчики должны гарантировать, что они освободят каждый узел ровно один раз, ровно из одного потока, после того, как завершатся другие потоки с соответствующим узлом.

Модель проверки можно использовать для подтверждения корректности реализаций для моделирования клиенту, но это не гарантирует корректность произвольного клиента код. Сложная верификационная логика может доказать правильность примитивов и клиентов RCU. Однако для применения этих методов требуются значительные знания и опыт в области верификации, и они специализируются на отдельных структурных данных или их реализации.

Одна из важных причин усложнения этой логики заключается в том, что сложность лежит в основе модели восстановления памяти. Однако подходящая абстракция позволяет отделить проверку корректности параллельных структур данных от рекультивации, лежащей в ее основе модели при условии сохранности памяти, а также доказательства корректности результатов исследования при условии сохранности памяти.


Предложили типовую систему для обеспечения того, чтобы клиентский код
RCU использовал RCU безопасно, обеспечивая сохранность памяти для параллельных структурных данных с помощью примитивов.

https://stock.adobe.com/ru/search/images?filters%5Bcontent_type%3Aphoto%5D=1&filters%5Bcontent_type%3Aillustration%5D=1&filters%5Bcontent_type%3Azip_vector%5D=1&filters%5Bcontent_type%3Aimage%5D=1&k=%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&order=relevance&price%5B%24%5D=1&safe_search=1&search_page=1&search_type=usertyped&acp=&aco=%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&limit=100&get_facets=0&asset_id=161904586
https://stock.adobe.com/ru/search/images?filters%5Bcontent_type%3Aphoto%5D=1&filters%5Bcontent_type%3Aillustration%5D=1&filters%5Bcontent_type%3Azip_vector%5D=1&filters%5Bcontent_type%3Aimage%5D=1&k=%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&order=relevance&price%5B%24%5D=1&safe_search=1&search_page=1&search_type=usertyped&acp=&aco=%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&limit=100&get_facets=0&asset_id=161904586


Управление памятью RCU


Делается это в общих чертах, не предполагая, что клиент реализует любую специфическую структуру данных, только одна удовлетворяет некоторым базовым свойствам, общую для структурных данных
RCU (например, имеющие древовидную память).


Для этого должны представить официальную операционную модель
RCU .  Примитивы, абстрагирующие множество реализаций, не предполагающие при этом конкретной реализации примитивов RCU .  Описывая нашу семантику и тип RCU докажите, что наш тип системы звука соответствует модели (что обеспечивает сохранность данных) правильно восстановлен, и показать систему в действии на двух важных участках.


Структуры данных RCU включает в себя:


- Общую (абстрактную) операционную модель управления памятью на базе
RCU.- Система типа, обеспечивающая корректное управление памятью RCU, что значительно проще, чем полномасштабная логика верификации.


- Демонстрация типовой системы на двух примерах: сумка на основе связного списка и дерево двоичного поиска.


- Доказательство того, что система данного типа гарантирует сохранность памяти при использовании
RCU примитивами.


Представили системы первого типа, обеспечивающие безопасное управление памятью
RCU и значительно более простую, чем полномасштабная верификация логика. С этой целью предоставили первую общую операционную модель для RCU управление памятью. Основываясь на подходящих абстракциях для RCU в операционной семантике, первыми показываем, что развязывание безопасности памяти возможны доказательства клиентов RCU из базовой модели рекультивации.


Применяли аналогичный подход для развязки проверки корректности структуры данных из лежащей в основе модели рекультивации с учетом обеспечения сохранности памяти для структур данных. 

Продемонстрировали повторное использование типов на двух примерах: пакет на основе связного перечня и дерево двоичного поиска. Насколько известно, кто представляет доказательство безопасности памяти для древовидного клиента RCU

Удалось доказать тип прочность за счет встраивания системы типов в абстрактное параллельное разделение под названием Views Framework и кодировки многих свойств RCU в виде одного из следующих параметров отрицания типа или глобальные инварианты по сравнению с абстрактным состоянием RCU .

Делая это, однажды удалось выплеснуть эти инварианты, как часть доказательства здравого смысла, не нужно было доказывать их для каждого отдельного клиента.