СПОСОБ ДОБАВЛЕНИЯ ЗАПИСЕЙ О МОДИФИКАЦИИ ФАЙЛОВ
METHOD OF ADDING FILE MODIFICATION RECORDS

Предпосылки создания изобретения
Изобретение относится к антивирусной защите, в частности к устройствам, способам и носителям ведения журнала, создаваемого драйвером.
В настоящее время существует множество различных вирусов, которые представляют угрозу для компьютеров. Эти вирусы осуществляют заражение компьютеров, что приводит к неправильной работе компьютеров, а в некоторых случая к заражению этим компьютером других компьютеров.
В этой связи постоянно развиваются и совершенствуются средства антивирусной защиты.
Существует множество различных устройств и способов проведения проверок компьютеров на наличие вирусов. Один из таких способов основывается на определении модификации файла. Для этого формируют журнал, в который вносится информация о каждой модификации файла или файлов. При антивирусном сканировании компьютера осуществляется обращение к этому журналу с целью определения модификаций файлов и дальнейшего установления наличия вируса на компьютере. Такие способы описаны в заявках US 2006/0294589, US 2007289019 и патенте US 7114184.
Каждый раз по результатам антивирусного сканирования формируется база данных, в которую заносится информация о проверенных антивирусом файлах. Причем драйвер вынужден каждый раз обращаться к базе данных для получения информации о проверенных файлах.
Таким образом, возникает необходимость в сокращении числа обращений драйвера к базе данных.
Кроме того, такая база данных должна иметь достаточный объем памяти для того, чтобы хранить всю информацию о проверенных файлах.
В связи с этим возникает необходимость в сокращении размера базы данных проверенных антивирусом файлов и оптимизации ведения обращений к этой базе данных.
Краткое изложение изобретения
Заявленное изобретение направлено на достижение технического результата, заключающегося в уменьшении времени доступа драйвера к базе данных и файлу журнала, а также в оптимизации доступа к файлу журнала.
Согласно одному объекту заявленного изобретения способ записи информации о модификации файлов содержит следующие этапы, на которых:
драйвер обнаруживает по меньшей мере один модифицированный файл и добавляет в кольцевой кэш по меньшей мере одну запись о модификации этого файла, содержащую минимальную информацию о модифицированном файле, при этом с кэшем связана управляющая структура, содержащая смещение, с которого драйвер может осуществлять поиск записей, которые уже были записаны в журнал модифицированных файлов, но еще не записаны в базу данных, содержащую проверенные антивирусным приложением файлы;
через заданный интервал времени драйвер осуществляет перенос упомянутой по меньшей мере одной записи из кэша в журнал;
через заданный интервал времени драйвер осуществляет перенос упомянутой по меньшей мере одной записи из журнала в базу данных, при этом из кольцевого кэша удаляют записи, которые были перенесены из журнала;
причем перед добавлением упомянутых записей в кольцевой кэш драйвер осуществляет проверку, имеется ли в кольцевом кэше по меньшей мере одна запись, содержащая минимальную информацию о модифицированном файле, при этом если такой записи нет, то драйвер осуществляет добавление этой записи в кольцевой кэш;
причем, если в кэше нет места, то драйвер производит остановку процесса записи новой информации в кэш и переводит процесс работы кэша в состояние ожидания;
причем при добавлении упомянутой записи в журнал:
через определенный момент времени драйвер анализирует кэш на наличие новых записей, и если записи есть, то он определяет количество записей о модифицированных файлах в кэше и начинает анализ заголовка журнала или упомянутой управляющей структуры для того, чтобы определить, имеется ли место в журнале для записи упомянутого определенного количества записей, при этом при наличии места в журнале драйвер добавляет по меньшей мере одну новую запись о модифицированном файле в журнал,
при отсутствии места в журнале драйвер переводит подсистему ведения журнала в состояние ожидания запроса от приложения;
причем при добавлении упомянутой записи в базу данных:
через определенный момент времени приложение анализирует, есть ли новые записи в файле журнала и, если они есть, то приложение вычитывает новые записи из журнала;
после этого приложение посылает запрос драйверу на удаление прочитанного количества записей из журнала и кэша для освобождения места для новых записей.
В частном варианте реализации способа упомянутый заголовок журнала также содержит уникальный идентификатор файла журнала, полный размер заголовка, флаги состояния журнала, размер записи-элемента журнала, смещение (WriteOffset), по которому драйвер может записывать новые записи из кольцевого кэша, смещение (ReadOffset), с которого приложение может считывать записи для передачи в базу данных.
Еще в одном частном варианте реализации способа кольцевой кэш также содержит смещение (WriteIndex), по которому драйвер может добавлять новые записи в кольцевой кэш, смещение (ReadIndex), по которому драйвер осуществляет перенос записей из кэша в журнал, которые не были прочитаны приложением из журнала, смещение (FlushIndex), с которого драйвер может считывать записи из кэша в журнал, текущее количество непрочитанных записей в кэше (EntryCount).
В другом частном варианте реализации способа на упомянутом этапе добавления драйвером по меньшей мере одной новой записи о модифицированном файле при наличии места в кэше драйвер увеличивает на количество модифицированных записей значение WriteIndex кольцевого кэша, также как и поле EntryCount.
В другом частном варианте реализации способа минимальная информация о модификации файла содержит хэш имени тома и внутренний идентификатор файла.
Согласно еще одному варианту реализации предлагается способ предоставления приложению определенной записи с информацией о модификации файлов, который содержит этапы, на которых:
драйвер проводит поиск записи в кэше в определенном интервале;
при нахождении записи в кэше она сразу возвращается приложению, при этом найденная запись не удаляется.
В частном варианте реализации интервал включает смещения индексов от ReadIndex до WriteIndex.
Согласно второму объекту заявленного изобретения предлагается машиночитаемый носитель, содержащий записанные на нем команды, исполняемые компьютером и предназначенные для выполнения упомянутого способа добавления записей о модификации файлов.
При этом в частном варианте реализации носителя заголовок журнала также содержит уникальный идентификатор файла журнала, полный размер заголовка, флаги состояния журнала, размер записи-элемента журнала, смещение (WriteOffset), по которому драйвер может записывать новые записи из кольцевого кэша, смещение (ReadOffset), с которого приложение может считывать записи для передачи в базу данных.
В другом частном варианте реализации носителя минимальная информация о модификации файла содержит хэш имени тома и внутренний идентификатор файла.
Еще в одном частном варианте реализации носителя на этапе добавления драйвером по меньшей мере одной новой записи о модифицированном файле при наличии места в кэше драйвер увеличивает на количество модифицированных записей значение WriteIndex кольцевого кэша, также как и поле EntryCount.
В частном варианте реализации носителя выделенный поток драйвера через заданный интервал времени выполняет перенос записей из кольцевого кэша в журнал, при этом записи из кольцевого кэша не удаляются до тех пор, пока приложение не прочитает эти записи из журнала.
Согласно другому объекту заявленного изобретения, устройство добавления записей о модификации файлов, содержащее:
журнал, предназначенный для хранения информации о модификации файлов;
кэш, предназначенный для хранения информации о модификации файлов и связанный с журналом,
база данных, предназначенная для хранения информации о модификации файлов,
драйвер, связанный с кэшем, журналом,
приложение для антивирусной проверки файлов, связанное с кэшем, журналом и базой данных,
при этом описанные выше драйвер и приложение предназначены для выполнения следующих этапов:
драйвер обнаруживает по меньшей мере один модифицированный файл и добавляет в кольцевой кэш по меньшей мере одну запись о модификации этого файла, содержащую минимальную информацию о модифицированном файле, при этом с кэшем связана управляющая структура, содержащая смещение, с которого драйвер может осуществлять поиск записей, которые уже были записаны в журнал модифицированных файлов, но еще не записаны в базу данных, содержащую проверенные антивирусным приложением файлы;
через заданный интервал времени драйвер осуществляет перенос упомянутой по меньшей мере одной записи из кэша в журнал;
через заданный интервал времени драйвер осуществляет перенос упомянутой по меньшей мере одной записи из журнала в базу данных, при этом из кольцевого кэша удаляют записи, которые были перенесены из журнала;
причем перед добавлением упомянутых записей в кольцевой кэш драйвер осуществляет проверку, имеется ли в кольцевом кэше по меньшей мере одна запись, содержащая минимальную информацию о модифицированном файле, при этом если такой записи нет, то драйвер осуществляет добавление этой записи в кольцевой кэш;
причем, если в кэше нет места, то драйвер производит остановку процесса записи новой информации в кэш и переводит процесс работы кэша в состояние ожидания;
причем при добавлении упомянутой записи в журнал:
через определенный момент времени драйвер анализирует кэш на наличие новых записей, и если записи есть, то он определяет количество записей о модифицированных файлах в кэше и начинает анализ заголовка журнала или упомянутой управляющей структуры для того, чтобы определить, имеется ли место в журнале для записи упомянутого определенного количества записей, при этом при наличии места в журнале драйвер добавляет по меньшей мере одну новую запись о модифицированном файле в журнал,
при отсутствии места в журнале драйвер переводит подсистему ведения журнала в состояние ожидания запроса от приложения;
через определенный момент времени приложение анализирует, есть ли новые записи в файле журнала и, если они есть, то приложение вычитывает новые записи из журнала;
после этого приложение посылает запрос драйверу на удаление прочитанного количества записей из журнала и кэша для освобождения места для новых записей.
В частном варианте реализации способа упомянутый заголовок журнала также содержит уникальный идентификатор файла журнала, полный размер заголовка, флаги состояния журнала, размер записи-элемента журнала, смещение (WriteOffset), по которому драйвер может записывать новые записи из кольцевого кэша, смещение (ReadOffset), с которого приложение может считывать записи для передачи в базу данных.
Еще в одном частном варианте реализации способа кольцевой кэш также содержит смещение (WriteIndex), по которому драйвер может добавлять новые записи в кольцевой кэш, смещение (ReadIndex), по которому драйвер осуществляет перенос записей из кэша в журнал, которые не были прочитаны приложением из журнала, смещение (FlushIndex), с которого драйвер может считывать записи из кэша в журнал, текущее количество непрочитанных записей в кэше (EntryCount).
В другом частном варианте реализации способа на упомянутом этапе добавления драйвером по меньшей мере одной новой записи о модифицированном файле при наличии места в кэше драйвер увеличивает на количество модифицированных записей значение WriteIndex кольцевого кэша, также как и поле EntryCount.
В другом частном варианте реализации способа минимальная информация о модификации файла содержит хэш имени тома и внутренний идентификатор файла.
Краткое описание чертежей
Заявленное изобретение поясняется следующими чертежами:
Фиг.1 показывает блок-схему заявленного устройства;
Фиг.2 показывает структуру фиксированной части заголовка журнала;
Фиг.3 показывает управляющую структуру кольцевого кэша;
Фиг.4а показывает примерный вариант состояния кольцевого кэша и журнала файла до добавления записи;
Фиг.4б показывает примерный вариант состояния кольцевого кэша и журнала после добавления записи в кольцевой кэш;
Фиг.4в показывает примерный вариант состояния кольцевого кэша и журнала после переноса записи из кэша в журнал;
Фиг.4г показывает примерный вариант состояния кольцевого кэша и журнала после переноса записей из журнала приложением.
Фиг.5 показывает общую блок-схему последовательности выполнения операций согласно предложенному способу;
Фиг.6 показывает блок-схему выполнения этапа добавления записи в журнал и кольцевой кэш;
Фиг.7 показывает блок-схему работы журнала после перехода в режим ожидания запроса;
Подробное раскрытие предпочтительных вариантов осуществления
Далее будут описаны примерные варианты реализации настоящего изобретения со ссылкой на сопровождающие чертежи. Объекты и признаки настоящего изобретения, а также способы для достижения этих объектов и признаков станут очевидными посредством отсылки к примерным вариантам реализации. Однако настоящее изобретение не ограничивается примерными вариантами реализации, раскрытыми ниже, оно может воплощаться в различных видах. Сущность, определенная в описании, является ничем иным, как конкретными деталями, предоставленными для помощи специалисту в области техники в исчерпывающем понимании изобретения, и настоящее изобретение определяется только в объеме приложенной формулы.
Настоящее изобретение используется в компьютерах общего назначения, например обычных компьютерах или серверах. Такие компьютеры содержат процессор, системную память и системную шину, которая соединяет разные системные компоненты, включая системную память, с процессором. Системная шина может быть одним из нескольких типов шинной структуры, включая шину памяти или контроллер памяти, периферийной шиной и локальной шиной, использующей любую шинную архитектуру. Системная память включает в себя постоянную память (ROM) и оперативную память (RAM).
Базовая система ввода-вывода (BIOS), содержащая основные программы, которые помогают передавать информацию между элементами в компьютере, такую как во время запуска, сохраняется в ROM. Компьютер может дополнительно содержать накопитель на жестком диске для чтения или записи на жесткий диск, накопитель на магнитных дисках для считывания с или записи на сменный магнитный диск, и накопитель на оптических дисках для чтения с или записи на сменный оптический диск, такой как CD-ROM, DVD-ROM или другие оптические носители.
Накопитель на жестком диске, накопитель на магнитных дисках и накопитель на оптических дисках также соединяются с системной шиной посредством интерфейса накопителя на жестком диске, интерфейса накопителя на магнитных дисках и интерфейса накопителя на оптических дисках, соответственно. Накопители и связанные с ними машиночитаемые носители обеспечивают энергонезависимое хранение машиночитаемых команд, структур данных, программных модулей и других данных для компьютера.
Компьютер может также содержать магнитные кассеты, карты флэш-памяти, цифровые видеодиски, картриджи Бернулли, оперативные памяти (RAM), постоянные памяти (ROM) и другие виды памяти.
Ряд программных модулей может быть сохранен на жестком диске, магнитном диске, оптическом диске, ROM или RAM, включая операционную систему (например, Windows™ 2000). Компьютер включает в себя также файловую систему, связанную с или включенную в операционную систему, такую как Windows NT™ File System (NTFS), одну или более прикладных программ, другие программные модули и данные программ. Пользователь может вводить команды и информацию в компьютер с помощью устройств ввода/вывода, таких как клавиатура и указательное устройство (мышь).
Другие устройства ввода могут включать в себя микрофон, джойстик, игровой планшет, спутниковую антенну, сканер или т.п. Эти и другие устройства ввода/вывода соединены с процессором через интерфейс последовательного порта, который соединен с системной шиной. Следует отметить, что эти устройства ввода/вывода могут соединяться с другими интерфейсами, такими как параллельный порт или универсальный последовательный порт (USB). Монитор или другой тип устройства отображения также соединяется с системной шиной через интерфейс, такой как видеоадаптер. Кроме того, компьютер может включать в себя другие периферийные устройства вывода, такие как динамики и принтеры.
Компьютер, в котором используются заявленные системы, работает в сетевой среде, использующей логические соединения с одним или более удаленными компьютерами. Удаленный компьютер (или компьютеры) могут быть другими компьютерами, серверами, маршрутизаторами, сетевыми PC, одноранговым устройством или другим общим сетевым узлом. Этот компьютер может быть подсоединен к локальной сети (LAN) или к глобальной сети (WAN), к сети в офисах, Интернету или Интранету.
Когда компьютер используется в сетевой среде LAN, компьютер соединяется с локальной сетью через сетевой интерфейс или адаптер. Когда используется в сетевой среде WAN, компьютер обычно включает в себя модем или другие средства для установления связи через глобальную сеть, такую как Интернет. Модем, который может быть внутренним или внешним, соединяется с системной шиной через интерфейс последовательного порта.
Как показано на фиг.1, заявленное устройство 100 для добавления записей о модификации файлов используется в описанном выше компьютере и содержит кэш 110, журнал 120 и базу данных 130 для хранения информации о модификации файлов, а также драйвер 140, при этом драйвер 140 связан с кэшем 110 и журналом 120, и приложение 150, которое связано с кэшем 110, журналом 120 и базой данных 130.
В компьютере устанавливается антивирусная программа (приложение) для защиты компьютера от различных вирусов. Такие антивирусные программы широко известны в уровне технике, например McAfee, Dr Solomons, антивирусные программы, разработанные Лабораторией Касперского.
Такие антивирусные программы (приложения) осуществляют сканирование компьютера для определения наличия вируса на компьютере. В данном случае могут использоваться любые методы сканирования, которые широко известны из уровня техники. К числу таких методов относятся сигнатурные способы и устройства определения наличия вируса, способы определения вируса по хеш-значениям и др.
С помощью антивирусного приложения осуществляют сканирование компьютера для определения наличия вируса. Результаты сканирования информации о проверенных файлах записываются в базу данных.
При повторном сканировании компьютера антивирусное приложение может осуществлять проверку только тех файлов, которые были изменены с момента предыдущего сканирования. При этом те файлы, которые не менялись, антивирусное приложение не проверяет. Такую информацию о модификациях файлов в процессе работы компьютера антивирусное приложение получает от устройства 100.
По результатам сканирования информация о проверенных только модифицированных файлах заносится в базу данных.
Таким образом, в базу данных заносится уже меньше информации о проверенных файлах, т.к. в базу данных вносится только информация о проверке модифицированных файлов.
Предложенное устройство 100 работает следующим образом.
При загрузке системы драйвер инициализирует внутренние управляющие структуры и кэш, а также открывает файл журнала модифицированных файлов. Если журнал ранее не был создан, то драйвер создает журнал.
После открытия файла журнала драйвер проверяет сигнатуру и состояние этого файла на момент последней перезагрузки компьютера. Если файл журнала был некорректно закрыт при перезагрузке компьютера, то драйвер помечает журнал как некорректный до тех пор, пока приложение не отправит запрос на работу с журналом. При получении запроса от приложения драйвер инициирует ведение журнала модифицированных файлов. Затем драйвер осуществляет проверку сигнатуры заголовка. Если файл не прошел проверку сигнатуры заголовка, то драйвер отключает функцию ведения журнала модифицированных файлов.
Файл журнала является кольцевым и состоит из двух частей: заголовка и области данных. Заголовок, как показано на фиг.2, содержит две части: часть с фиксированной длиной и часть с переменной длиной. Часть с фиксированной длиной используется для хранения информации о структуре файла журнала и служебной информации, необходимой драйверу и приложению.
Фиксированная часть содержит:
уникальный идентификатор файла журнала (Signature), например GUID, может использоваться, в том числе, для определения версии файла журнала;
различные флаги состояния файла журнала (Flags);
смещение (DataOffset) области данных от начала файла, т.е. полный размер заголовка файла журнала, включая область переменной длины;
размер записи-элемента файла журнала (LogEntryLength);
максимальное количество записей-элементов в файле журнала (MaxLogEntries);
смещение (ReadOffset) в файле журнала, с которого приложение может считывать записи для передачи в базу данных;
смещение в файле журнала, по которому драйвер может записывать новые записи из своего кэша (WriteOffset);
зарезервированные поля структуры, использующиеся пока только для выравнивания (Padding0, Padding1);
область заголовка переменной длины (Subheader), которая может быть использована, например, для хранения соответствий имен томов и их уникальных идентификаторов;
записи-элементы файла журнала с информацией о файлах (LogRecord0 - LogRecordN).
Приведенная структура журнала является примерной и используется для одного из вариантов реализации.
Кольцевой кэш имеет структуру, аналогичную области данных файла журнала. С кэшем связана управляющая структура, выполняющая примерно те же функции, что и заголовок файла журнала. Управляющая структура кэша является внутренней, закрытой структурой драйвера, поэтому может меняться произвольным образом в процессе разработки и выпуска новых версий драйвера.
На фиг.3 показана управляющая структура кэша, которая содержит: различные флаги состояния кэша (Flags);
указатель (CacheBuffer) на область памяти, в которой размещаются записи кэша;
объект синхронизации операций с кэшем (Lock);
смещение (WriteIndex) элемента кэша, с которого драйвер может добавлять новые записи в кэш;
смещение (ReadIndex) элемента кэша, с которого драйвер по запросу от приложения может осуществлять поиск записей, которые уже были сброшены в файл журнала, но еще не успели попасть в базу даных;
смещение (FlushIndex) элемента кэша, с которого драйвер может считывать записи для переноса («сброса») в файл журнала;
текущее количество непрочитанных записей в кэше (EntryCount);
записи-элементы кэша с информацией о файлах (CacheRecord0 - CacheRecordM).
Для наглядности и упрощения схем заголовок файла журнала отделен от области данных файла, при этом рассматривается вариант единовременной обработки только одного элемента, а кэш и файл журнала приняты пустыми, то есть:
• WriteIndex, ReadIndex и FlushIndex указывают на один и тот же элемент кэша, EntryCount равно нулю;
• ReadOffset и WriteOffset указывают на одну и ту же запись файла журнала.
Приведенная структура кольцевого кэша является примерной и используется для одного из вариантов реализации. Кольцевой кэш может быть реализован в виде массива записей, связанного списка, дерева списка или нескольких связанных деревьев.
На фиг.4а показано одно из возможных состояний кэша и журнала до помещения в них записи или записей.
На фиг.4б показано состояние кэша и журнала после внесения записи в кэш, при этом журнал остается неизменным.
В этом случае после записи элемента в кэш значение WriteIndex увеличивается на единицу (или сбрасывается в ноль, если была произведена запись в последний элемент кэша), значения ReadIndex и FlushIndex остаются неизменными. Также увеличивается на единицу значение EntryCount.
На фиг.4в показано состояние кэша и журнала после занесения записи в журнал.
В этом случае после переноса («сброса») элемента из кэша значение FlushIndex увеличивается на единицу (или сбрасывается в ноль, если был произведен перенос последнего элемента кэша), значения ReadIndex, WriteIndex и EntryCount остаются неизменными.
После переноса элемента в файл журнала значение WriteOffset увеличивается на размер элемента (или сбрасывается в начало области данных файла журнала, если была произведена запись в последний элемент файла журнала), значение ReadOffset остается неизменным.
На фиг.4г показано состояние кэша и файла журнала после переноса записи из журнала.
При переносе записи или записей из журнала значение ReadIndex увеличивается на единицу (или сбрасывается в ноль, если было произведено удаление последнего элемента кэша), значение EntryCount уменьшается на единицу. Кроме того, значение ReadOffset увеличивается на размер элемента (или сбрасывается в начало области данных файла журнала, если было произведено чтение последнего элемента файла журнала), а значение WriteOffset остается неизменным.
Как показано на фиг.5, на этапе 510 драйвер обнаруживает (отслеживает) модифицированный файл или несколько модифицированных файлов. Затем на этапе 520 добавляет в журнал запись о модификации этого файла или несколько записей о модификации файлов.
Кроме того, на этапе 530 драйвер осуществляет добавление в свой кольцевой кэш записи или записей, каждая из которых содержит минимальную информацию о модифицированном файле. Такая минимальная информация о модификации файла содержит уникальный идентификатор тома (VolumeID), на котором расположен файл, и идентификатор файла (FileID). Однако специалисту в уровне технике понятно, что такая минимальная информация может содержать другую информацию.
Через заданный интервал времени на этапе 540 драйвер осуществляет перенос записи или записей из журнала в базу данных, при этом из кольцевого кэша и журнала удаляют записи, которые были перенесены в базу данных на этапе 550.
Перед добавлением упомянутых записей в кольцевой кэш на этапе 530 драйвер осуществляет проверку, имеется ли в кольцевом кэше запись или записи, содержащие минимальную информацию о модифицированном файле или файлах. Если такой записи нет, то драйвер осуществляет добавление этой записи в кольцевой кэш.
Кроме того, как показано на фиг.5, при добавлении записи или записей в журнал и кольцевой кэш (этапы 520 и 530), драйвер анализирует заголовок журнала или управляющую структуру для определения количества записей о модифицированных файлах, которое может быть записано в журнал или кольцевой кэш (этап 610).
В процессе анализа драйвер осуществляет сравнение смещения для чтения и смещения для записи.
Здесь могут быть следующие ситуации:
1) когда смещение для чтения больше смещения для записи;
2) когда смещение для чтения меньше смещения для записи.
Если эти значения равны, то это означает, что кэш (файл журнала) либо пустой, либо целиком заполненный.
Определение количества записей, которые могут быть добавлены в кэш или журнал, определяется драйвером следующим образом.
Если драйвер установил, что WriteIndex (WriteOffset)<ReadIndex (ReadOffset), т.е. получилась ситуация 1, то в этом случае количество доступных записей в кэше (файле журнала) определяется следующим образом:
FreeRecords=ReadIndex-WriteIndex (для кэша);
FreeRecords=(ReadOffset-WriteOffset)/LogEntryLength (для файла журнала).
Если драйвер установил, что WriteIndex (WriteOffset)>ReadIndex (ReadOffset), т.е. получилась ситуация 2, то в этом случае количество доступных записей в кэше (файле журнала) определяется следующим образом:
FreeRecords=MaxEntries-WriteIndex+ReadIndex (для кэша, где MaxEntries - максимальное количество записей-элементов в кэше);
FreeRecords=(MaxLogEntries∗LogEntryLength-WriteOffset+ReadOffset)/LogEntryLength (для файла журнала).
Далее, на этапе 620, драйвер определяет, имеется ли место в журнале или кольцевом кэше для записи определенного на этапе 610 количества записей. Если драйвер устанавливает (этап 630), что в журнале или кольцевом кэше имеется место для добавления записей, то драйвер добавляет новую запись о модифицированном файле или новые записи о модифицированных файлах в журнал или кольцевой кэш соответственно (этап 640). При этом драйвер изменяет значение WriteOffset журнала и значение ReadIndex кольцевого кэша.
Если драйвер устанавливает, что в журнале недостаточно места (этап 650), то драйвер осуществляет инвалидацию журнала и кэша и переводит подсистему ведения журнала в состояния ожидания запроса от приложения на модификацию значений ReadOffset и ReadIndex.
На фиг.7 показана более подробно работа драйвера после того, как система ведения журнала переведена в состояние запроса. Как было указано выше, если драйвер устанавливает, что места в журнале недостаточно для включения в него новых записей или записи, то драйвер (этап 710) переводит подсистему ведения журнала в состояния ожидания запроса от приложения на модификацию значений ReadOffset и ReadIndex на этапе 720.
При получении такого запроса (этап 730) драйвер в соответствии с количеством новых записей в журнале уменьшает значение текущего количества записей в журнале и значение текущего количества записей в кольцевом кэше (этап 740), тем самым освобождая место для добавления новых записей в журнал и кольцевой кэш.
Кроме того, через заданный интервал времени драйвер выполняет перенос записей из кольцевого кэша в журнал. Однако записи из кольцевого кэша не удаляются до тех пор, пока приложение не прочитает эти записи из журнала.
Дополнительно при получении драйвером запроса от приложения на поиск заданной записи в кольцевом кэше, для случая, когда запись уже есть в кольцевом кэше, но еще не попала в файл журнала или находится в процессе переноса в журнал, драйвер анализирует все записи в кольцевом кэше в интервале смещений от ReadIndex до WriteIndex, при этом, если запись найдена, то она возвращается приложению для последующей обработки.
Как видно из приведенного выше описания, предложенный способ и соответственно машиночитаемый носитель обеспечивают сокращение числа обращений к базе данных, за счет того, что необходимая информация хранится в кэше. И кроме того, предложенное изобретение обеспечивает уменьшение времени доступа драйвера к базе данных и файлу журнала, а также упрощение доступа к файлу журнала.
Необходимо также отметить, что приведенное описание является поясняющим и приведенные конкретные примеры не предназначены для ограничения объема и сущности заявленного изобретения. Специалисту в уровне технике будет понятно, что могут существовать другие варианты реализации, которые подпадают под объем и сущность заявленного изобретения, которые содержатся в прилагаемой формуле.