СПОСОБ ПЕРЕДАЧИ И СПОСОБ ПОЛУЧЕНИЯ ОБЪЕКТА ОТ ПЕРВОГО ПРОЦЕССА ВТОРОМУ ПРОЦЕССУ, МАШИНОЧИТАЕМЫЙ НОСИТЕЛЬ (2 ВАРИАНТА)
METHOD FOR TRANSMITTING AND METHOD FOR PRODUCING AN OBJECT FROM THE FIRST PROCESS TO THE SECOND PROCESS, A MACHINE-READABLE MEDIUM (2 VERSIONS)

ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
[01] Данное решение относится к способам передачи объекта от первого процесса второму процессу.
УРОВЕНЬ ТЕХНИКИ
[02] Существует много случаев, в которых может быть целесообразным передать объект от первого процесса второму процессу вне зависимости от того, выполняется ли второй процесс на том же компьютерном устройстве, что и первый процесс, либо на другом компьютерном устройстве. Например, может быть целесообразным выполнить обработку объекта в рамках отдельных этапов, например, чтобы первый процесс мог начать обработку объекта на первом этапе, а второй процесс мог продолжить ее на втором этапе. Иногда осуществляться передача объекта с первого компьютера на второй, более (или менее) мощный, чтобы таким образом соизмерять производительность компьютера с задачей по обработке данных и/или освободить вычислительные ресурсы первого компьютера для других задач. Например, может быть целесообразным переложить обработку объекта с одного компьютера на другой, чтобы сбалансировать нагрузку в кластере компьютеров.
[03] Передача объекта с первого процесса на второй процесс включает копирование объекта из адресного пространства памяти первого процесса в адресное пространство памяти второго процесса. Для этого объект должен быть сначала подвергнут процессу сериализации, т.е. объект должен быть представлен в памяти в виде непрерывной последовательности байтов. Несмотря на то, что простые типы объектов (напр. переменные), такие как целые числа и числа с плавающей точкой, обычно хранятся в непрерывном блоке памяти и поэтому эффективно преобразуются в последовательную форму во всех случаях, более сложные типы объектов, такие как связанные списки, хэш-таблицы и объектно-ориентированные объекты, часто применяемые в современном ПО, могут храниться в несмежных (не непрерывных) блоках памяти.
[04] Сериализация сложного объекта обычно выполняется посредством вызова функции сериализации, соответствующей данному типу объекта. Например, при программировании класса объектов на объектно-ориентированном языке программирования (например С++), программист может применить метод сериализации, подходящий для объектов этого класса.
РАСКРЫТИЕ ИЗОБРЕТЕНИЯ
[05] В настоящем решении предложен способ, при помощи которого объект может быть передан между соответствующими областями памяти первого процесса и второго процесса, не прибегая к функции сериализации, соответствующей данному типу объекта. Вместо типоспецифической сериализации применяется общий подход к сериализации объектов различных типов. Объект копируется в непрерывный блок памяти из одного или нескольких других блоков памяти в адресное пространство памяти первого процесса. После этого непрерывный блок памяти содержит сериализованную копию объекта, с тем чтобы непрерывный блок памяти мог затем быть скопирован в адресное пространство памяти второго процесса.
[06] Для сохранения работоспособности любых содержащихся в данных объекта абсолютных ссылок на адреса памяти, адрес, по которому хранится непрерывный блок памяти в адресном пространстве памяти второго процесса, должен быть идентичным адресу, по которому хранился непрерывный блок памяти в адресном пространстве памяти первого процесса.
[07] Таким образом, в различных вариантах предложен способ передачи объекта от первого процесса второму процессу, причем первый процесс содержит первое адресное пространство памяти, а второй процесс - второе адресное пространство памяти; а способ выполняется процессором компьютерного устройства и включает следующие этапы:
выделение непрерывного блока памяти по адресу первого адресного пространства памяти;
копирование объекта в непрерывный блок памяти из одного или нескольких других блоков памяти в первом адресном пространстве памяти; и
копирование непрерывного блока памяти из адреса первого адресного пространства памяти в адрес второго адресного пространства памяти, причем адрес первого адресного пространства памяти и адрес второго адресного пространства памяти являются идентичными; посредством этого объект становится доступным для второго процесса по адресу второго адресного пространства памяти.
[08] В некоторых вариантах осуществления этап копирования объекта в непрерывный блок памяти из одного или нескольких других блоков памяти включает:
замену стандартной программы распределения памяти, используемой функцией копирования, на специальную программу распределения памяти, выполненную с возможностью выделения памяти в непрерывном блоке памяти; и
выполнение функции копирования по отношению к объекту, используя специальную программу распределения памяти с целью выделения памяти для копии объекта в непрерывном блоке памяти.
[09] В некоторых вариантах функция копирования является способом объекта.
[10] В некоторых вариантах осуществления один или нескольких других блоков памяти были выделены при помощи стандартной программы распределения памяти.
[11] В некоторых вариантах осуществления один или нескольких других блоков памяти содержат по меньшей мере два блока памяти, которые являются несмежными в первом адресном пространстве памяти.
[12] В некоторых вариантах осуществления объект принадлежит заданному типу, который ожидается вторым процессом. В некоторых вариантах осуществления тип объекта представляет собой один из множества типов, ожидаемых вторым процессом, и способ включает предоставление указания типа второму процессу.
[13] В некоторых вариантах идентичный адрес предварительно определяется до выполнения первого процесса и второго процесса. В других вариантах осуществления способ включает этап получения идентичного адреса от второго процесса до выделения непрерывного блока памяти. В еще одних вариантах способ включает этап предоставления идентичного адреса второму процессу.
[14] В некоторых вариантах осуществления первый процесс и второй процесс являются реализацией одного и того же набора команд компьютерной программы.
[15] В некоторых вариантах осуществления выполнение второго процесса начинается после окончания выполнения первого процесса. В других вариантах осуществления выполнение второго процесса начинается до окончания выполнения первого процесса.
[16] В некоторых вариантах осуществления первый процесс и второй процесс выполняются процессором компьютерного устройства, а этап копирования непрерывного блока памяти из адреса первого адресного пространства памяти в адрес второго адресного пространства памяти включает копирование непрерывного блока памяти в персистентную память, доступную для второго процесса. В некоторых таких вариантах осуществления способ включает этап получения доступа вторым процессом к непрерывному блоку памяти по адресу второго адресного пространства памяти.
[17] В некоторых вариантах осуществления компьютерное устройство находится в связи со вторым компьютерным устройством по сети; причем первый процесс выполняется процессором компьютерного устройства, а второй процесс выполняется процессором второго компьютерного устройства; причем этап копирования непрерывного блока памяти из адреса первого адресного пространства памяти в адрес второго адресного пространства памяти включает отправку непрерывного блока памяти второму компьютерному устройству по сети.
[18] В другом варианте осуществления решения предложен способ получения объекта вторым процессом от первого процесса, причем первый процесс выполняется процессором первого компьютерного устройства, а второй процесс выполняется процессором второго компьютерного устройства; первое компьютерное устройство находится в связи со вторым компьютерным устройством по сети, притом первый процесс содержит первое адресное пространство памяти, а второй процесс содержит второе адресное пространство памяти, при этом способ выполняется процессором второго компьютерного устройства и включает следующие этапы:
получение непрерывного блока памяти от первого компьютерного устройства, содержащего объект, который был скопирован процессором первого компьютерного устройства в непрерывный блок памяти из одного или нескольких блоков памяти в первом адресном пространстве памяти, причем непрерывный блок памяти был выделен процессором первого компьютерного устройства по адресу первого адресного пространства памяти;
сохранение непрерывного блока памяти по адресу второго адресного пространства памяти, причем адреса первого адресного пространства памяти и второго адресного пространства памяти являются идентичными; и
получение вторым процессом доступа к объекту по адресу второго адресного пространства памяти.
[19] Как было указано выше, в некоторых вариантах осуществления объект принадлежит заданному типу, который ожидается вторым процессом. В некоторых вариантах тип объекта представляет собой один из множества типов, ожидаемых вторым процессом, и способ дополнительно включает получение указания типа вторым процессом. В некоторых вариантах осуществления идентичный адрес предварительно определяется до выполнения первого процесса и второго процесса. В некоторых вариантах осуществления способ дополнительно включает этап получения идентичного адреса до сохранения непрерывного блока памяти. В некоторых вариантах осуществления способ дополнительно включает этап предоставления идентичного адреса первому процессу. В некоторых вариантах осуществления первый процесс и второй процесс являются случаями одного и того же набора команд компьютерной программы.
[20] В других аспектах различных вариантов осуществления предложен постоянный машиночитаемый носитель, на котором хранятся программные команды (машиночитаемые коды), выполняемые одним или несколькими процессорами одного или нескольких компьютерных устройств с целью осуществления одного или нескольких вышеописанных способов. Таким образом, в различных вариантах осуществления предложен постоянный машиночитаемый носитель, на котором хранятся программные команды (машиночитаемые носители) для передачи объекта от первого процесса второму процессу, причем первый процесс содержит первое адресное пространство памяти, а второй процесс содержит второе адресное пространство памяти, при этом программные команды (машиночитаемые коды) выполняются процессором компьютерного устройства с целью осуществления:
выделения непрерывного блока памяти по адресу первого адресного пространства памяти;
копирования объекта в непрерывный блок памяти из одного или нескольких других блоков памяти в первом адресном пространстве памяти; и
копирования непрерывного блока памяти из адреса первого адресного пространства памяти в адрес второго адресного пространства памяти, причем адрес первого адресного пространства памяти и адрес второго адресного пространства памяти являются идентичными; посредством этого объект становится доступным для второго процесса по адресу второго адресного пространства памяти.
[21] В различных вариантах осуществления данного решения предложен постоянный машиночитаемый носитель, на котором хранятся программные команды (машиночитаемые коды) для получения объекта вторым процессом от первого процесса, причем первый процесс выполняется процессором первого компьютерного устройства, а второй процесс выполняется процессором второго компьютерного устройства; первое компьютерное устройство находится в связи со вторым компьютерным устройством по сети, притом первый процесс содержит первое адресное пространство памяти, а второй процесс содержит второе адресное пространство памяти; программные команды выполняются процессором второго компьютерного устройства с целью осуществления:
получения непрерывного блока памяти от первого компьютерного устройства, содержащего объект, который был скопирован процессором первого компьютерного устройства в непрерывный блок памяти из одного или нескольких блоков памяти в первом адресном пространстве памяти, причем непрерывный блок памяти был выделен процессором первого компьютерного устройства по адресу первого адресного пространства памяти; сохранения непрерывного блока памяти по адресу второго адресного пространства памяти, причем адрес первого адресного пространства памяти и второго адресного пространства памяти являются идентичными; и получения вторым процессом доступа к объекту по адресу второго адресного пространства памяти. Техническим результатом, достигаемым в настоящем изобретении является расширение арсенала технических средств для передачи объектов памяти между процессами.
[22] В контексте настоящего описания, если не указано иное, термин «компьютерное устройство» означает любые аппаратные и/или программные средства, подходящие для решения соответствующей задачи. Таким образом, примерами электронных устройств, среди прочего, могут служить компьютерные процессоры, компьютерные системы (один или несколько серверов, настольных компьютеров, ноутбуков, нетбуков и т.п.), смартфоны, планшеты, а также сетевое оборудование, такое как маршрутизаторы, коммутаторы и шлюзы.
[23] В контексте настоящего описания, если не указано иное, первое устройство «находится в связи» со вторым устройством, если каждое из устройств способно передавать информацию другому устройству и принимать информацию от другого устройства через любой физический носитель или комбинацию физических носителей, на любом расстоянии и с любой скоростью. В качестве примера, не имеющего ограничительного характера, два цифровых электронных устройства могут быть связаны через компьютерную сеть, например, через Интернет. В качестве другого примера, не имеющего ограничительного характера, первое устройство и второе устройство могут являться виртуальными устройствами, исполняемыми на одном и том же цифровом электронном аппаратном обеспечении; в этом случае связь может осуществляться с помощью любых средств, доступных на таком цифровом электронном аппаратном обеспечении, например, с помощью межпроцессного взаимодействия.
[24] В контексте настоящего описания, если не указано иное, термин «машиночитаемый носитель» подразумевает под собой носитель любого типа и характера, включая ОЗУ, ПЗУ, диски (CD-ROM-диски, DVD-диски, дискеты, жесткие диски и т.д.), USB флеш-накопители, карты памяти, твердотельные накопители и накопители на магнитной ленте.
[25] В контексте настоящего описания, если не указано иное, термин «объект» означает отдельную порцию информации. Как таковые, объекты могут относиться к экземплярам класса согласно объектно-ориентированному языку программирования (например, С++), а также к переменным в других языках программирования, или к любой другой отдельной порции информации. Более того, в контексте настоящего описания термин «объект» может относиться не только к отдельному объекту, но и к набору объектов, например, к массиву или вектору, содержащему множество объектов.
[26] В контексте настоящего описания, если не указано иное, «указание» информационного элемента может представлять собой сам информационный элемент или указатель, отсылку, ссылку или другой косвенный способ, позволяющий получателю указания определить местоположение сети, памяти, базы данных или местоположение другого машиночитаемого носителя, из которого может быть извлечен информационный элемент. Например, указание файла может включать в себя сам файл (т.е. его содержимое), или же оно может являться уникальным дескриптором файла, относящим файл к определенной файловой системе, или какими-либо другими средствами, которые направляют получателя указания к сетевой папке, адресу памяти, таблице в базе данных или в другое местоположение, в котором можно получить доступ к файлу. Специалистам вполне понятно, что степень точности, необходимая для такого указания, зависит от степени первичного понимания того, как должна быть интерпретирована информация, которой обмениваются отправитель и получатель указания. Например, если до установления связи между отправителем и получателем понятно, что указание информационного элемента будет иметь вид ключа базы данных для элемента в определенной таблице заданной базы данных, содержащей информационный элемент, то отправка ключа базы данных - это все, что необходимо для эффективной передачи информационного элемента получателю, несмотря на то, что сам информационный элемент не передавался между отправителем и получателем указания.
[27] В контексте настоящего описания, если не указано иное, слова «первый», «второй», «третий» и т.д. используются в качестве прилагательных исключительно для того, чтобы различать существительные, которые они определяют, а не с целью описания какой-либо конкретной связи между этими существительными. Так, например, следует иметь в виду, что использование терминов «первый сервер» и «третий сервер» не подразумевает какого-либо определенного порядка, отнесения к определенному типу события, хронологии, иерархии или ранжирования (например) серверов/между серверами, равно как и их использование (само по себе) не предполагает, что некий «второй сервер» обязательно должен существовать в той или иной ситуации. Более того, как указано в этом документе в других контекстах, ссылка на «первый» элемент и «второй» элемент не исключает возможности того, что эти два элемента являются одним и тем же фактическим элементом реального мира. Так, например, в некоторых случаях, «первый» сервер и «второй» сервер могут являться одним и тем же программным и/или аппаратным обеспечением, а в других случаях они могут являться различным программным и/или аппаратным обеспечением.
[28] Каждый вариант реализации настоящей технологии включает по меньшей мере одну из вышеупомянутых целей. Следует иметь в виду, что некоторые аспекты данной технологии, полученные в результате попыток достичь вышеупомянутой цели, могут удовлетворять также и другим целям, отдельно не указанным здесь.
[29] Дополнительные и/или альтернативные признаки, аспекты и преимущества вариантов осуществления настоящего решения станут очевидными из последующего описания, прилагаемых чертежей и прилагаемой формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[30] Для лучшего понимания настоящего решения, а также других его особенностей и дополнительных признаков, делается ссылка на следующее описание, которое должно использоваться вместе с прилагаемыми чертежами, на которых:
[31] Фиг. 1 представляет собой схему объединенной в сеть вычислительной среды, подходящей для использования с вариантами осуществления данного решения, не имеющими ограничительного характера;
[32] Фиг. 2 представляет собой структурную схему операций копирования в отношении блоков памяти в первом адресном пространстве памяти и во втором адресном пространстве памяти согласно варианту осуществления; и
[33] Фиг. 3 и 4 представляют собой блок-схемы, иллюстрирующие этапы способа, выполняемого в вариантах осуществления способа данного решения.
[34] Следует отметить, что чертежи выполнены не в масштабе, если не указано иное.
ОСУЩЕСТВЛЕНИЕ ИЗОБРЕТЕНИЯ
[35] Примеры и используемые здесь условные конструкции предназначены главным образом для того, чтобы помочь читателю понять принципы решения, а не для установления границ объема правовой охраны. Ясно, что специалисты могут разработать различные устройства, отдельно не описанные и не показанные здесь, но которые, тем не менее, воплощают собой принципы решения и находятся в пределах его объема.
[36] Кроме того, для помощи в понимании, следующее описание может описывать относительно упрощенные варианты осуществления. Как будет понятно специалистам, различные варианты осуществления данного решения могут обладать большей сложностью.
[37] В некоторых случаях могут быть также изложены примеры модификаций. Это делается лишь для того, чтобы помочь пониманию, а не для определения объема или границ решения. Эти изменения не являются исчерпывающим списком, и специалисты могут вносить другие изменения, остающиеся в границах объема решения. Кроме того, те случаи, где не были изложены примеры модификаций, не следует интерпретировать так, что модификации не возможны и/или то, что описано, является единственным вариантом осуществления элемента настоящего решения.
[38] Более того, подразумевается, что все заявленные здесь принципы, аспекты и варианты осуществления, равно как и конкретные их примеры, охватывают структурные и функциональные эквиваленты. Таким образом, например, специалистам вполне понятно, что представленные здесь блок-схемы представляют собой концептуальные иллюстративные схемы, воплощающие принципы решения. Аналогично, любые блок-схемы, структурные схемы, диаграммы состояний, псевдокоды и т.п. представляют собой различные процессы, которые могут быть представлены на машиночитаемом носителе и, таким образом, выполняться компьютером или процессором, вне зависимости от того, показан ли явно подобный компьютер или процессор, или нет.
[39] Функции различных элементов, показанных на фигурах, в том числе любого функционального блока, обозначенного как «процессор», могут быть обеспечены с помощью специализированного аппаратного обеспечения, а также аппаратного обеспечения, способного выполнять подходящее программное обеспечение. Когда речь идет о процессоре, функции могут обеспечиваться одним выделенным процессором, одним общим процессором или множеством индивидуальных процессоров, некоторые из которых могут быть общими. Более того, использование термина «процессор» или «контроллер» не должно подразумевать исключительно аппаратное обеспечение, способное выполнять программное обеспечение, и может включать, помимо прочего, оборудование с цифровым сигнальным процессором (ЦСП), сетевой процессор, интегральную схему специального назначения (англ. ASIC), программируемую пользователем вентильную матрицу (ППВМ), постоянное запоминающее устройство (ПЗУ) для хранения программного обеспечения, оперативное запоминающее устройство (ОЗУ) и энергонезависимое запоминающее устройство. Также может быть включено другое аппаратное обеспечение, стандартное и/или специальное.
[40] Программные модули (или просто «модули»), представляющие собой программное обеспечение, могут быть представлены здесь в качестве любой комбинации элементов блок-схемы или других элементов, указывающих на выполнение этапов процесса и/или текстовое описание. Подобные модули могут выполняться аппаратным обеспечением, показанным в явно выраженной или в неявной форме.
[41] Принимая во внимание эти основные принципы, далее будут рассмотрены некоторые примеры, которые иллюстрируют различные варианты осуществления.
[42] На Фиг. 1 представлена схема объединенной в сеть вычислительной среды 100, подходящей для использования с некоторыми вариантами осуществления. Объединенная в сеть вычислительная среда 100 содержит компьютер 110, связанный с компьютером 120 по сети 101 (напр. Интернет). Каждый из компьютеров 110 и 120 содержит различные аппаратные модули, - связанные друг с другом посредством одной или нескольких шин 111 (а также 121), - в том числе один или несколько одноядерных или многоядерных процессоров 112 (а также 122), оперативное запоминающее устройство 113 (а также 123), устройство хранения данных 114 (а также 124) и один или несколько сетевых интерфейсов 115 (а также 125), подключенных к сети 101.
[43] Несмотря на то, что каждый из компьютеров 110 и 120 изображен как одиночный физический компьютер (который подразумеваемым образом содержит аппаратные модули, в т.ч. один или несколько процессоров, память и сетевой интерфейс), следует понимать, что один из компьютеров, либо оба компьютера 110 и 120, могут быть выполнены как ряд объединенных в сеть компьютеров, либо как одна или несколько виртуальных машин, работающих на одном или нескольких физических компьютерах.
[44] Фиг. 2 представляет собой структурную схему, иллюстрирующую операции копирования в отношении первого адресного пространства памяти 210 первого процесса и второго адресного пространства памяти 220 второго процесса. Первый процесс и второй процесс могут являться реализацией одного и того же набора программных команд, либо могут являться реализацией различных наборов программных команд (машиночитаемых кодов). В контексте объединенной в сеть вычислительной среды 100, первый процесс может выполняться процессором 112 компьютера 110, а первое адресное пространство памяти 210 может являться виртуальным адресным пространством памяти, которое соответствует адресам физической памяти 113 компьютера 110.
[45] В некоторых вариантах осуществления второй процесс может также выполняться процессором 112 компьютера 110, а второе адресное пространство памяти 220 может являться виртуальным адресным пространством памяти, которое также соответствует адресам физической памяти 113 компьютера 110. В других вариантах осуществления второй процесс может выполняться процессором 122 компьютера 120, а второе адресное пространство памяти 220 может являться виртуальным адресным пространством памяти, которое соответствует физической памяти 123 компьютера 120.
[46] Первое адресное пространство памяти 210 содержит семь блоков памяти, обозначенные цифрами 211-217 соответственно. Каждый из блоков памяти 211-217 содержит адрес в первом адресном пространстве памяти 210. Как показано на Фиг. 2, блоки памяти, более близкие к верху первого адресного пространства памяти 210, содержат более низкие адреса, чем блоки памяти, более близкие к низу первого адресного пространства памяти 210. Например, блок памяти 211 содержит более низкий адрес памяти, чем блок памяти 212, блок памяти 212 содержит более низкий адрес памяти, чем блок памяти 213 и т.д.
[47] На Фиг. 2 блоки памяти 212, 214, 216 и 226 заштрихованы, чтобы указать, что они содержат данные объекта, который передается от первого процесса второму процессу согласно варианту осуществления. Остальные блоки памяти 211, 213, 215, 217, 221 и 227 могут содержать другие объекты, программный код и т.п., либо они могут быть незаняты (свободны).
[48] Блоки памяти 212 и 214 являются несмежными в первом адресном пространстве памяти 210, т.к. имеется промежуток (находящийся между ними блок памяти 213) по адресу выше, чем адрес блока памяти 212, но ниже чем адрес блока памяти 214. Блок памяти 216 является непрерывным блоком памяти, т.к. не имеет промежутков.
[49] Существуют различные сценарии, по которым объект может сохраняться в несмежных блоках памяти (например, блоки памяти 212 и 214). В качестве примера, объект может являться экземпляром класса, запрограммированного на объектно-ориентированном языке программирования (например С++), например, класса для изображения здания в программном приложении системы автоматизированного проектирования (англ. CAD). Объект типа «здание» (т.е. экземпляр класса «здание») может содержать некоторое количество переменных экземпляра, например, переменные в формате с плавающей точкой («широта», «долгота», «высота», «ширина», «глубина») для представления географического местоположения и размеров здания. Объект типа "здание" может также содержать ссылки на объекты, представляющие различные компоненты здания. Например, объект типа «здание» может содержать ссылку на «двери» (т.е. на массив объектов типа «дверь»), ссылку на «стены» (т.е. на массив объектов типа «стена») и т.п., для представления различных объектов, которые составляют здание, представленное объектом типа «здание».
[50] Во время выполнения CAD-приложение может создать экземпляр нового объекта типа «здание», используя программу распределения памяти (напр. функцию "malloc" в языке С, функцию "new" в языке С++, или эквивалентные функции в других языках программирования). Программа распределения памяти выделяет достаточно памяти для сохранения объекта типа «здание». Т.к. задано, что каждый объект типа «здание» содержит географическое положение и размеры, программа распределения памяти выделит достаточно памяти (напр. в блоке памяти) для сохранения по меньшей мере пяти переменных в формате с плавающей точкой: «широта», «долгота», «высота», «ширина», и «глубина». Выделенной памяти будет также достаточно для хранения ссылок на объекты типа «дверь» и объекты типа «стена». Однако, в отличие от переменных в формате с плавающей точкой, эти ссылки не содержат фактических данных объектов типов «дверь» и «стена», на которые они ссылаются. Вместо этого они содержат адреса памяти, где хранятся эти объекты. Они просто указывают на данные, а не содержат их.
[51] Экземпляры объектов типа «дверь» и «стена» создаются самостоятельно во время выполнения при помощи программы распределения памяти для выделения памяти для этих объектов. В зависимости от работы программы распределения памяти и наличия памяти в различных блоках памяти первого адресного пространства памяти 210, память для объектов типа «дверь» и «стена» может выделяться из одного и того же блока памяти (212), что и для переменных экземпляра в формате с плавающей точкой, или из другого блока памяти (214). Например, если оставшейся свободной памяти в блоке памяти 212 недостаточно для хранения объектов типов «дверь» и/или «стена», программа распределения памяти может найти больший сегмент свободной памяти в другом блоке памяти (214) для хранения этих объектов.
[52] Таким образом, ссылаясь на Фиг. 2, объект типа «здание» может содержать переменные экземпляра (например, переменные экземпляра в формате с плавающей точкой) и ссылки на один или несколько объектов, хранящихся в первом блоке памяти 212, память для которых была выделена программой распределения памяти, причем по меньшей мере одна из ссылок, содержащихся в первом блоке памяти 212, указывает на один или несколько объектов во втором блоке памяти 214. Следовательно, можно сказать, что объект занимает блоки памяти 212 и 214, которые являются несмежными в первом адресном пространстве памяти 210.
[53] Для того чтобы сделать объект пригодным для передачи во второе адресное пространство памяти 220, он должен быть сначала подвергнут сериализации, т.е. процессу перевода объекта в непрерывную последовательность байтов. Согласно вариантам осуществления, это достигается путем выделения непрерывного блока памяти 216, который является достаточно большим для вмещения всех данных объекта, а затем - копирования этих данных в непрерывный блок памяти 216. Эти одна или несколько операций копирования обозначены двумя стрелками от блоков памяти 212 и 214 к непрерывному блоку памяти 216.
[54] В рамках операции копирования объекта, обновляются ссылки объекта на составляющие его объекты типов «дверь» и «стена», чтобы ссылаться на адреса памяти в непрерывном блоке памяти 216, в котором хранятся объекты типов «дверь» и «стена».
[55] После завершения процесса сериализации объект может затем быть передан второму процессу путем копирования непрерывного блока памяти 216 в непрерывный блок памяти 226 во втором адресном пространстве памяти 220, причем непрерывный блок памяти 226 является по меньшей мере таким же большим, как непрерывный блок памяти 216. При копировании нужно обеспечить то, что адрес во втором адресном пространстве памяти 220 (т.е. адрес непрерывного блока памяти 226) является идентичным адресу в первом адресном пространстве памяти 210, в котором хранился непрерывный блок памяти 216. Это сохранит работоспособность любых абсолютных ссылок на адреса памяти, которые содержаться в объекте (напр. ссылки объекта типа «здание» на составляющие его объекты типов «дверь» и «стена»).
[56] На Фиг. 3 проиллюстрирован первый вариант осуществления способа 300. Способ 300 может выполняться, например, процессором 112 компьютера 110 в контексте объединенной в сеть вычислительной среды 100, изображенной на Фиг. 1. Способ 300 предназначен для передачи объекта от первого процесса второму процессу, причем первый процесс содержит первое адресное пространство памяти, а второй процесс содержит второе адресное пространство памяти; при этом способ выполняется процессором компьютерного устройства. Способ 300 включает шаги 310-330.
[57] На шаге 310 выполняется выделение непрерывного блока памяти 216 по адресу первого адресного пространства памяти 210.
[58] На шаге 320 выполняется копирование объекта в непрерывный блок памяти 216 из одного или нескольких других блоков памяти 212, 214 в первом адресном пространстве памяти 210. В некоторых вариантах осуществления шаг 320 может включать операцию замены стандартной программы распределения памяти, используемой функцией копирования (например, способом копирования объекта), на специальную программу распределения памяти, выполненную с возможностью выделения памяти в непрерывном блоке памяти 216, а затем выполнения функции копирования по отношению к объекту с использованием специальной программы распределения памяти для выделения памяти в непрерывном блоке памяти 216 для копии объекта. Для программ, написанных на языках С или С++, замена программы распределения памяти может быть выполнена путем совмещения функций "malloc", "calloc" и "new", чтобы при объявлении новых переменных и при выделении памяти для них во время выполнения программы, они записывались в непрерывный блок памяти 216, а не распределялись по не непрерывным местоположениям в памяти (напр. 212, 214).
[59] Аналогичные методы могут применяться для программ, написанных на других языках; а также могут применяться другие методы для достижения того же результата в соответствии со средой операционной системы, в которой работает программа. Другими словами, специальная программа распределения памяти обеспечивает то, что любая память, используемая функцией копирования для хранения копии объекта, находится в пределах непрерывного блока памяти 216. Любые объекты, составляющие часть целого объекта (напр. объекты типов «дверь» и «стена», составляющие объект типа «здание») также копируются с использованием специальной программы распределения памяти, обеспечивая то, что память для копий этих объектов будет выделена в пределах непрерывного блока памяти 216. После операции копирования непрерывный блок памяти 216 полностью содержит объект (его копию), включая любые составляющие его объекты, а ссылки на эти составляющие его объекты относятся к адресам в этом непрерывном блоке памяти 216, в котором хранятся составляющие его объекты.
[60] На шаге 330 непрерывный блок памяти 216 копируется из адреса первого адресного пространства памяти 210 в адрес второго адресного пространства памяти 220, причем адрес первого адресного пространства памяти 210 и адрес второго адресного пространства памяти 220 являются идентичными. В результате, непрерывный блок памяти 226, содержащий копию объекта, сохраняется во втором адресном пространстве памяти 220 по тому же адресу, что и непрерывный блок памяти 216 в первом адресном пространстве памяти 210.
[61] В некоторых вариантах осуществления адрес предварительно задается до выполнения первого процесса и второго процесса. Например, адрес непрерывного блока памяти 216, 226 может определяться в исходном коде первого процесса и в исходном коде второго процесса. В других вариантах осуществления адрес не задается предварительно, и способ 300 дополнительно включает этап предоставления адреса второму процессу, чтобы второму процессу было известно, где хранится непрерывный блок памяти 226 во втором адресном пространстве памяти 220, и следовательно, где можно получить доступ к объекту. В еще одних вариантах осуществления второй процесс может определить адрес, в этом случае способ 300 дополнительно включает этап получения адреса от второго процесса до выделения непрерывного блока памяти 216.
[62] В тех вариантах осуществления, в которых первый процесс и второй процесс выполняются на одном и том же компьютерном устройстве (напр. на компьютере 110), шаг 330 может включать копирование непрерывного блока памяти 216 в персистентную память (напр. в устройство хранения данных 114), доступную для второго процесса. Тогда способ 300 может дополнительно включать этап получения доступа вторым процессом к непрерывному блоку памяти 226 по адресу второго адресного пространства памяти 220.
[63] В тех вариантах осуществления, в которых первый процесс выполняется на первом компьютерном устройстве (например, на компьютере 110), а второй процесс выполняется на втором компьютерном устройстве (например, на компьютере 120), способ 300 может дополнительно включать этап отправки непрерывного блока памяти 216 второму компьютерному устройству 120 по сети 101, по которой связаны оба компьютерные устройства (первое и второе устройство).
[64] Для того чтобы второй процесс правильно интерпретировал скопированный объект, сохраненный в непрерывном блоке памяти 226, хранящемся в его адресном пространстве памяти 220, второму процессу должно быть известно, каким типом объекта он является (например, 32-битовое целое число, 64-битовое число с плавающей точкой, строковая последовательность ста сорока 8-битовых знаков, объект типа «здание» и т.д.). В некоторых вариантах осуществления второй процесс выполнен с возможностью ожидания объекта определенного заранее заданного типа, и в этом случае процессу не нужно сообщать тип объекта, и он может интерпретировать объект в непрерывном блоке памяти 226 согласно определению этого заранее заданного типа.
[65] В других вариантах осуществления второй процесс выполнен с возможностью ожидания объекта одного из множества типов, и в таком случае способ 300 может дополнительно содержать этап предоставления указания типа второму процессу. Например, второй процесс может являться CAD-приложением, которое ожидает получения от первого процесса объектов типа «здание», либо объектов типа «ландшафт». Если передаваемый объект является объектом типа «здание», то второму процессу предоставляется указание об этом, чтобы он интерпретировал объект, хранящийся в непрерывном блоке памяти 226, как объект типа «здание», а не как объект типа «ландшафт». Форма, которую принимает это указание, может различаться в зависимости от реализации, в качестве простого примера, каждому типу может быть присвоено целое число (напр. Building = 1, Landscape = 2), и это целое число может предоставляться второму процессу.
[66] На Фиг. 4 проиллюстрирован второй вариант осуществления способа 400. Способ 400 может выполняться, например, процессором 122 компьютера 120 в контексте объединенной в сеть вычислительной среды 100, изображенной на Фиг. 1. Способ 400 предназначен для получения объекта вторым процессом от первого процесса, причем первый процесс выполняется процессором 112 первого компьютерного устройства 110, а второй процесс выполняется процессором 122 второго компьютерного устройства 120; первое компьютерное устройство 110 находится в связи со вторым компьютерным устройством 120 по сети 101, притом первый процесс содержит первое адресное пространство памяти 210, а второй процесс содержит второе адресное пространство памяти 220; при этом способ выполняется процессором 122 второго компьютерного устройства 120. Способ 400 включает шаги 410-430.
[67] На шаге 410 выполняется получение непрерывного блока памяти от первого компьютерного устройства, причем непрерывный блока памяти содержит объект, который был скопирован процессором первого компьютерного устройства в непрерывный блок памяти из одного или нескольких блоков памяти в первом адресном пространстве памяти, причем непрерывный блок памяти был выделен процессором первого компьютерного устройства по адресу первого адресного пространства памяти.
[68] На шаге 420 выполняется сохранение непрерывного блока памяти по адресу второго адресного пространства памяти, причем адрес первого адресного пространства памяти и второго адресного пространства памяти являются идентичными. В некоторых вариантах осуществления адрес предварительно задается до выполнения первого процесса и второго процесса. Например, адрес непрерывного блока памяти 216, 226 может определяться в исходном коде первого процесса и в исходном коде второго процесса. В других вариантах адрес не задается предварительно, и способ 400 дополнительно включает этап получения адреса, чтобы второму процессу было известно, где должен храниться непрерывный блок памяти 226 во втором адресном пространстве памяти 220. В еще одних вариантах второй процесс может определить адрес, в этом случае способ 400 включает этап предоставления адреса первому процессу.
[69] На шаге 430 выполняется получение вторым процессом доступа к объекту по адресу второго адресного пространства памяти. В некоторых вариантах второй процесс выполнен с возможностью ожидания объекта определенного, заранее заданного типа, и в этом случае процессу не нужно сообщать тип объекта, и он может интерпретировать объект в непрерывном блоке памяти 226 согласно определению этого заранее заданного типа. В других вариантах осуществления второй процесс выполнен с возможностью ожидания объекта одного из множества типов, и в таком случае способ 400 может дополнительно содержать этап предоставления указания типа второму процессу.
[70] Понятно, что несмотря на то, что вышеупомянутый метод был описан с указанием конкретной последовательности шагов, что сделано не в целях ограничения объема настоящего решения, последовательность различных шагов может быть изменена для достижения того же эффекта.
[71] Специалистам вполне понятно, что возможны изменения и улучшения описанных выше вариантов осуществления. Предшествующее описание имеет скорее иллюстративный, а не ограничительный характер. Соответственно, объем настоящего решения ограничивается исключительно объемом прилагаемой формулы изобретения.