Способ обработки данных

Иллюстрации

Показать все

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

Реферат

ОБЛАСТЬ ТЕХНИКИ

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

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

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

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

Д.М. Дамдере в "Операционные системы: Концептуальный подход" (англ. "Operating Systems: A Concept-based Approach"), ISBN: 0070611947, 2006, описывает общий подход к выделению памяти на уровне операционной системы (ОС) компьютера.

Патентная заявка US 8,458,433 «Управление энергостойкой памятью в многоузловой компьютерной системе (англ. "Management of persistent memory in a multi-node computer system") описывает создание и использование энергостойкой памяти в многоузловой компьютерной системе. Управление энергостойкой памятью подразумевает использование энергостойкой памяти для загрузки приложений с целью безопасного перенесения данных из одного приложения в другое.

Патентная заявка US 5,987,495 описывает восстановление контекста пользовательской программы, включая слово состояния программы (PSW) и содержимое регистра процессора, после асинхронных прерываний.

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

В заявке США US 8,566,536, приводится описание разделения с прямым доступом физической памяти между процессами. Адресное пространство памяти связывается с каждым процессом путем заполнения первой записи в таблице высокоуровневых виртуальных адресов для каждого процесса. Каждое адресное пространство создается и связывается с данным процессом, главное ядро инициирует создание основного списка записи в таблице высокоуровневых виртуальных адресов каждого адресного пространства для каждого процесса. Таким образом, адресное пространство каждого процесса взаимно связано с каждым процессом с помощью заполнения одной или нескольких последовательных записей в таблице высокоуровневых виртуальных адресов первой записью в таблице высокоуровневых виртуальных адресов других процессов. Эта технология, однако, зависит от функциональности, предоставленной ядром процессора.

Следовательно, все еще существует необходимость в эффективной обработке данных.

РАСКРЫТИЕ ИЗОБРЕТЕНИЯ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

Далее будут описаны различные примеры вариантов осуществления технологии со ссылками на соответствующие чертежи, где:

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

На Фиг. 2 изображен способ обработки данных, выполнимый в системе на Фиг. 1; и

На Фиг. 3 изображен способ обработки данных, выполнимый в системе на Фиг. 1; и

ОПИСАНИЕ ТЕХНОЛОГИИ

На Фиг.1 изображена схема системы 100, включающая в себя первое компьютерные устройство 20 и и второе компьютерное устройство 201. Важно иметь в виду, что сервер ранжирования 100 является только одним из вариантов осуществления настоящей технологии. Таким образом, все последующее описание представлено только как описание иллюстративного примера настоящей технологии. Это описание не предназначено для определения объема или установления границ настоящей технологии. Некоторые полезные примеры модификаций системы 100 также могут быть охвачены нижеследующим описанием.

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

В первом варианте осуществления настоящей технологии первое компьютерное устройство 20 функционально соединено с устройством 30 хранения данных, которое хранит программный код 10. Устройство 30 хранения данных может является таким устройством памяти как жесткий диск, встроенный в первое компьютерное устройство 20, или устройство 30 хранения данных может быть соединено с первым компьютерным устройством 20 по сети (не показана) или по любому подходящему проводному или беспроводному соединению. В контексте настоящего описания, если конкретно не указано иное, "компьютерное устройство" подразумевает под собой аппаратное устройство, способное работать с программным обеспечением, подходящим к решению соответствующей задачи. Таким образом, некоторыми примерами электронных устройств (среди прочего) могут служить универсальные персональные компьютеры (настольные компьютеры, ноутбуки, нетбуки и т.п.), мобильные компьютерные устройства, смартфоны, планшеты, а также сетевое оборудование, такое как маршрутизаторы, коммутаторы и шлюзы. Следует иметь в виду, что устройство, ведущее себя как компьютерное устройство в настоящем контексте, может вести себя как сервер по отношению к другим электронным устройствам. Использование выражения «компьютерное устройство» не исключает возможности использования множества электронных устройств для получения/отправки, выполнения или инициирования выполнения любой задачи или запроса, или же последствий любой задачи или запроса, или же этапов любого вышеописанного метода.

Экземпляр 101 программы 10 загружен в адресное пространство памяти 16 первого компьютерного устройства 20. Память 16 может содержать в себе систему виртуальной памяти с физической памятью, отдельной от адресного пространства, но с целью упрощения память показана на Фиг. 1 как простой блок 16. Блок памяти 16 может представлять собой первое адресное пространство памяти.

Экземпляр 101 программы выполнен с возможностью выделить первую смежную область 12 памяти в памяти 16 для сохранения динамических программных переменных - областей динамической памяти. Экземпляр 101 далее выполнен с возможностью обрабатывать данные из набора данных и сохранять динамические переменные в рамках первой выделенной смежной области памяти, связанной с конкретной программой. Этот экземпляр 101 программы может считаться первым процессом или приложением и, в соответствии с настоящим описанием, предлагается способ, в котором промежуточные данные, являющиеся результатом незавершенной обработки набора данных первым процессом, передаются второму экземпляру 1001 компьютерной программы. Второй экземпляр 1001 может считаться вторым процессом или приложением.

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

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

В этом случае, первая часть памяти, которая будет сохранена первым приложением, включает в себя измененную часть 12-1, которая занимает первую смежную область первого адресного пространства памяти. Копия второй части включает в себя неизмененную часть 12-2 памяти, которая занимает вторую смежную часть первого адресного пространства памяти, передается второму процессу, который поддерживается вторым экземпляром 1001 и вторым адресом 1201 памяти в рамках второго блока 1601 памяти для последующей обработки.

После завершения этой обработки, второй адрес 1201 памяти, который также определяет смежный блок памяти, включает в себя блок памяти, определяющий измененное адресное пространство памяти, и копия этой области 1201 возвращается первому экземпляру 101 или первому процессу для замены неизмененной второй смежной области 12-2 первого пространства 12 памяти.

В этом случае, как часть обработки промежуточных данных, первая часть 12-1 памяти сохраняется первым экземпляром 101 и только вторая часть 12-2 памяти выделяется второму экземпляру 1001 или второму приложению для последующей обработки. После завершения последующей обработки, измененная вторая часть 1201 памяти возвращается первому приложению для завершения процесса обработки. Благодаря тому, что только вторая часть памяти передается между первым и вторым приложениями, объем памяти, который необходимо передавать между приложениями, снижается и/или снижается нагрузка на вычислительную мощностью.

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

Важно иметь в виду, что другой экземпляр программы может быть вторым экземпляром 1001 программы 10, запущенной на другом компьютерном устройстве 201; экземпляр может быть более поздним экземпляром программы 10, запущенной на том же компьютерном устройстве 20, спустя какое-то время после того, как первый экземпляр 101 программы закончил обработку; или вторым экземпляром может быть экземпляр иной программы, отличной от программы 10. На Фиг. 1 другой экземпляр 1001 программы для простоты показан как отдельная программа, запущенная на втором компьютерном устройстве 201, соединенном с первым компьютерным устройством 20, но это не должно быть воспринято как ограничение настоящей технологии.

На Фиг. 2 представлены этапы, которые включены в обработку набора данных в соответствии с настоящим описанием. В рамках этого примера, описанная обработка данных является одной из обработок изображения, и промежуточные данные могут быть получены из визуализации обработки набора данных, который определяет изображение, с одновременными применением фильтра «резкости» к изображению в графическом редакторе. Пользователь может запустить первый графический редактор - первый экземпляр 101 компьютерной программы, описанный выше со ссылкой на Фиг. 1-й первое приложение может начать применение фильтра к изображению. Приложение выделяет достаточный для выполнения объем памяти. При выполнении изображения, пользователь может приостановить или прекратить процедуру в момент выполнения, например, в момент времени, когда первое приложение применило фильтр только к половине изображения. В этом случае, набор данных будет обработан только частично.

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

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

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

Как будет понятно далее, такая каскадная обработка между экземплярами компьютерной программы может осуществляться с помощью любого числа итераций, например, двух или более, которые используются в обработке одного набора данных, и каждый экземпляр будет обрабатывать только часть данных из первоначального набора данных. В подобных конфигурациях важно учитывать тот факт, что имеются конкретные экземпляры, в которых может выполняться множество последовательных или параллельных этапов обработки, но имеются и другие экземпляры, в которых работа, связанная с восстановлением первоначального выделенного набора данных, потребует больших затрат, что нивелирует пользу, которую можно извлечь из распределенной обработки. Например, можно достичь некоторых преимуществ в том случае, если память разделяется на две части, и каждая из них представляет 50% начального набора данных, который необходимо обработать. С учетом обработки обоих частей, восстановление комбинации обработанных блоков памяти потребует определенного уровня обработки, но приложение по изменению комбинации будет требовать меньше времени, чем обработка любой из этих двух частей. В другом случае память разделяется на 100 частей, каждая из которых представляет собой 1% первоначального набора данных, и восстановление комбинации обработанных частей будет представлять собой сложную и затруднительную задачу, которая нивелирует все преимущества от распределенной обработки.

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

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

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

На первом этапе 200, который выполняется первым экземпляром 101 приложения, первая смежная область памяти для сохранения динамических программных переменных - области динамической памяти - выделяется для обработки набора данных. Важно иметь в виду, что выделение памяти является обычным этапом выполнения программы и, следовательно, будет осуществляться предварительная обработка до прерывания этапов обработки. Это включает в себя упомянутый программный код в первом экземпляре 101, обрабатывающий данные до необходимого состояния до того, как они будут отправлены другой программе для дальнейшей обработки. Так, например, когда экземпляр 101 программы является программой для наложения фильтров на изображения, эта подготовка может определять доступное пространство в памяти 16 компьютера, в котором выполняется программа, и выделяется часть 12 памяти 16 для этого набора данных.

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

В этом случае стоит иметь в виду, что набор данных, которые могут быть, например, данными об изображении, которые ожидают обработки изображения, или структурой данных, которая ожидает заполнения, может считаться программным объектом. Как будет понятно, программный объект может быть сохранен либо в динамической памяти (heap), либо в программном стеке (stack). Динамическая память - это область памяти компьютера, чье распределение не управляется автоматически операционной системой, хранящей программу. Это свободная область памяти, обычно, больше, чем стек. Для распределения памяти переменных в динамической памяти в программе на языке С, используются встроенные функции С распределения памяти malloc() или calloc(). На С++ эквивалентными являются функции new() и delete(), на других языках используются сходные функции.

Для переменных, выделенных в динамической памяти, функция С free() или функция С++ delete() может быть использована для отмены выделения этой памяти после того как этот объем памяти более не требуется. Неудача при выполнении данной процедуры может привести к утечке памяти, когда динамическая память все еще является выделенной и недоступной для иных процессов.

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

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

Для программ, написанных на С или С++, управление распределением динамической памяти программы может быть достигнуто перегрузкой функций malloc(), calloc() и new() таким образом, что по мере того, как новые переменные заявляются и распределяются во время выполнения программы, они записываются в смежные области памяти вместо того, чтобы распределяться по не смежным местоположениям памяти - виртуальной или физической. Аналогичные методики могут применяться для программ, написанных на других языках; или же могут применяться другие методики для достижения тех же самых результатов в соответствии со средой операционной системы программы.

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

Когда память выделена, экземпляр 101 программы инициирует обработку набора данных на этапе 202. В какой-то момент после этого инициирования, программа прерывается на этапе 204. С учетом настоящего описания, это прерывание осуществляется до завершения обработки набора данных. После прерывания память интегрируется (этап 206) для проверки областей, которые касаются обработанных данных, то есть, измененной памяти, или областей, которые относятся к неизмененной памяти, то есть, необработанных данных.

Неизмененная память или ее копия или указатели на нее передаются в виде смежного блока второму экземпляру 1001 программы на этапе 208.

В некоторый момент времени после, первый экземпляр 101 получает копию измененной памяти на этапе 210, которая соответствует первоначально предоставленной неизмененной области 12-2. Поскольку возвращенный блок памяти также определяется как смежная область памяти, которая соответствует первоначально предоставленной неизмененной смежной области, первый экземпляр 101 способен заменить первоначальную неизмененную область на измененную версию, таким образом предоставляя завершенный блок памяти, который включает в себя измененные или обработанные данные. Этот набор данных может далее обрабатываться на этапе 212 для завершения действия, которое требуется приложением.

На Фиг. 3 представлен пример выполнения процесса с точки зрения второго экземпляра 1001, который отражает обработку результата получения неизмененного блока памяти. На этапе 300 второй экземпляр 1001 получает блок памяти для обработки. Второй экземпляр выделяет смежную область памяти для это обработки - на этапе 302. Данные в этой памяти далее обрабатываются на этапе 302. После завершения, блок смежной памяти возвращается первому экземпляру для последующей обработки на этапе 306.

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

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

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

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

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