Способ передачи данных между процессами

Иллюстрации

Показать все

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

Реферат

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

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

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

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

Эта задача в настоящее время решается различными путями. Так, в патенте США №5437031 (опубл. 25.07.1995) раскрыт способ управления межпроцессным обменом, в котором клиентские и управляющий процессы могут обращаться к общей памяти для обмена через секцию исключительного управления, отсылая при этом извещения через секцию извещения о событиях. Недостатком этого способа является необходимость в отдельных секциях исключительного управления и извещения о событиях, обращение к которым разных процессов может тормозить обмен данными между исполняемыми процессами.

В патенте США №5787300 (опубл. 28.07.1998) описан межпроцессный обмен, в котором в качестве универсального кэша используется конвейер в общей памяти, одновременно доступный для многих сеансов, т.к. он содержит несколько конвейеров, каждый из которых содержит связанный список записей и связанный список сеансов, однако наличие нескольких конвейеров усложняет данный способ.

Патент США №7124255 (опубл. 17.10.2006) и патент США №7152231 (опубл. 19.12.2006) описывают способы обмена данными, в которых процессы, передающие данные, присоединяются к специальному запоминающему средству, наличие которого усложняет эти способы. Сходный способ описан в заявке Китая №102122256 (опубл. 13.07.2011), где данные кэшируются в запоминающем пространстве большой емкости во внешней памяти, наличие которой также усложняет выполнение этого способа.

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

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

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

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

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

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

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

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

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

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

Изобретение поясняется приложенными чертежами, которые являются чисто иллюстративными и не ограничивают объем данного изобретения.

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

Фиг. 2 представляет собой блок-схему алгоритма способа по настоящему изобретению.

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

Прежде всего, приведем некоторые общие соображения.

Прикладные программы, исполняемые в среде операционной системы, выполняются, как правило, в виде нескольких процессов, в рамках каждого из которых выполняется конкретная часть этой прикладной программы. Разбиение прикладной программы (распределение ее по процессам и последовательность исполнения процессов) известно специалистам и не входит в объем притязаний по данному изобретению. Корректное исполнение процессов, корректное переключение с одного процесса на другой и прочие аспекты их работы обеспечиваются и контролируются операционной системой, что также известно специалистам и не входит в объем притязаний по данному изобретению.

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

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

Способ по настоящему изобретению может осуществляться в устройстве, проиллюстрированном на Фиг. 1. В этом устройстве, представляющем собой вычислительное средство, содержатся связанные между собой процессор и запоминающее средство, или память. В дальнейшем описании термины «запоминающее средство» и «память» используются взаимозаменяемо.

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

Следует отметить, что процессор («processor») вычислительного средства может одновременно выполнять несколько процессов, как правило, в режиме разделения времени. При этом эти процессы могут быть как несвязанными, так и взаимосвязанными, к примеру, в случае распараллеливания конкретной задачи. В последнем случае разные процессы могут потребовать обмена данными. Такой обмен данными должен происходить так, чтобы процесс, которому передаются данные, не мог влиять на данные того процесса, который осуществляет передачу. Или если, скажем, данные одного процесса будут по какой-либо причине испорчены, остальные процессы должны остаться работоспособными.

Для реализации способа по настоящему изобретению (см. блок-схему алгоритма по Фиг. 2) в памяти вычислительного средства заранее выделяют непрерывную область ввода-вывода и разделяют эту область ввода-вывода на сегменты. Каждый из этих сегментов относится к единственному из исполняемых процессов и к каждому сегменту имеет доступ на запись только тот процесс, к которому данный сегмент относится. Доступ же на чтение к любому сегменту имеют все исполняемые процессы. Затем в области ввода-вывода формируют каналы для передачи данных между парами соответствующих процессов, именуемых далее в каждом канале процессом-отправителем и процессом-получателем. На Фиг. 1 для простоты показан один такой канал. Однако специалист поймет, что аналогичные каналы будут сформированы для любой пары взаимодействующих процессов, в том числе для той же пары процессов, показанных на Фиг. 1, в том случае, когда эти процессы поменяются ролями, т.е. показанный справа процесс станет процессом-отправителем, а показанный слева - процессом-получателем.

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

В принципе, обе указанных очереди могут быть сформированы любым известным специалистам образом. Например, это могут быть регистры типа FIFO (First-In-First-Out), как это описано в патенте США №8745291 (опубл. 03.06.2014). Однако предпочтительно, чтобы каждая из этих очередей была сформирована в виде кольцевого буфера. Использование именно кольцевых буферов в межпроцессном обмене известно, например, из выложенной заявки Япония №2009-223788 (опубл. 01.10.2009). В данном случае эти кольцевые буфера формируются следующим образом.

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

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

Если в ходе работы какой-либо процесс (назовем его условно «процесс В») должен использовать данные, получаемые в другом процессе (назовем его условно «процесс А»), но эти данные еще не сформированы, т.е. не записаны в буфер записи процесса А, поток управления процесса В могут приостанавливать ввиду отсутствия сообщений для процесса В, а в описателе соответствующего канала, сформированного между процессами А и В, могут выставлять запрос на уведомление о появлении сообщения. Когда процесс А, являющийся в данном случае процессом-отправителем, помещает буфер записи с записанным сообщением для процесса В, который является в данном случае процессом-получателем, в очередь сообщений канала между процессами А и В, процессу В отправляют уведомление о появлении сообщения в данном канале. При поступлении такого уведомления о появлении сообщения поток управления процесса В (процесса-получателя), ждущий этого сообщения, объявляют работоспособным и считывают очередное сообщение из соответствующего буфера записи из очереди сообщений в сегменте процесса А (процесса-отправителя).

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

Примером применения рассмотренного способа может служить следующее.

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

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

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

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

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

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

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