Постоянная память
В информатике . постоянная память — это любой метод или устройство для эффективного хранения структур данных, чтобы к ним можно было продолжать обращаться с помощью инструкций памяти или API-интерфейсов памяти даже после завершения процесса, который их создал или последний раз модифицировал [ 1 ]
Постоянная память, которую часто путают с энергонезависимой памятью с произвольным доступом (NVRAM), вместо этого более тесно связана с концепцией постоянства , поскольку в ней делается акцент на состоянии программы, которое существует за пределами зоны сбоя процесса, который ее создал. (Процесс — это исполняемая программа. Зона сбоя процесса — это то подмножество состояния программы, которое может быть повреждено , если процесс продолжает выполняться после возникновения ошибки, например, из-за ненадежного компонента, используемого в компьютере, выполняющем программу. .)
Эффективный доступ, подобный памяти, является определяющей характеристикой постоянной памяти. [ 2 ] Это может быть обеспечено с помощью микропроцессора инструкций памяти , таких как загрузка и сохранение. Его также можно предоставить с помощью API, которые реализуют действия удаленного прямого доступа к памяти (RDMA), такие как чтение RDMA и запись RDMA. Другие методы с малой задержкой , позволяющие выполнять побайтовую обработку. [ нужны разъяснения ] доступ к данным также имеет право.
Возможности постоянной памяти выходят за рамки энергонезависимости хранимых битов. Например, потеря ключевых метаданных, таких как записи таблицы страниц или других конструкций, которые преобразуют виртуальные адреса в физические адреса, может сделать устойчивые биты непостоянными. В этом отношении постоянная память напоминает более абстрактные формы компьютерного хранилища, такие как файловые системы . Фактически, почти все существующие технологии постоянной памяти реализуют по крайней мере базовую файловую систему, которую можно использовать для связи имен или идентификаторов с хранимыми экстентами, и как минимум предоставляют методы файловой системы, которые можно использовать для именования и распределения таких экстентов.
Проблема чтения непостоянной записи
[ редактировать ]непостоянной записи возникает для блокировки программ без Проблема чтения или в постоянной памяти. Поскольку операции сравнения и замены (CAS) не сохраняют записанные значения в постоянной памяти, измененные данные могут быть сделаны видимыми с помощью протокола когерентности кэша для параллельного наблюдателя до того, как измененные данные смогут наблюдаться наблюдателем сбоев в постоянной памяти. . Если сбой питания происходит сразу после того, как запись становится видимой, но еще не постоянной, может возникнуть проблема чтения непостоянной записи, т. е. переменная данных, которая изменяется в результате операции сравнения и замены, может быть сделана видимый одновременно наблюдателю перед наблюдателем сбоев, что приводит к потенциальным несоответствиям сбоев.
Чтобы проиллюстрировать проблему: для односвязного списка без блокировки узел может быть вставлен производителем. thread A
после head
узел, next
указатель головного узла автоматически переключается (CAS), чтобы указать на новый node A
, однако этот CAS не сохраняется. Затем производитель вставляет еще один узел. thread B
после node A
, как CAS для node A
уже виден всем параллельным потокам. CAS атомарно переключает next
указатель node A
указать на node B
, и этот CAS сохраняется. Если на этом этапе произойдет сбой питания, приложение, использующее связанный список, останется в несогласованном состоянии, причем оба node A
и node B
проиграл, так как next
указатель из head
узел для node A
не сохранилось. Как node B
был опубликован, но к нему невозможно получить доступ после перезагрузки, а также могли сохраниться другие данные, доступ к которым осуществляется через или зависит от него. node B
, все последующие доступы к таким данным будут невозможны, что приведет к потере данных. [ 3 ]
Проблема чтения-непостоянной записи не ограничивается связанными списками без блокировок, ее можно обнаружить в любых структурах данных без блокировок, где может существовать потенциальный разрыв между параллельной видимостью и постоянной видимостью. Например, аналогичная проблема может возникнуть с постоянными циклическими буферами . [ 4 ]
См. также
[ редактировать ]- NOVA (файловая система) или «ускоренная энергонезависимая память», файловая система с журнальной структурой с открытым исходным кодом для постоянной памяти с байтовой адресацией.
- Постоянные данные , информация, к которой редко обращаются и которая вряд ли будет изменена.
- Постоянные структуры данных — структура данных, которая всегда сохраняет предыдущую версию себя при изменении (фактически неизменяемая).
- Phantom OS — постоянная операционная система.
Ссылки
[ редактировать ]- ^ Сатиш М. Татте. 1986. Постоянная память: архитектура хранения для объектно-ориентированных систем баз данных. В материалах международного семинара 1986 года по объектно-ориентированным системам баз данных (OODS '86). Издательство IEEE Computer Society, Лос-Аламитос, Калифорния, США, 148–159.
- ^ П. Мехра и С. Файнберг, «Быстрая и гибкая устойчивость: волшебное зелье для отказоустойчивости, масштабируемости и производительности в онлайн-хранилищах данных», 18-й Международный симпозиум по параллельной и распределенной обработке, 2004. Труды., Санта-Фе, Нью-Мексико, США, 2004, стр. 206-. дои: 10.1109/IPDPS.2004.1303232
- ^ Ван, Уильям; Дистельхорст, Стефан (17 июня 2019 г.). «Постоянные атомы для реализации устойчивых структур данных без блокировки для энергонезависимой памяти (краткое объявление)» . 31-й симпозиум ACM по параллелизму в алгоритмах и архитектурах . Ассоциация вычислительной техники. стр. 309–311. дои : 10.1145/3323165.3323166 . ISBN 9781450361842 . S2CID 195064876 – через цифровую библиотеку ACM.
- ^ Вольчко, Марио (26 апреля 2019 г.). «Энергонезависимая память и Java: Часть 2» . Середина .
Внешние ссылки
[ редактировать ]- Программирование постоянной памяти — коллекция ресурсов, связанных с программированием постоянной памяти.
- Контейнеры и постоянные данные , LWN.net , 28 мая 2015 г., Джош Беркус
- Асинхронное обновление DRAM (ADR) , SNIA , январь 2014 г. (также применимо к DRAM)
- Twizzler: Операционная система для иерархий памяти следующего поколения , Дэниел Биттман, Мэтт Брайсон, Юаньцзян Ни, Арджун Говинджи, Исаак Чердак, Панкадж Мехра, Даррел Д.Э. Лонг и Итан Л. Миллер