Способ синхронизации доступа к разделяемым ресурсам вычислительной системы под управлением posix-совместимой ос и обнаружения и устранения повисших блокировок с использованием блокировочных файлов

Изобретение относится к способу обнаружения и устранения повисших блокировок с использованием блокировочных файлов. Технический результат заключается в повышении надежности обнаружения и устранения повисших блокировок. Ассоциируют разделяемый ресурс с блокировочным файлом. Вызывают системный вызов атомарного эксклюзивного создания и открытия временного файла с уникальным именем и в той же файловой системе. Осуществляют системный вызов создания жесткой ссылки с именем блокировочного файла на временный файл. Если системный вызов создания жесткой ссылки выполнен успешно, то удаляют жесткую ссылку на временный файл и обеспечивают выполнение текущим процессом операций с разделяемым ресурсом. Если текущий процесс в системе не существует, то выполняют устранение повисшей блокировки, осуществляя следующие действия: удаляют из существующего блокировочного файла предыдущие данные несуществующего процесса; заносят в существующий блокировочный файл данные текущего процесса. Снимают файловую блокировку записи с существующего блокировочного файла. Обеспечивают выполнение текущим процессом операций с разделяемым ресурсом. Удаляют существующий блокировочный файл.

 

Область техники, к которой относится изобретение

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

Уровень техники

Во многих современных вычислительных системах имеются ресурсы (файлы, базы данных, участки оперативной памяти и пр.), доступ к которым осуществляется для параллельно выполняемых процессов. Для обеспечения корректного доступа применяются различные способы синхронизации доступа. При обеспечении синхронизации исключительный доступ предоставляется только одному процессу, а сам ресурс блокируется для записи и/или чтения для других процессов. Блокировка может осуществляться разными методами, однако возможны ситуации, когда ресурс оказывается заблокирован одновременно несколькими процессами, и ни один из них не может ни снять блокировку, ни выполнить необходимые операции с разделяемым ресурсом.

Такое состояние обычно называют повисшей блокировкой (deadlock), определяют его наличие и затем устраняют с использованием разных механизмов.

Так, известен способ синхронизации доступа к разделяемым ресурсам между параллельно выполняемыми процессами с использованием механизма блокировочных файлов [1], заключающийся в том, что

- ассоциируют разделяемый ресурс с блокировочным файлом;

- создают в ходе попытки доступа процесса (приложения) к разделяемому ресурсу блокировочный файл;

- если такой блокировочный файл уже существует, эта операция будет завершена с ошибкой;

- если такой блокировочный файл не существует, то создается блокировочный файл;

- записывают в только что созданный и открытый блокировочный файл данные процесса, который его создал (например, идентификатор процесса, process ID (PID)) или др.);

- обеспечивают выполнение процессом операций с разделяемым ресурсом;

- снимают блокировку с разделяемого ресурса (файла) путем удаления блокировочного файла.

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

Известен также способ синхронизации доступа к разделяемым ресурсам вычислительной системы и обнаружения и устранения повисших блокировок с использованием блокировочных файлов [2], заключающийся в том, что

- ассоциируют разделяемый ресурс с блокировочным файлом;

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

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

- осуществляют системный вызов создания жесткой ссылки с именем блокировочного файла на временный файл;

- если системный вызов создания жесткой ссылки выполнен успешно, то:

- удаляют жесткую ссылку на временный файл;

- обеспечивают выполнение текущим процессом операций с разделяемым ресурсом;

- удаляют блокировочный файл;

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

- если системный вызов создания жесткой ссылки выполнен с ошибкой, и ошибка связана с тем, что файл с именем блокировочного файла уже существует, то;

- удаляют временный файл;

- осуществляют поиск процесса, указанного в существующем блокировочном файле, выполняя следующие действия:

- устанавливают файловую блокировку записи на блокировочный файл;

- проверяют наличие в системе процесса, данные которого указаны в существующем блокировочном файле;

- если текущий процесс в системе существует, то снимают файловую блокировку записи на блокировочный файл;

- если текущий процесс в системе не существует, то выполняют устранение повисшей блокировки, осуществляя следующие действия:

- удаляют из существующего блокировочного файла предыдущие данные несуществующего процесса;

- заносят в блокировочный файл данные текущего процесса;

- снимают файловую блокировку записи с существующего блокировочного файла;

- обеспечивают выполнение текущим процессом операций с разделяемым ресурсом;

- удаляют блокировочный файл.

Если в ходе выполнения известного способа после проверки выясняется, что процесс, данные которого указаны в блокировочном файле, в данный момент в вычислительной системе не существует (например, произошел внутренний программный сбой, и приложение было принудительно выгружено операционной системой (ОС) из оперативной памяти), то это не помешает обеспечить доступ к разделяемому ресурсу другим процессам и позволит обеспечить отсутствие повисшей блокировки.

Описанный способ принят за прототип.

Однако этот способ также имеет недостатки.

В известном способе надежность обнаружения повисшей блокировки зависит от сведений, которые указаны в блокировочном файле. В общем случае, ОС предоставляет уникальный идентификатор процесса (PID) только для запущенных в данный момент процессов. Если процесс был завершен, то его PID может быть назначен другому процессу.

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

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

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

Раскрытие изобретения

Техническим результатом является повышение надежности обнаружения и устранения повисших блокировок.

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

Для этого предлагается способ, заключающийся в том, что

- ассоциируют разделяемый ресурс с блокировочным файлом;

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

- создают рекомендательную эксклюзивную блокировку на временный файл;

- осуществляют системный вызов создания жесткой ссылки с именем блокировочного файла на временный файл;

- если системный вызов создания жесткой ссылки выполнен успешно, то удаляют жесткую ссылку на временный файл;

- обеспечивают выполнение текущим процессом операций с разделяемым ресурсом;

- удаляют жесткую ссылку на блокировочный файл;

- снимают рекомендательную эксклюзивную блокировку с блокировочного файла;

- закрывают открытый блокировочный файл;

- если системный вызов создания жесткой ссылки выполнен с ошибкой, и ошибка не связана с тем, что файл с именем блокировочного файла уже существует, то

- удаляют жесткую ссылку на временный файл;

- снимают рекомендательную эксклюзивную блокировку с временного файла;

- закрывают открытый временный файл;

- если системный вызов создания жесткой ссылки выполнен с ошибкой, и ошибка связана с тем, что файл с именем блокировочного файла уже существует, то

- удаляют жесткую ссылку на временный файл;

- снимают рекомендательную эксклюзивную блокировку с временного файла;

- закрывают открытый временный файл; открывают блокировочный файл;

- устанавливают рекомендательную эксклюзивную блокировку на блокировочный файл;

- если рекомендательная эксклюзивная блокировка на блокировочный файл успешно установлена, то

- обеспечивают выполнение текущим процессом операций с разделяемым ресурсом;

- удаляют жесткую ссылку на блокировочный файл;

- снимают рекомендательную эксклюзивную блокировку с блокировочного файла;

- закрывают открытый блокировочный файл;

- если рекомендательную эксклюзивную блокировку на блокировочный файл установить не удалось, то закрывают открытый блокировочный файл.

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

Стоит отметить, что в предложенном способе для определения того, является ли существующая блокировка повисшей, отсутствует необходимость заносить сведения о процессе в блокировочный файл, а также отсутствует необходимость осуществлять поиск процесса по этим сведениям. Вместо этого осуществляется установка рекомендательной эксклюзивной блокировки (advisory lock). Если процесс, создавший блокировочный файл в системе по каким-то причинам завершился некорректно и не удалил блокировочный файл, то попытка другого процесса установить блокировку пройдет успешно. Если процесс, создавший блокировочный файл и удерживающий блокировку, в системе присутствует, то попытка другого процесса установить блокировку завершится ошибкой. Все это приводит к упрощению процесса обнаружения повисших блокировок и снижению потребления вычислительных ресурсов.

Устраняется также необходимость в дополнительной системе, в которой бы регистрировались процессы, захватившие блокировку, и которая бы отслеживала их наличие в системе. При этом надежность обнаружения повисшей блокировки зависела бы от надежности работы дополнительной системы. Отсутствие дополнительной системы также приводит к упрощению процесса обнаружения повисших блокировок и снижению потребления вычислительных ресурсов.

Осуществление изобретения

Реализация предложенного способа может быть осуществлена в вычислительной системе, работающей под управлением POSIX-совместимой ОС, в частности ОС GNU/Linux, где механизм блокировочных файлов для синхронизации доступа к разделяемому ресурсу получил широкое распространение.

Необходимым условием реализации предложенного способа является наличие в составе ОС вычислительной системы следующих средств, описанных в стандарте ISO/IEC/IEEE 9945:2009 [3]:

- системных вызовов для работы с файлами (open, close, link, unlink);

- поддержка жестких ссылок в ОС и файловой системой, в которой предполагается создание блокировочного файла;

- операций атомарного эксклюзивного создания и открытия временного файла с уникальным именем (например, выполняемых с помощью системного вызова mkstemp);

- поддержка файловых блокировок и наличие системных вызовов для работы с ними (fcntl и F_SETLKW).

Все указанные средства присутствуют в ОС GNU/Linux, в частности, в доступном для любого пользователя дистрибутиве ОС Debian 6.

Жесткие ссылки поддерживаются большинством файловых систем, в частности файловой системой Ext3 (Extended File System версии 3), поддерживаемой в ОС Debian.

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

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

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

Устанавливают рекомендательную эксклюзивную блокировку записи на временный файл, для чего вызывают системный вызов fcntl, передавая в качестве первого параметра номер файлового дескриптора открытого блокировочного файла, в качестве второго значения - F_SETLKW, в качестве третьего значения - заполненную структуру flock, для установки блокировки временного файла.

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

Если функция link возвращает 0, то:

- удаляют жесткую ссылку на временный файл, вызывая системный вызов unlink;

- обеспечивают выполнение текущим процессом операций с разделяемым ресурсом;

- удаляют жесткую ссылку на блокировочный файл, для чего вызывают системный вызов unlink, передавая в качестве параметра путь к блокировочному файлу;

- снимают рекомендательную эксклюзивную блокировку с блокировочного файла, для чего вызывают системный вызов fcntl, передавая в качестве первого параметра номер файлового дескриптора открытого блокировочного файла, в качестве второго значения - F_SETLKW, в качестве третьего значения - заполненную структуру flock, для снятия блокировки;

- закрывают открытый блокировочный файл, вызывая системный вызов close, передавая в качестве параметра номер файлового дескриптора открытого блокировочного файла;

Если функция link возвращает - 1, и в errno (error return value) содержится код ошибки, отличный от EEXISTS, то

- удаляют жесткую ссылку на временный файл, для чего вызывают системный вызов unlink, передавая в качестве параметра путь к временному файлу;

- снимают рекомендательную эксклюзивную блокировку с временного файла, для чего вызывают системный вызов fcntl, передавая в качестве первого параметра номер файлового дескриптора открытого временного файла, в качестве второго значения - F_SETLKW, в качестве третьего значения - заполненную структуру flock, для снятия блокировки;

- закрывают открытый временный файл, вызывая системный вызов close, передавая в качестве параметра номер файлового дескриптора открытого временного файла;

Если функция link возвращает - 1, и в errno содержится код ошибки EEXISTS, то

- удаляют жесткую ссылку на временный файл, для чего вызывают системный вызов unlink, передавая в качестве параметра путь к временному файлу;

- снимают рекомендательную эксклюзивную блокировку с временного файла, для чего вызывают системный вызов fcntl, передавая в качестве первого параметра номер файлового дескриптора открытого временного файла, в качестве второго значения - F_SETLKW, в качестве третьего значения - заполненную структуру flock, для снятия блокировки;

- закрывают открытый временный файл, вызывая системный вызов close, передавая в качестве параметра номер файлового дескриптора открытого временного файла;

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

- устанавливают файловую блокировку записи, для чего вызывают системный вызов fcntl, передавая в качестве первого параметра номер файлового дескриптора открытого блокировочного файла, в качестве второго значения - F_SETLKW, в качестве третьего значения - заполненную структуру flock, для установки блокировки файла;

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

- обеспечивают выполнение текущим процессом операций с разделяемым ресурсом;

- удаляют жесткую ссылку на блокировочный файл, для чего вызывают системный вызов unlink, передавая в качестве параметра путь к блокировочному файлу;

- снимают рекомендательную эксклюзивную блокировку с блокировочного файла, для чего вызывают системный вызов fcntl, передавая в качестве первого параметра номер файлового дескриптора открытого блокировочного файла, в качестве второго значения - F_SETLKW, в качестве третьего значения - заполненную структуру flock, для снятия блокировки;

- закрывают открытый блокировочный файл, вызывая системный вызов close, передавая в качестве параметра номер файлового дескриптора открытого блокировочного файла;

- если не удалось установить файловую блокировку, то закрывают открытый блокировочный файл, вызывая системный вызов close, передавая в качестве параметра номер файлового дескриптора открытого блокировочного файла;

Реализовать действия предложенного способа в составе программы или функции может специалист в области программирования (программист).

Источники информации

1. Джонсон М.К., Троан Э.В. Разработка приложений в среде Linux, 2-е изд., Москва, 2007, стр. 231-232.

2. Патент РФ №2526282, приоритет от 21.09.2012 г.

3. Стандарт ISO/IEC/IEEE 9945:2009 Information technology - Portable Operating System Interface (POSIX®) Base Specifications, Issue 7.

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



 

Похожие патенты:

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

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

Изобретение относится к области многоядерных систем. Техническим результатом является надежная доставка информации внутри многоядерной системы или между многоядерными системами.

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

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

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

Изобретение относится к способу и устройству для передачи данных в компьютерной сети. Техническим результатом является обеспечение возможности удовлетворения запросов на данные в различных форматах данных.

Изобретение относится к области распределения задач сервером вычислительной системы. Техническим результатом является повышение эффективности динамического распределения заданий сервером по обработчикам вычислительной системы.

Изобретение относится к области определения количества потребляемой электроэнергии нового разрабатываемого вычислителя. Техническим результатом является повышение эффективности определения энергопотребления разрабатываемого вычислителя за счет определения энергопотребления вычислительно-интенсивных участков выполнения программы.

Изобретение относится к средствам распределения задач в компьютерной системе. Технический результат заключается в уменьшении затрат ресурсов компьютерной системы.

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

Изобретения относятся к операциям ввода-вывода данных. Техническим результатом является упрощение обработки за счет поддержки двунаправленных операций.

,Изобретение относится к области контроля активации подчиненных блоков сетей LIN. Техническим результатом является предотвращение активации подчиненных блоков сети типа LIN, если источником запроса на активацию являются помехи.

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

Изобретение относится к средствам для передачи пакета от передающего устройства на принимающее устройство через межкомпонентное соединение. .

Изобретение относится к системам и методикам обработки данных. .

Изобретение относится к системам и способам обработки данных для передачи информации по шине в системе обработки данных. .

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

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

Изобретение относится к устройствам ввода-вывода для процессоров и микроконтроллеров и более точно касается контроллеров последовательных интерфейсов SPI, Microwire, I2S, SPORT.

Группа изобретений относится к области компьютерной техники и может быть использована для разработки программного обеспечения, включающей координацию взаимозависимых систем с ограничениями. Техническим результатом является увеличение производительности при максимальном сбережении энергии. Устройство содержит синхронизирующий счетчик, предназначенный для локального выравнивания передачи сигналов определенным устройством с передачей сигналов в системе, содержащей одно или несколько других устройств, сопряженных, с возможностью обмена информацией, посредством межсоединения; и многоуровневый стек, содержащий логику физического уровня, логику канального уровня и логику уровня протокола, при этом логика физического уровня по меньшей мере частично выполнена в аппаратном средстве и предназначена для синхронизирования сброса синхронизирующего счетчика с некоторым внешним детерминированным сигналом, глобально поддерживаемым для системы; и синхронизирования с этим детерминированным сигналом вхождения в передающее состояние канала передачи данных на основании синхронизирующего счетчика. 4 н. и 21 з.п. ф-лы, 17 ил., 2 табл.
Наверх