обработка транзакций для действий с побочным эффектом в транзакционной памяти
Классы МПК: | G06F12/00 Выборка, адресация или распределение данных в системах или архитектурах памяти |
Автор(ы): | ГРОФФ Дана (US), ДАДИОМОВ Александр (US), ЛЕВАНОНИ Йосси (US) |
Патентообладатель(и): | МАЙКРОСОФТ КОРПОРЕЙШН (US) |
Приоритеты: |
подача заявки:
2009-10-16 публикация патента:
10.04.2014 |
Изобретение относится к области многопроцессорных систем с совместно используемой памятью. Техническим результатом является повышение эффективности управления атомарной транзакцией, имеющей действие с побочным эффектом. Система обработки включает в себя транзакционную память, первый и второй диспетчеры ресурсов и диспетчер транзакции для параллельной программы, имеющей поток, включающий в себя атомарную транзакцию, имеющую действие с побочным эффектом. Первый диспетчер ресурса выполнен с возможностью быть внесенным в атомарную транзакцию и управлять ресурсом, относящимся к действию с побочным эффектом. Второй диспетчер ресурса выполнен с возможностью быть внесенным в атомарную транзакцию и управлять транзакционной памятью. Диспетчер транзакции связан с первым и вторым диспетчерами ресурсов, и диспетчер выполнен с возможностью принимать голоса от первого и второго диспетчеров ресурсов относительно фиксации транзакции. Действие с побочным эффектом отсрочивается до тех пор, пока транзакция не зафиксируется или пока не будет применена с компенсирующим действием для действия с побочным эффектом. 3 н. и 17 з.п. ф-лы, 3 ил.
Формула изобретения
1. Машиночитаемый носитель, хранящий машинно-исполняемые инструкции для управления вычислительной системой, включающей в себя операцию по обработке параллельной программы, включающей в себя множество потоков, в которой, по меньшей мере, один из множества потоков включает в себя атомарную транзакцию 202, имеющую действие 206 с побочным эффектом, машинно-исполняемые инструкции, содержащие:
транзакционную память 212, выполненную с возможностью управлять доступом множества потоков к совместно-используемой памяти 104;
первый диспетчер 210 ресурса, выполненный с возможностью быть внесенным в атомарную транзакцию 202 и управлять ресурсом, относящимся к действию 206 с побочным эффектом;
второй диспетчер 208 ресурса, выполненный с возможностью быть внесенным в атомарную транзакцию и управлять транзакционной памятью 212; и
диспетчер 216 транзакции, связанный с первым и вторым диспетчерами 208, 210 ресурсов, в котором диспетчер 216 транзакции выполнен с возможностью принимать голос от первого и второго диспетчеров 208, 210 ресурсов относительно фиксации транзакции, и в котором действие 206 с побочным эффектом является, по меньшей мере, одним из отсроченных до тех пор, пока транзакция не зафиксирована и применена совместно с компенсирующим действием для действия с побочным эффектом.
2. Машиночитаемый носитель по п.1, в котором первый и второй диспетчеры ресурсов являются диспетчерами энергозависимых ресурсов.
3. Машиночитаемый носитель по п.2, в котором диспетчер транзакции является диспетчером облегченной транзакции.
4. Машиночитаемый носитель по п.1, в котором первый и второй диспетчеры ресурсов включены в состав библиотеки, имеющей множество выборочно доступных диспетчеров ресурсов, для того, чтобы быть внесенными в атомарные транзакции, имеющие действия с побочными эффектами.
5. Машиночитаемый носитель по п.4, в котором, по меньшей мере, один из диспетчеров ресурсов во множестве диспетчеров ресурсов заранее программируется в управляемой среде.
6. Машиночитаемый носитель по п.1, в котором диспетчер транзакции выполнен с возможностью принимать протокол фиксации для определения фиксировать ли транзакцию.
7. Машиночитаемый носитель по п.1, в котором протокол фиксации является двухфазовым протоколом фиксации, включающим в себя фазу подготовки и фазу фиксации.
8. Машиночитаемый носитель по п.1, в котором действие с побочным эффектом выбирается из группы, включающей в себя действия ввода или вывода, системные вызовы, действия с унаследованным кодом, действия ядра, управление устройствами, действия с другими доменами за пределами управляемой среды.
9. Машиночитаемый носитель по п.8, в котором действие с побочным эффектом является действием по печати.
10. Способ управления атомарной транзакцией, имеющей действие с побочным эффектом, способ, содержащий этапы, на которых:
вносят 304, по меньшей мере, один диспетчер 210, не являющийся диспетчером памяти;
вносят 304 диспетчер 208 ресурса памяти, выполненный с возможностью управлять транзакционной памятью 212;
вызывают протокол 308 фиксации, выполненный с возможностью определять, отдали ли диспетчеры, являющиеся и не являющиеся диспетчерами ресурсов памяти, голоса за фиксацию транзакции;
фиксируют 314 транзакцию, если диспетчеры, являющиеся и не являющиеся диспетчерами ресурсов памяти, голосуют за фиксацию транзакции и применяют действие с побочным эффектом, после того как транзакция фиксируется;
повторно выполняют 312 транзакцию, если диспетчер 208 ресурса памяти не голосует за фиксацию транзакции, но диспетчеры 210, не являющиеся диспетчерами ресурсов памяти, голосуют за фиксацию транзакции, при этом действие 206 с побочным эффектом является, по меньшей мере, одним из не примененных, если транзакция повторно выполняется и применяется совместно с компенсирующим действием при повторном выполнении транзакции;
прерывают 318 транзакцию, если, по меньшей мере, один из диспетчеров 210, не являющихся диспетчером ресурса памяти, не голосует за фиксацию транзакции, при этом действие 206 с побочным эффектом не применяется, если транзакция прерывается.
11. Способ по п.10, в котором атомарная транзакция включает в себя первоначальное состояние, и при этом повторное выполнение транзакции включает в себя откат к первоначальному состоянию.
12. Способ по п.11, в котором повторное исполнение транзакции включает в себя повторное исполнение транзакции, пока диспетчеры, являющиеся и не являющиеся диспетчерами ресурсов памяти, не проголосуют за фиксацию транзакции, или транзакция прерывается.
13. Способ по п.11, в котором делаются изменения к первоначальному состоянию, устанавливающиеся на основании фиксации транзакции.
14. Способ по п.10, в котором повторное выполнение транзакции включает в себя применение бессрочного компенсирующего действия для действия с побочным эффектом.
15. Способ по п.10, в котором фиксация транзакции включает в себя применение отложенного действия.
16. Способ по п.10, в котором определение, голосуют ли первый и второй диспетчеры ресурсов за фиксацию транзакции, включает в себя вызов способа для каждого внесенного диспетчера ресурса для получения соответствующего голоса для транзакции.
17. Способ по п.10, в котором диспетчер ресурса памяти голосует за фиксацию, если не существует конфликтов при обращении к памяти.
18. Управляемая среда, работающая на вычислительном устройстве и выполненная с возможностью управлять приложением, имеющим атомарную транзакцию 202, включающую в себя действие 206 с побочным эффектом, управляемая среда, включающая в себя:
транзакционную память 212;
библиотеку диспетчеров ресурсов, в которой, по меньшей мере, два диспетчера 208, 210 ресурсов выполнены с возможностью быть внесенными приложением и загруженными в энергозависимую память 104 на вычислительное устройство, в которой один из диспетчеров ресурсов является диспетчером 210 ресурса с побочным эффектом, выполненным с возможностью вносить в управление ресурс 214, относящийся к действию с побочным эффектом, а другой из диспетчеров ресурсов является диспетчером 208 ресурса памяти, выполненным с возможностью быть внесенным в управление транзакционной памятью 212; и
диспетчер 216 транзакции, загруженный в энергозависимую память 104 и связанный с внесенными диспетчерами 208, 210 ресурсов, при этом диспетчер транзакции выполнен с возможностью принимать голос от внесенных диспетчеров ресурсов относительно фиксации транзакции, в котором диспетчер 208 ресурса памяти голосует в зависимости от того, произошел ли 312 конфликт при обращении к памяти во время транзакции.
19. Управляемая среда по п.18, в которой вычислительное устройство включает в себя множество процессоров, и в котором атомарная транзакция включена в поток приложения, имеющего множество параллельных потоков.
20. Управляемая среда по п.19, в которой транзакционная память управляет доступом к совместно используемым данным на вычислительном устройстве.
Описание изобретения к патенту
Уровень техники
Параллельное программирование для многопроцессорных систем с совместно используемой памятью может включать в себя возможность осуществления доступа множества потоков к одним и тем же данным. Множества потоков выполняются на множествах процессоров, множествах ядер процессоров или других классах параллелизма, которые присоединяются к памяти, совместно использующейся процессорами. Модель совместно используемой памяти является наиболее широко применяющимся способом многопоточной связи. Это позволяет многопоточным программам создаваться почти таким же образом, как в последовательном программировании, что является выгодным, потому что само параллельное программирование, как известно, считается сложным. Для того чтобы реализовать модель совместно используемой памяти, параллельное программирование применяет обслуживание для предотвращения параллельного доступа и использования данных, что может вызывать нежелательные ситуации, такие как гонки за данными и подобные.
Блокировки являются общеизвестным решением по предотвращению параллельного доступа к совместно использующимся данным. Значение блокировок опирается на предположении о том, что к переменным, к которым осуществляется доступ одним потоком, будет также осуществляться доступ другими потоками и, поэтому, переменные могут быть использованы только одним потоком за один раз. Блокировки позволяют одному потоку получить управление над одной переменной и предотвратить изменение переменной другими потоками, пока она не будет разблокирована. Несмотря на то что протоколы, основанные на блокировках, являются популярными, они часто признаются сложными для использования. Использование блокировок при крупнозернистом подходе защищает относительно большие объемы данных, но обычно их применение нельзя масштабировать. Потоки блокируют друг друга, даже если они не мешают друг другу, и блокировки становятся источником конфликтных ситуаций. В альтернативном варианте использование блокировок при более мелкозернистом подходе, несмотря на вопросы уменьшающего масштабирования, представляет другие проблемы по причине блокирующих соглашений по обеспечению корректности и избеганию взаимоблокировок, ставших сложными и склонными к ошибкам.
Другое решение состоит в реализации применений, использующих транзакционную память, такую как программная транзакционная память, которая предоставляет семантику в программной библиотеке периода выполнения и/или в среде периода выполнения и/или при использовании компилятора. Транзакционная память является механизмом управления взаимосовместимости для управления доступом к совместно использующейся памяти на основе предположения о том, что переменные используются одним потоком, и предполагается, что к ним не будет осуществляться доступ другими потоками, и, таким образом, переменная может быть совместно использована без жестких последствий для масштабируемости программы.
Одно значительное преимущество транзакционной памяти относительно крупнозернистых, основанных на блокировках, протоколов в увеличенной взаимосовместимости. В транзакционной памяти нет потоков, которые имеют потребность в ожидании доступа к данным, и различные потоки могут безопасно и одновременно изменять непересекающиеся части структур данных, которые обычно были бы защищены на основании одной и той же блокировки. Несмотря на накладные затраты на повторно выполняющиеся транзакции, которые неуспешно завершаются, в большинстве реальных параллельных программ конфликты возникают достаточно редко, так что существует огромный рост производительности для крупнозернистых, основанных на блокировках, протоколов даже на маленьком количестве процессоров или ядер процессоров.
Несмотря на это, при использовании транзакционной памяти могут возникнуть проблемы, если атомарный блок включает в себя действие с побочным эффектом. Вообще действие с побочным эффектом модифицирует какое-либо состояние, видимое за пределами текущего потока. Общеизвестные примеры действий с побочным эффектом включают в себя ввод/вывод, системные вызовы, действия с унаследованным кодом, действия ядра, управление устройствами, действия с другими доменами за пределами управляемой среды и т.д. Трудности возникают, если транзакцию прерывают или повторно выполняют, потому что действия с побочным эффектом являются повторно выполняемыми и могут повторно выполняться множество раз при повторяемых неуспешных завершениях. Неидемпотентные побочные эффекты представляют наиболее значительные трудности. Например, атомарный блок, включающий в себя действие увеличения переменной и действие с побочным эффектом по печати переменной, может повторно неуспешно завершаться и повторно выполняться по причине конфликта с другими потоками при обращении к памяти. Переменная печатается при каждом повторном выполнении, что является нежелательным, поскольку намерение состояло в том, чтобы распечатать переменную только один раз.
Предпринимались попытки урегулирования вопроса относительно действий с побочным эффектом, применяющихся в транзакционной памяти. Одно из популярных решений состоит в запрете использования таких действий с побочным эффектом, но многие исследователи в целом соглашаются, что ограничения к возможностям программирования и составному решению являются неприемлемыми для общего употребления. Другие предложенные решения откладывают действие, пока оно, вероятно, не должно быть зафиксировано, но многие исследователи предполагают, что переупорядочивание действий приводит к непредвиденным последствиям. Подобным образом, ассоциация компенсационного блока с действием уменьшает изоляцию и обеспечивает другие источники для ошибок. Другое предложенное решение состояло в том, чтобы не позволить транзакциям, имеющим действие с побочным эффектом, неуспешно завершаться, и разрешать все конфликты с оказанием содействия транзакции, имеющей действия с побочным эффектом. Конечно, в одно и то же время допускается не больше чем одна транзакция, имеющая действие с побочным эффектом. Еще одним решением является нарушение атомарности и изоляции транзакции. Все эти предложенные решения, так же как и другие накладывают ограничения различными способами и требуют значительных усилий от программиста. Исследователи в целом соглашаются с тем, что эта проблема остается неразрешенной.
Раскрытие изобретения
Это краткое изложение предоставлено для представления выбора концепций в упрощенной форме, которые дополнительно описаны ниже в подробном описании. Это краткое изложение не имеет намерения идентифицировать ключевые признаки или существенные признаки заявленного объекта изобретения, не имеет намерения быть использованным для ограничения объема заявленного объекта изобретения.
В одном из вариантов осуществления система обработки обрабатывает атомарную транзакцию, имеющую действие с побочным эффектом. Транзакция является частью потока в параллельной программе, имеющей множество потоков. Система включает в себя транзакционную память, первый и второй диспетчеры ресурсов и диспетчер транзакции. Первый диспетчер ресурса заносится в атомарную транзакцию и управляет ресурсом, соответствующим действию с побочным эффектом. Второй диспетчер ресурса заносится в атомарную транзакцию и управляет транзакционной памятью. Диспетчер транзакции связан с первым и вторым диспетчерами ресурсов и принимает голоса от первого и второго диспетчера ресурса относительно фиксации транзакции. Действие с побочным эффектом отсрочивается до тех пор, пока транзакция не зафиксируется или пока не будет применена с компенсирующим действием к действию с побочным эффектом.
Краткое описание чертежей
Прилагаемые чертежи включены, чтобы обеспечить дополнительное понимание вариантов осуществления, а также сгруппированы и составляют часть этого описания изобретения. Чертежи иллюстрируют варианты осуществления и вместе с описанием служат для разъяснения принципов вариантов осуществления. Другие варианты осуществления и многие предназначенные преимущества вариантов осуществления будут без труда приниматься во внимание, поскольку они станут более понятны путем ссылки к следующему детальному описанию. Элементы чертежей необязательно масштабированы относительно друг друга. Одинаковые ссылочные позиции обозначают соответствующие подобные части.
Фиг.1 - блок-схема, иллюстрирующая один из многих возможных примеров вычислительных устройств, реализующих признаки настоящего изобретения.
Фиг.2 - блок-схема, иллюстрирующая пример системы обработки транзакций в примерной вычислительной системе фиг.1.
Фиг.3 - блок-схема последовательности операций способа, иллюстрирующая примерную последовательность операций, использованную в системе обработки транзакций фиг.2.
Подробное описание
В следующем подробном описании приводится ссылка на прилагаемые чертежи, которые образуют его часть и в которых в качестве иллюстрации показаны отдельные варианты осуществления, которыми изобретение может быть применено на практике. Должно быть понятно, что могут быть использованы другие варианты осуществления, а структурные и логические изменения могут быть сделаны, не выходя из объема настоящего изобретения. Следующее подробное описание, следовательно, не должно восприниматься в ограничительном смысле, и объем настоящего изобретения определен прилагаемой формулой изобретения. Также должно быть понятно, что признаки различных примерных вариантов осуществления, описанные в материалах настоящей заявки, могут быть объединены друг с другом, если только специально не отмечено иным способом.
Фиг. 1 иллюстрирует примерную вычислительную систему, которая может быть применена в качестве операционной среды и которая включает в себя вычислительное устройство, такое как вычислительное устройство 100. В базовой конфигурации вычислительное устройство 100 типично включает в себя процессорную архитектуру, имеющую, по меньшей мере, два устройства обработки (т.е. процессора 102) и память 104. В зависимости от точной конфигурации и типа вычислительного устройства, память 104 может быть энергозависимой (такой как оперативное запоминающее устройство (ОЗУ, RAM)), энергонезависимой (такой как постоянное запоминающее устройство (ПЗУ, ROM), флэш-память и т.д.) или некоторым объединением обоих. Эта базовая конфигурация проиллюстрирована на фиг. 1 позицией 106. Вычислительное устройство может принимать одну или более различных форм. Такие формы включают в себя персональный компьютер, сервер, карманное устройство, абонентское электронное устройство (такое как игровая видео приставка) и другие.
Вычислительное устройство 100 также может иметь дополнительные признаки/функциональность. Например, вычислительное устройство 100 может также включать в себя дополнительное запоминающее устройство (съемное и/или несъемное), включающее в себя, но не в качестве ограничения, магнитные или оптические диски, или твердотельную память, или запоминающие флэш-устройства, такие как съемное запоминающее устройство 108 и несъемное запоминающее устройство 110. Компьютерный запоминающий носитель включает в себя энергозависимый и энергонезависимый, съемный и несъемный носитель, реализованный по любому подходящему способу или технологии хранения информации, такой как машиночитаемые инструкции, структуры данных, программные модули или другие данные. Память 104, съемное запоминающее устройство 108 и несъемное запоминающее устройство 110 являются примерами компьютерного запоминающего носителя. Компьютерные запоминающие носители включают в себя, но не в качестве ограничения, ОЗУ (RAM), ПЗУ (ROM), ЭСППЗУ (EEPROM), флэш-память или другую технологию памяти, CD-ROM, цифровой многофункциональный диск (DVD) или другие оптические дисковые запоминающие устройства, магнитные кассеты, магнитную ленту, магнитные запоминающие диски или другие магнитные запоминающие устройства, флэш-диск универсальной последовательной шины (USB), карту флэш-памяти или любые другие запоминающие флэш-устройства, или любой другой запоминающий носитель, который может быть использован для хранения требуемой информации и к которому может быть осуществлен доступ вычислительным устройством 100. Любой такой компьютерный запоминающий носитель может быть частью вычислительного устройства 100.
Вычислительное устройство 100 включает в себя одно или более соединения 114 связи, которые позволяют вычислительному устройству поддерживать связь с другими компьютерами/приложениями/пользователями 115. Вычислительное устройство 100 также может включать в себя устройство(а) 112 ввода, такое как клавиатура, координатно-указательное устройство (например, мышь), перо, устройство голосового ввода, устройство сенсорного ввода и т.д. Вычислительное устройство 100 также может включать в себя устройство(а) 111 вывода, такое как дисплей, динамики, принтер и т.д.
Вычислительная система 100 может быть выполнена с возможностью запуска программы из программного обеспечения операционной системы и одного или более программных приложений, которые образуют системную платформу. В одном из примеров вычислительная система 100 включает в себя компонент программного обеспечения, называемый управляемой средой. Управляемая среда может быть включенной в часть операционной системы или может быть включена позже в качестве загрузки программного обеспечения. Управляемая среда типично включает в себя предварительно закодированные решения для общеизвестных задач программирования для того, чтобы оказывать содействие разработчикам в создании программ программного обеспечения, как например приложений, которые запускаются в управляемой среде, а также типично включает в себя виртуальную машину, которая позволяет программным приложениям запускаться в управляемой среде с тем, чтобы программисты не имели необходимости принимать во внимание возможности отдельно взятых процессоров 102.
Фиг. 2 иллюстрирует пример системы 200 обработки транзакций, которая может быть вызвана в управляемой среде для поддержки транзакции 202 атомарной блокировки с действием 204 транзакционной памяти и действием 206 с побочным эффектом. Система 200 включает в себя, по меньшей мере, два диспетчера ресурсов, как например диспетчер 208 ресурса памяти и диспетчер 210 ресурса побочного эффекта, занесенные в транзакцию 202 и соответствующие действиям 204 и 206 соответственно. Диспетчеры 208, 210 ресурсов каждый управляют предназначенными для действий ресурсами 212, 214, которые принимают участие в транзакции 202. Действия диспетчеров 208, 210 ресурсов скоординированы с диспетчером 216 транзакций, который работает с диспетчерами 208, 210 ресурсов, чтобы гарантировать атомарность и изоляцию транзакции 202. Диспетчер 216 транзакций реализовывает протокол 218 фиксации. Диспетчеры 208, 210 ресурсов также принимают участие в протоколе 218 фиксации.
Транзакция 202 является последовательностью связанных действий, выполняемых одним потоком. Пример связанных действий включает в себя атомарные действия. Поток завершает модификации данных в совместно использующейся памяти, не учитывая других потоков, параллельно запускающихся на других процессорах. После завершения транзакции, транзакционная память проверяет, не сделали ли другие потоки параллельно изменений в данных, к которым осуществлялся доступ. Происходит проверка на изменения, и если проверка является успешной, делается безвозвратная операция фиксации. Если проверка завершается неуспешно, тогда изменения отменяются или "откатываются", и транзакция 202 повторно выполняется, пока проверка не станет успешной.
Транзакция обладает признаками атомарности и изоляции. Транзакция является атомарной и логически выполняется мгновенно. Если одно действие завершается неуспешно, тогда вся транзакция завершается неуспешно. Также транзакция изолируется от других потоков в отношении того, что никакие переменные не подвергаются воздействию других потоков в их промежуточных состояниях. Если достигается конец блока, транзакция фиксируется, прерывается или откатывается и повторно выполняется. Соответственно, единица, которая фиксирует или завершается неуспешно, является транзакцией, а не целым процессом, и состояние возвращается к его первоначальной форме, а не показывает промежуточные величины.
Диспетчер ресурсов существует в традиционной обработке транзакций и управляет ресурсами в традиционных транзакциях. Но традиционная обработка транзакций до сих пор не была использована для того, чтобы автоматически устранять параллельный доступ к памяти, что обычно часто вызывало блокировки. Признак настоящего примера в том, что управление транзакционной памятью является частью транзакции в отличие от традиционных транзакций, которые не управляют доступом к совместно использующейся памяти. Как обсуждено выше, предложения транзакционной памяти обычно обеспечивают функциональность восстановления при помощи вручную созданных решений для ограниченного набора ошибочных ситуаций, с которыми разработчики знают, как обращаться, и как результат, страдает производительность и качество результатов. Примеры настоящего изобретения, однако, включают транзакционную память в часть основного направления обработки транзакций. Управляемая среда может предоставлять или включать в себя заранее запрограммированные подходящие диспетчеры ресурсов для ожидаемых действий также в среде транзакционной памяти. Заранее запрограммированные диспетчеры ресурсов могут быть включены в библиотеку, которая может быть вызвана в управляемой среде, когда ресурс должен быть использован.
Во многих случаях, когда подходящий диспетчер ресурса не существует в заранее запрограммированной библиотеке диспетчеров ресурсов для среды управляемой транзакционной памяти, программный разработчик может написать диспетчер ресурса для использования в программе или добавить его в библиотеку.
В одном из примеров, диспетчеры 208, 210 ресурсов реализованы как диспетчеры недолгосрочных ресурсов, а не диспетчеры долгосрочных ресурсов. Диспетчеры недолгосрочных ресурсов хранят их состояние в энергозависимой памяти и не поддерживают восстановление транзакционного состояния. В случае системы 200 обработки транзакций диспетчеры недолгосрочных ресурсов используют меньше системных ресурсов, чем диспетчеры долгосрочных ресурсов. Примером диспетчера 216 транзакций, который качественно работает с множеством диспетчеров недолгосрочных ресурсов, является доступный диспетчер облегченных транзакций, который может значительно уменьшить накладные расходы, обусловленные диспетчерами более долгосрочных транзакций. Другие примеры могут включать в себя диспетчеры долгосрочных транзакций или диспетчеры ресурсов.
Диспетчеры 208, 210 ресурсов автоматически заносятся в транзакцию 202 и фиксируют или откатывают изменения, сделанные для их состояния согласно результату транзакции. Управляемая среда может автоматизировать занесение в транзакцию и управление транзакцией по отношению к транзакционным ресурсам 212, 214. При занесении ресурса 212, 214 в транзакцию 202, транзакция информирует ресурс о том, что действие 204, 206 хочет выполнить транзакционную работу по отношению к ресурсу. Затем действие 204, 206 выполняет работу по отношению к ресурсу 212, 214, и если не происходит никакой ошибки, диспетчер 216 транзакции применяет протокол 218 фиксации для того, чтобы спросить ресурс 212, 214 через диспетчер 208, 210 ресурса о фиксации изменений, сделанных к его состоянию. Если один из диспетчеров 208, 210 ресурсов столкнется с ошибкой, диспетчер 216 транзакции вызовет откат всех изменений, сделанных в транзакции. В другом случае диспетчер 216 транзакции осуществит фиксацию транзакции. В каждом из двух случаев диспетчер 216 транзакции может информировать диспетчеры 208, 210 ресурсов о решении.
В одном из примеров диспетчер 208 ресурса памяти действует как диспетчер транзакций перед тем, как другой диспетчер ресурса будет занесен в транзакцию 202. Как только другой диспетчер ресурса будет занесен, такой как диспетчер 210 ресурса действия с побочным эффектом, система 200 обработки транзакций содействует транзакции 202 для применения диспетчера 216 транзакции, и ресурс 208 памяти становится диспетчером ресурса.
В примерной транзакции 202, включающей в себя действие с побочным эффектом в транзакционной памяти, по меньшей мере, два диспетчера 208, 210 ресурсов занесены в транзакцию. Действие 206 с побочным эффектом является хорошим примером действия, которое работает по отношению к ресурсу 214. Действие 204 транзакционной памяти также реализует диспетчер ресурса для управления изменений памяти. Если транзакция включает в себя другие действия с побочным эффектом, могут быть применены дополнительные диспетчеры ресурсов.
Диспетчер 210 ресурса отсрочивает действие с побочным эффектом до тех пор, пока диспетчер 216 транзакции не подтвердит, что все внесенные диспетчеры ресурсов решили зафиксировать транзакцию. Соответственно, действие с побочным эффектом повторно не выполняется или повторно выполняется в случае конфликтов с другими параллельно существующими потоками при обращении к памяти, которые могли бы стандартно вызывать откат транзакции, если бы это было сделано перед фазой проверки. Разработчик может реализовать отсрочку действия с побочным эффектом подходящим способом. В примере действия с побочным эффектом печати, описанным выше, диспетчер ресурса отсрочивает печать, пока транзакционная память устанавливает то, что транзакция не включает конфликты с другими потоками при обращении к памяти. Перед тем как диспетчер 216 транзакции вызовет протокол 218 фиксации, диспетчер ресурса для операции печати может записать строку в память. После того, как диспетчер 216 транзакции уведомил диспетчера ресурса о фиксации, диспетчер ресурса осуществит доступ к строке в памяти и распечатает ее. Существуют и другие подобные примеры для разработчика, реализующего отсрочку действия с побочным эффектом, способом, который является подходящим для данной ситуации, и примерным типом действия с побочным эффектом.
Для разработчика может быть предложена подходящая синтаксическая структура, чтобы сделать выражение задержанных действий диспетчера 210 ресурса проще. Например, подключенное задержанное действие может включать в себя подобную синтаксическую структуру:
Atomic {
<некоторые действия, составляющие транзакцию>
AfterCommit (<задержанное действие>);
//параметр удерживает окончание задержанного действия
<некоторые действия, составляющие транзакцию>
}
Реализация "AfterCommit" может представлять диспетчер 210 ресурса, который выполняет задержанное действие, если или когда диспетчер 216 транзакции уведомил диспетчер 210 ресурса о фиксации. В одном из вариантов осуществления для выгоды разработчика эта функциональность диспетчера 210 ресурса реализуется один раз системой через транзакцию. В этом варианте осуществления, разработчик устанавливает задержанное действие, включенное через примитив "AfterCommit".
Вместо того чтобы задерживать действие с побочным эффектом, разработчик может предпочесть его компенсацию. Если действие с побочным эффектом не отсрочивается (например, приложение генерирует некоторое назначение для того, чтобы продолжить транзакцию), приложение может выполняться, имея действие с побочным эффектом внутри транзакции, но регистрирует компенсирующее действие, которое будет вызвано при откате. Если транзакция повторно выполняется множество раз из-за повторяющихся конфликтов при обращении к памяти, компенсирующее действие регистрируется вместе с выполнением каждой операции с побочным эффектом. Соответственно каждый откат может вызывать заданное компенсирующее действие. Если компенсирующее действие является выбором, побочные действия будут видимы за пределами транзакции во время каждого повторного выполнения, но, в конечном счете, будут восполнены при откате. В одном из примеров на основании удачного повторного выполнения, компенсирующего действия не будет существовать. Концепция, допускающая неизолированные действия побочного эффекта внутри транзакции, называется "открыто-вложенными транзакциями". Разработчики свободны в решении, является ли открытое вложение подходящим в заданной ситуации. Компенсирующее действие также может быть реализовано как диспетчер 210 ресурса подобно случаю с задержанным действием. В одном из вариантов осуществления такая реализация предоставлена для надлежащей надежности активизации компенсирующего действия, где система не завершается неуспешно при вызове компенсирующего действия после того, как она выполняет определенное действие с побочным эффектом в транзакции.
Как и с задержанными действиями, разработчику может быть предложена удобная синтаксическая структура, делающая простым выражение компенсирующих действий. Например, подключаемое открыто-вложенное действие с компенсацией может включать в себя подобную синтаксическую структуру:
Atomic {
<некоторые действия, составляющие транзакцию> DoWithCompensation (
<неизолированное действие с побочным эффектом>
//завершение действия с побочным эффектом
<при откате вызывается компенсирующее действие>
//завершение действия с побочным эффектом
);
<некоторые дополнительные действия, составляющие продолжение транзакции>
}
Настоящее изобретение предполагает генерировать задержанные и компенсирующие действия из диспетчера ресурса, который может быть запрограммирован для сохранения подходящих степеней изоляции и надежности.
Фиг. 3 иллюстрирует пример транзакционной последовательности операций, указанной 300, для использования действий с побочным эффектом в транзакционной памяти на этапе 302. Действия в транзакции вызывают ресурсы и информируют их, что действие испытывает необходимость выполнить с ними работу. Последовательность операций автоматически вносит подходящие диспетчеры ресурсов для работы с ресурсом на этапе 304. В случае, когда транзакция вовлекает действие с побочным эффектом, операция побочного эффекта производится через соответствующим образом внесенный диспетчер ресурса. Изменения памяти также управляются диспетчером 210 ресурса, реализованным для транзакционной памяти. Затем на этапе 306 к ресурсам могут быть применены действия.
В или близко к концу транзакции, диспетчер 216 транзакции вызывает протокол 218 фиксации для определения, должен ли быть откат для транзакции, в случае конфликтов при обращении к памяти с другими потоками, либо на этапе 308 изменения фиксируются. Протокол 218 фиксации в одном из примеров является двухфазным протоколом фиксации, включающим в себя фазу подготовки и фазу фиксации. При приеме запроса на фиксацию от приложения, диспетчер 216 транзакции начинает фазу подготовки на этапе 310 всех внесенных участников вызовом способа на каждом внесенном диспетчере 208, 210 ресурса для того, чтобы получить соответствующий голос по транзакции. Каждый из диспетчеров 208, 210 ресурсов будет голосовать либо за фиксацию, либо за откат, вызовом способа подготовки или способа отката, соответственно. Например, диспетчер 208 ресурса действий памяти может голосовать фиксацию, если не существует конфликтов при обращении к памяти. На второй фазе протокола 218 фиксации диспетчер транзакции соответствующим образом отвечает в зависимости от того, получил ли он все готовности от диспетчеров ресурсов, или если он получил, по меньшей мере, один откат. Если диспетчер транзакции принимает голоса фиксации от всех диспетчеров ресурсов на этапе 312, которые все вызвали способ подготовки, диспетчер 216 транзакции применяет способ фиксации для каждого диспетчера 314 ресурсов. Затем диспетчеры ресурсов могут сделать устойчивые изменения и завершить фиксацию или применить отложенные действия (если существуют) и затем перейти к этапу 316 после высвобождения транзакции 202. После транзакции 202 продолжается выполнение приложения. Если любой из диспетчеров ресурсов проголосовал за отказ от фиксации на подготовительной фазе на этапе 312, последовательность операций действует на основании неуспешного завершения, как следует ниже.
Неуспешные завершения, вызванные конфликтами при обращении к памяти, идентифицированные диспетчером 208 ресурса памяти, являются отличными от неуспешных завершений, идентифицированных другими диспетчерами ресурсов, не являющимися диспетчерами ресурсов памяти, внесенными в транзакцию. Например, неуспешные завершения, вызванные конфликтами при обращении к памяти, вызывают автоматическое повторное выполнение транзакции на этапе 318. Вообще приложение, включающее в себя транзакцию 202, не обращает внимание на повторные выполнения, когда они, в конце концов, успешно завершаются. Неуспешные завершения, идентифицированные другими диспетчерами ресурсов, такими как диспетчер 210 ресурса, становятся причиной прерывания транзакции и повторного выполнения. Соответственно, если диспетчер, не являющийся диспетчером ресурса памяти, голосует против фиксации транзакции на этапе 318, транзакция неуспешно завершается на этапе 320. Если диспетчер 208 ресурса памяти голосует против фиксации транзакции на этапе 318, все диспетчеры ресурсов вызывают откат на этапе 322. В этом случае любые компенсирующие действия выполняются на этапе 322. Если каждый диспетчер ресурса голосует за фиксацию транзакции, транзакция фиксируется на этапе 314, и выполняются любые отложенные действия.
Хотя в материалах настоящей заявки были проиллюстрированы и описаны отдельные варианты осуществления, специалистам в данной области техники должно быть принято во внимание, что варианты осуществления, показанные и описанные не выходя из объема настоящего изобретения, могут быть заменены множеством альтернативных и эквивалентных реализаций. Эта заявка не подразумевает покрытие любых адаптаций и вариантов отдельных вариантов осуществления, обсужденных в материалах настоящей заявки. Следовательно, подразумевается, что это изобретение будет ограничено только формулой изобретения и ее эквивалентами.
Класс G06F12/00 Выборка, адресация или распределение данных в системах или архитектурах памяти