stringtranslate.com

tmpfs

tmpfs ( сокращение от Temporary File S ystem ) — это парадигма временного хранения файлов , реализованная во многих Unix-подобных операционных системах. Она должна выглядеть как смонтированная файловая система , но данные хранятся в энергозависимой памяти, а не на постоянном устройстве хранения.

Идея tmpfs по своей концепции похожа на RAM disk , поскольку оба предоставляют файловую систему, хранящуюся в энергозависимой памяти; однако реализации различаются. В то время как tmpfs реализован на логическом уровне файловой системы , RAM disk реализован на физическом уровне файловой системы. Другими словами, RAM disk — это виртуальное блочное устройство с обычной файловой системой, работающей поверх него, в то время как tmpfs — это виртуальная файловая система без какого-либо базового блочного устройства.

Семантика

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

Память, используемая tmpfs, увеличивается и уменьшается в зависимости от содержащихся в ней файлов.

Многие дистрибутивы Unix включают и используют tmpfs по умолчанию для ветви /tmp файловой системы или для общей памяти . Это можно наблюдать с помощью df , как в этом примере:

Файловая система Размер Использовано Доступно Использовано% Смонтировано наtmpfs 256M 688K 256M 1% /tmp

В некоторых дистрибутивах Linux (например, Debian) tmpfs по умолчанию не смонтирована в /tmp ; в этом случае файлы в /tmp будут храниться в той же файловой системе, что и / .

Почти во всех дистрибутивах Linux tmpfs монтируется в /run/ или /var/run/ для хранения временных файлов времени выполнения, таких как файлы PID и сокеты домена Unix .

Реализации

Существует несколько независимых вариантов концепции tmpfs. Один из самых ранних был разработан Sun Microsystems для SunOS, а другие операционные системы, такие как BSD и Linux, предоставили свои собственные.

SunOS

SunOS 4 включает в себя, скорее всего, самую раннюю реализацию tmpfs; она впервые появилась в SunOS 4.0 в конце 1987 года вместе с новым ортогональным управлением адресным пространством, которое позволяло отображать любой объект в памяти. [1] [2]

Каталог Solaris /tmp был создан как файловая система tmpfs по умолчанию, начиная с версии Solaris 2.1, [3] выпущенной в декабре 1992 года. [4] Вывод команды Solaris покажет swap в качестве фонового хранилища для любого тома tmpfs:df

# дф -к Файловая система кбайт используется доступная емкость Смонтировано на своп 601592 0 601592 0% /tmp/test

Линукс

tmpfs поддерживается ядром Linux , начиная с версии 2.4 (4 января 2001 г.). [5] Linux tmpfs (ранее известная как shm fs ) [6] основана на коде ramfs, используемом во время загрузки, и также использует кэш страниц , но в отличие от ramfs она поддерживает выгрузку редко используемых страниц в пространство подкачки, а также ограничения на размер файловой системы и inode для предотвращения ситуаций нехватки памяти (по умолчанию половина физической оперативной памяти и половина количества страниц оперативной памяти соответственно). [7]

БСД

В 4.2BSD была представлена ​​MFS [8] — файловая система на основе памяти, реализованная путем применения существующей файловой системы диска FFS к области виртуальной памяти.

tmpfs, файловая система памяти, реализованная с использованием обычных структур данных в памяти для повышения производительности MFS, была включена в официальное исходное дерево NetBSD 10 сентября 2005 года; [9] она доступна в версии 4.0 и более поздних.

FreeBSD перенесла реализацию NetBSD, и теперь она доступна в версиях 7.0 и более поздних. [10]

DragonFly BSD также портировала реализацию NetBSD, которая доступна в версиях 2.5.1 и более поздних.

OpenBSD также перенесла реализацию tmpfs из NetBSD, изначально начатую Педро Мартеллетто и улучшенную многими другими. Она была включена в сборках от 17 декабря 2013 года. [11] Первый выпуск OpenBSD с включенным tmpfs был 5.5. [12] OpenBSD 6.0 отключил tmpfs из-за отсутствия поддержки.

Майкрософт Виндоус

В Microsoft Windows создание файлов с использованием флага FILE_ATTRIBUTE_TEMPORARY заставит файловые системы избегать записи данных обратно в энергонезависимое хранилище, если доступно достаточно кэш-памяти. [13]

Преимущества

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

Недостатки

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

Если файлы кэша хранятся в tmpfs, программы будут терять свои кэшированные данные при перезагрузках.

Ссылки

  1. ^ Питер Снайдер. "tmpfs: Файловая система виртуальной памяти" (PDF) . Получено 2007-05-07 .
  2. ^ Хэл Л. Стерн. "SunOS 4.1 Performance Tuning". Архивировано из оригинала ( GZipped PostScript) 2012-02-07 . Получено 2007-05-07 .
  3. ^ "SPARC: Установка программного обеспечения Solaris" (PDF) . SunSoft. Декабрь 1992 г. стр. 9. Получено 23 апреля 2019 г.
  4. ^ "Операционная система Solaris (Unix)". operating-system.org .
  5. ^ Дэниел Роббинс (2001-09-01). "Общие потоки: Руководство по внедрению расширенных файловых систем, часть 3". IBM DeveloperWorks. Архивировано из оригинала 2012-02-03 . Получено 2013-02-15 .
  6. ^ Дэниел Роббинс (2001-09-01). "Общие потоки: Руководство по внедрению расширенных файловых систем, часть 3". IBM DeveloperWorks. Архивировано из оригинала 2012-02-03 . Получено 2013-02-15 .
  7. ^ Кристоф Роланд; Хью Дикинс; КОСАКИ Мотохиро. "tmpfs.txt". kernel.org . Получено 16.03.2010 .
  8. ^ "Страница руководства NetBSD mount_mfs(8)". 2007-12-08 . Получено 2013-02-15 .
  9. ^ Хулио М. Мерино Видал (24.02.2006). "NetBSD-SoC: Эффективная файловая система памяти" . Получено 15.02.2013 .
  10. ^ Xin LI (2013-04-23). ​​"FreeBSD tmpfs(5) manpage" . Получено 2008-12-02 .
  11. ^ "CVS: cvs.openbsd.org: src - включите tmpfs, чтобы его протестировали еще раз".
  12. ^ "OpenBSD 5.5". 2014-05-01 . Получено 2014-05-01 .
  13. ^ alvinashcraft (2023-02-09). "Функция CreateFileA (fileapi.h) - приложения Win32". learn.microsoft.com . Получено 2024-06-27 .

Внешние ссылки