СПОСОБ И СИСТЕМА ОБРАБОТКИ ДАННЫХ
DATA PROCESSING METHOD AND SYSTEM

ОБЛАСТЬ ТЕХНИКИ
Данная технология представляет способ обработки промежуточных данных, полученных в ходе выполнения компьютерной программы.
УРОВЕНЬ ТЕХНИКИ
Есть много примеров того, когда может быть желательным прервать выполнение компьютерной программы на вычислительном устройстве с тем, чтобы впоследствии продолжить выполнение этой программы на основе предыдущего выполнения компьютерной программы. Например, может быть желательным обработать большое количество данных с помощью данной компьютерной программы поэтапно и, возможно, на других вычислительных устройствах. Таким образом, пользователь, возможно, захочет начать выполнение на первом компьютере (офисном компьютере) и продолжить выполнение на втором компьютере (домашнем переносном компьютере). Как вариант, пользователь мог бы хотеть начать обработку данных на одном компьютере и завершить обработку данных на другом более-менее мощном компьютере, так что первый компьютер будет использоваться для более чувствительных к задержкам задач. В других вариантах реализации технологии может быть желательным перенести обработку данных с одного компьютера на другой, чтобы уравновесить нагрузку в группе или кластере компьютеров. В этих и других случаях пользователь или администратор, возможно, захочет приостановить выполнение программы, установив условия приостановки либо вмешавшись в процесс вручную, чтобы указать, что выполнение программы нужно приостановить.
В любом случае программе, которая должна прервать обработку данных и впоследствии возобновить обработку данных, необходимо сохранить состояние выполнения программного кода (текущее состояние памяти компьютера). Кроме того, когда выполнение кода необходимо возобновить, состояние памяти первого вычислительного устройства (для определенных адресов памяти и контентов) должно быть восстановлено для перезапуска обработки данных.
Для программ даже средней сложности задействование этапов по определению того, какие переменные программы должны быть зафиксированы, сохранены и впоследствии восстановлены, означает, что заказное программное обеспечение, которое должно быть написано для того, чтобы программа могла прервать и перезапустить обработку данных, возлагает на разработчиков программного обеспечения и тестировщиков задачу, в связи с которой, возможно, потребуется развернуть множество различных программ.
Аналогичным образом, требование к программе упорядочить данные, хранящиеся в памяти, перед их сериализацией, когда программе необходимо прервать обработку данных и, наоборот, перезагрузить данные, когда обработка возобновляется, может замедлить свопинг обработки из одного этапа программы в другой.
Патент США №8359437 раскрывает виртуальное расширение для среды виртуальной машины, где элемент данных передается для хранения в область совместно используемой памяти и записывается в области совместно используемой памяти. Запись в области совместно используемой памяти может быть реализована путем считывания контентов области совместно используемой памяти, кодирования полученного элемента данных контентами области совместно используемой памяти для получения кодированного представления и записи кодированной формы представления в область совместно используемой памяти таким образом, чтобы перезаписать предыдущие контенты области совместно используемой памяти. Данный способ реализации технологии может дополнительно включать принятие запроса на интересующий элемент данных, закодированный в области совместно используемой памяти, декодирование контентов области совместно используемой памяти, пока интересующий элемент данных не будет восстановлен, и обмен данными с запрашиваемым элементом данных.
Кодирование и декодирование информации о памяти, распределенной между виртуальными машинами, может быть связано со значительными затратами вычислительных ресурсов на то, чтобы содействовать выполнению компьютерной программы на отдельных этапах.
РАСКРЫТИЕ ИЗОБРЕТЕНИЯ
Технический результат, на достижение которого направлено заявленное техническое решение, заключается в повышении надежности восстановления работы любых последующих экземпляров программы с сохранением всех переменных в памяти перед прерыванием работы первого экземпляра программы.
В соответствии с первым основным аспектом данной технологии, предложен способ обработки данных. Первый экземпляр компьютерной программы выделяет первый непрерывный блок памяти для хранения переменных динамически распределяемой области памяти. Первый экземпляр обрабатывает данные, включая хранение переменных в динамически распределяемой области памяти. Когда первый экземпляр прерывает обработку данных, первый непрерывный блок памяти копируется в постоянную память. Второй экземпляр компьютерной программы выделяет второй непрерывный блок памяти для хранения переменных динамически распределяемой области памяти. У второго непрерывного блока памяти по меньшей мере такой же размер, как у первого непрерывного блока памяти. Второй экземпляр копирует постоянную память во второй непрерывный блок памяти. Второй экземпляр возобновляет обработку данных на основе переменных из динамически распределяемой области памяти, хранящихся в динамически распределяемой области памяти во втором непрерывном блоке памяти.
В некоторых вариантах реализации технологии первый экземпляр создается на первом вычислительном устройстве, а второй экземпляр создается на втором отдельном вычислительном устройстве.
Как вариант, первое и второе вычислительные устройства представляют собой одно и то же вычислительное устройство.
Постоянная память может состоять из памяти компьютера и (или) энергонезависимой памяти, доступной для каждого из указанных первого и второго экземпляра.
В некоторых вариантах реализации технологии первый экземпляр сохраняет стек программы в первой непрерывной части памяти; причем первый экземпляр сохраняет локальные переменные в стеке. Второй экземпляр выделяет часть второго непрерывного блока памяти для сохранения стека программы; и второй экземпляр возобновляет обработку данных на основе переменных динамически распределяемой области памяти, хранящихся в стеке программы во втором непрерывном блоке памяти.
В некоторых вариантах реализации технологии программа представляет собой многопоточную программу, причем каждый поток имеет свой собственный стек и каждый стек хранится во втором непрерывном блоке памяти.
В некоторых вариантах реализации технологии первый экземпляр сохраняет по меньшей мере одно значение регистра процессора в постоянной памяти, когда первому экземпляру необходимо прервать обработку данных; причем второй экземпляр копирует значения регистров процессора из постоянной памяти; а второй экземпляр возобновляет обработку данных на основе указанных одного или нескольких значений регистров процессора.
Компьютерная программа может содержать множество сопрограмм, причем каждое экземпляр сопрограммы выполнен с возможностью реализации указанного способа.
В некоторых вариантах реализации технологии программа содержит функцию распределения памяти для переменных динамически распределяемой области памяти, заменяющую функцию распределения памяти по умолчанию, которая в противном случае выделяла бы память для переменных динамически распределяемой области памяти в непрерывных блоках памяти.
Данная программа может быть скомпилированной программой С, реализуемой с помощью переопределенной функции malloc().
Как вариант, программа может быть скомпилированной программой С++, реализуемой с помощью переопределенной функции new().
В некоторых вариантах реализации технологии память может быть виртуальной памятью.
В некоторых вариантах реализации технологии после прерывания обработки данных происходит либо выход из программы, либо ее приостановка.
В другом аспекте реализации технологии предложен компьютерный программный продукт, содержащий выполняемые команды, хранящиеся на машиночитаемом носителе, которые при их выполнении на вычислительном устройстве настроены на выполнение выше указанного способа реализации технологии.
В еще одном аспекте реализации технологии предложена система обработки данных, содержащая первое вычислительное устройство и второе вычислительное устройство, подключенные с помощью постоянной памяти. Первое вычислительное устройство выполнено с возможностью сначала создать экземпляр компьютерной программы и выделить первый непрерывный блок памяти для хранения переменных динамически распределяемой области памяти. Первый экземпляр компьютерной программы обрабатывает данные, включая хранение переменных в динамически распределяемой области памяти. Первый экземпляр в ответ на прерывание обработки данных копирует первый непрерывный блок памяти в постоянную память. Второе вычислительное устройство выполнено с возможностью впоследствии создать экземпляр компьютерной программы и выделить второй непрерывный блок памяти для хранения переменных динамически распределяемой области памяти. У второго непрерывного блока памяти по меньшей мере такой же размер, как у первого непрерывного блока памяти. Второй экземпляр компьютерной программы копирует постоянную память во второй непрерывный блок памяти и возобновляет обработку данных на основе переменных, хранящихся в динамически распределяемой области памяти во втором непрерывном блоке памяти.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Дальше будут описаны различные варианты реализации технологии посредством примера со ссылкой на прилагаемые чертежи, на которых:
Фиг. 1 схематически иллюстрирует систему для распределения обработки данных в вычислительном устройстве, причем система реализуется в соответствии с не носящими ограничительного характера вариантами реализации данной технологии.
Фиг. 2 схематически иллюстрирует систему для распределения обработки данных в вычислительном устройстве, причем система реализуется в соответствии с другим не носящим ограничительного характера вариантом реализации данной технологии.
Фиг.3 иллюстрирует способ реализации технологии, выполняемый на устройстве, которое представлено на Фиг. 2.
ДЕТАЛЬНОЕ ОПИСАНИЕ ВАРИАНТОВ РЕАЛИЗАЦИИ ТЕХНОЛОГИИ
Как правило, когда компьютерная программа создает экземпляр и запускается, ее отпечаток в памяти компьютера делится на несколько основных частей:
- программный код, в том числе код библиотеки;
- стек программы;
- динамически распределяемая область памяти; и
- состояние программы также отражается в регистрах процессора, например, счетчик команд, указатель стека и т.д.
Стек представляет собой область памяти, в которой хранятся временные переменные, созданные каждой активной подпрограммой программы, функцией или процедурой (в том числе, например, функцией main() в С или С++). Стек также применяют для отслеживания точки, в которую каждая активная подпрограмма должна вернуть контроль, когда закончит выполнение задачи, и для того, чтобы аргумент передался между подпрограммами. Этот вид стека также известен как стек выполнения, стек команд, стек этапа выполнения или машинный стек, и в данном описании технологии он сокращенно обозначен как "стек". Каждый раз, когда функция объявляет новую переменную, она помещается в стек. Затем каждый раз, когда функция завершается, все переменные, помещенные в стек этой функцией, освобождаются. Как правило, это достигается сдвигом (верхней части) указателя стека на его позицию перед вызовом функции выхода. Как только память, содержащая переменную стека, освобождается, эта область памяти становится доступной для других переменных. Следует иметь в виду, что когда функция завершается, все ее переменные рассматриваются как удаленные из стека, и поэтому переменные стека являются локальными и, таким образом, обычно не доступны за пределами функции.
Следует иметь в виду, что во многопоточной программе каждый поток или сопрограмма могут иметь свой собственный стек, и ниже описана их реализация с участием множества независимых сопрограмм, каждая из которых имеет свой стек.
Как правило, библиотеки времени выполнения, связанные с программным кодом, управляют памятью стека так, что ей не нужно быть явно выделенной или освобожденной с помощью программы. Таким образом, хотя обслуживание стека имеет важное значение для нормального функционирования большей части программного обеспечения, детали обычно скрыты и автоматизированы на языках высокоуровневого программирования. Некоторые наборы команд компьютерных языков предоставляют специальные команды для управления стеками.
Кроме того, следует понимать, что когда стек увеличивается, он занимает непрерывный блок памяти. В виртуальных компьютерных системах памяти это может означать, что стек занимает непрерывный блок виртуальной памяти, в то время как информация может храниться буквально в отдельных областях памяти.
С другой стороны, динамически распределяемая область памяти является областью памяти компьютера, распределение которой не управляется автоматически, а также это касается памяти динамически распределяемой области памяти, поскольку ею четко управляет ЦП. Это более "плавающая" область памяти, и она, как правило, больше стека. Чтобы выделить память для переменных в динамически распределяемой области памяти в программе на языке С, используют встроенные функции С malloc() или calloc(). В С++ эквивалентными функциями являются new() и delete() с другими языками программирования, использующими аналогичные функции.
Для переменных, выделенных в динамической памяти, можно использовать функцию С free() или функцию С++ delete(), чтобы отменить распределение этой памяти, когда она больше не нужна. Если это не сделать, произойдет утечка памяти, при которой память в динамически распределяемой области памяти все равно будет обособлена, но не будет доступна для других процессов. Из-за возможных многих распределений и отмен распределений динамической памяти во время выполнения программы, переменные динамической памяти в системах виртуальной памяти могут быть сохранены в непрерывных блоках виртуальной памяти, а также физической памяти.
В отличие от стека динамически распределяемые области памяти обычно не имеют размерных ограничений изменяемого размера (кроме физических ограничений памяти компьютера).
Наконец, в отличие от стека, переменные, создаваемые в динамически распределяемой области памяти, как правило, доступны для любой функции из любой области программы, и поэтому переменные динамически распределяемой области памяти являются по области действия фактически глобальными.
Если посмотреть на Фиг. 1, она иллюстрирует схему системы, в том числе устройства 20 и 20'. Следует четко понимать, что данная система представляет собой лишь один из возможных вариантов реализации данной технологии. Таким образом, последующее описание технологии предназначено лишь для предоставления описания иллюстративных вариантов реализации данной технологии. Это описание реализации технологии не предназначено для того, чтобы определять объем и установить ограничения реализации данной технологии. В некоторых случаях, ниже, могут быть также изложены варианты модификаций системы, которые, как полагают, могут быть практичными.
Это делается только в качестве помощи в понимании и, опять же, не для определения объема или установления ограничений реализации данной технологии. Эти модификации системы не представляют собой исчерпывающий перечень, и специалист в данной области техники поймет, что, скорее всего, возможны и другие модификации системы. Кроме того, если это еще не сделано (т.е. если не представлены варианты модификаций), не следует делать вывод, что изменения не возможны и (или) что изложенное является единственным способом реализации этого элемента данной технологии. Специалисту в данной области техники будет понятно, что это, скорее всего, не тот случай. Кроме того, следует понимать, что система может обеспечивать в определенных этапах простую реализацию данной технологии, и что там, где дело обстоит именно так, они были представлены именно таким образом в качестве помощи в понимании. Специалисты в данной области техники поймут, что различные варианты реализации данной технологии могут быть более сложными.
В первом варианте реализации технологии вычислительное устройство 20 коммуникативно соединено с устройством хранения данных 30, которое сохраняет программный код 10 для программы. Устройством хранения данных 30 может быть устройством памяти, например жестким диском, интегрированным с вычислительным устройством 20, или устройство хранения данных 30 может быть подключено к вычислительному устройству 20 через сеть (не показано) или фактически через любое пригодное проводное или беспроводное подключение. В контексте данного детального описания технологии, если прямо не установлено иное, "вычислительным устройством" является любое аппаратное обеспечение компьютера, выполненное с возможностью запускать программное обеспечение, которое пригодно для выполнения соответствующей задачи. Таким образом, некоторые (не носящие ограничительного характера) варианты электронных устройств включают стандартные персональные компьютеры (настольные компьютеры, ноутбуки, нетбуки и т.д.), мобильные вычислительные устройства, смартфоны и планшеты, а также сетевое оборудование, такое как маршрутизаторы, коммутационные устройства и межсетевые шлюзы. Следует отметить, что в случае устройства, функционирующего в качестве вычислительного устройства в данном контексте реализации технологии, не исключается возможность того, что оно может функционировать в качестве сервера для других электронных устройств. Использование выражения "вычислительное устройство" не исключает множества электронных устройств, используемых для получения/отправки, выполнения или для подачи команды на выполнение любой задачи или запроса, или последствий любой задачи или запроса, или для реализации шагов в соответствии с любым из способов, описанных в данном документе.
В частности, программный код 10 выполнен с возможностью управлять своей динамически распределяемой областью памяти и стеком, так что переменные динамически распределяемой области памяти записываются в заранее определенном непрерывном блоке (виртуальной) памяти 14, а стек программы 12 записывается в определенной части (виртуальной) памяти 14.
Часть памяти 16, содержащая стек 12 и динамически распределяемую область памяти 14, будет упоминаться в данном документе как контекстная динамически распределяемая область памяти 16.
Для программ, которые написаны в С или С++, контроля над распределением динамически распределяемой области памяти можно достичь путем переопределения функций malloc(), calloc() и new(), так что когда новые переменные объявляются и выделяются во время выполнения программы, они записываются в непрерывном блоке памяти, а не распределяются по непрерывным блокам памяти - как виртуальной, так и физической памяти. Эквивалентные методы могут быть использованы для программ, написанных на других языках; или фактически другие методы могут быть использованы для достижения такого же результата в соответствии со средой операционной системы программы.
Когда функции, которые эквивалентны malloc(), calloc() и new(), не требуются для распределения переменных стека, потому что они обрабатываются на уровне ниже программного кода высокого уровня, чтобы обеспечить сохранение стека программы в определенной части виртуальной памяти 14, может быть необходимо связать программы ассемблерных кодов с программным кодом, причем эти программы перехватывают операции со стеком для обеспечения записи стека в части памяти в контекстной динамически распределяемой области памяти 16.
В вариантах реализации технологии желательно передать обработку программы от первого экземпляра программного кода 10 второму экземпляру программного кода 10'. Как было объяснено выше, это может содействовать соответствию мощности обработки данных вычислительного устройства 20, 20' данным 40 и 50, которые должны быть обработаны, или просто освободить ресурсы обработки на первом вычислительном устройстве 10 на необходимый период времени. Как показано в упрощенном виде на Фиг. 1, второй экземпляр может быть выполняем на отдельном вычислительном устройстве 20'; однако второй экземпляр программного кода также может быть вторым экземпляром программного кода 10, выполняемым на том же аппарате через некоторое время после окончания обработки первого экземпляра.
Также следует понимать, что данные 40, которые должны быть обработаны программой, могут храниться локально на устройстве хранения данных 30 или передаваться на него, и (или) что данные 50 поступают на устройство 10 из удаленного источника данных.
В контексте данного описания реализации технологии, если прямо не установлено иное, выражение "данные" подразумевает информацию любого характера или вида, которую вообще можно хранить, например, в базе данных или передавать в электронном виде, например, в потоке данных. Таким образом, данные охватывают, среди прочего, аудиовизуальные произведения (изображения, фильмы, звукозаписи, презентации и т.д.), данные о местоположении, числовые данные и т.д., тексты (варианты, комментарии, вопросы, сообщения и т.д.), документы, электронные таблицы и т.д.
В контексте данного детального описания технологии, если прямо не установлено иное, "базой данных" является любой структурированный набор данных, независимо от его конкретной структуры, программное обеспечение для управления базами данных или аппаратное обеспечение компьютера, на котором данные хранят, реализуют или иным образом делают доступными для использования. База данных может находиться на том же аппаратном обеспечении, что и процесс, который сохраняет или использует информацию, хранящуюся в базе данных, или она может содержаться на отдельном аппаратном обеспечении, например выделенном сервере или множестве серверов.
В любом случае, первый экземпляр программного кода 10 начинает выполнение кода в отношении части данных. Первый экземпляр программного кода 10 выделяет как свой стек программы 12, так и динамически распределяемую область памяти 14 в заранее определенной части памяти 16.
Первый экземпляр программы 10 заканчивает (или приостанавливает) выполнение кода, с частью промежуточных данных, хранящихся в контекстной динамически распределяемой области памяти 16.
Обычно, для того чтобы промежуточные данные были доступны для последующих экземпляров программы 10, целевой программный код должен был бы специально упорядочить значения переменных и объектов, необходимые для последующей обработки на индивидуальной основе, и записать эту информацию для сохранения, например, в резервном файле. Как вариант, программа 10 могла бы сохранить промежуточную стадию выполнения, используя некоторые специальные операционные метки или точки выполнения, для того чтобы правильно продолжить выполнение на основе сохраненной информации. Затем процесс необходимо было бы сменить для последующего экземпляра программы для возобновления обработки данных, таким образом возложив большую нагрузку на разработчика(ов) программы; а это привело бы к замедленному прерыванию и возобновлению обработки программы.
В данном случае контекстную динамически распределяемую область памяти 16, содержащую стек программы 12, и динамически распределяемую область памяти 14 можно хранить непосредственно в запоминающем устройстве 60, чтобы он был доступен при возобновлении обработки данных. Этого можно достичь, сначала скопировав контекстную динамически распределяемую область памяти 16 в более постоянную память, т.е. энергозависимую память, которая не будет освобождена, когда экземпляр программы 10 завершит выполнение; или записав контекстную динамически распределяемую область памяти в энергонезависимую память, например в устройство хранения данных 30. Это копирование не обязательно должно включать любую предварительную обработку контекстной динамически распределяемой области памяти, и он может быть скопирован непосредственно в постоянную память. Тем не менее, в некоторых вариантах реализации технологии может быть полезно, например, выполнить сжатие контекстной динамически распределяемой области памяти 16, если сохранение места на устройстве хранения за счет сжатия удовлетворяет требование обработки для сжатия и последующей распаковки данных. На Фиг. 1 сохраненная версия контекстной динамически распределяемой области памяти обозначается цифрой 60, и единственным требованием является то, чтобы сохраненная версия контекстной динамически распределяемой области памяти 60 была доступна для любого последующего экземпляра программы, которая должна продолжить обработку данных 40, 50 на основе промежуточных данных, хранящихся в контекстной динамически распределяемой области памяти 16, в то время, когда прерывается обработка программы выдержек времени (или завершаясь, или приостанавливаясь). (Обратите внимание, что когда программа 10 наконец завершает выполнение, любая память, выделенная программой, включая контекстную динамически распределяемую область памяти, освобождается, и таким образом любая информация, хранящаяся в этой памяти, не доступна для последующих программ.)
В любом случае, выполнение второго экземпляра программы 10' впоследствии начинается с выделения непрерывного блока памяти 16', достаточной для хранения контекстной динамически распределяемой области памяти 16. Это может быть та же самая предварительно определенная или фиксированная область памяти, использованная первоначально. Затем второй экземпляр программы 10' копирует сохраненную версию контекстной динамически распределяемой области памяти 60 в динамическую память 16'.
Понятно, что восстановление лишь стека программы 12 и динамически распределяемой области памяти 14 не может быть достаточным, чтобы обеспечить обработку программы для возобновления, и что, например, определенная информация регистра процессора также должна быть скопирована из первого экземпляра компьютерной программы 10 во второй экземпляр компьютерной программы 10'. Эти регистры могут включать, например, указатель стека, показывающий экстент стека в контекстной динамически распределяемой области памяти 16', возможно, счетчик команд, указывающий, где именно обработка фактически остановилась на первом экземпляре компьютерной программы 10, а также любую другую информацию регистра, которая может потребоваться, чтобы надежно возобновить обработку на втором экземпляре компьютерной программы. Тем не менее, будет видно, что информация регистра, которую необходимо получить и восстановить, может быть такой же от программы к программе и что как таковые целевые функции могут быть доступны, чтобы сохранить эту информацию с контекстной динамически распределяемой областью памяти 16, когда обработка программы прерывается, и восстановить эту информацию, когда обработка возобновляется. Эта функция может быть включена в функции сохранения контекста и восстановления контекста, которые выполняются, когда программа соответственно прерывает и возобновляет обработку, таким образом налагая незначительную нагрузку на разработчика при включении этой функции с их программным кодом.
После того как регистры восстановлены в соответствии с требованиями, обработка программы второго экземпляра программы 10' может продолжаться, пока она не прерват обработку, после чего, при необходимости, обработку могут продолжать еще дополнительные этапы программы.
Указанный выше вариант реализации технологии относится к одному потоку программы, в котором один стек связан с выполняемой программой.
В других вариантах реализации технологии, описанных ниже, выделенный стек и динамически распределяемая область памяти могут быть связаны с соответствующими задачи, выполняемыми в рамках одной программы.
Если посмотреть на Фиг. 2, первый экземпляр среды или программы контейнера 100 содержит программный код для множества сопрограмм 110-1…110-n…, одна или более из которых могут быть запущены в любой момент времени. Так же, как и стек (не показан) и динамически распределяемая область памяти (не показана) для программы контейнера 100, каждая сопрограмма 110 имеет выделенный стек 120 и динамически распределяемую область памяти 140, которые расположены в пределах соответствующих контекстных динамически распределяемых областей памяти 160-1…160-n. Программный код для каждой сопрограммы 110 выполнен так, как проиллюстрировано в варианте реализации технологии на Фиг. 1, так, что каждый стек сопрограммы 120 записывается в предварительно определенной части виртуальной памяти и так, что каждая динамически распределяемая область памяти сопрограммы 140 записывается в непрерывном блоке виртуальной памяти, чтобы образовать контекстную динамически распределяемую область памяти 160 для сопрограммы 110. В то время как для простоты изложения контекстные динамически распределяемые области памяти сопрограммы 160 проиллюстрированы как чередуемые в пределах программного кода сопрограммы в виртуальной памяти на Фиг. 2, следует понимать, что это не обязательно должно быть так, и что типовой программный код для программы контейнера и сопрограмм может быть сгруппирован в одной части виртуальной памяти с различными контекстными динамически распределяемыми областями памяти 160 в другой части. То же самое относится ко второму устройству 20', которое возобновит обработку данных.
Посмотрим на Фиг. 3, которая иллюстрирует работу этапа сопрограммы, который должен прервать (и (или) возобновить) обработку данных на промежуточном этапе обработки данных. На этапе 300 перед передачей управления сопрограмме для сопрограммы выделяется виртуальная память. Управление может быть явно передано программой контейнера 100 подпрограмме или управление может быть получено от другой сопрограммы, которая передает управление указанной сопрограмме. На этапе 302 создается сопрограмма (создается этап) и функция, необходимая для того, чтобы обеспечить выделение стека сопрограммы в части контекстной динамически распределяемой области памяти, принадлежащей памяти, для инициирования мгновенной сопрограммы. На этапе 304, если это уже не сделано в общем для программы 100, распределитель динамически распределяемой области памяти, например, эквивалентный new() или malloc(), переопределяется с целью обеспечить выделение динамически распределяемой области памяти сопрограммы в части памяти контекстной динамически распределяемой области памяти для данной сопрограммы.
На этапе 306 сопрограмма определяет, возобновит ли она обработку данных или же обработку данных осуществит первый экземпляр сопрограммы. Очевидно, что наличие промежуточных данных в скопированном контекстной динамически распределяемой области памяти 60 на Фиг. 2, соответствующих сопрограмме, указывает на то, что сопрограмма должна продолжить обработку данных, и в этом случае скопированная информация контекстной динамически распределяемой области памяти 60 копируется в контекстную динамически распределяемую область памяти 160' для сопрограммы, и на этапе 307 любые требуемые регистры инициализируются аналогично тому, как контекст переключается между сопрограммами, выполняемыми в пределах одного экземпляра программы на данном процессоре. В качестве альтернативы проверке на наличие соответствующей скопированной контекстной динамически распределяемой области памяти можно использовать другие сигналы, чтобы указать экземпляру сопрограммы, первый ли это или второй экземпляр сопрограммы, с помощью параметров периода выполнения, например, сигнализирование, может ли сопрограмма найти необходимую информацию о контекстной динамически распределяемой области памяти 60 и где ее найти.
С другой стороны, если это первый экземпляр сопрограммы, то этапы 306 и 307 можно пропустить.
На этапе 308 сопрограмма может начать (или повторно начать) обработку данных противоположным обычным способом. На этапе 310 сопрограмма действует либо в ответ на действия пользователя, либо автоматически. Обработка данных может быть предназначена для возврата к программе контейнера или для смены на другую сопрограмму программы 100, 100'. Если другие сопрограммы или программа контейнера не обязательно будут иметь возможность остановиться и возобновиться, как описано, то пользовательский распределитель, который устанавливает, чтобы информация неупорядоченной динамически распределяемой области памяти записывалась в контекстной динамически распределяемой области памяти 160 для сопрограммы, заменяется распределителем по умолчанию на этапе 312. Контекстная динамически распределяемая область памяти 160 для сопрограммы теперь может быть скопирован в постоянную память 60 на этапе 314, когда к нему можно иметь доступ с помощью второго соответствующего экземпляра сопрограммы для дальнейшей обработки данных в установленном порядке.
Из вышеприведенного описания реализации технологии следует понимать, что этапы 300-307 из приведенного выше варианта реализации технологии являются этапами, необходимыми для обеспечения того, чтобы сопрограмма успешно перезапустилась на основе предыдущей обработки данных, и что эти этапы являются общими для любой программы и могут быть реализованы в качестве общей функции, например, context_restore. Этапы 310-314 являются этапами, необходимыми для обеспечения того, чтобы сопрограмма прервала обработку данных, и они опять же являются общими и могут быть реализованы в качестве общей функции, такой как context_save, причем каждая из функций context_restore и context_save доступна для разработчиков программ, которые хотят обеспечить функционирование программ в соответствии с описанным выше.
Второй вариант реализации технологии, в частности, позволяет программе выполнять множество операций, в данном случае реализуемых как сопрограммы, параллельно и независимо друг от друга с возможностью передачи выполнения определенных операций другому вычислительному устройству в соответствии с требованиями.
Программа контейнера или, возможно, другие сопрограммы могут решить, где и когда данная операция должна быть выполнена, и данная сопрограмма, выполняющая операцию, может не знать, кто запросил ее и откуда запросили данную операцию.
Следует иметь в виду, что в то время как указанный выше способ реализации технологии описан в качестве примера с определенной последовательностью этапов, можно, насколько возможно, поменять порядок различных этапов, чтобы достичь того же эффекта.
Варианты реализации данной технологии находят особое применение, например, в том, чтобы распределять вычислительные процессы между устройствами; содействовать обработке данных в виртуальных машинах, в которых, например, обработка данных и (или) принятие решений могут быть распределены между удаленным сервером и локальными процессорами; в системах резервного копирования\виртуализации; а также в компиляторах и приложениях выполнения кода.
В контексте данного описания технологии, если прямо не установлено иное, "сервером" является компьютерная программа, которая выполняется на соответствующем аппаратном обеспечении и может принимать запросы (например, от вычислительных устройств) по сети и выполнять эти запросы или обеспечивать выполнение этих запросов. Аппаратным обеспечением может быть один физический компьютер или одна физическая компьютерная система, но ничто из этого не требуется по отношению к данной технологии. В данном контексте использование выражения "сервер" не предназначено для указания на то, что тот же самый сервер (т.е. то же самое программное обеспечение и (или) аппаратное обеспечение) будет получать, выполнять или давать команду выполнять каждую задачу (например, получение команд или запросов) или любую конкретную задачу; оно предназначено для обозначения того, что любое количество элементов программного обеспечения или аппаратного обеспечения могут быть задействованы в получении/отправке данных, выполнении или команде на выполнение любой задачи или запроса, или последствиях любой задачи или запроса; и все это программное обеспечение и аппаратное обеспечение может быть одним или многими серверами, причем оба эти варианта включены в выражение "по меньшей мере один сервер".
В контексте данного описания технологии, если прямо не установлено иное, выражение "используемый компьютером носитель информации" предназначен для обозначения носителей любого характера и типа, включая ОЗУ, ПЗУ, диски (CD-ROM, DVD, гибкие диски, жесткие диски и т.д.), USB флеш-накопители, твердотельные накопители, ленточные накопители и т.д.
В контексте данного описания технологии, если прямо не установлено иное, слова "первый", "второй", "третий" и т.д. использованы в качестве прилагательных только с целью провести различие между существительными, указать, что они отличаются друг от друга, а не с целью описания любой конкретной взаимосвязи между этими существительными. Так, например, следует понимать, что использование терминов "первое устройство" и "третье устройство" не предназначено для указания какого-то определенного порядка, типа, хронологии, иерархии или ранжирования (например) среди устройств, также их использование (само по себе) не предназначено для указания на то, что какое-то "второе устройство" должно обязательно существовать в той или иной ситуации. Кроме того, как описано в данном документе в других контекстах, ссылка на "первый" элемент и "второй" элемент не исключает того, что оба элемента могут быть фактически одним реальным элементом. Так, например, в некоторых вариантах реализации технологии "первое" устройство и "второе" устройство могут быть одним и тем же программным обеспечением и (или) аппаратным обеспечением, в других случаях они могут быть разным программным обеспечением и (или) аппаратным обеспечением.
Варианты реализации данной технологии включают каждый по меньшей мере вышеуказанный объект и (или) аспект реализации технологии, но не обязательно все из них. Следует иметь в виду, что некоторые аспекты реализации данной технологии, полученные благодаря усилиям достичь вышеупомянутой цели, могут не достичь этой цели и (или) могут достичь другие цели, конкретно не указанные в данном документе.
Дополнительные и (или) альтернативные признаки, аспекты и преимущества вариантов реализации данной технологии станут очевидными из следующего описания реализации технологии, сопроводительных чертежей и прилагаемой формулы технологии.
Специалисту в данной области техники будет понятно, что когда данное описание реализации технологии указывает на "получение данных" от пользователя, это означает, что вычислительное устройство, выполняющее получение данных от пользователя, может получать от пользователя электронный (или другой) сигнал. Специалисту в данной области будет также понятно, что отображение данных для пользователя с помощью пользовательского графического интерфейса (например, экрана вычислительного устройства и т.п.) может включать передачу сигнала на пользовательский графический интерфейс, сигнала, содержащего данные, причем данными можно управлять или по меньшей мере часть данных может быть отображена для пользователя с помощью пользовательского графического интерфейса.
Некоторые из этих этапов и отправка/получение сигналов хорошо известны в данной области техники и, таким образом, они опущены в некоторых частях данного описания реализации технологии для простоты изложения. Сигналы могут отправлять/получать, используя оптические средства (например, оптическую связь), электронные средства (например, проводное или беспроводное подключение) и механические средства (например, на основе давления, на основе температуры или на основе любого другого подходящего физического параметра).
Модификации и усовершенствования в описанных выше вариантах реализации данной технологии могут стать очевидными специалистам в данной области техники. Вышеприведенное описание реализации технологии носит иллюстративный, а не ограничивающий характер. Таким образом, объем данной технологии предназначен для ограничения исключительно объемом прилагаемой формулы технологии.