Обеспечение высокой производительности диспетчера кэша и памяти
По умолчанию Windows кэширует данные файлов, которые считываются с дисков и записываются на диски. Это означает, что при операциях чтения данные файлов считываются из области в системной памяти, известной как системный файловый кэш, а не с физического диска. Соответственно, при операциях записи данные файлов записываются в системный файловый кэш, а не на диск. Такой тип кэша называется кэшем обратной записи. Управление кэшированием осуществляется для каждого файлового объекта. Кэшированием управляет диспетчер кэша, который работает непрерывно, пока выполняется Windows.
Данные файлов в системном файловом кэше записываются на диск с интервалами, определяемыми операционной системой. Записанные на диск страницы остаются либо в рабочем наборе системного кэша (если задан параметр FILE_FLAG_RANDOM_ACCESS и не был закрыт дескриптор файла), либо в списке ожидания, где они хранятся в доступной памяти.
Политика отсрочки записи данных в файл и хранения в кэше, пока кэш очищается, называется отложенной записью. Она активируется диспетчером кэша через определенный интервал. Время записи на диск блока данных частично зависит от длительности его хранения в кэше, а также от времени, прошедшего с момента последнего обращения к этим данным при выполнении операции чтения. Это гарантирует, что данные файлов, которые часто считываются, останутся доступными в системном файловом кэше максимально долго.
Этот процесс кэширования данных файлов показан на следующем рисунке.
Как показано на предыдущем рисунке сплошными стрелками, область размером в 256 КБ данных считывается в слот кэша размером в 256 КБ в системном адресном пространстве, когда диспетчер кэша впервые запрашивает ее во время операции чтения файла. Затем процесс пользовательского режима копирует данные из этого слота в свое собственное адресное пространство. Завершив обращение к данным, процесс записывает измененные данные в тот же слот в системном кэше. На рисунке это обозначено пунктирной стрелкой между адресным пространством процесса и системным кэшем. Когда диспетчер кэша определяет, что определенное время данные уже требуются, он записывает измененные данные в файл на диске, как показано пунктирной стрелкой между системным кэшем и диском.
В этом разделе: