![]() |
Буферизация файлов в WindowsВ этой статье рассматриваются различные аспекты прикладного управления буферизацией файлов, также известной как небуферизованный ввод-вывод файлов (I/O). Буферизация файлов обычно обрабатывается системой за кулисами и считается частью кэширования файлов в операционной системе Windows, если не указано иное. Хотя термины кэширование и буферизация иногда используются взаимозаменяемо, в этой статье термин буферизация используется специально в контексте объяснения того, как взаимодействовать с данными, которые не кэшируются (буферизуются) системой, где они в противном случае в значительной степени находятся вне прямого контроля приложений пользовательского режима. При открытии или создании файла с помощью функции CreateFile можно указать флаг FILE_FLAG_NO_BUFFERING, чтобы отключить системное кэширование данных, считываемых из файла или записываемых в него. Хотя это дает полный и прямой контроль над буферизацией ввода-вывода данных, в случае файлов и аналогичных устройств необходимо учитывать требования к выравниванию данных. Примечание. Эта информация о выравнивании применяется к вводу-выводу на таких устройствах, как файлы, поддерживающие поиск и концепцию указателей положения файлов (или смещений). Для устройств, которые не ищут, таких как именованные каналы или коммуникационные устройства, отключение буферизации может не требовать какого-либо конкретного выравнивания. Любые ограничения или эффективность, которые могут быть получены путем выравнивания в этом случае, зависят от базовой технологии. В простом примере приложение откроет файл для доступа на запись с флагом FILE_FLAG_NO_BUFFERING, а затем выполнит вызов функции WriteFile, используя буфер данных, определенный в приложении. Этот локальный буфер в этих обстоятельствах фактически является единственным файловым буфером, который существует для этой операции. Из-за расположения физического диска, расположения хранилища файловой системы и отслеживания положения указателя файла на системном уровне эта операция записи завершится неудачей, если локально определенные буферы данных не будут соответствовать определенным критериям выравнивания, описанным ниже. Примечание. Обсуждение кэширования не рассматривает никакого аппаратного кэширования на самом физическом диске, которое в любом случае не гарантированно находится под непосредственным контролем системы. Это никак не влияет на требования, указанные в данной статье. Требования к выравниванию и доступу к файлам Как уже говорилось ранее, приложение должно соответствовать определенным требованиям при работе с файлами, открытыми с помощью FILE_FLAG_NO_BUFFERING. Применяются следующие особенности:
В результате такой эмуляции, по сути, существуют два размера секторов, которые разработчикам необходимо будет понять:
Корпорация Майкрософт настоятельно рекомендует разработчикам выровнять небуферизованный ввод-вывод по размеру физического сектора, как указано в управляющем коде IOCTL_STORAGE_QUERY_PROPERTY, чтобы обеспечить подготовку своих приложений к этому переходу размера сектора. Windows Server 2003 и Windows XP: структура STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR недоступна. Он был представлен вместе с Windows Vista и Windows Server 2008. Поскольку адреса буферов для операций чтения и записи должны быть выровнены по секторам, приложение должно иметь прямой контроль над распределением этих буферов. Одним из способов выравнивания буферов по секторам является использование функции VirtualAlloc для выделения буферов. Рассмотреть следующее:
Другой способ получить выровненные вручную буферы памяти-это использовать функцию _aligned_malloc из библиотеки среды выполнения C. ![]() Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда. ![]() Читайте также: |
Мои услуги
|
© upread.ru 2013-2022 При перепечатке активная ссылка на сайт обязательна. |