Содержание
что это такое и как с ним работать – простыми словами
Что такое кэш
Кэш (cache) – это совокупность временных копий файлов программ, а также специально отведенное место их хранения для оперативного доступа. Соответственно, кэшированием называется процесс записи этих данных при работе операционной системы и отдельных программ. ОС и приложения кэшируют свои файлы в автоматическом режиме, чтобы впоследствии быстро загружать их из кэша и тем самым быстрее работать.
В чем заключается принцип работы кэша
Большая часть ПО сохраняет свои рабочие файлы в архиве или загружает их на сетевой сервер. Когда пользователь работает с программой, ему требуется некоторое время, чтобы извлечь эти данные. Ускорить процесс можно, сохраняя временные рабочие файлы в кэш, тем самым обходя процедуру разархивации или скачивания. Впоследствии, при очередном обращении программы к этим данным они будут загружаться оперативнее. Чаще всего временные файлы сохраняются в оперативной памяти. Это обусловлено присущей ей высокой скоростью считывания и записи, благодаря чему информация из нее извлекается очень быстро.
Какие существуют способы кэширования
- Аппаратный. В этом случае временные файлы записываются на само устройство в специально отведенные для этого участки памяти. Например, аппаратное кэширование в центральном процессоре выполняется в трех видах cache-памяти – L1, L2 и L3. Это позволяет программам быстро извлечь их при необходимости без обращения к иным устройствам в системе.
- Программный. Кэширование этого типа осуществляется в выделенный участок памяти в операционной системе (как правило, он имеет вид обычной папки). Расположение кэша у различных программ может быть разным. Например, браузеры сохраняют свои временные файлы в свои папки в разделе Document and Settings.
Независимо от того, какой из способов кэширования применяется, этот процесс обеспечивает:
- быстрый доступ к рабочим файлам;
- ускоренную загрузку ПО;
- экономию трафика;
- эффективное использование системных ресурсов;
- повышенную производительность аппаратного и программного обеспечения.
Что такое кэш-память
Кэш-память представляет собой интегрированный в устройство выделенный раздел памяти для сохранения в нем временных рабочих данных и быстрого их извлечения. Она имеется в процессорах и иных устройствах (оперативной памяти, жестком диске) и обеспечивает существенный рост производительности и скорости обработки информации за счет оперативного доступа к нужным файлам. На флеш-накопителях (SSD) ее размер составляет до 4 Гб, на хард-дисках (HHD) – до 256 Мб.
При аппаратном кэшировании временные файлы удаляются, как правило, автоматически, участия пользователя в этом процессе не требуется. Часто он даже не знает о существовании такой системной функции.
Как происходит очистка кэша
Удаление временных рабочих файлов в ОС выполняется, за редким исключением, автоматически и не нуждается в контроле пользователя. Например, для очистки кэша браузера достаточно одновременно нажать комбинацию клавиш Ctrl + F5 на открытой интернет-странице.
В других программах удаление временных данных осуществляется в настройках. Для этого необходимо зайти в соответствующий раздел меню и очистить кэш вручную. В операционной системе Windows таким образом выполняется очистка, как правило, только у браузеров. В iOS на iPhone или iPad данный процесс выполняется в полностью автоматическом режиме, а вот пользователям устройств с ОС Android часто нужно осуществлять его вручную. Однако с выходом каждой новой версии этой операционной системы процедура очистки временных файлов становится более понятной и автоматизированной.
Нужно ли чистить кэш
Иногда кэширование файлов работает некорректно. Из-за этого, например, может загружаться старый контент вместо нового. Зачастую такое случается именно в браузерах. По этой причине кэш необходимо периодически подчищать. Если этого не сделать, то при обновлении данных на сайте (например, при загрузке новых фотографий или изменении стилей) браузер может закачать устаревшую версию контента.
Для его очистки и загрузки актуального содержимого достаточно применить на активной интернет-странице комбинацию Ctrl + F5, после чего она перезагрузится с обновленным наполнением.
В заключение
Мы рассмотрели основные аспекты работы кэша, описали простыми словами, что значит определение, разобрались в назначении процесса и оценили важность регулярной очистки. Эта информация поможет вам эффективно расходовать системные ресурсы своего компьютера, предотвратить возможные сбои при наполнении контентом сайтов, ускорить загрузку и функционирование программного обеспечения. Усвоив эти несложные рекомендации, вы сможете быстрее работать и просто наслаждаться легким и удобным серфингом в интернете.
Другие термины на букву «К»
КлишеКлоноводКоды ошибокКоды перенаправленияКоллтрекингКомьюнитиКонверсияКонтекстная рекламаКонтент
Все термины SEO-Википедии
Теги термина
Что такое кэширование и как оно работает | AWS
Узнайте о различных отраслях и примерах использования кэширования
Мобильные технологии
Мобильные приложения – это сегмент рынка, который растет с невообразимой скоростью, учитывая быстрое освоение устройств потребителем и спад в использовании традиционного компьютерного оборудования. Практически для каждого сегмента на рынке, будь то игры, коммерческие приложения, медицинские программы и т. д., есть приложения с поддержкой мобильных устройств. С точки зрения разработки создание мобильных приложений очень похоже на создание любых других приложений. Вы сталкиваетесь с теми же вопросами на уровнях представления, бизнеса и данных. Несмотря на разницу в пространстве экрана и инструментах для разработчиков, общей целью является обеспечение качественного взаимодействия с клиентом. Благодаря эффективным стратегиям кэширования ваши мобильные приложения могут обеспечивать такой уровень производительности, которого ожидают ваши пользователи, масштабироваться до любых размеров и сокращать общие затраты.
AWS Mobile Hub – это объединенная консоль для удобного поиска, настройки и использования облачных сервисов AWS, предназначенных для разработки и тестирования мобильных приложений, а также мониторинга их использования.
Интернет вещей (IoT)
Интернет вещей – это концепция сбора информации с устройств и из физического мира с помощью датчиков и ее передачи в Интернет или в приложения, которые принимают эти данные. Ценность IoT заключается в способности понимать собранные данные в режиме, близком к реальному времени, что в конечном счете позволяет системе и приложениям, принимающим эти данные, быстро реагировать на них. Возьмем, к примеру, устройство, которое передает свои GPS-координаты. Ваше приложение IoT может предложить интересные места, которые находятся поблизости от этих координат. Кроме того, если вы сохранили предпочтения пользователя устройства, то можете подобрать наиболее подходящие рекомендации для этого пользователя. В этом отдельном примере скорость ответа приложения на полученные координаты критически важна для достижения качественного взаимодействия с пользователем. Кэширование может сыграть в нем важную роль. Интересные места и их координаты можно хранить в хранилище пар «ключ – значение», например в Redis, чтобы обеспечить их быстрое получение. С точки зрения разработки вы можете запрограммировать свое приложение IoT, чтобы оно реагировало на любое событие, если для этого существуют программные средства. При создании архитектуры IoT необходимо рассмотреть некоторые очень важные вопросы, в том числе время ответа при анализе полученных данных, создание архитектуры решения, масштаб которого охватывает N устройств, и экономичность архитектуры.
AWS IoT – это управляемая облачная платформа, которая позволяет подключенным устройствам просто и безопасно взаимодействовать с облачными приложениями и другими устройствами.
Дополнительные сведения: Managing IoT and Time Series Data with Amazon ElastiCache for Redis
Рекламные технологии
Современные приложения в сфере рекламных технологий особо требовательны к производительности. Примером важной области развития в этой сфере является торг в режиме реального времени (RTB). Это подход к трансляции рекламы на цифровых экранах в режиме реального времени, основанный на принципе аукциона и работающий со впечатлениями на самом подробном уровне. RTB был преобладающим способом проведения транзакций в 2015 году, учитывая то, что 74,0 процента рекламы было куплено программными средствами, что в США соответствует 11 миллиардам долларов (согласно eMarketer Analysis). При создании приложения для торгов в режиме реального времени важно учитывать то, что одна миллисекунда может решать, было ли предложение предоставлено вовремя, или оно уже стало ненужным. Это значит, что нужно крайне быстро получать данные из базы. Кэширование баз данных, при использовании которого можно получать данные о торгах за считанные доли миллисекунды, – это отличное решение для достижения такой высокой производительности.
Игровые технологии
Интерактивность – это краеугольный камень каждой современной игры. Ничто так не раздражает игроков, как медленная игра и долгое ожидание реакции. Такие игры редко становятся успешными. Мобильные многопользовательские игры еще требовательнее к производительности, потому что информацию о действии одного игрока необходимо предоставлять другим игрокам в режиме реального времени. Кэширование игровых данных играет решающую роль в бесперебойной работе игры благодаря тому, что время ответа на запросы к часто используемым данным исчисляется в долях миллисекунды. Также важно решить проблемы востребованных данных, когда множество одинаковых запросов отправляется к одним и тем же данным, например «кто входит в первую десятку игроков по счету?»
Подробнее о разработке игр см. здесь.
Мультимедиа
Мультимедийным компаниям часто требуется передавать клиентам большое количество статического контента при постоянном изменении количества читателей или зрителей. Примером является сервис потоковой передачи видео, например Netflix или Amazon Video, которые передают пользователям большой объем видеоконтента. Это идеальный случай для использования сети доставки контента, в которой данные хранятся на серверах кэширования, расположенных во всем мире. Еще одним аспектом медиаприложений является пикообразная и непредсказуемая нагрузка. Возьмем, к примеру, публикацию в блоге на веб-сайте, о которой некоторая знаменитость только что отправила сообщение в Twitter, или веб-сайт футбольной команды во время Суперкубка. Такой высокий пик спроса на маленькое подмножество контента – вызов для многих баз данных, потому их пропускная способность для отдельных ключей ограничена. Поскольку пропускная способность оперативной памяти гораздо выше, чем у дисков, кэш базы данных помогает решить эту проблему путем перенаправления запросов чтения в кэш в памяти.
Интернет-коммерция
Современные приложения для электронной коммерции становятся все сложнее. При совершении покупок в них учитываются личные предпочтения, например в режиме реального времени даются рекомендации, которые основаны на данных пользователя и истории его покупок. Обычно для этого требуется заглянуть в социальную сеть пользователя и взять за основу для рекомендации то, что понравилось друзьям, или то, что они приобрели. Количество данных, которые нужно обработать, растет, а терпение клиентов – нет. Поэтому обеспечение производительности приложения в режиме реального времени – это не роскошь, а необходимость. Хорошо реализованная стратегия кэширования – это важнейший аспект производительности приложения, от которого зависят успех и неудача, продажа товара и потеря клиента.
Приложения для социальных сетей взяли мир штурмом. У таких социальных сетей, как Facebook, Twitter, Instagram и Snapchat, очень много пользователей, и объем контента, который они потребляют, все больше растет. Когда пользователи открывают свои ленты новостей, они ожидают, что увидят свежий персонализированный контент в режиме реального времени. Это не статический контент, поскольку у каждого пользователя разные друзья, фотографии, интересы и т. д., за счет чего обостряется необходимость в усложнении платформы, на которой основано приложение. Кроме того, приложения для социальных сетей подвержены пикам использования во время крупных развлекательных мероприятий, спортивных и политических событий. Устойчивость к пиковым нагрузкам и высокая производительность в режиме реального времени возможны благодаря использованию нескольких уровней кэширования, включая сети доставки контента для статического контента, например изображений, кэш сеансов для учета данных текущих сессий пользователей и кэш баз данных для ускорения доступа к часто запрашиваемому контенту, например последним фотографиям и свежим новостям от близких друзей.
Здравоохранение и здоровый образ жизни
В сфере здравоохранения происходит цифровая революция, благодаря которой медицинское обслуживание становится доступным все большему количеству пациентов во всем мире. Некоторые приложения позволяют пациентам общаться с врачами по видеосвязи, а многие крупные клиники предлагают своим клиентам приложения, в которых можно посмотреть результаты анализов и связаться с медицинским персоналом. Для поддержания здорового образа жизни существует множество приложений: от программ для отслеживания показаний датчиков (например, FitBit и Jawbone) до полных курсов тренировок и подборок данных. Поскольку эти приложения по своей сути интерактивные, необходимо, чтобы они были высокопроизводительными и удовлетворяли бизнес-требованиям и требованиям к данным. Вооружившись эффективной стратегией кэширования, вы сможете обеспечить быструю работу приложений, сократить общие затраты на инфраструктуру и масштабировать ее по мере роста востребованности.
Подробнее о создании приложений для сферы здравоохранения на AWS см. здесь.
Финансы и финансовые технологии
За последние годы потребление финансовых сервисов очень изменилось. Существуют приложения для доступа к банковским и страховым услугам, функциям выявления мошенничества, сервисам инвестирования, оптимизации капитальных рынков с использованием алгоритмов, которые работают в режиме реального времени, а также многие другие приложения. Очень сложно предоставлять доступ к финансовым данным клиента и возможность проведения таких транзакций, как перевод средств или совершение платежей, в режиме реального времени. Во-первых, к приложениям для этой сферы применяются те же ограничения, что и к приложениям для других сфер, в которых пользователю требуется взаимодействовать с приложением в режиме, близком к реальному времени. Кроме того, финансовые приложения могут предъявлять дополнительные требования, например относительно повышенной безопасности и выявления мошенничества. Для того чтобы производительность отвечала ожиданиям пользователя, крайне важно создать эффективную архитектуру с использованием стратегии многоуровневого кэширования. В зависимости от требований приложения уровни кэширования могут включать кэш сеансов для хранения данных о сессиях пользователя, сеть доставки контента для передачи статического контента и кэш базы данных для передачи часто запрашиваемых данных, таких как последние 10 покупок клиента.
Подробнее о финансовых приложениях на AWS см. здесь.
Кэширование файлов в распределенных файловых системах
Кэширование файлов повышает производительность ввода-вывода, поскольку ранее прочитанные файлы хранятся в основной памяти. Поскольку файлы доступны локально, передача по сети обнуляется при повторных запросах этих файлов. Повышение производительности файловой системы основано на локальности шаблона доступа к файлам. Кэширование также помогает повысить надежность и масштабируемость.
Большинство современных распределенных файловых систем используют ту или иную форму кэширования. Схемы кэширования файлов определяются рядом критериев, включая степень детализации кэшированных данных, размер кэша (большой/малый/фиксированный/динамический), политику замены, расположение кэша, механизмы распространения изменений и проверку кэша.
Расположение кэша: Файл может храниться на диске или в основной памяти клиента или сервера в системе клиент-сервер с памятью и диском.
Диск сервера : Это всегда исходное место сохранения файла. Здесь достаточно места на случай, если этот файл будет изменен и станет длиннее. Кроме того, файл виден всем клиентам.
Преимущества: Нет проблем с согласованностью, поскольку каждый файл имеет только одну копию. Когда клиент хочет прочитать файл, требуются две передачи: с диска сервера в основную память и из основной памяти клиента на диск сервера.
Минусы:
- Возможно, оба этих перевода займут некоторое время. Одну часть времени передачи можно избежать, кэшируя файл в основной памяти сервера для повышения производительности.
- Поскольку основная память ограничена, потребуется алгоритм для определения того, какие файлы или части файлов должны храниться в кэше. Этот алгоритм будет основан на двух факторах: единице кэша и механизме замены, применяемом при заполнении кэша.
Основная память сервера : Вопрос заключается в том, следует ли кэшировать весь файл или только блоки диска, когда файл кэшируется в основной памяти сервера. Если кешировать полный файл, его можно хранить в смежных местах, а высокая скорость передачи приводит к хорошей производительности. Кэширование дисковых блоков делает кэш и дисковое пространство более эффективными.
Для решения последней проблемы используются стандартные методы кэширования. По сравнению со ссылками на память, ссылки на кэш встречаются довольно редко. Самый старый блок может быть выбран для вытеснения в LRU (наименее недавно использованный). Кэш-копию можно удалить, если на диске есть актуальная копия. Кэш-данные также могут быть записаны на диск. Клиенты могут легко и прозрачно получить доступ к кэшированному файлу в основной памяти сервера. Сервер может легко поддерживать согласованность дисков и копий файла в основной памяти. По словам клиента, в системе существует только одна копия файла.
Диск клиента : Данные также могут быть сохранены на жестком диске клиента. Хотя передача по сети сокращается, в случае попадания в кэш необходимо получить доступ к диску. Поскольку измененные данные будут доступны в случае потери данных или сбоя, этот метод повышает надежность. Затем информацию можно восстановить с жесткого диска клиента.
Даже если клиент отключен от сервера, доступ к файлу сохраняется. Поскольку доступ к диску может осуществляться локально, нет необходимости обращаться к серверу, что повышает масштабируемость и надежность.
Преимущества:
- Повышенная надежность благодаря возможности восстановления данных в случае их потери.
- Диск клиента имеет значительно больший объем памяти, чем основная память клиента. Можно кэшировать больше данных, что приводит к максимальному коэффициенту попаданий в кэш. Большинство распределенных файловых систем используют архитектуру передачи данных на уровне файлов, в которой кэшируется весь файл.
- Масштабируемость повышается, поскольку доступ к диску может осуществляться локально.
Недостатки:
- Единственным недостатком является то, что дисковое кэширование несовместимо с бездисковыми рабочими станциями. Каждый кеш требует доступа к диску, что приводит к значительному увеличению времени отклика. Необходимо решить, следует ли кэшировать в основной памяти сервера или на диске клиента.
- Хотя серверное кэширование устраняет необходимость доступа к диску, по-прежнему требуется передача данных по сети. Кэширование данных на стороне клиента — это решение для сокращения времени передачи по сети. Должна ли система использовать основную память клиента или диск, зависит от того, нужно ли системе экономить место или повышать производительность.
- Медленный доступ, если на диске больше места. Основная память сервера может быть в состоянии предоставить файл быстрее, чем диск клиента. Кэширование можно сделать на диске клиента, если размер файла очень большой. На рисунке ниже показан самый простой способ, т. е. отказ от кэширования.
Основная память клиента : После согласования того, что файлы должны кэшироваться в памяти клиента, кэширование может выполняться в адресном пространстве пользовательского процесса, в ядре или диспетчере кеша в качестве пользовательского процесса .
Второй вариант — кэшировать файлы в адресном пространстве каждого пользовательского процесса, как показано ниже:
Библиотека системных вызовов отвечает за кэширование. Файлы открываются, закрываются, читаются и записываются во время выполнения процесса. Библиотека сохраняет наиболее часто используемые файлы, чтобы при необходимости их можно было использовать повторно. Обновленные файлы возвращаются на сервер после завершения операции. Когда отдельные процессы регулярно открывают и закрывают файлы, этот метод работает хорошо.
Это нормально для менеджеров баз данных, но не для программистов, работающих в условиях, когда доступ к файлам может быть закрыт.
Файл может быть кэширован в ядре, а не в адресном пространстве пользовательского процесса, как показано. Однако этот метод требует множества системных вызовов для доступа к файлу при каждом попадании в кэш.
Для кэширования файлов можно использовать отдельный менеджер кэша пользовательского уровня. В результате ядру больше не нужно поддерживать код файловой системы, и оно становится более изолированным и гибким. Ядро может принять решение о распределении памяти для программы и кэша во время выполнения. Ядро может хранить некоторые кэшированные файлы на диске, если менеджер кэша работает в виртуальной памяти, а блоки переносятся в основную память при попадании в кэш.
Преимущества :
- Этот метод является более изолированным и гибким (поскольку ядру больше не нужно поддерживать код файловой системы)
- Когда отдельные процессы регулярно открывают и закрывают файлы, время доступа уменьшается. Итак, прирост производительности максимальный.
- Позволяет использовать бездисковые рабочие станции.
- Способствует масштабируемости и надежности системы.
Недостатки :
- Требуется отдельный менеджер кэша на уровне пользователя.
- Принципы клиентского кэширования не имеют значения для виртуальной памяти, хотя менеджер кэша может блокировать некоторые часто запрашиваемые страницы.
Согласованность кэша — политика обновления кэша :
Когда кэш расположен на клиентском узле, несколько пользователей могут одновременно обращаться к одним и тем же данным или файлу в файловой системе. Если все кэши содержат одни и те же самые последние данные, они считаются согласованными. Возможно, что данные станут несогласованными, если некоторые пользователи изменят файл. Распределенная система, использующая DFS, должна обеспечивать согласованность своих копий данных.
В зависимости от того, когда следует распространять изменения на сервер и как проверять подлинность данных кэша, предоставляется множество стратегий согласованности. Тремя типами являются сквозная запись, запись при закрытии и централизованное управление.
Когда кеш находится на узле клиента и один пользователь записывает данные в кеш, он также должен быть виден другим пользователям. Письменная политика определяет, когда выполняется запись.
Существует четыре политики обновления кэша:
- Сквозная запись : Когда новый пользователь редактирует запись в кэше с помощью этого метода, она немедленно записывается на сервер. Любая процедура, требующая файл с сервера, теперь всегда будет получать самую актуальную информацию. Рассмотрим следующий сценарий: клиентский процесс читает файл, кэширует его, а затем завершает работу. Другой клиент изменяет тот же файл и вскоре отправляет изменения на сервер.
Если процесс запущен на первой машине с кешированной копией файла, он получит устаревшую копию. Чтобы этого избежать, сравните время модификации обеих копий, кэшированной копии на машине клиента и загруженной копии на сервере, чтобы проверить файл с сервером. - Отложенная запись : Чтобы уменьшить непрерывный сетевой трафик, периодически записывайте все обновления на сервер или объединяйте их вместе. Он известен как «отложенная запись». Этот метод повышает производительность, позволяя выполнять одну операцию массовой записи, а не несколько небольших операций записи. В этом случае временный файл не сохраняется на файловом сервере.
- Запись при закрытии : Один шаг вперед — записать файл обратно на сервер только после его закрытия. «Запись при закрытии» — так называется алгоритм. Вторая запись перезаписывает первую, если два кэшированных файла записываются друг за другом. Это сравнимо с тем, что происходит, когда два процесса читают или записывают данные в свое собственное адресное пространство, а затем выполняют обратную запись на сервер в однопроцессорной системе.
- Централизованное управление : В целях отслеживания клиент отправляет информацию о файлах, которые он только что открыл, на сервер, который затем выполняет чтение, запись или и то, и другое. Несколько процессов могут читать из одного и того же файла, но как только один процесс откроет файл для записи, всем другим процессам будет отказано в доступе. После того, как сервер получит уведомление о закрытии файла, он обновит свою таблицу, и только после этого к файлу смогут получить доступ дополнительные пользователи.
Схема проверки кэша :
Когда данные кэша изменяются, политика распространения модификации сообщает, когда обновляется главная копия файла на узле сервера. Он не предоставляет информации о том, когда обновляются данные файлов в кэшах других узлов. Данные из файла могут храниться в кэшах многих узлов одновременно.
Когда другой клиент изменяет данные, соответствующие элементу кэша в главной копии файла на сервере, запись кэша клиента устаревает. Требуется проверить, совпадают ли данные, кэшированные на клиентском узле, с мастер-копией. Если это не так, кэшированные данные должны быть признаны недействительными, а новая версия данных должна быть запрошена с сервера.
Для проверки достоверности данных кэша есть 2 схемы:
- Подход, инициированный клиентом : Клиент подключается к серверу и проверяет, что данные, которые он имеет в своем кэше, соответствуют основной копии. Проверка может выполняться в разное время, как-
- Проверка перед каждым доступом: Поскольку здесь сервер должен вызываться каждый раз при доступе, это сводит на нет фактическую цель кэширования данных.
- Периодическая проверка: Проверка выполняется с заданным интервалом
- Проверка открытия файла: Запись кэша проверяется при открытии файла.
- Подход, инициируемый сервером : Когда клиент открывает файл, он информирует файловый сервер о цели открытия файла — чтение, запись или и то, и другое. Затем файловый сервер обязан отслеживать, какой клиент работает с каким файлом и в каком режиме (режимах). Когда сервер определяет любую возможность несогласованности, когда файл используется различными клиентами, он реагирует.
- Клиент уведомляет сервер о закрытии, а также о любых изменениях, внесенных в файл, когда он закрывает файл. Затем сервер обновляет свою базу данных, чтобы отразить, у каких клиентов какие файлы открываются в каких режимах.
- Сервер может отклонить/поставить запрос в очередь или отключить кэширование, запросив, чтобы все клиенты, у которых открыт файл, удалили его из своих кэшей всякий раз, когда новый клиент запрашивает открытие файла, который уже открыт, и сервер обнаруживает любое несоответствие, которое там/может произойти.
Кэширование файлов — приложения Win32
Редактировать
Твиттер
Фейсбук
Эл. адрес
- Статья
- 4 минуты на чтение
По умолчанию Windows кэширует данные файлов, которые считываются с дисков и записываются на диски. Это означает, что операции чтения считывают данные файла из области системной памяти, известной как кэш системных файлов, а не с физического диска. Соответственно, операции записи записывают данные файла в системный файловый кэш, а не на диск, и этот тип кеша называется кешем с обратной записью. Кэширование управляется для каждого файлового объекта.
Кэширование происходит под управлением диспетчера кэша , который работает непрерывно во время работы Windows. Файловые данные в системном файловом кеше записываются на диск с интервалами, определяемыми операционной системой, и память, ранее использовавшаяся для этих файловых данных, освобождается — это называется очисткой кеша. Политика задержки записи данных в файл и удержания их в кэше до тех пор, пока кэш не будет очищен, называется ленивой записью и запускается диспетчером кэша через определенные промежутки времени. Время, когда блок данных файла очищается, частично зависит от количества времени, в течение которого он был сохранен в кэше, и от количества времени, прошедшего с момента последнего доступа к данным в операции чтения. Это гарантирует, что данные файла, которые часто считываются, останутся доступными в кэше системных файлов в течение максимального времени.
Этот процесс кэширования файловых данных показан на следующем рисунке.
Как показано сплошными стрелками на предыдущем рисунке, область данных размером 256 КБ считывается в «слот» кэша размером 256 КБ в системном адресном пространстве, когда он впервые запрашивается диспетчером кэша во время операции чтения файла. Затем процесс пользовательского режима копирует данные из этого слота в свое собственное адресное пространство. Когда процесс завершает доступ к данным, он записывает измененные данные обратно в тот же слот системного кеша, как показано пунктирной стрелкой между адресным пространством процесса и системным кешем. Когда диспетчер кеша определяет, что данные больше не нужны в течение определенного периода времени, он записывает измененные данные обратно в файл на диске, как показано пунктирной стрелкой между системным кешем и диском.
Величина повышения производительности операций ввода-вывода, обеспечиваемая кэшированием файловых данных, зависит от размера читаемого или записываемого блока файловых данных. При чтении и записи больших блоков файловых данных более вероятно, что для завершения операции ввода-вывода потребуются операции чтения и записи с диска. Производительность ввода-вывода будет ухудшаться по мере увеличения количества таких операций ввода-вывода.
В таких случаях кэширование можно отключить. Это делается во время открытия файла путем передачи FILE_FLAG_NO_BUFFERING как значение параметра dwFlagsAndAttributes CreateFile . Когда кэширование отключено, все операции чтения и записи напрямую обращаются к физическому диску. Однако метаданные файла все еще могут кэшироваться. Чтобы сбросить метаданные на диск, используйте функцию FlushFileBuffers .
Частота промывки является важным фактором, который уравновешивает производительность системы и ее надежность. Если система очищает кеш слишком часто, количество больших операций записи, выполняемых при очистке, значительно снижает производительность системы. Если система не очищается достаточно часто, то выше вероятность того, что либо системная память будет исчерпана кешем, либо перед сбросом произойдет внезапный сбой системы (например, отключение питания компьютера). В последнем случае кэшированные данные будут потеряны.
Чтобы обеспечить правильное количество сбросов, диспетчер кэша каждую секунду порождает процесс, называемый отложенной записью. Процесс ленивой записи ставит в очередь одну восьмую страниц, которые недавно не были сброшены, для записи на диск. Он постоянно переоценивает объем сбрасываемых данных для оптимальной производительности системы, и если необходимо записать больше данных, он ставит в очередь больше данных.