Поделиться через


Основные понятия TxF

Изоляция чтения

Транзакционная NTFS (TxF) обеспечивает согласованность, зафиксированную для чтения.

Модуль записи транзакций ссылается на дескриптор транзакций, открытый с любым разрешением, которое не является частью универсального доступа на чтение, но является частью универсального доступа на запись. Модуль записи транзакций просматривает последнюю версию файла, включающую все изменения одной транзакции. Для каждого файла может быть только один модуль записи транзакций. Записи без транзакций всегда блокируются модулем записи транзакций, даже если файл открыт с разрешениями на запись в общий доступ.

Средство чтения транзакций ссылается на дескриптор файла, открытый с любым разрешением, которое является частью универсального доступа на чтение, но не является частью универсального доступа на запись. Средство чтения транзакций просматривает зафиксированную версию файла, которая существовала на момент открытия дескриптора файла. Средство чтения транзакций изолировано от последствий операций записи транзакций. Это обеспечивает согласованное представление файла только на протяжении всего времени существования дескриптора файла и блокирует записи без транзакций.

Примечание

Когда дескриптор был открыт для изменения с помощью функции CreateFileTransacted , все последующие открытия файла в этой транзакции независимо от того, доступны ли они только для чтения, преобразуются системой в модуль записи транзакций для целей изоляции и другой семантики транзакций. Это означает, что впоследствии, когда дескриптор открывается для доступа только для чтения, дескриптор не получает представление файла до начала транзакции. он получает активное представление транзакций файла.

Дескриптор файла без транзакций не видит изменений, внесенных в транзакцию, пока транзакция не будет зафиксирована. Дескриптор файла без транзакций получает изолированное представление, аналогичное модулю чтения транзакций, но в отличие от средства чтения транзакций, он получает обновление файла, когда модуль записи транзакций фиксирует транзакцию.

Уровни изоляции

TxF обеспечивает изоляцию с фиксацией чтения. Это означает, что обновления файлов не отображаются за пределами транзакции. Кроме того, если файл открывается несколько раз во время чтения файлов в транзакции, при каждом последующем открытии могут отображаться разные результаты. Файлы, которые были доступны при первом доступе к ним, могут быть недоступны (так как они были удалены) или наоборот.

Блокировка транзакций

Создание модуля записи транзакций в файле транзакционно блокирует файл. После блокировки файла транзакцией другие операции файловой системы за пределами блокируемой транзакции, которые пытаются изменить файл, заблокированный транзакцией, завершатся сбоем с ERROR_SHARING_VIOLATION или ERROR_TRANSACTIONAL_CONFLICT.

В следующей таблице приведены сводные данные о блокировке транзакций.

Файл, открытый в данный момент

Попытка открыть файл

С транзакцией

Без транзакций

Читатель

Читатель и модуль записи

Читатель

Читатель и модуль записи

Модуль чтения с транзакцией

Да

Да

Да

Нет2

Модуль чтения и записи транзакций

Да

Нет2

Да

Нет2

Средство чтения без транзакций

Да

Да

Да

Да

Средство чтения и записи без транзакций

Нет1

Нет1

Да

Да

  1. Сбой при ERROR_TRANSACTIONAL_CONFLICT
    2. Сбой с ERROR_SHARING_VIOLATION

Если вы открываете именованный поток для изменения, использующий транзакцию, весь файл должен быть заблокирован.

Помимо блокировки транзакций применяются стандартные правила общего доступа к файлам NTFS.

Необходимо рассмотреть следующие два режима общего доступа к файлам в параллельном режиме:

  • Режим блокировки транзакций.
  • Обычные режимы общего доступа к файлам.

Какой бы режим ни был более строгим, применяется именно тот, который применяется.