СПОСОБ УПРАВЛЕНИЯ ЧТЕНИЕМ ИЗ РАЗДЕЛЯЕМОГО РЕСУРСА ПАМЯТИ И ЗАПИСЬЮ В НЕГО (ВАРИАНТЫ), СИСТЕМА И СЧИТЫВАЕМЫЙ КОМПЬЮТЕРОМ НОСИТЕЛЬ, РЕАЛИЗУЮЩИЕ УПОМЯНУТЫЙ СПОСОБ Российский патент 2024 года по МПК G06F9/52 

Описание патента на изобретение RU2816292C1

Область техники

[0001] Настоящее раскрытие относится к технологии разделения доступа к общим ресурсам в системе с параллельными вычислениями.

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

[0002] В реализующем параллельные вычисления серверном пространстве с приоритетом читателей необходимо управлять чтением и записью данных, хранящихся в общем ресурсе хранения (например, на жестком диске (HDD), твердотельном накопителе (SSD) или в энергонезависимой экспресс-памяти (NVMe)), для обеспечения такого приоритета читателей (т.е. сокращения числа блокировок читателей потоками записи) и не допущения конфликтов обращения к данным (например, состояний гонок данных) и, как следствие, ошибок в данных. Кроме того, важно, чтобы такое управление чтением и записью данных само по себе снижало использование памяти, например, опиралось на значение одного указателя блокировки.

[0003] Из уровня техники известен документ US 2013290967 A1 (опубл. 31.10.2013), в котором раскрыт рассматриваемый в качестве ближайшего аналога способ реализации блокировок чтения-записи. В способе, раскрытом в документе ‘967 (см., например, пункт 1 формулы изобретения), в ответ на определение того, что по меньшей мере один другой поток приложения, исполняющегося на ядре процессора в кластере ядер процессора, который включает в себя ядро процессора, на котором исполняется поток записи, ожидает получения глобальной блокировки для записи, передают упомянутому другому потоку приложения владение специфичной для этого кластера (т.е. локальной) блокировкой для записи без освобождения (и повторного захвата) глобальной блокировки. Одновременно с этим документ ‘967 предусматривает ряд политик, одной из которых является именно политика с приоритетом читателя (см., например, абзац [0216] описания).

[0004] Таким образом, в способе, раскрытом в документе ‘967, предлагается администрировать потоки записи и чтения, используя различные комбинации как локальных, так и глобальных блокировок (дополнительно см., например, абзац [0082] описания документа ‘967). Такое решение по документу ‘967 уменьшает число миграций владения блокировкой между потоками, исполняющимися на разных кластерах (см., например, абзацы [0007], [0012] описания документа ‘967). Тем не менее, такое управление является более сложным с позиции потребляемых ресурсов, поскольку оно опирается не на значение одного указателя блокировки. Поэтому решение по документу ‘967 не снижает требования к памяти.

Сущность изобретения

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

[0006] Таким образом, в первом аспекте настоящего раскрытия предложен реализуемый компьютером способ управления записью в разделяемый ресурс памяти в системе с приоритетом на чтение, в которой разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти, причем способ содержит этапы, на которых: - принимают запрос на запись в разделяемый ресурс памяти от писателя; - считывают текущее значение указателя, связанного с упомянутым разделяемым ресурсом памяти, причем значение указателя указывает общее количество запросов, подлежащих выполнению, и то, имеется ли среди упомянутых запросов запрос на запись; - определяют, имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись: -- в случае определения, что текущее значение указателя имеет первый знак, осуществляют возврат на этап считывания текущего значения указателя, в противном случае - осуществляют попытку захватить мьютекс на запись посредством выполнения атомарной операции сравнения с обменом (CAS) над текущим значением указателя: --- в случае неуспешного выполнения операции CAS, осуществляют возврат на этап считывания текущего значения указателя, в противном случае - выполняют стремящееся от нуля изменение значения указателя и устанавливают знаком измененного значения указателя упомянутый первый знак, - считывают текущее значение указателя для определения, имеются ли незавершенные операции чтения из упомянутого разделяемого ресурса памяти, соответствующие одному или более ранее принятым запросам на чтение соответственно от одного или более читателей: -- в случае, если незавершенные операции чтения имеются: --- ожидают завершения всех незавершенных операций чтения, -- в случае, если незавершенные операции чтения отсутствуют: --- осуществляют операцию записи в разделяемый ресурс памяти, - освобождают мьютекс на запись посредством выполнения атомарной операции CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.

[0007] Во втором аспекте настоящего изобретения предложен реализуемый компьютером способ управления чтением из разделяемого ресурса памяти в системе с приоритетом на чтение, в которой разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти, причем способ содержит этапы, на которых: - принимают запрос на чтение упомянутого разделяемого ресурса памяти от читателя; - считывают текущее значение указателя; - определяют, имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись: -- в случае определения, что текущее значение указателя имеет первый знак, осуществляют возврат на этап считывания текущего значения указателя, в противном случае - осуществляют попытку захватить мьютекс на чтение посредством выполнения атомарной операции CAS над текущим значением указателя: --- в случае неуспешного выполнения операции CAS, осуществляют возврат на этап считывания текущего значения указателя, в противном случае - выполняют стремящееся от нуля изменение значения указателя, - осуществляют операцию чтения из разделяемого ресурса памяти, - освобождают мьютекс на чтение посредством выполнения атомарной операции CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.

[0008] Любой из первого и второго аспектов настоящего раскрытия может развиваться следующими дополнительными одним или более признаками: по меньшей мере часть незавершенных операций чтения выполняется параллельно; первым знаком является знак отрицательного числа или знак положительного числа; число, на величину которого выполняют стремящееся от нуля изменение значения указателя, и число, на величину которого выполняют стремящееся к нулю изменение значения указателя, равны; упомянутым целым числом является 1; читателем является устройство-читатель или поток чтения, а писателем является устройство-писатель или поток записи; разделяемым ресурсом памяти является по меньшей мере ячейка памяти, причем памятью является HDD, SSD или NVMe.

[0009] В третьем аспекте настоящего раскрытия предложен реализуемый компьютером способ управления чтением из разделяемого ресурса памяти множеством читателей или записью в него (единственным в единицу времени активным) писателем на основе указателя, причем способ содержит этапы, на которых: - при возникновении запроса на чтение разделяемого ресурса памяти или на запись в разделяемый ресурс памяти, осуществляют попытку захватить, соответственно, мьютекс на чтение и/или мьютекс на запись, выполняя операцию CAS над текущим значением указателя, при этом при успешном выполнении операции CAS выполняют стремящееся от нуля изменение значения указателя, причем, если упомянутый запрос, для которого успешно выполнена операция CAS, является запросом на запись, то дополнительно устанавливают знаком измененного значения упомянутого указателя первый знак, - для каждого запроса проверяют значение упомянутого указателя со знаком и -- если проверенное значение упомянутого указателя со знаком равно предопределенному значению, осуществляют запись в разделяемый ресурс памяти согласно запросу на запись от писателя, -- если проверенное значение упомянутого указателя со знаком отлично от упомянутого предопределенного значения, осуществляют чтение из разделяемого ресурса памяти согласно запросу на чтение от читателя, - после завершения операции записи или чтения освобождают, соответственно, мьютекс на чтение или мьютекс на запись, выполняя операцию CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.

[0010] Третий аспект настоящего раскрытия может развиваться следующими дополнительными одним или более признаками: первым знаком является знак отрицательного числа или знак положительного числа; число, на величину которого выполняют стремящееся от нуля изменение значения указателя, и число, на величину которого выполняют стремящееся к нулю изменение значения указателя, равны; упомянутым целым числом является 1; упомянутым предопределенным значением указателя со знаком является ‘-1’; читателем является устройство-читатель или поток чтения, а писателем является устройство-писатель или поток записи; разделяемым ресурсом памяти является по меньшей мере ячейка памяти, причем памятью является HDD, SSD или энергонезависимая экспресс-память NVMe; абсолютное значение указателя указывает общее количество запросов, подлежащих выполнению, а наличие у значения указателя первого знака указывает наличие запроса на запись.

[0011] В четвертом аспекте настоящего раскрытия предложена система управления чтением-записью разделяемого ресурса памяти, содержащая устройство управления чтением-записью, упомянутый разделяемый ресурс памяти, связанный с упомянутым устройством управления чтением-записью, множество читателей и одного или более писателей (но в единицу времени активным может быть только единственный писатель), причем устройство содержит процессор и память, хранящую исполняемые процессором инструкции, причем, при получении запроса на чтение разделяемого ресурса памяти от одного или более из множества читателей или на запись в разделяемый ресурс памяти от одного или более писателей, процессор выполнен с возможностью осуществления, посредством исполнения упомянутых исполняемых процессором инструкций, (i) способа согласно первому аспекту настоящего раскрытия или любому дополнительному развитию этого первого аспекта, (ii) способа согласно второму аспекту настоящего раскрытия или любому дополнительному развитию этого второго аспекта или (iii) способа согласно третьему аспекту настоящего раскрытия или любому дополнительному развитию этого третьего аспекта.

[0012] Четвертый аспект настоящего раскрытия может развиваться следующими дополнительными одним или более признаками: разделяемый ресурс памяти является внутренним разделяемым ресурсом памяти, содержащимся в памяти упомянутого устройства, или внешним разделяемым ресурсом памяти, который доступен упомянутому устройству и с которым упомянутое устройство выполнено с возможностью осуществления проводной и/или беспроводной связи.

[0013] В пятом аспекте настоящего раскрытия предложен считываемый компьютером носитель, хранящий исполняемые компьютером инструкции, которые, при получении запросов на чтение разделяемого ресурса памяти или на запись в разделяемый ресурс памяти, побуждают компьютер к выполнению, посредством исполнения упомянутых исполняемых компьютером инструкций, (i) способа согласно первому аспекту настоящего раскрытия или любому дополнительному развитию этого первого аспекта, (ii) способа согласно второму аспекту настоящего раскрытия или любому дополнительному развитию этого второго аспекта или (iii) способа согласно третьему аспекту настоящего раскрытия или любому дополнительному развитию этого третьего аспекта.

Краткое описание чертежей

[0014] Упомянутые выше и другие аспекты настоящей технологии далее будут описаны подробно со ссылками на графические материалы, на которых:

[ФИГ. 1] Фиг. 1 иллюстрирует блок-схему последовательности операций способа управления записью в разделяемый ресурс памяти согласно первому аспекту настоящего раскрытия.

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

[ФИГ. 3] Фиг. 3 иллюстрирует временную диаграмму, показывающую неограничивающий пример последовательности возможных изменений значения указателя (v) со знаком при реализации любого из раскрытых здесь способов.

[ФИГ. 4] Фиг. 4 иллюстрирует схематичное представление системы управления чтением-записью разделяемого ресурса памяти, которая выполнена с возможностью реализации любого из раскрытых здесь способов.

Подробное описание вариантов осуществления

[0015] Раскрытая технология и использующие ее технические решения относятся к технологиям разделения доступа к общим ресурсам в системе с параллельными вычислениями. В таких системах обычно требуется распределять права доступа и очередность доступа к данным. Под “доступом к данным” понимается возможность обращаться к памяти или дисковому хранилищу, например конкретному HDD, SSD, NVMe, или к минимальной адресуемой единице памяти (например к ячейке памяти), или к минимальной адресуемой единице информации (например к байту), для чтения и/или записи данных. Тогда возникает задача быстрого и отказоустойчивого распределения таких доступов между писателями и читателями. Под термином “писатель” здесь понимается любой аппаратный или программный объект или сущность, которым доступна память или и с которой они могут взаимодействовать для записи в эту память любых данных, неограничивающие примеры “писателя” включают в себя устройство-писатель или поток записи. Под термином “читатель” здесь понимается любой аппаратный или программный объект или сущность, которым доступна память или и с которой они могут взаимодействовать для чтения хранящихся в этой памяти любых данных, неограничивающие примеры “читателя” включают в себя устройство-читатель или поток чтения.

[0016] Класс задач требует обеспечить распределения доступов между писателями и читателями. Важно, чтобы процессы записи и чтения не конфликтовали, иначе возникают ошибки в самих данных. Существуют разные парадигмы по количеству и приоритету писателей и читателей в системе. Варианты осуществления настоящей заявки главным образом относятся к системе с одним писателем и множественными читателями, в которой приоритет отдается читателям. Фразу “в системе имеется один писатель” здесь и везде в этой заявке следует понимать так, что в определенный момент времени в системе имеется только один активный писатель, которому разрешено выполнять запись, а не так, что в системе есть всего один писатель, например единственное устройство-писатель.

[0017] В такой парадигме сервер может выступать единой точкой входа для приема, обработки и сохранения данных. Например, без ограничения упомянутым, таким сервером может быть сервер для хранения данных поездок сервиса Яндекс.Такси или для хранения и обработки данных о товарах Яндекс.Маркета. Клиентами (т.е. потребителями данных), в свою очередь, выступают пользовательские устройства, терминалы, которые обращаются на упомянутый сервер для получения интересующих их данных. Снижение конфликтов в таких случаях является крайне важным для получения всеми клиентами согласованной (на определенный момент времени) информации, например одной цены на товар, если говорим про Яндекс.Маркет, или, например, для учёта-расчёта маршрутов поездок в Яндекс.Такси.

[0018] Раскрытая технология позволяет оптимизировать хранение и доступы к разделяемым (общим) ресурсам памяти в системе с параллельными вычислениями, например, к кеширующей библиотеке с высокой конкурентностью. То есть, в этом неограничивающем примере, доступ к кэшу памяти, куда сохраняются «популярные» запросы клиентов. Раскрытая технология предлагает способ управления чтением-записью (и, следовательно, захватом-освобождением мьютекса на чтение-запись) с помощью одного указателя со знаком, который может быть установлен для указания наличия запроса на запись от писателя в очереди обрабатываемых запросов. Таким образом, используя предлагаемые здесь способы и другие технические решения, реализующие эти способы, избежать конфликтов обращения к данным, когда данные одновременно пишутся в разделяемый ресурс памяти и читаются из него.

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

[0020] В информатике читатели-писатель (Readers-Writer, RW) - это примитив синхронизации, который решает одну из проблем RW. Блокировка RW или, по меньшей мере в некоторых контекстах - мьютекс (mutex, от “mutual exclusion” - взаимное исключение), обеспечивает возможность одновременного (параллельного для предопределенного числа читателей) доступа к разделяемому ресурсу памяти только для его чтения, в то время как операции записи в этот разделяемый ресурс памяти требуют эксклюзивного доступа. Это означает, что несколько потоков могут считывать данные параллельно, но для записи или изменения данных необходима эксклюзивная блокировка. Когда писатель записывает данные, все остальные писатели и читатели будут заблокированы до тех пор, пока писатель не закончит запись. Обычным применением данной блокировки может быть управление доступом к ресурсу памяти (например структуре данных в памяти), который не может быть обновлен атомарно и является недопустимым (и не должен быть прочитан другим потоком) до завершения его обновления. “Атомарная” операция относится к простой и быстрой операции с ресурсом памяти, которая не может быть прервана параллельными операциями. Можно сказать, что блокировка или мьютекс в раскрытой здесь системе (в основной парадигме с приоритетом читателей) обеспечивает исключительную операцию записи, при которой только один писатель может изменять данные в определенное время (например во временном интервале t4-t5, проиллюстрированном на Фиг. 3). В то время как в этой же системе может быть несколько читателей, осуществляющих чтение данных из одного разделяемого ресурса памяти параллельно (см., например, временной интервал t1-t3, проиллюстрированный на Фиг. 3, во время которого данные из одного разделяемого ресурса памяти параллельно считываются читателями 500a и 500b). Основная парадигма, на работу с которой главным образом нацелены технические решения, раскрываемые в данной заявке, подходит для систем, в которых запись выполняется нечасто, а производительность операций чтения является более важной.

[0021] На Фиг. 1 иллюстрируется блок-схема последовательности операций способа управления записью в разделяемый ресурс памяти согласно первому аспекту настоящего раскрытия. Данный способ реализуется в системе с приоритетом на чтение, в которой, как указано выше, разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти. Способ начинается с этапа S100, на котором принимают запрос на запись в разделяемый ресурс памяти от писателя. Данные, запись которых запрашивается запросом на запись, могут изначально содержаться в запросе на запись или передаваться только тогда, когда выполнение данного запроса будет разрешено. Прием запроса на запись может быть осуществлен любым способом, например, через проводную связь или беспроводную связь между соответствующим писателем и устройством 300 или иным компонентом управления чтением-записью, или через программный вызов потока записи в определенной среде исполнения. В запросе на запись указывается конкретный разделяемый ресурс памяти и/или его область, указываемые, например, в поле ‘адрес’ запроса, куда данные необходимо записать.

[0022] Как только запрос на запись принят на этапе S100, способ переходит на этап S105, на котором считывают текущее значение указателя, связанного с разделяемым ресурсом памяти, указанным в запросе на запись. Под термином “указатель” в данном документе понимается адрес ячейки в памяти, хранящей считываемое значение, которое в предпочтительном, но не ограничивающем варианте осуществления является целым числом. То, что “указатель связан с разделяемым ресурсом памяти”, означает, что конкретный указатель используется для управления доступами к конкретному разделяемому ресурсу памяти. Таким образом, должно быть понятно, что для управления доступами к множеству разделяемых ресурсов памяти может использоваться соответствующее множество указателей. Текущее значение самого указателя может храниться в любом месте, например, в самом разделяемом ресурсе памяти или в любой другой памяти (например, в кэше или регистре процессора, буфере и т. д.) или области памяти, доступ к которой может быть осуществлен на этапе S105. Значение указателя указывает общее количество имеющихся в очереди запросов (в том числе на запись и на чтение), подлежащих выполнению, и то, имеется ли среди упомянутых запросов именно запрос на запись (сигнализируется наличием или отсутствием определенного знака, т.е. первого знака, что подробно описано далее).

[0023] После выполнения на этапе S105 считывания текущего значения указателя способ переходит на этап S110, на котором определяют, имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись. В неограничивающих вариантах реализации данного этапа знак можно определить по значению знакового бита в двоичном представлении текущего значения указателя со знаком или путем сравнения с нулем считаного текущего значения указателя со знаком. Неограничивающим способом представления текущего значения указателя может быть дополнительный код ("two’s complement"). В предпочтительном варианте осуществления первым знаком является знак минус (-), т.е. знак отрицательного числа. Тем не менее, в другом варианте осуществления первым знаком может быть знак плюс (+), т.е. знак положительного числа. В упомянутом выше другом варианте осуществления знак плюс может дополнительно явным образом не сигнализироваться, а выводиться логически, если типом переменной указателя является, например, тип ‘unsigned int’. В этом случае диапазон значений, которые значение указателя может принимать, может быть расширен, поскольку бит, который использовался бы в качестве знакового бита, используется (в этом случае с типом переменной ‘unsigned int’) для представления самого числа.

[0024] Неограничивающие примеры значений указателя, когда первым знаком является знак минус, включают в себя: 0 (отсутствуют какие-либо запросы), 1 (имеется один запрос на чтение), 2 (имеется два запроса на чтение), 3 (имеется три запроса на чтение), -2 (имеется всего два запроса, одним из которых является запрос на запись, а другим - запрос на чтение), -3 (имеется всего три запроса, одним из которых является запрос на запись, а двумя другими - запросы на чтение) и т. д. Неограничивающие примеры значений указателя, когда первым знаком является знак плюс, включают в себя: 0 (отсутствуют какие-либо запросы), -1 (имеется один запрос на чтение), -2 (имеется два запроса на чтение), -3 (имеется три запроса на чтение), 2 (имеется всего два запроса, одним из которых является запрос на запись, а другим - запрос на чтение), 3 (имеется всего три запроса, одним из которых является запрос на запись, а двумя другими - запросы на чтение) и т. д.

[0025] В случае определения на этапе S110, что текущее значение указателя имеет первый знак (например считаным значением является значение -2), осуществляют возврат на этап S105, поскольку это говорит о том, что среди запросов в данный момент уже есть запрос на запись, поэтому данный запрос на запись, который был принят на этапе S100, не может быть поставлен в очередь запросов и выполнен до тех пор, пока не будет выполнен уже имеющийся в очереди запросов запрос на запись. Как указано выше, одновременная запись в один разделяемый ресурс памяти или одновременное с записью чтение одного разделяемого ресурса памяти может привести к состояниям гонок данных со сложно предсказуемым поведением, что в конечном счёте может привести к ошибкам в данных этого разделяемого ресурса памяти, поэтому выполнение данного этапа S110 оценки знака текущего значения лишь одного указателя является технически выгодным, поскольку позволяет избежать таких состояний при минимальном расходе ресурсов (например памяти) за счет обработки единственного указателя.

[0026] В случае определения на этапе S110, что текущее значение указателя не имеет первый знак (например считаным значением является значение 0) или имеет второй знак (например считаным значением является значение 2, как показано для временного интервала от t1 до t2 на Фиг. 3, что означает (из-за наличия второго знака), что среди запросов в данный момент запроса на запись нет) - способ переходит на этап S115, на котором осуществляют попытку захватить мьютекс для записи в упомянутый разделяемый ресурс памяти посредством выполнения атомарной операции CAS над текущим значением указателя, связанного с разделяемым ресурсом памяти. В целом, суть операции CAS сводится к атомарному выполнению проверки, соответствует ли текущее значение переменной в памяти ожидаемому значению этой переменной, и если да (т.е. считанные значения равны), замены текущего значения переменной новым значением этой переменной. Неограничивающие примеры атомарных инструкций, выполняющих операции CAS, включают в себя, для архитектур процессоров x86, атомарные инструкции CMPXCHG, CMPXCHG8B, CMPXCHG16B. Сама по себе операция CAS из уровня техники известна, поэтому ее более подробное описание здесь не приводится.

[0027] В случае неуспешного выполнения операции CAS на этапе S115, осуществляют возврат на этап S105. В этом случае всю последовательность этапов, начиная с этапа S105, выполняют повторно до тех пор, пока для принятого на этапе S100 запроса на запись не будет успешно захвачен мьютекс для записи в упомянутый разделяемый ресурс памяти. В противном случае, т.е. когда на этапе S115 операция CAS выполняется успешно, способ переходит к выполнению этапа S120, на котором выполняют стремящееся от нуля изменение значения указателя, и этапа S125, на котором устанавливают знаком измененного значения указателя упомянутый первый знак, указывающий наличие в очереди запросов, подлежащих выполнению, того запроса на запись, который был принят на этапе S100. После успешного изменения значения указателя и установки знаком измененного значения указателя упомянутого первого знака мьютекс на запись для запроса на запись, который был принят на этапе S100, является захваченным.

[0028] В предпочтительном варианте реализации начальное значение указателя v может быть инициализировано равным нулю, т.е. v0=v(0), а число, на величину которого на этапе S120 выполняют стремящееся от нуля изменение значения указателя v, может равняться 1. Тем не мерее, должно быть понятно, что число, на величину которого выполняют стремящееся от нуля изменение значения указателя v на этапе S120, может быть больше 1, например, 2, 3 или большее число (в этом случае общее число запросов в очереди запросов может быть определено по значению такого указателя как текущее значение указателя, деленное, соответственно, на 2, 3 или большее число).

[0029] Сутью “стремящегося от нуля изменения значения указателя v” является такое изменение текущего значения указателя v при котором, вне зависимости от текущего знака текущего значения указателя v, измененное значение является значением, которое находится дальше от нуля, чем значение до изменения, на величину определенного, в предпочтительном варианте - целого, числа (например, на единицу (1) дальше). Для иллюстрации, а не ограничения, если текущим значением указателя v является значение 1, тогда результатом стремящегося от нуля изменения значения указателя v на единицу будет 2, если текущим значением указателя v является значение -1, тогда результатом стремящегося от нуля изменения значения указателя v на единицу будет -2, если текущим значением указателя v является значение 2, тогда результатом стремящегося от нуля изменения значения указателя v на единицу будет 3, если текущим значением указателя v является значение -2, тогда результатом стремящегося от нуля изменения значения указателя v на единицу будет -3 и т. д. Как указано выше, число, на величину которого выполняют стремящееся от нуля изменение значения указателя v на этапе S120 может быть больше единицы. Неограничивающие примеры реализации стремящегося от нуля изменения значения указателя v показаны с левой стороны на Фиг. 3, которая будет описана ниже по тексту данного описания.

[0030] Неограничивающим примером реализации этапа S125 установки знаком измененного значения указателя упомянутый первый знак является умножение измененного значения указателя на -1. В неограничивающем примере реализации, показанном на Фиг. 3, когда в качестве первого знака используется знак минус, значение v2 указателя в момент t2 времени может быть получено как v2=(v1(2)+1)×(-1)=-3. Таким образом общей формулой выполнения изменения значения и установки первого знака на этапах S120 и S125 в упомянутом неограничивающем примере реализации будет vi=(vi-1+1)×(-1).

[0031] В другом неограничивающем примере (не показанном на фигуре), когда в качестве первого знака используется знак плюс (соответственно значение v1, показанное на Фиг. 3, как равное 2, будет равняться в этом другом неограничивающем примере -2), значение v2 указателя в момент t2 времени может быть получено как v2=(v1(-2)-1)×(-1)=3. Таким образом общей формулой выполнения изменения значения и установки первого знака на этапах S120 и S125 в этом другом неограничивающем примере реализации будет vi=(vi-1-1)×(-1). Еще в одной альтернативе изменение значения и установка первого знака на этапах S120 и S125 (в варианте, в котором в качестве первого знака используется знак плюс, как указано выше), может быть выполнено как v2=|v1(-2)|+1=3, где | | указывает модуль или абсолютное значение. Таким образом общей формулой выполнения изменения значения и установки первого знака на этапах S120 и S125 в этой альтернативе будет vi=|vi-1|+1.

[0032] После выполнения этапов S120 и S125 способ переходит к выполнению этапа S130, на котором считывают текущее (уже измененное) значение указателя v для определения, имеются ли незавершенные операции чтения из упомянутого разделяемого ресурса памяти, соответствующие одному или более ранее принятым запросам на чтение соответственно от одного или более читателей. Данное определение по сути опирается на оценку текущего (уже измененного) значения указателя v. В качестве неограничивающего примера, в котором единица используется в качестве величины стремящегося от нуля изменения, а в качестве первого знака используется знак минус, данная оценка для момента t2 времени (см. Фиг. 3) может быть проведена следующим образом |v2(-3)|-1=2, где | | указывает модуль или абсолютное значение. Таким образом общей формулой оценки на этапе S130, имеются ли незавершенные операции чтения, в упомянутом неограничивающем примере реализации будет |vcurrent|-1, где vcurrent - текущее (уже измененное на этапе S120) значение указателя. Полученное в этом примере значение 2 говорит о том, что в очереди запросов, помимо запроса на запись от писателя 600, имеются два запроса на чтение, а именно показанные на Фиг. 3 запросы на чтение от читателей 500a, 500b.

[0033] В другом неограничивающем пример (не показан), в котором единица используется в качестве величины стремящегося от нуля изменения, а в качестве первого знака используется знак плюс, данная оценка для момента t2 времени, в который v2 соответственно равно 3, а не -3 как показано на Фиг. 3, может быть проведена следующим образом v2(3)-1=2. Таким образом общей формулой оценки на этапе S130, имеются ли незавершенные операции чтения, в упомянутом неограничивающем примере реализации будет vcurrent-1, где vcurrent - текущее (уже измененное на этапе S120) значение указателя. Полученное в этом примере значение 2 говорит о том, что в очереди запросов, помимо запроса на запись от писателя 600, имеются два запроса на чтение, а именно показанные на Фиг. 3 запросы на чтение от читателей 500a, 500b.

[0034] Указанные выше примеры приведены не для ограничения предлагаемого технического решения, а для иллюстрации возможных вариантов реализации стремящегося от нуля изменения S120 значения указателя v, установки S125 соответствующего знака и считывания значения S130 с оценкой, имеются ли незавершенные операции чтения из упомянутого разделяемого ресурса памяти. Таким образом, другие варианты реализации, очевидным образом вытекающие из приведенных выше неограничивающих примеров реализации, могут применяться без отступления от сути и объема предлагаемого технического решения. Предполагается, что все такие варианты и эквиваленты указанных выше признаков охватываются формулой настоящего изобретения.

[0035] В случае, если определено на этапе S130, что незавершенные операции чтения имеются, результатом выполнения операции не является предопределенное число (например: -1, когда в качестве первого знака используется знак минус, а в качестве величины стремящегося от нуля (к нулю) изменения используется единица; 1, когда в качестве первого знака используется знак плюс, а в качестве величины стремящегося от нуля (к нулю) изменения используется единица; -2, когда в качестве первого знака используется знак минус, а в качестве величины стремящегося от нуля (к нулю) изменения используется число два; 2, когда в качестве первого знака используется знак плюс, а в качестве величины стремящегося от нуля (к нулю) изменения используется число два и т.д.), способ переходит на этап S135 ожидания завершения всех незавершенных операций чтения.

[0036] В проиллюстрированном на Фиг. 3 неограничивающем примере писатель 600 выполняет ожидание с момента t2 до момента t4 времени, т.е. до тех пор, пока ранее принятые запросы на чтение от читателей 500a, 500b не будут выполнены. Другими словами, ожидание выполняется до тех пор, пока значение выполняемой на этапе S130 операции не станет равно предопределенному значению. В показанном на Фиг. 3 неограничивающем примере предопределенным значением является значение -1, которое устанавливается читателями 500a, 500b и может быть считано писателем 600 в момент t4 времени. В неограничивающем примере реализации ожидания на этапе S135 осуществляется регулярная проверка (один раз в единицу времени) текущего значения указателя до тех пор, пока не будет считано упомянутое предопределенное значение. Считывание на этапе S135 предопределенного значения (в результате, например, регулярной проверки) означает, что в очереди запросов остался лишь запрос на запись от писателя 600, который был ранее принят на этапе S100 и исполнение которого в данный момент (начиная с момента t4 времени) не приведет к нежелательным состояниям разделяемого ресурса памяти и/или ошибкам в данных, хранимых или записываемых в разделяемый ресурс памяти. Далее способ переходит на этап S140.

[0037] Таким образом, когда определяется на этапе S130 или этапе S135, что незавершенные операции чтения отсутствуют (т.е. значение указателя равно предопределенному значению) способ переходит на этап S140, на котором осуществляют операцию записи в разделяемый ресурс памяти согласно запросу на запись, принятому на этапе S100 от писателя (например писателя 600). Запись может осуществляться любым известным из уровня техники способом. Любые данные, без каких-либо ограничений, могут записываться на данном этапе. После завершения записи способ переходит на этап S145, на котором освобождают мьютекс на запись посредством выполнения атомарной операции CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.

[0038] Операция, выполняемая на этапе S145, является по сути обратной по отношению к операции, выполненной ранее на этапе S115. Сутью “стремящегося к нулю изменения значения указателя v” является такое изменение текущего значения указателя v при котором, вне зависимости от текущего знака текущего значения указателя v, измененное значение является значением, которое находится ближе к нулю, чем значение до изменения, на величину определенного, в предпочтительном варианте - целого, числа (например, на единицу (1) ближе). Для иллюстрации, а не ограничения, если текущим значением указателя v является значение 1, тогда результатом стремящегося к нулю изменения значения указателя v на единицу будет 0, если текущим значением указателя v является значение -1, тогда результатом стремящегося к нулю изменения значения указателя v на единицу будет 0, если текущим значением указателя v является значение 2, тогда результатом стремящегося к нулю изменения значения указателя v на единицу будет 1, если текущим значением указателя v является значение -2, тогда результатом стремящегося к нулю изменения значения указателя v на единицу будет -1 и т. д. Как указано выше, число, на величину которого выполняют стремящееся к нулю изменение значения указателя v на этапе S145 может быть больше единицы. Неограничивающие примеры реализации стремящегося к нулю изменения значения указателя v показаны с правой стороны на Фиг. 3.

[0039] Неограничивающим примером реализации стремящегося к нулю изменения значения указателя v в ходе выполнения этапа S145, когда в качестве первого знака используется знак минус, значение v5 указателя в момент t5 времени (конец записи 600) может быть получено как v5=|v4(-1)|-1=0. Таким образом общей формулой выполнения изменения значения в ходе выполнения этапа S145 в упомянутом неограничивающем примере реализации будет vi=|vi-1|-1, где | | указывает модуль или абсолютное значение. Значение 0, получаемое и устанавливаемое в момент t5 времени в проиллюстрированном на Фиг. 3 неограничивающем примере, означает, что в данный момент в очереди запросов никаких запросов нет, поэтому любой запрос может вновь приниматься и безошибочно исполняться согласно формируемой очереди. Способы непосредственного формирования очереди, которые из уровня техники сами по себе известны, не относятся к предмету настоящей заявки. В предпочтительном варианте осуществления очередь может формироваться в целом согласно принципу «первым пришёл - первым ушёл» (FIFO) в той части, в которой этот принцип не противоречит способу, описанному выше со ссылкой на Фиг. 1 (и частично со ссылкой на Фиг. 3), или способу, который будет описан ниже со ссылкой на Фиг. 2 (и частично со ссылкой на Фиг. 3). В случае, если принимаемый на этапе S100 запрос является запросом на запись, его обработку и исполнение осуществляют способом, описанным выше со ссылкой на Фиг. 1 (и частично со ссылкой на Фиг. 3), а если принимаемый на этапе S200 запрос является запросом на чтение, его обработку и исполнение осуществляют способом, который будет описан ниже со ссылкой на Фиг. 2 (и частично со ссылкой на Фиг. 3).

[0040] На Фиг. 2 иллюстрируется блок-схема последовательности операций способа управления чтением из разделяемого ресурса памяти согласно второму аспекту настоящего раскрытия. Поскольку многие этапы способа по Фиг. 2 аналогичны соответствующим этапам способа по Фиг. 1, описание способа по Фиг. 2 будет акцентировано лишь на отличиях от Фиг. 1, чтобы избежать лишних повторений. Данный способ реализуется в системе с приоритетом на чтение, в которой, как указано выше, разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти. Способ начинается с этапа S200, на котором принимают запрос на чтение из разделяемого ресурса памяти от читателя. Прием запроса на чтение может быть осуществлен любым способом, например, через проводную связь или беспроводную связь между соответствующим читателем и устройством 300 или иным компонентом управления чтением-записью, или через программный вызов потока чтения в определенной среде исполнения. В запросе на чтение указывается конкретный разделяемый ресурс памяти и/или его область, указываемые, например, в поле ‘адрес’ запроса, откуда данные необходимо считать.

[0041] Как только запрос на чтение принят на этапе S200, способ переходит на этап S205, на котором считывают текущее значение указателя, связанного с разделяемым ресурсом памяти, указанным в запросе на чтение. Особенности данного этапа S205 соответствуют таковым, описанным выше в отношении этапа S105. После выполнения на этапе S205 считывания текущего значения указателя способ переходит на этап S210, на котором определяют, имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись. Особенности данного этапа S210 соответствуют таковым, описанным выше в отношении этапа S110.

[0042] В случае определения на этапе S210, что текущее значение указателя имеет первый знак (например считаным значением является значение -2 со знаком минус, используемым в этом неограничивающем примере в качестве первого знака, как показано на Фиг. 3 в момент t3 времени первой попытки читателя 500c передать запрос на чтение и осуществить чтение), осуществляют возврат на этап S205, поскольку это говорит о том, что среди запросов в данный момент уже есть запрос на запись, поэтому данный запрос на чтение, который был принят на этапе S200, не может быть поставлен в очередь запросов и выполнен до тех пор, пока не будет выполнен уже имеющийся в очереди запросов запрос на запись. Как указано выше, одновременное с записью чтение одного разделяемого ресурса памяти может привести к состояниям гонок данных со сложно предсказуемым поведением, что в конечном счёте может привести к ошибкам в данных этого разделяемого ресурса памяти, поэтому выполнение данного этапа S210 оценки знака текущего значения лишь одного указателя является технически выгодным, поскольку позволяет избежать таких состояний при минимальном расходе ресурсов (например памяти) за счет обработки единственного указателя. Благодаря такой логике и использованию проверки знака значения указателя избегается нежелательная ситуация вечной блокировки писателя, когда уже принятый запрос на запись всегда “отодвигается” в конец очереди каждым последующим принимаемым запросом на чтение от множества имеющихся в системе читателей. В этом смысле способы, описанные на Фиг. 1 и Фиг. 2, являются способами без блокировок.

[0043] В случае определения на этапе S210, что текущее значение указателя не имеет первый знак (например считаным значением является значение 0, как показано для временного интервала от t5 до t6 на Фиг. 3, что означает (из-за отсутствия какого-либо знака и нулевого значения), что запросов в данный момент нет вообще) или имеет второй знак (например считаным значением является значение 2, как показано для временного интервала от t1 до t2 на Фиг. 3, что означает (из-за наличия второго знака), что среди запросов в данный момент запроса на запись нет, а есть лишь два запроса на чтение) - способ переходит на этап S215, на котором осуществляют попытку захватить мьютекс для чтения в упомянутый разделяемый ресурс памяти посредством выполнения атомарной операции CAS над текущим значением указателя, связанного с разделяемым ресурсом памяти. Особенности выполняемой на этапе S215 операции CAS соответствуют таковым выполняемой на этапе S115 операции CAS.

[0044] В случае неуспешного выполнения операции CAS на этапе S215, осуществляют возврат на этап S205. В этом случае всю последовательность этапов, начиная с этапа S205, выполняют повторно до тех пор, пока для принятого на этапе S200 запроса на чтение не будет успешно захвачен мьютекс для чтения упомянутого разделяемого ресурса памяти. В противном случае, т.е. когда на этапе S215 операция CAS выполняется успешно, способ переходит к выполнению этапа S220, на котором выполняют стремящееся от нуля изменение значения указателя. После успешного изменения значения указателя мьютекс на чтение для запроса на чтение, который был принят на этапе S200, является захваченным. Особенности выполняемого на этапе S220 изменения соответствуют таковым выполняемого на этапе S120 изменения.

[0045] После выполнения этапа S220 способ переходит к выполнению этапа S225, на котором осуществляют операцию чтения разделяемого ресурса памяти согласно запросу на чтение, принятому на этапе S200 от читателя (например читателя 500с). Чтение может осуществляться любым известным из уровня техники способом. Как показано на Фиг. 3 читатель может осуществить несколько попыток инициировать чтение согласно его запросу на чтение. Попытки 1 и 2 этого читателя 500c не будут успешными, т.к. проверка, выполняемая на этапе S210, укажет на наличие у текущего значения указателя первого знака, указывающего наличие стоящего в очереди /осуществляющего запись писателя. Успешной для читателя 500c окажется лишь попытка 3 в момент t6 времени, поскольку в непосредственно предшествующий момент t5 времени инициированная писателем 600 запись завершится. Любые данные, без каких-либо ограничений, могут считываться на данном этапе. После завершения чтения способ переходит на этап S230, на котором освобождают мьютекс на чтение посредством выполнения атомарной операции CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя. Особенности выполняемой на этапе S230 операции CAS соответствуют таковым выполняемой на этапе S145 операции CAS.

[0046] В альтернативном аспекте может быть обеспечен реализуемый компьютером способ управления чтением из разделяемого ресурса памяти или записью в разделяемый разделяемого ресурса памяти в системе с приоритетом на чтение, в которой разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти. Способ согласно данному альтернативному аспекту включает в себя выполнение этапов c S105 по S145 в случае если принятым запросом является запрос на запись или выполнение этапов c S205 по S230 в случае если принятым запросом является запрос на чтение. Указанные этапы были описаны выше подробно, поэтому их повторное описание здесь не приводится.

[0047] Еще одним вариантом объединения в одном способе последовательной или параллельной обработки как запросов на запись, так и запросов на чтение в зависимости от того, какой именно тип запроса в данный момент принят (запрос на запись или запрос на чтение), является вариант способа согласно описанному выше третьему аспекту настоящего раскрытия (см. раздел “Сущность изобретения” выше по тексту данного описания). Подробности, особенности и неограничивающие примеры реализации операций способа согласно такому третьему аспекту настоящего изобретения соответствуют таковым, описанным выше со ссылкой на Фиг. 1 и Фиг. 2, поэтому эти подробности, особенности и неограничивающие примеры повторно здесь не описываются.

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

[0049] На Фиг. 4 иллюстрируется схематичное представление системы управления чтением-записью разделяемого ресурса 400 памяти, которая выполнена с возможностью реализации любого из раскрытых здесь способов. Должно быть понятно, что число компонентов 300, 400, 500, 600 в системе может отличаться от показанного количества как в большую, так и в меньшую сторону. Система управления чтением-записью разделяемого ресурса 400 памяти содержит устройство 300 управления чтением-записью, по меньшей мере один разделяемый ресурс 400 памяти, связанный с упомянутым устройством 300 управления чтением-записью и соответствующим указателем, множество читателей 500 и одного или более писателей 600. Устройство 300 управления чтением-записью и один или более писателей 600, когда последние реализуются как одно или более устройств-писателей 600, могут быть серверами. При этом устройство 300 управления чтением-записью и упомянутые одно или более устройств-писателей 600 могут быть объединены в единый сервер или могут быть представлены разными устройствами/серверами.

[0050] Устройство 300 содержит по меньшей мере процессор 300.1 и память 300.2, связанные друг с другом функционально. Память 300.2 хранит исполняемые процессором инструкции и любые другие данные необходимые для функционирования устройства 300. В том случае, когда писатель 600, реализуется как устройство-писатель, а не как поток записи в среде исполнения, устройство-писатель 600 может содержать, аналогично устройству 300, по меньшей мере процессор и память (не показанные на Фиг. 4). Кроме того, отметим, что на Фиг. 4 не показаны, с целью упрощения описания, другие возможные компоненты устройства 300 и писателя 600, если последний реализуется как устройство-писатель 600, такие как, например, устройство ввода/вывода, блок питания, блок связи и т. д., которые могут быть аналогичны компонентам традиционного компьютерного сервера, например сервера Dell™ PowerEdge™, работающего под управлением операционной системы Microsoft™ Windows Server™ или Linux. Процессор 300.1 в устройстве 300 может быть реализован на основе, но без ограничения упомянутым, программируемой пользователем вентильной матрицы (Field-Programmable Gate Array, FPGA), интегральной схемы определенного назначения (Application-Specific Integrated Circuit, ASIC), системы на кристалле (System on Chip, SoC), которые выполнены с возможностью осуществления той или иной функциональности или того или иного этапа способа, раскрытых в данной заявке.

[0051] Каждый из множества читателей 500, когда реализуется как устройство-читатель, а не поток чтения в среде исполнения, может представлять собой пользовательское устройство, которым может быть любое электронное устройство пользователя под управлением операционной системы типа Windows™, Linux, Android™, Harmony™, iOS™ и т.д. или любой другой операционной системы (например Unix). Неограничивающие примеры пользовательского устройства включают в себя: компьютер, смартфон, умный электроприбор (например, телевизор или колонка), умные часы, AR/VR-гарнитуры и т.д.

[0052] В системе выполнение способа может инициироваться получением на устройстве 300 от одного из читателей 500a, 500b, 500c, 500d запроса на чтение разделяемого ресурса 400 памяти или получением на устройстве 300 от писателя 600 запроса на запись в разделяемый ресурс 400 памяти. Для этих целей, хранящиеся в памяти 300.2 устройства 300 исполняемые процессором 300.1 устройства 300 инструкции в случае приема такого запроса побуждают устройство 300 к выполнению соответствующего способа из раскрытых в данной заявке способов управления чтением-записью разделяемого ресурса 400 памяти.

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

[0054] Кроме того, данное подробное описание может описывать реализации настоящей технологии в относительно упрощенном виде для целей упрощения понимания. Специалисты в данной области поймут, что различные реализации настоящей технологии могут иметь большую сложность. В некоторых случаях также могут быть изложены примеры модификаций настоящей технологии, которые считаются полезными. Это делается лишь для содействия понимаю и, опять же, не для строгого определения объема или очерчивания границ настоящей технологии. Эти модификации не являются исчерпывающим списком, и специалист в данной области сможет осуществить другие модификации, все еще оставаясь при этом в рамках объема настоящей технологии. Кроме того, случаи, когда примеры модификаций не приводятся, не следует толковать так, что никакие модификации не могут быть осуществлены и/или что описанное является единственным способом реализации такого элемента настоящей технологии.

[0055] Используемый здесь термин «и/или» включает в себя любые и все комбинации из одного или более связанных перечисленных элементов. Кроме того, должно быть понятно, что по меньшей мере в некоторых случаях номера этапов или блоков не ограничивают очередность выполнения соответствующих им функций. Некоторые этапы раскрытых способов могут быть объединены в один этап, а некоторый один этап раскрытых способов, наоборот, может быть разбит на несколько подэтапов. В случае если некоторые атомарные операции (например CAS) показаны на фигурах и описаны в этом описании как последовательность нескольких действий, это сделано лишь для упрощения и наглядности описания такой операции, но предполагается что вся такая последовательность исполняется атомарно, т.е. либо она выполняется целиком, либо не выполняется вовсе.

[0056] Используемая здесь терминология предназначена только для описания конкретных репрезентативных реализаций и не предназначена для ограничения настоящей технологии. Предполагается, что используемые здесь формы единственного числа включают в себя формы множественного числа, если контекст явно не указывает иное. Кроме того, будет понятно, что термины «содержит», «включает в себя» и/или «содержащий», «включающий в себя», когда они используются в этом описании, определяют наличие заявленных функций, этапов, операций, блоков, элементов и/или компонентов, но не исключают наличие или добавление одной или более других функций, этапов, операций, блоков, элементов, компонентов и/или их групп. Такие слова как “первый” и “второй” используются лишь как служебные слова для разграничения различных однотипных элементов лишь для удобства описания. Таким образом, должно быть понятно, что элемент указанный как “первый”, в другом варианте осуществления может быть “вторым” и наоборот.

[0057] Настоящая технология может быть реализована как компьютерный программный продукт. Компьютерный программный продукт может включать в себя считываемый компьютером носитель данных (или носители), хранящий считываемые компьютером программные инструкции, которые при исполнении процессором побуждают процессор осуществлять аспекты раскрытой технологии. Считываемый компьютером носитель данных может быть, например, электронным запоминающим устройством, магнитным запоминающим устройством, оптическим запоминающим устройством, электромагнитным запоминающим устройством, полупроводниковым запоминающим устройством или любой их подходящей комбинацией. Неисчерпывающий список более конкретных примеров считываемого компьютером носителя данных включает в себя: портативный компьютерный диск, жесткий диск, оперативную память (RAM), постоянную память (ROM), флэш-память, оптический диск, карту памяти, дискету, носитель с механическим или визуальным кодированием (например, перфокарту или штрих-код) и/или их любую комбинацию. Считываемый компьютером носитель данных, используемый в данном документе, следует рассматривать как долговременный считываемый компьютером носитель. Его не следует рассматривать как переходной сигнал, такой как радиоволны или другие свободно распространяющиеся электромагнитные волны, электромагнитные волны, распространяющиеся по волноводу или другим средам передачи (например, световые импульсы, проходящие по оптоволоконному кабелю), или электрические сигналы, передаваемые по проводу.

[0058] Будет понятно, что считываемые компьютером программные инструкции могут быть загружены в соответствующие вычислительные или обрабатывающие устройства (например в устройство 300 или любое иное подходящее устройство или блок управления чтением-записью в любом другом подходящем устройстве) со считываемого компьютером носителя данных или во внешний компьютер или внешнее запоминающее устройство через сеть, такую как Интернет, локальная сеть, глобальная сеть и/или беспроводная сеть. Сетевой интерфейс в вычислительном/обрабатывающем устройстве может принимать считываемые компьютером программные инструкции (и любые другие необходимые для реализации способа данные) через сеть и пересылать считываемые компьютером программные инструкции (и любые другие необходимые для реализации способа данные) для сохранения на считываемом компьютером носителе данных в соответствующем вычислительном или обрабатывающем устройстве.

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

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

название год авторы номер документа
УМЕНЬШЕНИЕ ЗАВИСИМОСТИ ОТ СИНХРОНИЗАЦИИ В ПОМЕТКЕ СБОРА МУСОРА 2020
  • Стефенс, Маони Чжан
  • Дассад, Патрик Генри
RU2805768C2
СПОСОБ ПРОВЕДЕНИЯ РАЗДЕЛЕНИЯ ОБЪЕКТОВ БАЗЫ ДАННЫХ НА ОСНОВЕ МЕТОК КОНФИДЕНЦИАЛЬНОСТИ 2017
  • Печенкин Никита Сергеевич
  • Коротченко Андрей Александрович
  • Медведев Андрей Александрович
RU2676223C1
СИСТЕМА И СПОСОБ ДЛЯ ИЗОЛЯЦИИ РЕСУРСОВ ПОСРЕДСТВОМ ИСПОЛЬЗОВАНИЯ РЕСУРСНЫХ МЕНЕДЖЕРОВ 2013
  • Моисеев Станислав Владимирович
  • Ершов Михаил Александрович
RU2571380C2
ЖУРНАЛИРУЕМОЕ ХРАНЕНИЕ БЕЗ БЛОКИРОВОК ДЛЯ НЕСКОЛЬКИХ СПОСОБОВ ДОСТУПА 2014
  • Ломет, Дэвид Б.
  • Левандоски, Джастин
  • Сенгупта, Судипта
RU2672719C2
УПРАВЛЕНИЕ СКОРОСТЬЮ, С КОТОРОЙ ОБРАБАТЫВАЮТСЯ ЗАПРОСЫ НА ПРЕРЫВАНИЕ, ФОРМИРУЕМЫЕ АДАПТЕРАМИ 2010
  • Густав Зитманн, Iii
  • Дейвид Краддок
  • Томас Грегг
  • Доналд Уилльям Шмидт
  • Брентон Франсуа Белмар
  • Марк Фаррел
  • Деймиан Лео Осисек
  • Ричард Тарша
  • Джанет Истон
RU2526287C2
СПОСОБ И СИСТЕМА ВЫЧИСЛЕНИЯ УКАЗАТЕЛЯ ДЛЯ МАСШТАБИРУЕМОГО ПРОГРАММИРУЕМОГО КОЛЬЦЕВОГО БУФЕРА 2006
  • Плондке Эрих
  • Кодреску Лучиан
  • Ахмед Мухаммад
  • Цзэн Мао
  • Джамиль Суджат
  • Андерсон Уилльям К.
RU2395835C2
ИЗМЕРИТЕЛЬНОЕ СРЕДСТВО ДЛЯ ФУНКЦИЙ АДАПТЕРА 2010
  • Питер Кеннет Швед
  • Дейвид Краддок
  • Томас Грегг
  • Бет Гленденнинг
  • Эрик Норман Лейс
  • Стивен Гленн Уилкинс
  • Фрэнк Уилльям Брайс Джр.
RU2523194C2
СПОСОБ ПОЛУЧЕНИЯ ИНТЕРФЕЙСОВ ВЕБ-СЛУЖБ ИЗ МЕТАДАННЫХ ФОРМ И ТАБЛИЦ 2008
  • Рафнссон Рогнвалдур Кристинн
RU2463653C2
МЕХАНИЗМ ЗАПРОСА ПОЗДНЕЙ БЛОКИРОВКИ ДЛЯ ПРОПУСКА АППАРАТНОЙ БЛОКИРОВКИ (HLE) 2008
  • Аккари Хаитам
  • Раджвар Рави
  • Сринивасан Срикант Т.
RU2501071C2
СПОСОБ СТОХАСТИЧЕСКОЙ ДИСПЕТЧЕРИЗАЦИИ ОЧЕРЕДЕЙ КОММУТАТОРА И УСТРОЙСТВО, ЕГО РЕАЛИЗУЮЩЕЕ 2017
  • Семенов Андрей Олегович
  • Коннов Николай Николаевич
  • Пащенко Дмитрий Владимирович
  • Трокоз Дмитрий Анатольевич
RU2684581C2

Иллюстрации к изобретению RU 2 816 292 C1

Реферат патента 2024 года СПОСОБ УПРАВЛЕНИЯ ЧТЕНИЕМ ИЗ РАЗДЕЛЯЕМОГО РЕСУРСА ПАМЯТИ И ЗАПИСЬЮ В НЕГО (ВАРИАНТЫ), СИСТЕМА И СЧИТЫВАЕМЫЙ КОМПЬЮТЕРОМ НОСИТЕЛЬ, РЕАЛИЗУЮЩИЕ УПОМЯНУТЫЙ СПОСОБ

Изобретение относится к способам, системе и носителю данных для управления чтением-записью разделяемого ресурса памяти. Технический результат заключается в повышении эффективности операций чтения и записи разделяемого ресурса. В способе при возникновении запроса на чтение разделяемого ресурса памяти или на запись в разделяемый ресурс памяти, осуществляют попытку захватить, соответственно, мьютекс на чтение и/или мьютекс на запись, выполняя операцию сравнения с обменом (CAS) над текущим значением указателя, при этом при успешном выполнении операции CAS выполняют стремящееся от нуля изменение значения указателя, причем, если упомянутый запрос, для которого успешно выполнена операция CAS, является запросом на запись, то дополнительно устанавливают знаком измененного значения упомянутого указателя первый знак, для каждого запроса проверяют значение упомянутого указателя со знаком и если проверенное значение упомянутого указателя со знаком равно предопределенному значению, осуществляют запись в разделяемый ресурс памяти согласно запросу на запись от писателя, если проверенное значение упомянутого указателя со знаком отлично от упомянутого предопределенного значения, осуществляют чтение из разделяемого ресурса памяти согласно запросу на чтение от читателя, после завершения операции записи или чтения освобождают, соответственно, мьютекс на чтение или мьютекс на запись, выполняя операцию CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя. 5 н. и 14 з.п. ф-лы, 4 ил.

Формула изобретения RU 2 816 292 C1

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

- принимают (S100) запрос на запись в разделяемый ресурс памяти от писателя;

- считывают (S105) текущее значение указателя, связанного с упомянутым разделяемым ресурсом памяти, причем значение указателя указывает общее количество запросов, подлежащих выполнению, и то, имеется ли среди упомянутых запросов запрос на запись;

- определяют (S110), имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись:

- в случае определения, что текущее значение указателя имеет первый знак, осуществляют возврат на этап S105, в противном случае - осуществляют попытку (S115) захватить мьютекс на запись посредством выполнения атомарной операции сравнения с обменом (CAS) над текущим значением указателя:

- в случае неуспешного выполнения операции CAS на этапе S115, осуществляют возврат на этап S105, в противном случае - выполняют стремящееся от нуля изменение (S120) значения указателя и устанавливают (S125) знаком измененного значения указателя упомянутый первый знак,

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

- в случае, если незавершенные операции чтения имеются:

- ожидают (S135) завершения всех незавершенных операций чтения,

- в случае, если незавершенные операции чтения отсутствуют:

- осуществляют (S140) операцию записи в разделяемый ресурс памяти,

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

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

- принимают (S200) запрос на чтение упомянутого разделяемого ресурса памяти от читателя;

- считывают (S205) текущее значение указателя;

- определяют (S210), имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись:

- в случае определения, что текущее значение указателя имеет первый знак, осуществляют возврат на этап S205, в противном случае - осуществляют попытку захватить мьютекс на чтение посредством выполнения (S215) атомарной операции сравнения с обменом (CAS) над текущим значением указателя:

- в случае неуспешного выполнения операции CAS на этапе S215, осуществляют возврат на этап S205, в противном случае - выполняют стремящееся от нуля изменение (S220) значения указателя,

- осуществляют (S225) операцию чтения из разделяемого ресурса памяти,

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

3. Способ по п. 1 или 2, в котором по меньшей мере часть незавершенных операций чтения выполняется параллельно.

4. Способ по п. 1 или 2, в котором первым знаком является знак отрицательного числа или знак положительного числа.

5. Способ по п. 1 или 2, в котором число, на величину которого выполняют стремящееся от нуля изменение (S120, S220) значения указателя, и число, на величину которого выполняют стремящееся к нулю изменение (S145, S230) значения указателя, равны.

6. Способ по п. 5, в котором упомянутым целым числом является 1.

7. Способ по п. 1 или 2, в котором читателем является устройство-читатель или поток чтения, а писателем является устройство-писатель или поток записи.

8. Способ по п. 1 или 2, в котором разделяемым ресурсом памяти является по меньшей мере ячейка памяти, причем памятью является жесткий диск (HDD), твердотельный накопитель (SSD) или энергонезависимая экспресс-память (NVMe).

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

- при возникновении запроса на чтение разделяемого ресурса памяти или на запись в разделяемый ресурс памяти, осуществляют попытку захватить, соответственно, мьютекс на чтение и/или мьютекс на запись, выполняя операцию сравнения с обменом (CAS) над текущим значением указателя, при этом при успешном выполнении операции CAS выполняют стремящееся от нуля изменение значения указателя, причем, если упомянутый запрос, для которого успешно выполнена операция CAS, является запросом на запись, то дополнительно устанавливают знаком измененного значения упомянутого указателя первый знак,

- для каждого запроса проверяют значение упомянутого указателя со знаком и

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

- если проверенное значение упомянутого указателя со знаком отлично от упомянутого предопределенного значения, осуществляют чтение из разделяемого ресурса памяти согласно запросу на чтение от читателя,

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

10. Способ по пункту 9, в котором первым знаком является знак отрицательного числа или знак положительного числа.

11. Способ по пункту 9, в котором число, на величину которого выполняют стремящееся от нуля изменение значения указателя, и число, на величину которого выполняют стремящееся к нулю изменение значения указателя, равны.

12. Способ по пункту 11, в котором упомянутым целым числом является 1.

13. Способ по пункту 9, в котором упомянутым предопределенным значением указателя со знаком является ‘-1’.

14. Способ по пункту 9, в котором читателем является устройство-читатель или поток чтения, а писателем является устройство-писатель или поток записи.

15. Способ по пункту 9, в котором разделяемым ресурсом памяти является по меньшей мере ячейка памяти, причем памятью является жесткий диск (HDD), твердотельный накопитель (SSD) или энергонезависимая экспресс-память (NVMe).

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

17. Система управления чтением-записью разделяемого ресурса (400) памяти, содержащая устройство (300) управления чтением-записью, упомянутый разделяемый ресурс (400) памяти, связанный с упомянутым устройством (300) управления чтением-записью, множество читателей (500) и одного или более писателей (600),

причем устройство (300) содержит процессор (300.1) и память (300.2), хранящую исполняемые процессором инструкции, причем, при получении запроса на чтение разделяемого ресурса (400) памяти от одного или более из множества читателей (500) или на запись в разделяемый ресурс (400) памяти от одного или более писателей (600), процессор (300.1) выполнен с возможностью осуществления способа управления чтением-записью из/в разделяемый ресурс (400) памяти по любому из пунктов с 9 по 16 посредством исполнения упомянутых исполняемых процессором инструкций.

18. Система по пункту 17, в котором разделяемый ресурс памяти является внутренним разделяемым ресурсом памяти, содержащимся в памяти (300.2) упомянутого устройства, или внешним разделяемым ресурсом памяти, который доступен упомянутому устройству и с которым упомянутое устройство выполнено с возможностью осуществления проводной и/или беспроводной связи.

19. Считываемый компьютером носитель, хранящий исполняемые компьютером инструкции, которые, при получении запросов на чтение разделяемого ресурса памяти или на запись в разделяемый ресурс памяти, побуждают компьютер к выполнению способа управления чтением-записью из/в разделяемый ресурс (400) памяти по любому из пунктов с 9 по 16 посредством исполнения упомянутых исполняемых процессором инструкций.

Документы, цитированные в отчете о поиске Патент 2024 года RU2816292C1

УПРАВЛЕНИЕ ДОСТУПОМ К ДОКУМЕНТАМ С ИСПОЛЬЗОВАНИЕМ БЛОКИРОВОК ФАЙЛА 2009
  • Скариа Саймон
  • Каннан Нареш
  • Кларк Саймон Питер
  • Босе Мико Арнаб Сакхиа Сингха
  • Антос Кристофер Дж.
  • Найт Марк Ролланд
  • Карлсон Эндрю Г.
  • Хэджпет Дон Адам
  • Пател Митеш Панкадж
  • Уотсон Эндрю Шон
  • Бейлор Джонатан Б.
  • Петрова Елена
RU2501082C2
Многоступенчатая активно-реактивная турбина 1924
  • Ф. Лезель
SU2013A1
US 5644768 A1, 01.07.1997
CN 103645863 A, 19.03.2014
Устройство для закрепления лыж на раме мотоциклов и велосипедов взамен переднего колеса 1924
  • Шапошников Н.П.
SU2015A1
Пломбировальные щипцы 1923
  • Громов И.С.
SU2006A1

RU 2 816 292 C1

Авторы

Зуйков Георгий Михайлович

Даты

2024-03-28Публикация

2023-06-29Подача