Код документа: RU2549112C2
Предпосылки создания изобретения
Один или более аспектов изобретения относится, в общем, к многопроцессорным вычислительным средам, в частности к транзакционной обработке внутри таких вычислительных сред.
Постоянной проблемой в многопроцессорном программировании являются обновления одной и той же ячейки памяти несколькими центральными процессорными устройствами (ЦП). Многие команды, обновляющие ячейки памяти, включая даже простые логические операции, такие как И (AND), производят это с множественным доступом к ячейке. Например, сначала считывается содержимое ячейки памяти, а потом обновлённый результат возвращается обратно.
Для безопасного обновления одной и той же ячейки памяти несколькими процессорами доступ к ячейке сделан сериализированным. Одна из команд, команда ПРОВЕРИТЬ И УСТАНОВИТЬ (TEST AND SET), введённая в архитектуре S/360, ранее предлагаемой корпорацией International Business Machines, обеспечивает взаимоблокированное обновление ячейки памяти. Взаимная блокировка обновления означает, что с точки зрения других процессоров и подсистемы ввода/вывода (I/O) (например, подсистемы каналов), весь доступ к памяти для команды оказывается неделимым. Позже, в архитектуре S/370, предложенной корпорацией International Business Machines, были введены команды СРАВНИТЬ И ОБМЕНЯТЬ (COMPARE AND SWAP) и СРАВНИТЬ ДВАЖДЫ И ОБМЕНЯТЬ (COMPARE DOUBLE AND SWAP), предоставляющие более усложнённые средства осуществления обновления с взаимоблокировкой, и делающие возможным реализацию того, что теперь известно как блокировочное слово (или семафор). Недавно введённые команды предоставили дополнительные возможности обновления с взаимоблокировкой, включая СРАВНИТЬ И ОБМЕНЯТЬ И ОЧИСТИТЬ (COMPARE AND SWAP AND PURGE) и СРАВНИТЬ И ОБМЕНЯТЬ И СОХРАНИТЬ (COMPARE AND SWAP AND STORE). Однако все эти команды обеспечивают взаимоблокировку только для единичной ячейки памяти.
Более сложные методы программирования могут потребовать взаимно блокированного обновления многих ячеек памяти, такие как добавление элемента к двусвязанному списку. При такой операции как прямой, так и обратный указатель должны выглядеть обновляемыми одновременно с точки зрения других процессоров и подсистемы ввода-вывода. Для того чтобы произвести такое обновление многих ячеек, программа вынуждена использовать отдельную, единичную точку сериализации, такую как блокировочное слово. Однако блокировочные слова могут предусматривать более грубый уровень сериализации, чем гарантированный; например, блокировочные слова могут перевести в последовательный режим целую очередь из миллионов элементов, хотя только два элемента обновляются. Программа может структурировать данные для использования более тонкой сериализации (например, иерархии точек блокировки), но это вносит дополнительные трудности, такие как возможность тупиковой ситуации при нарушении иерархии, и проблемы с восстановлением, если программа сталкивается с ошибкой, удерживая одну или более блокировок, или блокировка не может быть запрошена.
В дополнение к вышесказанному, существует множество сценариев, в которых программа может выполнять последовательность команд, которые могут или не могут привести к ситуации исключения. Если ситуация исключения не наступает, программа продолжается; однако, если обнаружено исключение, программа может предпринять корректирующее действие для устранения ситуации исключения. Java, к примеру, может использовать такое выполнение для, например, упреждающего выполнения, частичного встраивания функции и/или изменения последовательности проверки нуля указателя.
В средах классических операционных систем, таких как z/OS и её предшественники, предложенные корпорацией International Business Machines, программа создаёт среду восстановления для перехвата любой ситуации программного исключения, которая может встретиться. Если программа не перехватывает исключение, операционная система обычно аварийно завершает программу для исключений, которые операционная система не готова обработать. Создание и использование такой среды затратно и сложно.
КРАТКОЕ ИЗЛОЖЕНИЕ
Изобретение устраняет недостатки уровня техники и обеспечивает достижение преимуществ с помощью способа обработки транзакций внутри вычислительной среды, который может быть реализован в компьютерном программном продукте, включающем машиночитаемую запоминающую среду, считываемую обрабатывающим устройством и хранящую команды для выполнения обрабатывающим устройством для выполнения способа. Способ включает, например, выполнение процессором транзакции в вычислительной среде, где указанная транзакция эффективно задерживает фиксацию транзакционных сохранений в главной памяти до тех пор, пока не завершится выбранная транзакция; определение, основанное на выполнении транзакции, что ситуация сброса произошла; проверку, является ли транзакция вынужденной транзакцией, где указанная вынужденная транзакция имеет одно или больше ограничений, связанных с ней; и возвращение к началу транзакции для повторного выполнения транзакции, основанное на определении ситуации сброса и проверке указывающей, что транзакция является вынужденной транзакцией.
В заявке также обсуждаются и заявляются способы и системы, относящиеся к одному или более вариантам воплощения изобретения. Далее, здесь также обсуждаются и могут заявляться службы, относящиеся к одному или более вариантам воплощения изобретения.
Реализуются другие особенности и преимущества. Другие варианты воплощения изобретения и аспекты излагаются здесь подробно и считаются частью формулы изобретения.
КРАТКОЕ ОПИСАНИЕ И НЕСКОЛЬКО ПРЕДСТАВЛЕНИЙ ЧЕРТЕЖЕЙ
Один или более аспектов выделены особо и явно объявлены как примеры в формуле изобретения в конце описания. Вышеуказанные и другие объекты, особенности и преимущества понятны из следующего подробного описания с помощью сопровождающих чертежей, в которых:
На Фиг. 1 изображён один из вариантов вычислительной среды;
На Фиг. 2А изображён один из примеров команды НАЧАТЬ ТРАНЗАКЦИЮ (TRANSACTION BEGIN) (TBEGIN);
На Фиг. 2Б изображён в дальнейших подробностях один из вариантов поля команды TBEGIN согласно Фиг. 2А;
На Фиг. 3А изображён один из примеров команды НАЧАТЬ ТРАНЗАКЦИЮ ВЫНУЖДЕННО (TRANSACTION BEGIN CONSTRAINED) (TBEGINC);
На Фиг. 3Б изображён в дальнейших подробностях один из вариантов поля команды TBEGINC согласно Фиг. 3А;
На Фиг. 4 изображён один из примеров команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ (TRANSACTION END) (TEND);
На Фиг. 5 изображён один из примеров команды СБРОСИТЬ ТРАНЗАКЦИЮ (TRANSACTION ABORT) (TABORT);
На Фиг. 6 изображён один из примеров вложенных транзакций;
На Фиг. 7 изображён один из примеров команды НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ (NONTRANSACTIONAL STORE) (NTSTG);
На Фиг. 8 изображён один из примеров команды ИЗВЛЕЧЬ ГЛУБИНУ ВЛОЖЕНИЯ ТРАНЗАКЦИЙ (EXTRACT TRANSACTION NESTING DEPTH) (ETND);
На Фиг. 9 изображён один из примеров блока диагностики транзакций;
На Фиг. 10 изображены примеры причин сброса вместе с соответствующими кодами сброса и кодами состояния;
На Фиг. 11 изображён один из вариантов логики, связанный с созданием вынужденной или невынужденной транзакции;
На Фиг. 12 изображён один из вариантов логики, связанный с выполнением транзакции, и в частности, с обработкой ситуации сброса, зависимой от типа транзакции;
На Фиг. 13 изображён один из вариантов логики, связанный с выполнением команды TBEGINC;
На Фиг. 14 изображён один из вариантов логики, связанный с выполнением действия, способствующего завершению вынужденной транзакции;
На Фиг. 15A-15Б изображён пример вставки элемента очереди в двусвязанный список элементов очереди;
На Фиг. 16 изображён один из вариантов компьютерного программного продукта;
На Фиг. 17 изображён один из вариантов главной компьютерной системы;
На Фиг. 18 изображён другой пример компьютерной системы;
На Фиг. 19 изображён ещё один пример компьютерной системы, содержащий компьютерную сеть;
На Фиг. 20 изображён один из вариантов различных элементов компьютерной системы;
На Фиг. 21А изображён один из вариантов исполнительного устройства компьютерной системы согласно Фиг. 20;
На Фиг. 21Б изображён один из вариантов устройства ветвления компьютерной системы согласно Фиг. 20;
На Фиг. 21В изображён один из вариантов устройства загрузки/сохранения компьютерной системы согласно Фиг. 20; и
На Фиг. 22 изображён один из вариантов эмулированной главной компьютерной системы.
ПОДРОБНОЕ ОПИСАНИЕ
В соответствии с одним аспектом, предоставляется средство транзакционного выполнения (TX). Это средство обеспечивает транзакционную обработку команд, и в одном или более вариантов, предоставляет разные режимы выполнения, как описывается ниже, а также вложенные уровни транзакционной обработки.
Средство транзакционного выполнения вводит состояние процессора, называемое режимом транзакционного выполнения (TX). Сразу после перезагрузки процессора, процессор не находится в режиме TX. Процессор входит в режим TX по команде НАЧАТЬ ТРАНЗАКЦИЮ. Процессор выходит из режима TX или (а) по самой внешней команде ЗАКОНЧИТЬ ТРАНЗАКЦИЮ (подробности о внутреннем и внешнем следуют), или (б) если транзакция была сброшена. В режиме TX обращения процессора к памяти выглядят блочно-параллельными с точки зрения других процессоров и подсистемы ввода-вывода. Обращения к памяти или (а) фиксируются в памяти, если самая внешняя транзакция заканчивается без сброса (т.е., например, обновления в кэше или буферах, локальных для процессора, распространяются и сохраняются в реальной памяти и видимы для других процессоров), или (б) отбрасываются, если транзакция сброшена.
Транзакции могут быть вложенными. То есть пока процессор находится в режиме TX, он может выполнить другую команду НАЧАТЬ ТРАНЗАКЦИЮ. Команда, которая вызывает вход процессора в режим TX, называется самой внешней командой НАЧАТЬ ТРАНЗАКЦИЮ; аналогично говорят, что программа находится в самой внешней транзакции. Последующие выполнения команды НАЧАТЬ ТРАНЗАКЦИЮ называются внутренними командами; и программа выполняет внутреннюю транзакцию. Эта модель предусматривает минимальную глубину вложения и зависимую от модели максимальную глубину вложения. Команда ИЗВЛЕЧЬ ГЛУБИНУ ВЛОЖЕНИЯ ТРАНЗАКЦИЙ возвращает текущее значение глубины вложения и, в последующем варианте, может возвращать максимальное значение глубины вложения. Эта методика использует модель, называемую “выровненное вложение”, в которой состояние сброса при любой глубине вложения вызывает сброс всех уровней транзакции, и управление возвращается к команде, следующей за самой внешней НАЧАТЬ ТРАНЗАКЦИЮ.
Во время обработки транзакции считается, что транзакционное обращение, выполняемое одним процессором, конфликтует с (а) транзакционным или нетранзакционным обращением, выполняемым другим процессором, и (б) нетранзакционным обращением, выполняемым системой ввода-вывода, если оба обращения находятся в любом месте внутри одной строки кэша, и одно или оба обращения являются сохранением. Другими словами, для того чтобы транзакционное выполнение было продуктивным, не должно быть видно, что процессор совершает транзакционные обращения, пока они не зафиксируются. Эта модель программирования может быть очень эффективна в определённых средах; например, обновление двух точек в двусвязанном списке из миллиона элементов. Однако она может быть менее эффективна, если существует значительная конкуренция за позиции памяти, к которым производится транзакционное обращение.
В одной модели транзакционного выполнения (называемой здесь невынужденной транзакцией), когда транзакция сбрасывается, программа может или попытаться перезапустить транзакцию в надежде, что состояния сброса больше нет, или программа может “откатиться” на эквивалентный нетранзакционный путь. В другой модели транзакционного выполнения (называемой здесь вынужденной транзакцией), сброшенная транзакция автоматически перезапускается процессором; в отсутствие нарушения ограничений вынужденная транзакция гарантированно завершается в итоге.
Запуская транзакцию, программа может задать различные проверки, такие как: (а) какие регистры общего назначения восстанавливают их изначальное содержимое в случае сброса транзакции, (б) разрешено ли транзакции изменять контекст регистров с плавающей точкой, включая, например, регистры с плавающей точкой и контрольный регистр с плавающей точкой, (в) разрешено ли транзакции изменять регистры доступа (AR), и (г) должны ли некоторые ситуации программного исключения быль блокированы от вызова прерывания. Если невынужденная транзакция сбрасывается, может быть предоставлена различная диагностическая информация. Например, самая внешняя команда TBEGIN, которая запускает невынужденную транзакцию, может задать программно определяемый блок диагностики транзакции (TDB). Далее, TDB в префиксной зоне процессора или заданный описанием состояния хоста, также может использоваться, если транзакция сброшена из-за программного прерывания или состояния, которое вызывает завершение интерпретирующего выполнения, соответственно.
Выше указаны различные типы регистров. Далее они объясняются подробно. Регистры общего назначения могут использоваться как накопители в общих арифметических и логических операциях. В одном варианте каждый регистр содержит 64 двоичных разряда, и есть 16 регистров общего назначения. Регистры общего назначения идентифицируются по номерам 0-15 и обозначаются в команде четырёхбитным полем R. Некоторые команды обеспечивают адресацию к нескольким регистрам общего назначения, имея несколько полей R. Для некоторых команд подразумевается использование особого регистра общего назначения вместо прямого указания в поле R команды.
Кроме использования в качестве накопителей в общих арифметических и логических операциях, 15 из 16 регистров общего назначения используются также как регистры базового адреса и индексные регистры для формирования адреса. В этих случаях регистры обозначаются в команде четырёхбитным полем B или полем X. Нулевое значение в поле B или X означает, что база или индекс не применяется, и таким образом, регистр общего назначения 0 не должен использоваться как содержащий базовый адрес или индекс.
Команды с плавающей точкой используют ряд регистров с плавающей точкой. Процессор имеет 16 регистров с плавающей точкой, в одном варианте. Регистры с плавающей точкой идентифицируются по номерам 0-15 и обозначаются в командах с плавающей точкой четырёхбитным полем R. Каждый регистр с плавающей точкой является 64-битным и может содержать или короткий (32 бит) или длинный (64 бит) операнд с плавающей точкой.
Регистр управления плавающей точкой (FPC) - 32-битный регистр, который содержит биты маски, бит флага, код исключения данных и биты режима округления и используется во время обработки операций с плавающей точкой.
Далее, в одном варианте, процессор имеет 16 управляющих регистров (CR), каждый из которых имеет 64 двоичных разряда. Двоичные разряды в регистрах закреплены за отдельными средствами в системе, такими как Запись Программных Событий (PER) (обсуждается ниже), и используются или для определения, какая операция может происходить, или для предоставления специальной информации, необходимой средству. В одном варианте для транзакционного средства используются CR0 (биты 8 и 9) и CR2 (биты 61-63), как описано ниже.
Процессор имеет, например, 16 регистров доступа, пронумерованных 0-15. Регистр доступа состоит из 32 двоичных разрядов, содержащих косвенное определение элемента контроля пространства адресов (ASCE). Элемент контроля пространства адресов - параметр, используемый механизмом динамической трансляции адреса (DAT) для перевода ссылок в соответствующее пространство адресов. Когда процессор находится в режиме, называемом режимом регистра доступа (управляющимся битами в слове состояния программы (PSW)), поле B команды, использующееся для определения логического адреса для ссылки в операнде хранения, назначает регистр доступа, а элемент контроля пространства адресов, заданный регистром доступа, используется DAT для данной ссылки. Для некоторых команд используется поле R вместо поля B. Предоставляются команды для загрузки и сохранения содержимого регистров доступа и для перемещения содержимого одного регистра доступа в другой.
Каждый из регистров доступа 1-15 может определять любое пространство адресов. Регистр доступа 0 определяет первичное пространство команд. Когда один из регистров доступа 1-15 используется для определения пространства адресов, процессор выясняет, которое пространство адресов определяется, переводя содержимое регистра доступа. Когда регистр доступа 0 используется для определения пространства адресов, процессор рассматривает регистр доступа как определяющий первичное пространство команд, и не проверяет действительное содержание регистра доступа. Таким образом, 16 регистров доступа могут определять одновременно первичное пространство команд и максимум 15 других пространств.
В одном из вариантов существует несколько типов пространств адресов. Пространство адресов - непрерывная последовательность целых чисел (виртуальных адресов), вместе со специфическими параметрами трансляции, позволяющими связать каждое число с расположением байта в памяти. Последовательность начинается с нуля и продолжается слева направо.
В z/Architecture, например, когда виртуальный адрес используется процессором для обращения к главному запоминающему устройству (оно же главная память), он сперва превращается с помощью динамической трансляции адреса (DAT) в реальный адрес, а затем при помощи префиксации в абсолютный адрес. DAT может использовать от одного до пяти уровней таблиц (страница, сегмент, регион третий, регион второй и регион первый) в качестве параметров трансляции. Определение (происхождение и длина) таблицы наивысшего уровня для отдельного пространства адресов называется элементом контроля пространства адресов и находится для использования в DAT в управляющем регистре или определено регистром доступа. Иначе, элемент контроля пространства адресов для пространства адресов может быть обозначением реального пространства, которое указывает, что DAT должно транслировать виртуальный адрес, просто рассматривая его как реальный адрес без использования каких-либо таблиц.
DAT в разное время использует элементы контроля пространства адресов в разных управляющих регистрах или заданные регистрами доступа. Выбор определяется режимом трансляции, заданным в текущем PSW. Доступны четыре режима трансляции: режим первичного пространства, режим вторичного пространства, режим регистра доступа и режим домашнего пространства. Разные пространства адресов адресуются в зависимости от режима трансляции.
В любой момент, когда процессор находится в режиме первичного пространства или режиме вторичного пространства, процессор может транслировать виртуальные адреса, относящиеся к двум пространствам адресов - первичному пространству адресов и вторичному пространству адресов. В любой момент, когда процессор находится в режиме регистра доступа, он может транслировать виртуальные адреса вплоть до 16 пространств адресов - первичное пространство адресов и вплоть до 15 пространств адресов, заданных AR. В любой момент, когда процессор находится в режиме домашнего пространства, он может транслировать виртуальные адреса домашнего пространства адресов.
Первичное пространство адресов обозначается так, потому что оно состоит из первичных виртуальных адресов, которые транслируются с помощью первичного элемента контроля пространства адресов (ASCE). Аналогично, вторичное пространство адресов состоит из вторичных виртуальных адресов, транслирующихся с помощью вторичного ASCE; пространства адресов, заданные AR, состоят из виртуальных адресов, заданных AR, транслирующихся при помощи ASCE, заданных AR; и домашнее пространство адресов состоит из домашних виртуальных адресов, транслирующихся при помощи домашнего ASCE. Первичные и вторичные ASCE находятся в управляющих регистрах 1 и 7 соответственно. ASCE, заданные AR, находятся в пунктах второй таблицы НПА, которые находятся с помощью процесса, называемого трансляцией регистра доступа (ART) при помощи управляющего регистра 2, 5 и 8. Домашний ASCE находится в управляющем регистре 13.
Один из вариантов вычислительной среды, включающий и использующий один или более аспектов описываемого здесь транзакционного средства, описывается при помощи Фиг. 1.
Согласно Фиг. 1, в одном примере, вычислительная среда 100 основывается на архитектуре z/Architecture, предлагаемой корпорацией International Business Machines (IBM®), Армонк, штат Нью-Йорк. z/Architecture описана в публикации IBM, озаглавленной “z/Architecture - Principles of Operation,” публикация № SA22-7932-08, 9 издание, август 2010, которая включается сюда по ссылке во всей её целостности.
Z/ARCHITECTURE, IBM, Z/OS и Z/VM (упоминаемые ниже) являются зарегистрированными торговыми марками корпорации International Business Machines, Армонк, штат Нью-Йорк. Другие названия, использованные здесь, могут быть зарегистрированными торговыми марками, торговыми марками или названиями изделий корпорации International Business Machines или других компаний.
В качестве примера, вычислительная среда 100 включает центральный процессорный комплекс (CPC) 102, соединённый с одним или более устройств ввода-вывода 106 через один или более управляющих модулей 108. Центральный процессорный комплекс 102 включает, например, один или более центральных процессоров 110, один или более разделов 112 (например, логических разделов (LP)), гипервизор логических разделов 114 и подсистему ввода-вывода 115, каждый из которых описывается ниже.
Центральные процессоры 110 являются ресурсами физического процессора, выделенные логическим разделам. В частности, каждый логический раздел 112 имеет один или более логических процессоров, каждый из которых представляет собой весь или часть физического процессора 110, выделенную разделу. Логические процессоры отдельного раздела 112 могут быть или закреплены за разделом, так что лежащий в основе ресурс процессора 110 зарезервирован за этим разделом; или разделены с другим разделом, так что лежащий в основе ресурс процессора потенциально доступен для другого раздела.
Логический раздел функционирует как отдельная система и имеет одно или несколько приложений и, опционально, резидентную операционную систему внутри, которая может отличаться для каждого логического раздела. В одном варианте операционной системой является операционная система z/OS, операционная система z/VM, операционная система z/Linux или операционная система TPF, предлагаемая корпорацией International Business Machines, Армонк, штат Нью-Йорк. Логические разделы 112 управляются гипервизором 114 логических разделов, который реализуется микропрограммой, выполняющейся на процессорах 110. В данном контексте микропрограмма включает, например, микрокод и/или милликод процессора. Она включает, например, команды аппаратного уровня и/или структуры данных, используемые в реализации машинного кода высокого уровня. В одном варианте она включает, например, проприетарный код, который обычно поставляется как микрокод, который включает достоверное программное обеспечение или микрокод, специфичный для нижележащего аппаратного обеспечения, и управляет доступом операционной системы к системному аппаратному обеспечению.
Каждый из логических разделов и гипервизор логических разделов включают одну или более программ, постоянно находящихся в соответствующих разделах центрального запоминающего устройства, связанного с центральными процессорами. Одним из примеров гипервизора 114 логических разделов является Администратор Системы/Ресурсов Процессора (Processor Resource/System Manager (PR/SM)), предлагаемый корпорацией International Business Machines, Армонк, штат Нью-Йорк.
Подсистема 115 ввода-вывода направляет поток информации между устройствами 106 ввода-вывода и главным запоминающим устройством (оно же главная память). Она соединяется с центральным процессорным комплексом, в котором она может быть частью центрального процессорного комплекса или отделена от него. Подсистема ввода-вывода облегчает центральным процессорам задачу прямой связи с устройствами ввода-вывода и позволяет производить обработку данных параллельно с обработкой ввода-вывода. Для обеспечения связи подсистема ввода-вывода использует адаптеры связи ввода-вывода. Существуют различные типы адаптеров связи, включая, например, каналы, адаптеры ввода-вывода, платы PCI, платы Ethernet, платы Интерфейса Малого Компьютерного Хранилища (SCSI) и т.д. В отдельном примере, описанном здесь, адаптерами связи ввода-вывода являются каналы, и, таким образом, подсистема ввода-вывода называется здесь канальной подсистемой. Однако это лишь один из примеров. Могут использоваться другие типы подсистем ввода-вывода.
Подсистема ввода-вывода использует один или более путей ввода-вывода в качестве линий связи, управляя потоком информации к устройствам 106 или от них. В этом отдельном примере эти пути называются канальными путями, так как адаптеры связи являются каналами.
Вычислительная среда, описанная выше, является лишь одним примером вычислительной среды, которая может использоваться. Могут использоваться другие среды, включая, но не ограничиваясь, неразделённые среды, другие разделённые среды и/или эмулированные среды; варианты не ограничиваются любой одной средой.
В соответствии с одним или более аспектами, средство транзакционного выполнения является усовершенствованием процессора, которое предоставляет средства, с помощью которых процессор может выполнить последовательность команд (известную как транзакция), которая может обращаться ко многим ячейкам памяти, включая обновление этих ячеек. С точки зрения других процессоров и подсистемы ввода-вывода, транзакция или (а) завершается во всей целостности как единичная атомарная операция, или (б) сбрасывается, потенциально не оставляя никаких свидетельств того, что она вообще выполнялась (за исключением некоторых ситуаций, описанных здесь). Таким образом, успешно завершённая транзакция может обновить множество ячеек памяти без какой-либо особой блокировки, которая нужна в классической многопроцессорной модели.
Средство транзакционного выполнения включает, например, одну или более директив; одну или более команд; обработку транзакций, включая вынужденное и невынужденное выполнение; и обработку сброса, каждая из которых далее описывается ниже.
В одном варианте воплощения изобретения, для управления средством транзакционного выполнения используются три директивы специального назначения, включая Слово Состояния Программы (PSW) сброса транзакции, адрес блока диагностики транзакций (TDB) и глубину вложения транзакций; пять бит управляющего регистра; и шесть общих команд, включая НАЧАТЬ ТРАНЗАКЦИЮ (вынужденную и невынужденную), ЗАКОНЧИТЬ ТРАНЗАКЦИЮ, ИЗВЛЕЧЬ ГЛУБИНУ ВЛОЖЕНИЯ ТРАНЗАКЦИЙ и НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ. Когда средство инсталлируется, оно инсталлируется, например, на все процессоры в конфигурации. Обозначение средства, бит 73 в одной реализации, будучи единицей, указывает, что установлено средство транзакционного выполнения.
Когда установлено средство транзакционного выполнения, конфигурация предоставляет средство невынужденного транзакционного выполнения и, опционально, средство вынужденного транзакционного выполнения, каждое из которых описывается ниже. Если обозначения средства 50 и 73, к примеру, оба равны единице, установлено средство вынужденного транзакционного выполнения. Оба обозначения средства хранятся в памяти в определённых позициях.
В данном контексте название команды НАЧАТЬ ТРАНЗАКЦИЮ относится к командам с сокращениями TBEGIN (Начать Транзакцию для невынужденной транзакции) и TBEGINC (Начать Транзакцию для вынужденной транзакции). Рассуждения, касающиеся специфических команд, обозначаются названием команды с последующим сокращением в скобках или только сокращением.
Один из вариантов формата команды НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN) изображён на Фиг. 2А-2Б. К примеру, команда TBEGIN 200 включает поле кода операции 202, которое включает код операции, определяющий невынужденную операцию начала транзакции; базовое поле (B1) 204; поле смещения (D1) 206; и непосредственное поле (I2) 208. Если поле B1 не нуль, содержимое регистра общего назначения, определённого B1 204, складывается с D1 206 для получения адреса первого операнда.
Если поле B1 не нуль, применяется следующее:
- Если глубина вложения транзакции изначально нуль, адрес первого операнда определяет положение 256-байтного блока диагностики транзакций, называемого TDB, заданный TBEGIN (далее описан ниже), в котором может сохраняться различная диагностическая информация, если транзакция сбрасывается. Если процессор находится в режиме первичного пространства или в режиме регистра доступа, адрес первого операнда определяет позицию в первичном пространстве адресов. Если процессор находится в режиме вторичного пространства или в режиме домашнего пространства, адрес первого операнда определяет позицию во вторичном или домашнем пространстве адресов соответственно. Если DAT выключено, адрес блока диагностики транзакций (TDBA) определяет позицию в реальном запоминающем устройстве.
Определяется доступность памяти для первого операнда. Если доступно, логический адрес операнда помещается в адрес блока диагностики транзакций (TDBA), и TDBA действителен.
- Если процессор уже находится в режиме невынужденного транзакционного выполнения, TDBA не изменяется, и нельзя предсказать, проверен ли первый операнд на доступность.
Если поле B1 равно нулю, не обнаруживаются исключения доступа для первого операнда и, для самой внешней команды TBEGIN, TDBA недействителен.
Биты поля I2 определяются следующим образом, к примеру:
Маска Сохранения Регистров Общего Назначения (General Register Save Mask) (GRSM) 210 (Фиг. 2Б): Биты 0-7 поля I2 содержат маску сохранения регистров общего назначения (GRSM). Каждый бит GRSM представляет чётно-нечётную пару регистров общего назначения, где бит 0 представляет регистры 0 и 1, бит 1 представляет регистры 2 и 3 и так далее. Если бит в GRSM самой внешней команды TBEGIN равен нулю, соответствующая пара регистров не сохраняется. Если бит в GRSM самой внешней команды TBEGIN равен единице, соответствующая пара регистров сохраняется в зависящем от модели месте, которое недоступно программе напрямую.
Если транзакция сбрасывается, сохранённые пары регистров восстанавливают своё содержимое на момент, когда выполнялась самая внешняя команда TBEGIN. Содержимое всех других (несохранённых) регистров общего назначения не восстанавливается, если транзакция сбрасывается.
Маска сохранения регистров общего назначения игнорируется всеми TBEGIN за исключением самой внешней.
Разрешить Изменение AR (Allow AR Modification) (A) 212: Директива A, бит 12 поля I2, контролирует, разрешено ли транзакции изменять регистр доступа. Эффективная директива разрешения изменения AR является логическим И (AND) директивы A в команде TBEGIN для текущего уровня вложения и для всех внешних уровней.
Если эффективная директива A равна нулю, транзакция будет сброшена с кодом сброса 11 (недопустимая команда), если будет сделана попытка изменить любой регистр доступа. Если эффективная директива A равна единице, транзакция не будет сброшена, если регистр доступа будет изменён (в отсутствие любых других причин сброса).
Разрешить Операцию с Плавающей Точкой (Allow Floating Point Operation) (F) 214: Директива F, бит 13 поля I2, контролирует, разрешено ли транзакции выполнять определённые команды с плавающей точкой. Эффективная директива разрешения операции с плавающей точкой является логическим И (AND) директивы F в команде TBEGIN для текущего уровня вложения и для всех внешних уровней.
Если эффективная директива F равна нулю, то (а) транзакция будет сброшена с кодом сброса 11 (недопустимая команда), если будет сделана попытка выполнить команду с плавающей точкой, и (б) код исключения данных (DXC) в байте 2 управляющего регистра с плавающей точкой (FPCR) не будет установлен никаким состоянием исключения программы исключения данных. Если эффективная директива F равна единице, то (а) транзакция не будет сброшена, если будет сделана попытка выполнить команду с плавающей точкой (в отсутствие любых других причин сброса), и (б) DXC в FPCR может быть установлен состоянием исключения программы исключения данных.
Директива Фильтрации Прерывания Программы (Program Interruption Filtering Control) (PIFC) 216: Биты 14-15 поля I2 являются директивой фильтрации прерывания программы (PIFC). PIFC контролирует, вызывают ли прерывание некоторые классы ситуаций программного исключения (например, исключение адресации, исключение данных, исключение операций, исключение защиты и т.д.), которые происходят пока процессор находится в режиме транзакционного выполнения.
Эффективная PIFC является наивысшей величиной PIFC в команде TBEGIN для текущего уровня вложения и для всех внешних уровней. Если эффективная PIFC равна нулю, все ситуации программного исключения вызывают прерывание. Если эффективная PIFC равна единице, ситуации программного исключения, имеющие класс транзакционного выполнения 1 и 2, вызывают прерывание. (Каждой ситуации программного прерывания назначен как минимум один класс транзакционного выполнения, зависящий от серьёзности исключения. Важность основывается на вероятности восстановления во время повторного выполнения транзакции, и нужно ли операционной системе видеть прерывание). Если эффективная PIFC равна двум, ситуации программного исключения, имеющие класс транзакционного выполнения 1, вызывают прерывание. PIFC, равный 3, зарезервирован.
Биты 8-11 поля I2 (биты 40-43 команды) зарезервированы и должны содержать нули; иначе, программа не сможет совместимо работать в будущем.
Один из вариантов формата инструкции НАЧАТЬ ТРАНЗАКЦИЮ ВЫНУЖДЕННО (TBEGINC) описан при помощи Фиг. 3А-3Б. В одном примере команда TBEGINC 300 включает поле кода операции 302, которое включает код операции, определяющий вынужденную операцию начала транзакции; базовое поле (B1) 304; поле смещения (D1) 306 и непосредственное поле (I2) 308. Содержимое регистра общего назначения, определённого B1 304, складывается с D1 306 для получения адреса первого операнда. Однако при команде вынужденного начала транзакции адрес первого операнда не используется для обращения к памяти. Вместо этого поле B1 команды включает нули; иначе обнаруживается исключение определения.
В одном из вариантов поле I2 включает различные директивы, пример которых изображён на Фиг. 3Б.
Биты поля I2 определяются следующим образом, к примеру:
Маска Сохранения Регистров Общего Назначения (GRSM) 310: Биты 0-7 поля I2 содержат маску сохранения регистров общего назначения (GRSM). Каждый бит GRSM представляет чётно-нечётную пару регистров общего назначения, где бит 0 представляет регистры 0 и 1, бит 1 представляет регистры 2 и 3 и так далее. Если бит в GRSM равен нулю, соответствующая пара регистров не сохраняется. Если бит в GRSM равен единице, соответствующая пара регистров сохраняется в зависящем от модели месте, которое недоступно программе напрямую.
Если транзакция сбрасывается, сохранённые пары регистров восстанавливают своё содержимое на момент, когда выполнялась самая внешняя команда НАЧАТЬ ТРАНЗАКЦИЮ. Содержимое всех других (несохранённых) регистров общего назначения не восстанавливается, если вынужденная транзакция сбрасывается.
Если TBEGINC используется для продолжения выполнения в режиме выполнения невынужденной транзакции, маска сохранения регистров общего назначения игнорируется.
Разрешить Изменение AR (A) 312: Директива A, бит 12 поля I2, контролирует, разрешено ли транзакции изменять регистр доступа. Эффективная директива разрешения изменения AR является логическим И (AND) директивы A в команде TBEGINC для текущего уровня вложения и для любых внешних команд TBEGIN или TBEGINC.
Если эффективная директива A равна нулю, транзакция будет сброшена с кодом сброса 11 (недопустимая команда), если будет сделана попытка изменить любой регистр доступа. Если эффективная директива A равна единице, транзакция не будет сброшена, если регистр доступа будет изменён (в отсутствие любых других причин сброса).
Биты 8-11 и 13-15 поля I2 (биты 40-43 и 45-47 команды) зарезервированы и должны содержать нули.
Окончание команды НАЧАТЬ ТРАНЗАКЦИЮ задаётся командой ЗАКОНЧИТЬ ТРАНЗАКЦИЮ (TEND), формат которой изображён на Фиг. 4. К примеру, команда TEND 400 включает поле кода операции 402, которое включает код операции, определяющий операцию конца транзакции.
Касательно средства транзакционного выполнения используется ряд терминов, и поэтому, только для удобства, ниже приводится список терминов в алфавитном порядке. В одном из вариантов эти термины имеют следующие определения:
Сброс (Abort): Транзакция сбрасывается, если она заканчивается ранее команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ, которая приводит к нулевой глубине вложения транзакций. Когда транзакция сбрасывается, происходит следующее, в одном из вариантов:
- Транзакционные обращения к памяти, совершенные любым и всеми уровнями транзакции, отбрасываются (т.е. не фиксируются).
- Нетранзакционные обращения к памяти, совершенные любым и всеми уровнями транзакции, фиксируются.
- Регистры, определенные маской сохранения регистров общего назначения (GRSM) самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ, восстанавливают их содержимое на момент до выполнения транзакции (т.е. содержимое при выполнении самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ). Регистры общего назначения, не определенные маской сохранения регистров общего назначения (GRSM) самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ, не восстанавливаются.
- Регистры доступа, регистры с плавающей точкой и управляющий регистр с плавающей точкой не восстанавливаются. Любые изменения, внесенные в эти регистры во время выполнения транзакции, остаются при сбросе транзакции.
Транзакция может быть сброшена из-за множества причин, включая попытку выполнения недопустимой команды, попытку изменения недопустимого ресурса, конфликт транзакций, превышение различных ресурсов процессора, любую ситуацию прерывания интерпретационного выполнения, любое прерывание, команду СБРОСИТЬ ТРАНЗАКЦИЮ и другие причины. Код сброса транзакции предоставляет конкретные причины, почему транзакция может быть сброшена.
Один из примеров формата команды СБРОСИТЬ ТРАНЗАКЦИЮ (TABORT) описан при помощи Фиг. 5. К примеру, команда TABORT 500 включает поле кода операции 502, которое включает код операции, определяющий операцию сброса транзакции; базовое поле (B2) 504; и поле смещения (D2) 506. Если поле B2 не нуль, содержимое регистра общего назначения, определённого B2 504, складывается с D2 506 для получения адреса второго операнда; иначе адрес второго операнда создаётся только из поля D2, а поле B2 игнорируется. Адрес второго операнда не используется для адресации данных; вместо этого адрес создаёт код сброса транзакции, который помещается в блок диагностики транзакции во время обработки сброса. Вычисление адреса для адреса второго операнда следует правилам адресной арифметики: в режиме 24-битной адресации биты 0-29 устанавливаются в нуль; в режиме 31-битной адресации биты 0-32 устанавливаются в нуль.
Фиксация (Commit): При завершении самой внешней команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ, процессор фиксирует обращения к памяти, совершённые транзакцией (т.е. самой внешней транзакцией и любыми вложенными уровнями), так что они становятся видимы другим процессорам и подсистеме ввода-вывода. С точки зрения других процессоров и подсистемы ввода-вывода, все обращения считывания и записи, совершённые всеми вложенными уровнями транзакции, выглядят как происходящие как единичная параллельная операция при осуществлении фиксации.
Содержимое регистров общего назначения, регистров доступа, регистров с плавающей точкой и управляющего регистра с плавающей точкой не изменяется в процессе фиксации. Любые изменения, внесённые в эти регистры во время выполнения транзакции, остаются при фиксации сохранений транзакции.
Конфликт (Conflict): Транзакционное обращение, выполняемое одним процессором, конфликтует или (а) с транзакционным или нетранзакционным обращением, выполняемым другим процессором, или (б) с нетранзакционным обращением, выполняемым системой ввода-вывода, если оба обращения находятся в любом месте внутри одной строки кэша, и одно или оба обращения являются сохранением.
Конфликт может быть обнаружен при упреждающем выполнении команд процессором, даже если конфликт не может быть обнаружен в концептуальной последовательности.
Вынужденная Транзакция (Constrained Transaction): Вынужденная транзакция является транзакцией, которая выполняется в режиме вынужденного транзакционного выполнения и подвержена следующим ограничениям:
- Доступно лишь подмножество основных команд.
- Может выполняться ограниченное число команд.
- Может быть доступно ограниченное число мест хранения операнда.
- Транзакция ограничена единственным уровнем вложения.
В отсутствие повторяющихся прерываний или конфликтов с другими процессорами и подсистемой ввода-вывода вынужденная транзакция в итоге завершается, таким образом, не требуется подпрограмма-обработчик сброса. Вынужденные транзакции подробно описываются ниже.
Если инструкция НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC) выполняется, когда процессор уже находится в режиме невынужденного транзакционного выполнения, выполнение продолжается как вложенная невынужденная транзакция.
Режим Вынужденного Транзакционного Выполнения (Constrained Transactional Execution Mode): Если глубина вложения транзакций равна нулю, а транзакция запускается командой TBEGINC, процессор входит в режим вынужденного транзакционного выполнения. Пока процессор находится в режиме вынужденного транзакционного выполнения, глубина вложения транзакций равна единице.
Вложенная Транзакция (Nested Transaction): Если команда НАЧАТЬ ТРАНЗАКЦИЮ поступает, когда процессор находится в режиме невынужденного транзакционного выполнения, транзакция становится вложенной.
Средство транзакционного выполнения использует модель, называемую выровненным вложением. В режиме выровненного вложения сохранения, произведённые внутренней транзакцией, невидимы для других процессоров и подсистемы ввода-вывода, пока самая внешняя транзакция не зафиксирует эти сохранения. Аналогично, если транзакция сбрасывается, все вложенные транзакции сбрасываются, и все транзакционные сохранения всех вложенных транзакций отбрасываются.
Один из примеров вложенных транзакций изображён на Фиг. 6. Как видно, первая команда TBEGIN 600 начинает самую внешнюю транзакцию 601, TBEGIN 602 начинает первую вложенную транзакцию, а TBEGIN 604 начинает вторую вложенную транзакцию. В этом примере TBEGIN 604 и TEND 606 определяют самую внутреннюю транзакцию 608. Когда выполняется TEND 610, фиксируются транзакционные сохранения 612 для самой внешней транзакции и всех внутренних транзакций.
Невынужденная Транзакция (Nonconstrained Transaction): Невынужденная транзакция является транзакцией, которая выполняется в режиме невынужденного транзакционного выполнения. Хотя невынужденная транзакция не ограничена наподобие вынужденной транзакции, она всё ещё может быть сброшена из-за множества причин.
Режим Невынужденного Транзакционного Выполнения (Nonconstrained Transactional Execution Mode): Если транзакция запускается командой TBEGIN, процессор входит в режим невынужденного транзакционного выполнения. Пока процессор находится в режиме невынужденного транзакционного выполнения, глубина вложения транзакций может изменяться от единицы до максимальной глубины вложения транзакций.
Нетранзакционное Обращение (Non-Transactional Access): Нетранзакционные обращения являются обращениями к операндам памяти, совершаемые процессором, не находящимся в режиме транзакционного выполнения, (т.е. классические обращения к памяти вне транзакции). Далее, обращения, совершаемые подсистемой ввода-вывода, являются нетранзакционными обращениями. Кроме того, команда НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ может использоваться для вызова нетранзакционного обращения к памяти, когда процессор находится в режиме невынужденного транзакционного выполнения.
Один из вариантов формата команды НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ описан при помощи Фиг. 7. К примеру, команда НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ 700 включает множество полей кода операции 702a, 702b, определяющих код операции, который задаёт нетранзакционную операцию с памятью: поле регистра (R1) 704, определяющее регистр, содержимое которого называется первым операндом; индексное поле (X2) 706; базовое поле (B2) 708; первое поле смещения (DL2) 710 и второе поле смещения (DH2) 712. Содержимое регистра общего назначения, определённого полями X2 и B2, складывается с результатом конкатенации содержимого полей DH2 и DL2 для образования адреса второго операнда. Если одно или оба поля X2 или B2 равны нулю, соответствующий регистр не принимает участия в сложении.
Первый 64-битный операнд нетранзакционно помещается без изменений на место второго операнда.
Смещение, полученное конкатенацией полей DH2 и DL2, обрабатывается как двоичное целое 20-разрядное число со знаком.
Второй операнд должен быть выровнен по границе двойного слова; иначе обнаруживается исключение определения, и операция подавляется.
Внешняя/Самая Внешняя Транзакция (Outer/Outermost Transaction): Транзакция с низшей величиной глубины вложения транзакций является внешней транзакцией. Транзакция с величиной глубины вложения транзакций, равной единице, является самой внешней транзакцией.
Самая внешняя НАЧАТЬ ТРАНЗАКЦИЮ является командой, которая выполняется, когда глубина вложения транзакций изначально равна нулю. Самая внешняя ЗАКОНЧИТЬ ТРАНЗАКЦИЮ является командой, которая вызывает переход глубины вложения транзакций от единицы к нулю. Вынужденная транзакция является самой внешней транзакцией в этом варианте.
Фильтрация Программного Прерывания (Program Interruption Filtering): Если транзакция сбрасывается из-за некоторых условий программного исключения, программа опционально может предотвращать вызов прерывания. Эта методика называется фильтрацией программного прерывания. Фильтрация программного прерывания управляется транзакционным классом прерывания, эффективной директивой программного прерывания из команды НАЧАТЬ ТРАНЗАКЦИЮ и переопределением фильтрации программного прерывания транзакционного выполнения в управляющем регистре 0.
Транзакция (Transaction): Транзакция включает обращения к операндам памяти и изменения выбранных регистров общего назначения, совершённые, когда процессор находится в режиме транзакционного выполнения. Для невынужденной транзакции обращения к операндам памяти могут включать как транзакционные обращения, так и нетранзакционные обращения. Для вынужденной транзакции обращения к операндам памяти ограничены транзакционными обращениями. С точки зрения других процессоров и подсистемы ввода-вывода, все обращения к операндам памяти, совершённые процессором в режиме транзакционного выполнения, выглядят как происходящие как единичная параллельная операция. Если транзакция сбрасывается, транзакционные обращения к памяти отбрасываются, а любые регистры, заданные маской сохранения регистров общего назначения (МСРОТ) самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ, восстанавливают содержимое на момент до выполнения транзакции.
Транзакционные Обращения (Transactional Accesses): Транзакционные обращения являются обращениями к операндам памяти, совершаемые, когда процессор находится в режиме транзакционного выполнения, за исключением обращений, совершённых командой НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ.
Режим Транзакционного Выполнения (Transactional Execution Mode): Термин "режим транзакционного выполнения" (он же режим выполнения транзакций) описывает общее функционирование обоих режимов невынужденного и вынужденного транзакционного выполнения. Поэтому при описании функционирования используются термины "невынужденный" и "вынужденный" для обозначения режима транзакционного выполнения.
Если глубина вложения транзакций равна нулю, процессор не находится в режиме транзакционного выполнения (эта ситуация называется также режимом нетранзакционного выполнения).
С точки зрения процессора, считывание и запись, совершённые в режиме транзакционного выполнения, не отличаются от совершённых не в режиме транзакционного выполнения.
В одном из вариантов z/Architecture средство транзакционного выполнения находится под управлением битов 8-9 управляющего регистра 0, битов 61-63 управляющего регистра 2, глубины вложения транзакций, адреса блока диагностики транзакций и слова состояния программы (PSW) сброса транзакции.
Сразу после начального обнуления процессора содержимое двоичных разрядов 8-9 управляющего регистра 0, двоичных разрядов 62-63 управляющего регистра 2 и глубина вложения транзакций устанавливаются в нуль. Если директива транзакционного выполнения, бит 8 управляющего регистра 0, равна нулю, процессор не может быть переведён в режим транзакционного выполнения.
Дальнейшие подробности касательно различных директив описываются ниже.
Как упоминалось, средство транзакционного выполнения управляется двумя битами в управляющем регистре нуль и тремя битами в управляющем регистре два. Например:
Биты Управляющего Регистра 0 (Control Register 0 Bits): Назначение битов следующее, в одном варианте:
Директива Транзакционного Выполнения (TXC): Бит 8 управляющего регистра нуль является директивой транзакционного выполнения. Этот бит предоставляет механизм, при помощи которого управляющая программа (например, операционная система) может выяснить, употребляется или нет программой средство транзакционного выполнения. Бит 8 должен быть равен единице для успешного входа в режим транзакционного выполнения.
Если бит 8 управляющего регистра 0 равен нулю, попытка выполнения команд ИЗВЛЕЧЬ ГЛУБИНУ ВЛОЖЕНИЯ ТРАНЗАКЦИЙ, НАЧАТЬ ТРАНЗАКЦИЮ и ЗАКОНЧИТЬ ТРАНЗАКЦИЮ вызывает выполнение специальной операции.
Один из вариантов формата команды ИЗВЛЕЧЬ ГЛУБИНУ ВЛОЖЕНИЯ ТРАНЗАКЦИЙ описан при помощи Фиг. 8. К примеру, команда ИЗВЛЕЧЬ ГЛУБИНУ ВЛОЖЕНИЯ ТРАНЗАКЦИЙ 800 включает поле кода операции 802, которое определяет код операции, которое обозначает операцию извлечения глубины вложения транзакций; и поле регистра R1 804, которое определяет регистр общего назначения.
Текущая глубина вложения транзакций помещается в биты 48-63 регистра общего назначения R1. Биты 0-31 регистра остаются неизменными, а биты 32-47 регистра устанавливаются в нуль.
В другом варианте максимальная глубина вложения транзакций также помещается в главный регистр R1, например в биты 16-31.
Переопределение Фильтрации Программного Прерывания Транзакционного Выполнения (PIFO): Бит 9 управляющего регистра нуль является переопределением фильтрации программного прерывания транзакционного выполнения. Этот бит предоставляет механизм, с помощью которого управляющая программа может убедиться, что любая ситуация программного исключения, которая происходит, когда процессор находится в режиме транзакционного выполнения, вызывает прерывание безотносительно к эффективной директиве фильтрации программного прерывания, определённой или подразумеваемой командой (командами) НАЧАТЬ ТРАНЗАКЦИЮ.
Биты Управляющего Регистра 2 (Control Register 2 Bits): Назначение битов следующее, в одном варианте:
Область Диагностики Транзакций (TDS): Бит 61 управляющего регистра 2 управляет применимостью директивы диагностики транзакций (transaction diagnosis control) (TDC) в битах 62-63 регистра следующим образом:
TDS
Директива Диагностики Транзакций (TDC): Биты 62-63 управляющего регистра 2 являются 2-разрядным целым числом без знака, которое может использоваться для вызова случайного сброса транзакций в диагностических целях. Кодировка TDC следующая, к примеру:
TDC
Если транзакция сбрасывается из-за ненулевого TDC, то может происходить что-то из следующего:
- Код сброса устанавливается в любой из кодов 7-11, 13-16 или 255, с величиной кода, случайно выбранной процессором; код состояния устанавливается соответствующим коду сброса. Коды сброса далее описываются ниже.
- Для невынужденной транзакции код состояния устанавливается равным единице. В этом случае код сброса не применяется.
Реализована ли величина TDC 1, зависит от модели. Если не реализована, величина 1 действует, как если бы было задано 2.
Для вынужденной транзакции величина TDC 1 обрабатывается, как если бы было задано 2.
Если задана величина TDC 3, результаты непредсказуемы.
Адрес Блока Диагностики Транзакций (Transaction Diagnostic Block Address) (TDBA)
Действительный адрес блока диагностики транзакций (TDBA) устанавливается из адреса первого операнда самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN), если поле B1 команды не нуль. Если процессор находится в режиме первичного пространства или регистра доступа, TDBA определяет положение в первичном пространстве адресов. Если процессор находится в режиме вторичного пространства или домашнего пространства, TDBA определяет положение во вторичном или домашнем пространстве адресов соответственно. Если DAT (Динамическая Трансляция Адресов) выключена, TDBA определяет положение в реальном запоминающем устройстве.
TDBA используется процессором для нахождения блока диагностики транзакций, называемого TDB, заданный TBEGIN, если транзакция впоследствии сбрасывается. Три самых правых бита TDBA равны нулю, что означает, что TDB, заданный TBEGIN, находится на границе двойного слова.
Если поле B1 самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN) равно нулю, адрес блока диагностики транзакций недействителен, и не сохраняется никаких TDB, заданных TBEGIN, если транзакция впоследствии сбрасывается.
PSW Сброса Транзакции (Transaction Abort PSW) (TAPSW)
Во время выполнения команды НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN), когда глубина вложения изначально нуль, PSW сброса транзакции устанавливается равным содержимому текущего PSW; а адрес команды PSW сброса транзакции определяет следующую последовательную команду (т.е. команду, следующую за самой внешней TBEGIN). Во время выполнения команды НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC), когда глубина вложения изначально нуль, PSW сброса транзакции устанавливается равным содержимому текущего PSW, кроме случаев, когда адрес команды PSW сброса транзакции определяет команду TBEGINC (а не следующую последовательную команду, следующую за TBEGINC).
Если транзакция сбрасывается, код состояния в PSW сброса транзакции заменяется кодом, обозначающим серьёзность состояния сброса. Впоследствии, если транзакция была сброшена из-за причин, которые не вызвали прерывание, PSW загружается из PSW сброса транзакции; если транзакция была сброшена из-за причин, которые вызвали прерывание, PSW сброса транзакции сохраняется как старое PSW прерывания.
PSW сброса транзакции не изменяется во время выполнения любой внутренней команды НАЧАТЬ ТРАНЗАКЦИЮ.
Глубина Вложения Транзакций (Transaction Nesting Depth) (TND)
Глубина вложения транзакций является, например, 16-разрядным числом без знака, которое увеличивается на единицу каждый раз, когда команда НАЧАТЬ ТРАНЗАКЦИЮ завершается с кодом состояния 0, и уменьшается на единицу, когда команда ЗАКОЧИТЬ ТРАНЗАКЦИЮ завершается. Глубина вложения транзакций возвращается в нуль, если транзакция сбрасывается, или обнулением процессора.
В одном из вариантов реализована максимальная TND 15.
В одной из реализаций, когда процессор находится в режиме вынужденного транзакционного выполнения, глубина вложения транзакций равна единице. Кроме того, хотя максимальная TND может быть представлена 4-битной величиной, TND определена 16-битной величиной для облегчения её проверки в блоке диагностики транзакций.
Блок Диагностики Транзакций (Transaction Diagnostic Block) (TDB)
Если транзакция сбрасывается, различная статусная информация может быть сохранена в блоке диагностики транзакций (TDB).
1. TDB, заданный TBEGIN (TBEGIN-specified TDB): Для невынужденной транзакции, если поле B1 самой внешней команды TBEGIN не нуль, адрес первого операнда команды определяет TDB, заданный TBEGIN. Это положение задается прикладной программой и может быть проверено обработчиком сброса приложения.
2. TDB Программного Прерывания (PI) (Program-Interruption (PI) TDB): Если невынужденная транзакция сбрасывается из-за неотфильтрованной ситуации программного исключения, или если вынужденная транзакция сбрасывается из-за любой ситуации программного исключения (т.е. любой ситуации, которая вызывает обнаружение программного прерывания), TDB PI сохраняется в ячейках в префиксной зоне. Он доступен для операционной системы для проверки и регистрации в любой диагностической отчетности, которую она может предоставлять.
3. TDB Перехвата (Interception TDB): Если транзакция сбрасывается из-за любой ситуации программного исключения, вызывающей перехват (т.е. ситуация вызывает прекращение интерпретационного выполнения и возврат управления к главной программе), TDB сохраняется в месте, определенном в блоке описания состояния для гостевой операционной системы.
TDB, заданный TBEGIN, сохраняется, в одном варианте, только если адрес TDB действителен (т.е. когда поле B1 самой внешней команды TBEGINC не нуль).
Для сбросов из-за ситуаций неотфильтрованного программного исключения будет сохранён лишь один из TDB PI или TDB Перехвата. Таким образом, могут сохраняться нуль, один или два TDB на один сброс.
Дальнейшие подробности касательно одного примера каждого из TDB описываются ниже.
TDB, заданный TBEGIN (TBEGIN-specified TDB): 256-байтная ячейка, заданная действительным адресом блока диагностики транзакций. Если адрес блока диагностики транзакций действителен, TDB, заданный TBEGIN, сохраняется при сбросе транзакции. TDB, заданный TBEGIN, подчиняется всем механизмам защиты памяти, которые действуют при выполнении самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ. Событие изменения памяти PER (Запись Программных Событий) для любой части TDB, заданного TBEGIN, обнаруживается во время выполнения самой внешней TBEGIN, но не во время обработки сброса транзакции.
Одной из целей PER является содействие отладке программ. Она позволяет предупреждать программу о следующих типах событий, к примеру:
- Выполнение успешной команды ветвления. Предоставляется опция наступления события только если положение цели ветвления находится в пределах заданной области памяти.
- Выборка команды из заданной области памяти.
- Изменение содержимого заданной области памяти. Предоставляется опция наступления события только если область памяти находится в пределах заданных пространств адресов.
- Выполнение команды СОХРАНИТЬ ПРИ ПОМОЩИ РЕАЛЬНОГО АДРЕСА (STORE USING REAL ADDRESS).
Выполнение команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ.
Программа может выборочно задать, чтобы распознавался один или более типов событий, за исключением того, что событие для СОХРАНИТЬ ПРИ ПОМОЩИ РЕАЛЬНОГО АДРЕСА может быть задано только вместе с событием изменения памяти. Информация касательно события PER предоставляется программе при помощи программного прерывания, с вызовом прерывания, идентифицируемого по коду прерывания.
Если адрес блока диагностики транзакций недействителен, TDB, заданный TBEGIN, не сохраняется.
TDB Программного Прерывания (Program-Interruption TDB): Реальное расположение 6144-6399 (шестнадцатеричные 1800-18FF). TDB программного прерывания сохраняется, если транзакция сбрасывается из-за программного прерывания. Если транзакция сбрасывается из-за других причин, содержимое TDB программного прерывания непредсказуемо.
TDB программного прерывания не подчиняется никакому механизму защиты. События изменения памяти PER не обнаруживаются для TDB программного прерывания, если он сохраняется во время программного прерывания.
TDB Перехвата (Interception TDB): Реальная 256-байтная ячейка главного компьютера, заданная ячейками 488-495 описания состояния. TDB перехвата сохраняется, когда сброшенная транзакция вызывает перехват прерывания гостевой программы (т.е. код перехвата 8). Если транзакция сбрасывается из-за других причин, содержимое TDB перехвата непредсказуемо. TDB перехвата не подчиняется никакому механизму защиты.
Как показано на Фиг. 9, поля блока диагностики транзакций 900 следующие, в одном варианте:
Формат 902: Байт 0 содержит обозначение действительности и формата, т.е.:
TDB, в котором поле формата равно нулю, называется нулевым TDB.
Флаги 904: Байт 1 содержит различные обозначения, т.е.:
Достоверность Маркера Конфликта (CTV):
Если транзакция сбрасывается из-за конфликта считывания или записи (т.е. коды сброса 9 или 10 соответственно), бит 0 байта 1 является обозначением достоверности маркера конфликта. Если обозначение CTV равно единице, маркер конфликта 910 в байтах 16-23 TDB содержит логический адрес, на котором был обнаружен конфликт. Если обозначение CTV равно нулю, биты 16-23 TDB непредсказуемы.
Если транзакция сбрасывается из-за любой причины, иной нежели конфликт считывания или записи, бит 0 байта 1 сохраняется как нуль.
Обозначение Вынужденной Транзакции (CTI): Если процессор находится в режиме вынужденного транзакционного выполнения, бит 1 байта 1 установлен равным единице. Если процессор находится в режиме невынужденного транзакционного выполнения, бит 1 байта 1 установлен равным нулю.
Зарезервировано: Биты 2-7 байта 1 зарезервированы и сохраняются равными нулю.
Глубина Вложения Транзакций (TND) 906: Байты 6-7 содержат глубину вложений транзакций, когда транзакция была сброшена.
Код Сброса Транзакции (TAC) 908: Байты 8-15 содержат 64-битный беззнаковый код сброса транзакции. Каждый пункт кода указывает причину, по которой транзакция сбрасывается.
Сохраняется ли код сброса транзакции в TDB программного прерывания, когда транзакция сбрасывается из-за причин, отличных от программного прерывания, зависит от модели.
Маркер Конфликта 910: Для транзакций, которые сбрасываются из-за конфликта считывания или записи (т.е. коды сброса 9 или 10 соответственно), байты 16-23 содержат логический адрес ячейки памяти, на которой был обнаружен конфликт. Маркер конфликта имеет смысл, если бит CTV, бит 0 байта 1, равен единице.
Если бит CTV равен нулю, биты 16-23 непредсказуемы.
Из-за упреждающего выполнения процессором маркер конфликта может задавать ячейку памяти, которая не обязательно будет достигнута в последовательности концептуального выполнения транзакции.
Адрес Команды Сброшенной Транзакции (ATIA) 912: Байты 24-31 содержат адрес команды, которая идентифицирует команду, которая выполнялась, когда был обнаружен сброс. Если транзакция сбрасывается из-за кодов сброса 2, 5, 6, 11, 13 или 256 и выше, или если транзакция сбрасывается из-за кодов сброса 4 или 13, а ситуация программного исключения обнуляет, ATIA указывает прямо на команду, которая выполнялась. Если транзакция сбрасывается из-за кодов сброса 4 или 12, а ситуация программного исключения не обнуляет, ATIA указывает после команды, которая выполнялась.
Если транзакция сбрасывается из-за кодов сброса 7-10, 14-16 или 255, ATIA не обязательно указывает на действительную команду, вызвавшую сброс, а может указывать на более раннюю или позднюю команду в пределах транзакции.
Если транзакция сбрасывается из-за команды, которая является целью команды исполнительного типа, ATIA идентифицирует команду исполнительного типа, указывая на эту команду или же после неё в зависимости от кода сброса, как описано выше. ATIA не указывает на цель команды исполнительного типа.
ATIA подчиняется режиму адресации, когда транзакция сбрасывается. В 24-битном режиме адресации биты 0-40 поля содержат нули. В 31-битном режиме адресации биты 0-32 поля содержат нули.
Сохраняется ли адрес команды сброшенной транзакции в TDB программного прерывания, когда транзакция сбрасывается из-за причин, отличных от программного прерывания, зависит от модели.
Если транзакция сбрасывается из-за кодов сброса 4 или 12, а ситуация программного исключения не обнуляет, ATIA не указывает на команду, вызвавшую сброс. Вычитая количество полуслов, определённое кодом длины прерывания (ILC), из ATIA, можно идентифицировать команду, вызвавшую сброс, в условиях, которые подавляют или обрывают, или для событий не-PER, которые завершаются. Если транзакция сбрасывается из-за события PER, и не присутствуют другие ситуации программного исключения, ATIA непредсказуем.
Если адрес блока диагностики транзакций действителен, ILC может быть проверен в идентификации программного прерывания (PIID) в байтах 36-39 TDB, заданного TBEGIN. Если фильтрация не применяется, ILC может быть проверен в PIID в ячейках 140-143 реальной памяти.
Идентификация Обращения Исключения (EAID) 914: Для транзакций, сброшенных из-за некоторых ситуаций фильтрованного программного исключения, байт 32 TDB, заданного TBEGIN, содержит идентификацию обращения исключения. В одном из примеров z/Architecture формат EAID и случаи, в которых она сохраняется, такие же, как описанные в реальной ячейке 160, когда ситуация исключения вызывает прерывание, как описано в выше включённых по ссылке "Принципах Работы".
Для транзакций, сброшенных по другим причинам, включая любые ситуации исключения, которые вызывают программное прерывание, байт 32 непредсказуем. Байт 32 непредсказуем в TDB программного прерывания.
Это поле сохраняется только в TDB, заданном адресом блока диагностики транзакций; иначе, это поле зарезервировано. EAID сохраняется только для ситуаций программного исключения защиты DAT или управляемой списком доступа, типа ASCE, трансляции страниц, трансляции региона первого, трансляции региона второго, трансляции региона третьего и трансляции сегментов.
Код Исключения Данных (Data Exception Code) (DXC) 916: Для транзакций, сброшенных из-за ситуаций программного исключения фильтрованного исключения данных, байт 33 TDB, заданного TBEGIN, содержит код исключения данных. В одном из примеров z/Architecture формат DXC и случаи, в которых он сохраняется, такие же, как описанные в реальной ячейке 147, когда ситуация исключения вызывает прерывание, как описано в выше включённых по ссылке "Принципах Работы". В одном из примеров ячейка 147 включает DXC.
Для транзакций, сброшенных по другим причинам, включая любые ситуации исключения, которые вызывают программное прерывание, байт 33 непредсказуем. Байт 33 непредсказуем в TDB программного прерывания.
Это поле сохраняется только в TDB, заданном адресом блока диагностики транзакций; иначе, это поле зарезервировано. DXC сохраняется только для ситуаций программного исключения данных.
Идентификация Программного Прерывания (Program Interruption Identification) (PIID) 918: Для транзакций, сброшенных из-за некоторых ситуаций фильтрованного программного исключения, байты 36-39 TDB, заданного TBEGINC, содержат идентификацию программного прерывания. В одном из примеров z/Architecture формат PIID и случаи, в которых она сохраняется, такие же, как описанные в реальных ячейках 140-143, когда ситуация исключения вызывает прерывание (как описано в выше включённых по ссылке "Принципах Работы"), кроме случая, когда код длины команды в битах 13-14 PIID соответствует команде, на которой была обнаружена ситуация исключения.
Для транзакций, сброшенных по другим причинам, включая любые ситуации исключения, которые вызывают программное прерывание, байты 36-39 непредсказуемы. Байты 36-39 непредсказуемы в TDB программного прерывания.
Это поле сохраняется только в TDB, заданном адресом блока диагностики транзакций; иначе, это поле зарезервировано. Идентификация программного прерывания сохраняется только для ситуаций программного исключения.
Идентификация Исключения Трансляции (TEID) 920: Для транзакций, сброшенных из-за любой из следующих ситуаций фильтрованного программного исключения, байты 40-47 TDB, заданного TBEGIN, содержат идентификацию исключения трансляции.
- Защита DAT или управляемая списком доступа
- Тип ASCE
- Трансляция страниц
- Трансляция региона первого
- Трансляция региона второго
- Трансляция региона третьего
- Исключение трансляции сегментов
В одном из примеров z/Architecture формат TEID и случаи, в которых она сохраняется, такие же, как описанные в реальных ячейках 168-175, когда ситуация исключения вызывает прерывание, как описано в выше включённых по ссылке "Принципах Работы".
Для транзакций, сброшенных по другим причинам, включая любые ситуации исключения, которые вызывают программное прерывание, байты 40-47 непредсказуемы. Байты 40-47 непредсказуемы в TDB программного прерывания.
Это поле сохраняется только в TDB, заданном адресом блока диагностики транзакций; иначе, это поле зарезервировано.
Адрес События Останова 922: Для транзакций, сброшенных из-за некоторых ситуаций фильтрованного программного исключения, байты 48-55 TDB, заданного TBEGIN, содержат адрес события останова. В одном из примеров z/Architecture формат адреса события останова такой же, как описанный в реальных ячейках 272-279, когда ситуация вызывает прерывание, как описано в выше включённых по ссылке "Принципах Работы".
Для транзакций, сброшенных по другим причинам, включая любые ситуации исключения, которые вызывают программное прерывание, байты 48-55 непредсказуемы. Байты 48-55 непредсказуемы в TDB программного прерывания.
Это поле сохраняется только в TDB, заданном адресом блока диагностики транзакций; иначе, это поле зарезервировано.
Дальнейшие подробности касательно событий останова описываются ниже.
В одном из вариантов z/Architecture, если установлено средство PER-3, оно предоставляет программе адрес последней команды, которая вызовет останов при последовательном выполнении процессором. Запись адреса события останова может использоваться как средство отладки для обнаружения неуправляемого ветвления. Это средство предоставляет, например, 64-битный регистр в процессоре, называемый регистром адреса события останова. Каждый раз, когда команда, отличная от СБРОСИТЬ ТРАНЗАКЦИЮ, вызывает останов последовательного выполнения команд (т.е. адрес команды в PSW замещается, а не увеличивается на длину команды), адрес этой команды помещается в регистр адреса события останова. Когда бы ни произошло программное прерывание, указана или нет PER, текущее содержимое регистра адреса события останова помещается в ячейки 272-279 реальной памяти.
Если команда, вызывающая событие останова, является целью команды исполнительного типа (ВЫПОЛНИТЬ или ВЫПОЛНИТЬ ОТНОСИТЕЛЬНО ДЛИННОЕ), то адрес команды, использованный для выборки команды исполнительного типа, помещается в регистр адреса события останова.
В одном из вариантов z/Architecture считается, что событие останова происходит всегда, когда одна из следующих команд вызывает ветвление: РАЗВЕТВИТЬ И СВЯЗАТЬ (BAL, BALR); РАЗВЕТВИТЬ И СОХРАНИТЬ (BAS, BASR); РАЗВЕТВИТЬ И СОХРАНИТЬ И УСТАНОВИТЬ РЕЖИМ (BASSM); РАЗВЕТВИТЬ И УСТАНОВИТЬ РЕЖИМ (BSM); РАЗВЕТВИТЬ И ПОМЕСТИТЬ В СТЕК (BAKR); РАЗВЕТВИТЬ ПО УСЛОВИЮ (BC, BCR); РАЗВЕТВИТЬ ПО СЧЁТЧИКУ (BCT, BCTR, BCTG, BCTGR); РАЗВЕТВИТЬ ПО ИНДЕКСУ ВЫШЕ (BXH, BXHG); РАЗВЕТВИТЬ ПО ИНДЕКСУ НИЖЕ ИЛИ РАВНО (BXLE, BXLEG); РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО УСЛОВИЮ (BRC); РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО УСЛОВИЮ ДЛИННОЕ (BRCL); РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО СЧЁТЧИКУ (BRCT, BRCTG); РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО ИНДЕКСУ ВЫШЕ (BRXH, BRXHG); РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО ИНДЕКСУ НИЖЕ ИЛИ РАВНО (BRXLE, BRXLG); СРАВНИТЬ И РАЗВЕТВИТЬ (CRB, CGRB); СРАВНИТЬ И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО (CRJ, CGRJ); СРАВНИТЬ НЕПОСРЕДСTВЕННО И РАЗВЕТВИТЬ (CIB, CGIB); СРАВНИТЬ НЕПОСРЕДСTВЕННО И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО (CIJ, CGIJ); СРАВНИТЬ ЛОГИЧЕСКИ И РАЗВЕТВИТЬ (CLRB, CLGRB); СРАВНИТЬ ЛОГИЧЕСКИ И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО (CLRJ, CLGRJ); СРАВНИТЬ ЛОГИЧЕСКИ НЕПОСРЕДСTВЕННО И РАЗВЕТВИТЬ (CLIB, CLGIB) и СРАВНИТЬ ЛОГИЧЕСКИ НЕПОСРЕДСTВЕННО И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО (CLIJ, CLGIJ).
Также считается, что событие останова происходит всегда, когда одна из следующих команд завершается: РАЗВЕТВИТЬ И УСТАНОВИТЬ ПОЛНОМОЧИЯ (BSA); РАЗВЕТВИТЬ В ПОДПРОСТРАНСTВЕННОЙ ГРУППЕ (BSG); РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО И СОХРАНИТЬ (BRAS); РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО И СОХРАНИТЬ ДЛИННОЕ (BRASL); ЗАГРУЗИТЬ PSW (LPSW); ЗАГРУЗИТЬ PSW РАСШИРЕННО (LPSWE); ВЫЗОВ ПРОГРАММЫ (PC); ВОЗВРАТ ПРОГРАММЫ (PR); ПЕРЕНОС ПРОГРАММЫ (PT); ПЕРЕНОС ПРОГРАММЫ С КОПИЕЙ (PTI); ПРОДОЛЖЕНИЕ ПРОГРАММЫ (RP) и ЛОВУШКА (TRAP2, TRAP4).
Не считается, что происходит событие останова в результате сброса транзакции (или неявно, или в результате команды СБРОСИТЬ ТРАНЗАКЦИЮ).
Диагностическая Информация, Зависящая от Модели 924: Байты 112-127 содержат диагностическую информацию, зависящую от модели.
Для всех кодов сброса, кроме 12 (фильтрованное программное прерывание), диагностическая информация, зависящая от модели, сохраняется в каждом TDB, который сохраняется.
В одном из вариантов диагностическая информация, зависящая от модели, включает следующее:
- Байты 112-119 содержат вектор из 64 бит, называемых индикаторами ветвления транзакционного выполнения (TXBI). Каждый из первых 63 бит вектора обозначает результаты выполнения команды ветвления, когда процессор находится в режиме транзакционного выполнения, т.е.:
Бит 0 представляет результат первой такой команды ветвления, бит 1 представляет результат второй такой команды ветвления, и так далее.
Если были выполнены менее чем 63 инструкции ветвления, пока процессор находился в режиме транзакционного выполнения, крайние правые биты, которые не соответствуют командам ветвления, устанавливаются в нули (включая бит 63). Если были выполнены более чем 63 команды ветвления, бит 63 TXBI устанавливается в единицу.
Биты в TXBI устанавливаются командами, способными вызывать событие останова, как перечислено выше, за исключением следующего:
- Любая недопустимая команда не вызывает установку бита в TXBI.
- Для команд, например, z/Architecture, если поле M1 команды РАЗВЕТВИТЬ ПО УСЛОВИЮ, РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО УСЛОВИЮ или РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО УСЛОВИЮ ДЛИННОЕ равно нулю, или если поле R2 следующей команды равно нулю, вызывает ли выполнение команды установку бита в TXBI, зависит от модели.
- РАЗВЕТВИТЬ И СВЯЗАТЬ (BALR); РАЗВЕТВИТЬ И СОХРАНИТЬ (BASR); РАЗВЕТВИТЬ И СОХРАНИТЬ И УСТАНОВИТЬ РЕЖИМ (BASSM); РАЗВЕТВИТЬ И УСТАНОВИТЬ РЕЖИМ (BSM); РАЗВЕТВИТЬ ПО УСЛОВИЮ (BCR) и РАЗВЕТВИТЬ ПО СЧЕТЧИКУ (BCTR, BCTGR)
- Для ситуаций сброса, которые были вызваны исключением доступа главного компьютера, двоичный разряд 0 байта 127 устанавливается в единицу. Для всех других ситуаций сброса двоичный разряд 0 байта 127 устанавливается в нуль.
- Для ситуаций сброса, которые были обнаружены устройством загрузки/сохранения (load/store unit) (LSU), пять крайних правых бит байта 127 содержат обозначение причины. Для ситуаций сброса, которые не были обнаружены LSU, байт 127 зарезервирован.
Регистры общего назначения 930: Байты 128-255 содержат содержимое регистров общего назначения 0-15 на момент, когда транзакция была сброшена. Регистры сохраняются в восходящем порядке, начиная с регистра общего назначения 0 в байтах 128-135, регистра общего назначения 1 в байтах 136-143, и так далее.
Зарезервировано: Все другие поля зарезервированы. Если не указано иное, содержимое зарезервированных полей непредсказуемо.
С точки зрения других процессоров и подсистемы ввода-вывода, сохранение TDB во время сброса транзакции является множественным обращением, происходящим после любых нетранзакционных сохранений.
Транзакция может быть сброшена из-за причин, которые находятся вне области непосредственной конфигурации, в которой она выполняется. Например, переходные процессы, обнаруженные гипервизором (таким как LPAR или z/VM), могут вызвать сброс транзакции.
Информация, предоставляемая в блоке диагностики транзакций, предназначена для диагностических целей и преимущественно верна. Однако, так как сброс может быть вызван событием вне области непосредственной конфигурации, информация, такая как код сброса или идентификация программного прерывания, может неточно отражать ситуацию внутри конфигурации и, таким образом, не должна использоваться для определения действия программы.
В дополнение к диагностической информации, сохраняющейся в TDB, если транзакция сбрасывается из-за любой ситуации программного исключения данных, а как директива регистра AFP, бит 45 управляющего регистра 0, так и эффективная директива разрешения операции с плавающей точкой (F) равны единице, код исключения данных (DXC) помещается в байт 2 управляющего регистра с плавающей точкой (FPC), безотносительно к тому, применяется ли фильтрация к ситуации программного исключения. Если транзакция сбрасывается, а одна или обе директива регистра AFP и эффективная директива разрешения операции с плавающей точкой равны нулю, DXC не помещается в FPC.
В одном из вариантов, как указано здесь, если установлено средство транзакционного выполнения, предоставляются следующие основные команды.
- ИЗВЛЕЧЬ ГЛУБИНУ ВЛОЖЕНИЯ ТРАНЗАКЦИЙ
- НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ
- СБРОСИТЬ ТРАНЗАКЦИЮ
- НАЧАТЬ ТРАНЗАКЦИЮ
- ЗАКОНЧИТЬ ТРАНЗАКЦИЮ
Если процессор находится в режиме транзакционного выполнения, попытка выполнения некоторых команд недопустима и вызывает сброс транзакции.
Возникшая в режиме вынужденного транзакционного выполнения попытка выполнения недопустимой команды также может привести к вынужденному программному прерыванию транзакции или может привести к продолжению выполнения, как если бы транзакция не была вынужденной.
В одном из примеров z/Architecture недопустимые команды включают, к примеру, следующие непривилегированные команды: СРАВНИТЬ И ОБМЕНЯТЬ И СОХРАНИТЬ; ИЗМЕНИТЬ ДИРЕКТИВЫ ИНСТРУМЕНТА СРЕДЫ ВЫПОЛНЕНИЯ; ОСУЩЕСTВИТЬ БЛОКИРОВАННУЮ ОПЕРАЦИЮ; ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ (ОТНОСИТЕЛЬНО ДЛИННОЕ), если код в поле M1 равен 6 или 7; СОХРАНИТЬ СИМВОЛЫ ПО МАСКЕ ВЫШЕ, если поле M3 равно нулю, а код в поле R1 равен 6 или 7; СОХРАНИТЬ СПИСОК СРЕДСTВ РАСШИРЕННО; СОХРАНИТЬ ДИРЕКТИВЫ ИНСТРУМЕНТА СРЕДЫ ВЫПОЛНЕНИЯ; ВЫЗОВ СУПЕРВИЗОРА и ПРОВЕРИТЬ ДИРЕКТИВЫ ИНСТРУМЕНТА СРЕДЫ ВЫПОЛНЕНИЯ.
В вышеприведённом списке, СРАВНИТЬ И ОБМЕНЯТЬ И СОХРАНИТЬ и ОСУЩЕСTВИТЬ БЛОКИРОВАННУЮ ОПЕРАЦИЮ являются сложными командами, которые могут быть реализованы более эффективно с помощью базовых команд в режиме TX. Случаи для ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ и ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ ОТНОСИТЕЛЬНО ДЛИННОЕ недопустимы, так как коды 6 и 7 возвращают строку кэша, требующую фиксации данных потенциально ранее, чем завершение транзакции. ВЫЗОВ СУПЕРВИЗОРА недопустим, так как он вызывает прерывание (которое вызывает сброс транзакции).
В ситуациях, перечисленных ниже, следующие команды недопустимы:
- РАЗВЕТВИТЬ И СВЯЗАТЬ (BALR); РАЗВЕТВИТЬ И СОХРАНИТЬ (BASR) и РАЗВЕТВИТЬ И СОХРАНИТЬ И УСТАНОВИТЬ РЕЖИМ, если поле R2 команды не нуль, а трассировка ветвления включена.
- РАЗВЕТВИТЬ И СОХРАНИТЬ И УСТАНОВИТЬ РЕЖИМ и РАЗВЕТВИТЬ И УСТАНОВИТЬ РЕЖИМ, если поле R2 команды не нуль, а трассировка режима включена; УСТАНОВИТЬ РЕЖИМ АДРЕСАЦИИ, если трассировка режима включена.
- ВЫЗОВ МОНИТОРА, если обнаружена ситуация события монитора.
Вышеприведённый список включает команды, которые могут создавать трассировочные сообщения. Если этим командам разрешено выполняться транзакционно и создавать трассировочные сообщения, и транзакция впоследствии сбрасывается, указатель трассировочной таблицы в управляющем регистре 12 передвинется, но записи в трассировочную таблицу будут отброшены. Это оставит несоответствующий провал в трассировочной таблице. Поэтому команды недопустимы в случаях, когда они будут создавать трассировочные сообщения.
Если процессор находится в режиме транзакционного выполнения, недопустимы ли следующие команды, зависит от модели: ЗАШИФРОВАТЬ СООБЩЕНИЕ; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ CFB; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ СЦЕПЛЕНИЯ; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ СЧЁТЧИКА; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ OFB; ВЫЗОВ СЖАТИЯ; ВЫЧИСЛИТЬ КОНТРОЛЬНУЮ СУММУ ПРОМЕЖУТОЧНОГО СООБЩЕНИЯ; ВЫЧИСЛИТЬ КОНТРОЛЬНУЮ СУММУ ПОСЛЕДНЕГО СООБЩЕНИЯ; ВЫЧИСЛИТЬ КОД АУТЕНТИФИКАЦИИ СООБЩЕНИЯ; ТРАНСЛИРОВАТЬ ЮНИКОД-16 В ЮНИКОД-32; ТРАНСЛИРОВАТЬ ЮНИКОД-16 В ЮНИКОД-8; ТРАНСЛИРОВАТЬ ЮНИКОД-32 В ЮНИКОД-16; ТРАНСЛИРОВАТЬ ЮНИКОД-32 В ЮНИКОД-8; ТРАНСЛИРОВАТЬ ЮНИКОД-8 В ЮНИКОД-16; ТРАНСЛИРОВАТЬ ЮНИКОД-8 В ЮНИКОД-32; ПРОИЗВЕСТИ КРИПТОГРАФИЧЕСКОЕ ВЫЧИСЛЕНИЕ; ВЫКЛЮЧИТЬ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ и ВКЛЮЧИТЬ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ.
Каждая из этих команд или в настоящее время реализуется аппаратным сопроцессором, или была в прошлых машинах и поэтому считается недопустимой.
Если эффективная директива разрешения изменения AR (A) равна нулю, недопустимы следующие команды: КОПИРОВАТЬ ДОСТУП; ЗАГРУЗИТЬ ДОСТУП МНОЖЕСTВЕННО; ЗАГРУЗИТЬ АДРЕС РАСШИРЕННО и УСТАНОВИТЬ ДОСТУП.
Каждая из вышеуказанных команд вызывает изменение содержимого регистра доступа. Если директива A в команде НАЧАТЬ ТРАНЗАКЦИЮ равна нулю, то программа явным образом указывает, что изменение регистра доступа не будет разрешено.
Если директива разрешения операции с плавающей точкой (F) равна нулю, недопустимы команды с плавающей точкой.
В определённых обстоятельствах могут быть недопустимы следующие команды: ИЗВЛЕЧЬ ВРЕМЯ ПРОЦЕССОРА; ИЗВЛЕЧЬ PSW; СОХРАНИТЬ СИНХРОНИЗАЦИЮ; СОХРАНИТЬ СИНХРОНИЗАЦИЮ РАСШИРЕННО и СОХРАНИТЬ СИНХРОНИЗАЦИЮ БЫСТРО.
Каждая из вышеуказанных команд подчиняется контролю перехвата в описании состояния интерпретационного выполнения. Если гипервизор установил контроль перехвата для этих команд, то их выполнение может быть продолжено из-за реализации гипервизора; поэтому они считаются недопустимыми, если происходит перехват.
Если невынужденная транзакция сбрасывается из-за попытки выполнения недопустимой команды, код сброса транзакции в блоке диагностики транзакций устанавливается в 11 (недопустимая команда), а код состояния устанавливается в 3, за исключением следующего: если невынужденная транзакция сбрасывается из-за попытки выполнения команды, которая иначе вызовет исключение привилегированной операции, нельзя предсказать, установится ли код сброса в 11 (недопустимая команда) или в 4 (нефильтрованное программное исключение в результате обнаружения программного исключения привилегированной операции). Если невынужденная транзакция сбрасывается из-за попытки выполнения команды ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ (ОТНОСИТЕЛЬНО ДЛИННОЕ), если код в поле M1 равен 6 или 7, или команды СОХРАНИТЬ СИМВОЛЫ ПО МАСКЕ ВЫШЕ, если поле M3 равно нулю, а код в поле R1 равен 6 или 7, нельзя предсказать, установится ли код сброса в 11 (недопустимая команда) или в 16 (кэш другое). Если невынужденная транзакция сбрасывается из-за попытки выполнения команды ВЫЗОВ МОНИТОРА и присутствует как ситуация события монитора, так и ситуация исключения определения, нельзя предсказать, установится ли код сброса в 11 или в 4 или, если программное прерывание отфильтровано, в 12.
При вынужденной транзакции могут быть недопустимы дополнительные команды. Хотя эти команды в настоящее время не определены как недопустимые при невынужденной транзакции, они могут быть недопустимы в определённых обстоятельствах при невынужденной транзакции на будущих процессорах.
Некоторые недопустимые команды могут быть разрешены в транзакционном выполнении на будущих процессорах. Таким образом, программа не должна полагаться на сброс транзакции из-за попытки выполнения недопустимой команды. Следует использовать команду СБРОСИТЬ ТРАНЗАКЦИЮ для надёжного вызова сброса транзакции.
В невынужденной транзакции программа должна обеспечить альтернативную нетранзакционную ветвь кода для размещения транзакции, которая сбрасывается из-за недопустимой команды.
Во время работы, если глубина вложения транзакций равна нулю, выполнение команды НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN) с нулевым результатом в коде состояния вызывает вход процессора в режим невынужденного транзакционного выполнения. Если глубина вложения транзакций равна нулю, выполнение команды НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC) с нулевым результатом в коде состояния вызывает вход процессора в режим вынужденного транзакционного выполнения.
Кроме случаев, где явно указано иное, все правила, которые применяются к нетранзакционному выполнению, применяются также к транзакционному выполнению. Ниже приводятся дополнительные характеристики обработки, когда процессор находится в режиме транзакционного выполнения.
Если процессор находится в режиме невынужденного транзакционного выполнения, выполнение команды НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN) с нулевым результатом в коде состояния вызывает продолжение работы процессора в режиме невынужденного транзакционного выполнения.
С точки зрения процессора считывание и запись, совершённые в режиме транзакционного выполнения, не отличаются от совершённых не в режиме транзакционного выполнения. С точки зрения других процессоров и подсистемы ввода-вывода все обращения к операндам памяти, совершённые процессором в режиме транзакционного выполнения, выглядят как единичное параллельное обращение. То есть, определено, что обращения ко всем байтам внутри полуслова, слова, двойного слова или четвертного слова выглядят блочно-параллельными с точки зрения других процессоров и программ ввода-вывода (например, канальных). Полуслово, слово, двойное слово или четвертное слово в этом разделе называются блоком. Если определено, что ссылка типа считывания выглядит параллельной внутри блока, не допускается обращение записи со стороны другого процессора или программы ввода-вывода во время считывания байтов, содержащихся в блоке. Если определено, что ссылка типа записи выглядит параллельной внутри блока, не допускается обращение как считывания, так и записи со стороны другого процессора или программы ввода-вывода во время записи байтов, содержащихся в блоке.
Обращения записи для команды и считывание таблиц DAT и ART (Таблица Регистров Доступа) следуют нетранзакционным правилам.
Процессор обычно выходит из режима транзакционного выполнения при помощи команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ, которая вызывает переход глубины вложения транзакций в нуль, в случае чего транзакция завершается.
Когда процессор выходит из режима транзакционного выполнения при помощи завершения команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ, все записи, совершённые в режиме транзакционного выполнения, фиксируются; т.е. запись выглядит как происходящая как единичная блочно-параллельная операция с точки зрения других процессоров и подсистемы ввода-вывода.
Транзакция может быть сброшена косвенно по множеству причин или сброшена явным образом по команде СБРОСИТЬ ТРАНЗАКЦИЮ. Примеры возможных причин сброса транзакции, соответствующий код сброса и код состояния, который помещается в PSW сброса транзакции, описываются ниже.
Внешнее Прерывание: Код сброса транзакции устанавливается в 2, и код состояния в PSW сброса транзакции устанавливается в 2. PSW сброса транзакции сохраняется как старое внешнее PSW как часть обработки внешнего прерывания.
Программное Прерывание (Нефильтрованное): Ситуация программного исключения, которая вызывает прерывание (т.е. неотфильтрованная ситуация), вызывает сброс транзакции с кодом 4. Код состояния в PSW сброса транзакции устанавливается специфический для кода программного прерывания. PSW сброса транзакции сохраняется как старое программное PSW как часть обработки программного прерывания.
Команда, которая иначе привела бы к сбросу транзакции из-за исключения операции, может приводить к изменчивым результатам: для невынужденной транзакции, транзакция вместо этого может сброситься с кодом сброса 11 (недопустимая команда); для вынужденной транзакции, может быть обнаружено вынужденное программное прерывание транзакции вместо исключения операции.
Если обнаруживается событие PER (Записи Программных Событий) вместе с любой другой неотфильтрованной ситуацией программного исключения, код состояния устанавливается в 3.
Прерывание Машинного Контроля: Код сброса транзакции устанавливается в 5, а код состояния в PSW сброса транзакции устанавливается в 2. PSW сброса транзакции сохраняется как старое PSW машинного контроля как часть обработки прерывания машинного контроля.
Прерывание Ввода-Вывода: Код сброса транзакции устанавливается в 6, а код состояния в PSW сброса транзакции устанавливается в 2. PSW сброса транзакции сохраняется как старое PSW ввода-вывода как часть обработки прерывания ввода-вывода.
Переполнение Считывания: Ситуация переполнения считывания обнаруживается, если транзакция пытается считывать из большего числа ячеек, чем поддерживается процессором. Код сброса транзакции устанавливается в 7, а код состояния устанавливается в 2 или 3.
Переполнение Записи: Ситуация переполнения записи обнаруживается, если транзакция пытается записать в большее число ячеек, чем поддерживается процессором. Код сброса транзакции устанавливается в 8, а код состояния устанавливается в 2 или 3.
Разрешение коду состояния быть 2 или 3 в ответ на сброс из-за переполнения считывания или записи позволяет процессору отмечать потенциально исправимые ситуации (например, код состояния 2 означает, что повторное выполнение транзакции может быть успешным; в то же время код состояния 3 не рекомендует повторное выполнение).
Конфликт Считывания: Ситуация конфликта считывания обнаруживается, если другой процессор или подсистема ввода-вывода пытается записать в ячейку, которая транзакционно считывается этим процессором. Код сброса транзакции устанавливается в 9, а код состояния устанавливается в 2.
Конфликт Записи: Ситуация конфликта записи обнаруживается, если другой процессор или подсистема ввода-вывода пытается обратиться к ячейке, в которую производится запись во время транзакционного выполнения этим процессором. Код сброса транзакции устанавливается в 10, а код состояния устанавливается в 2.
Недопустимая Команда: Если процессор находится в режиме транзакционного выполнения, попытка выполнения недопустимой команды вызывает сброс транзакции. Код сброса транзакции устанавливается в 11, а код состояния устанавливается в 3.
Если процессор находится в режиме вынужденного транзакционного выполнения, нельзя предсказать, вызовет ли попытка выполнения недопустимой команды вынужденное программное прерывание транзакции или сброс из-за недопустимой команды. Транзакция всё равно сбрасывается, но код сброса может указывать на любую из причин.
Ситуация Программного Исключения (Фильтрованная): Ситуация программного исключения, которая не вызывает прерывания (т.е. отфильтрованная ситуация), вызывает сброс транзакции с кодом сброса транзакции 12. Код состояния устанавливается в 3.
Превышение Глубины Вложения: Ситуация превышения глубины вложения обнаруживается, когда глубина вложения транзакций является максимально допустимой величиной для данной конфигурации, и выполняется команда НАЧАТЬ ТРАНЗАКЦИЮ. Транзакция сбрасывается с кодом сброса транзакции 13, а код состояния устанавливается в 3.
Ситуация, Связанная со Считыванием Кэша: Ситуация, связанная с ячейками памяти, считываемыми транзакцией, обнаруживается схемами кэша процессора. Транзакция сбрасывается с кодом сброса транзакции 14, а код состояния устанавливается в 2 или 3.
Ситуация, Связанная с Записью Кэша: Ситуация, связанная с ячейками памяти, записываемыми транзакцией, обнаруживается схемами кэша процессора. Транзакция сбрасывается с кодом сброса транзакции 15, а код состояния устанавливается в 2 или 3.
Другая Ситуация Кэша: Другая ситуация кэша обнаруживается схемами кэша процессора. Транзакция сбрасывается с кодом сброса транзакции 16, а код состояния устанавливается в 2 или 3.
Во время транзакционного выполнения, если процессор обращается к командам или операндам памяти, использующим различные логические адреса, которые отображаются на один и тот же абсолютный адрес, сбрасывается ли транзакция, зависит от модели. Если транзакция сбрасывается из-за обращений, использующих различные логические адреса, отображающиеся на один и тот же абсолютный адрес, устанавливается код сброса 14, 15 или 16 в зависимости от ситуации.
Разные Ситуации: Разные ситуации являются любыми другими ситуациями, обнаруженными процессором, которые вызывают сброс транзакции. Код сброса транзакции устанавливается в 255, а код состояния устанавливается в 2 или 3.
Если многие конфигурации выполняются на одной машине (например, логические разделы или виртуальные машины), транзакция может быть сброшена из-за внешнего прерывания машинного контроля или ввода-вывода, которое произошло в другой конфигурации.
Хотя выше приведены примеры, могут быть предусмотрены другие причины сброса транзакции с соответствующими кодами сброса и кодами состояния. Например, причиной может быть Прерывание Перезапуска, в котором код сброса транзакции устанавливается в 1, а код состояния в PSW сброса транзакции устанавливается в 2. PSW сброса транзакции сохраняется как старое PSW перезапуска как часть обработки перезапуска. В другом примере причиной может быть ситуация Вызова Супервизора, в которой код сброса устанавливается в 3, и код состояния в PSW сброса транзакции устанавливается в 3. Также возможны другие и разные примеры.
Примечания:
1. Разные ситуации могут вызываться любым из следующего:
- Команды, такие как, в z/Architecture, СРАВНИТЬ И ЗАМЕНИТЬ ПУНКТ ТАБЛИЦЫ DAT, СРАВНИТЬ И ОБМЕНЯТЬ И ОЧИСТИТЬ, АННУЛИРОВАТЬ ПУНКТ ТАБЛИЦЫ DAT, АННУЛИРОВАТЬ ПУНКТ ТАБЛИЦЫ СТРАНИЦ, ПРОИЗВЕСТИ ФУНКЦИЮ УПРАВЛЕНИЯ КАДРОМ, в которых директива NQ равна нулю, а директива SK равна единице, УСТАНОВИТЬ КЛЮЧ ХРАНЕНИЯ РАСШИРЕННО, в которой директива NQ равна нулю, выполняемые другим процессором в конфигурации; код состояния устанавливается в 2.
- Операторная функция, такая как перезагрузка, перезапуск или остановка, или порядка, эквивалентного СИГНАЛИЗИРОВАТЬ ПРОЦЕССОРУ, выполняется на процессоре.
- Любая другая ситуация, не перечисленная выше; код состояния устанавливается в 2 или 3.
2. Ячейка, в которой обнаруживаются конфликты считывания и записи, может быть в любом месте в одной и той же строке кэша.
3. При определенных условиях процессор может быть неспособен различить похожие ситуации сброса. Например, переполнение считывания или записи может быть неотличимо от соответствующего конфликта считывания или записи.
4. Упреждающее выполнение множественных командных потоков процессором может вызвать сбрасывание транзакции из-за ситуации конфликта или переполнения, даже если такие ситуации не возникают в концептуальной последовательности. Находясь в режиме вынужденного транзакционного выполнения, процессор может временно тормозить упреждающее выполнение, разрешая транзакциям попытки завершиться без обнаружения таких конфликтов или переполнений с упреждением.
Выполнение команды СБРОСИТЬ ТРАНЗАКЦИЮ вызывает сброс транзакции. Код сброса транзакции устанавливается из адреса второго операнда. Код состояния устанавливается 2 или 3 в зависимости от того, равен ли бит 63 адреса второго операнда нулю или единице соответственно.
На Фиг. 10 обобщены примерные коды сброса, сохраняемые в блоке диагностики транзакций, и соответствующие коды состояния (CC). Описание на Фиг. 10 иллюстрирует одну частную реализацию. Возможны другие реализации и кодировки величин.
В одном из вариантов, и как упоминалось выше, транзакционное средство обеспечивает вынужденные транзакции и связанную с ними обработку.
Вынужденная транзакция выполняется в транзакционном режиме без пути отката. Этот режим обработки полезен для компактных функций. Дополнительные детали, касающиеся вынужденных транзакций, описаны ниже.
В отсутствие повторяющихся прерываний или конфликтов с другими процессорами или подсистемой ввода-вывода (например, вызванных ситуациями, которые не позволят транзакции завершиться успешно) вынужденная транзакция в итоге завершается; таким образом, не требуется и не определена подпрограмма-обработчик сброса. Например, в отсутствие нарушения условия, которое не может быть разрешено (например, деление на 0); ситуации, которая не позволяет транзакции завершиться (например, прерывание таймера, которое не позволяет команде запуститься; горячий ввод-вывод и т.п.); или нарушения ограничения или препятствия, связанного с вынужденной транзакцией, транзакция в итоге завершится.
Вынужденная транзакция запускается командой НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC), когда глубина вложения транзакций изначально равна нулю. Вынужденная транзакция подчиняется следующим ограничениям, в одном из вариантов.
1. Транзакция выполняет не более 32 команд, не включая команды НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC) и ЗАКОНЧИТЬ ТРАНЗАКЦИЮ.
2. Все команды в транзакции должны быть в пределах 256 непрерывных байт памяти, включая команды НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC) и ЗАКОНЧИТЬ ТРАНЗАКЦИЮ.
3. Кроме недопустимых команд к вынужденной транзакции применяются следующие ограничения:
а. Команды ограничиваются теми, что называются Основными Командами, включая, например, сложить, вычесть, умножить, разделить, сдвинуть, циклически сдвинуть и т.д.
б. Команды ветвления ограничены следующими (перечислены команды для z/Architecture, в одном примере):
- РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО УСЛОВИЮ, в которой M1 не нуль, а поле RI2 содержит положительное значение.
- РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО УСЛОВИЮ ДЛИННОЕ, в которой поле M1 не нуль, а поле RI2 содержит положительное значение, которое не вызывает циклического возврата адреса.
- СРАВНИТЬ И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО, СРАВНИТЬ НЕПОСРЕДСТВЕННО И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО, СРАВНИТЬ ЛОГИЧЕСКИ И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО и СРАВНИТЬ ЛОГИЧЕСКИ НЕПОСРЕДСТВЕННО И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО, в которых поле М3 не нуль, а поле RI4 содержит положительное значение (т.е. только прямые ветвления с ненулевой маской ветвления).
в. За исключением ЗАКОНЧИТЬ ТРАНЗАКЦИЮ и команд, которые вызывают заданную сериализацию операндов, команды, которые вызывают функцию сериализации, недопустимы.
г. Команды операций сохранения-и-сохранения (СС-) и операций сохранения-и-сохранения с расширенным операционным кодом (ССР-) недопустимы.
д. Все следующие основные команды (для z/Architecture в этом примере) недопустимы: ПРОВЕРИТЬ СУММУ; ЗАШИФРОВАТЬ СООБЩЕНИЕ; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ СFВ; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ СЦЕПЛЕНИЯ; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ СЧЕТЧИКА; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ OFB; СРАВНИТЬ И СОЗДАТЬ КОДОВОЕ СЛОВО; СРАВНИТЬ ЛОГИЧЕСКИ ДЛИННОЕ; СРАВНИТЬ ЛОГИЧЕСКИ ДЛИННОЕ РАСШИРЕННО; СРАВНИТЬ ЛОГИЧЕСКИ ДЛИННОЕ ЮНИКОД; СРАВНИТЬ ЛОГИЧЕСКИ СТРОКУ; СРАВНИТЬ ПОКА ПОДСТРОКА НЕ РАВНА; ВЫЗОВ СЖАТИЯ; ВЫЧИСЛИТЬ КОНТРОЛЬНУЮ СУММУ НЕПОСРЕДСТВЕННОГО СООБЩЕНИЯ; ВЫЧИСЛИТЬ КОНТРОЛЬНУЮ СУММУ ПОСЛЕДНЕГО СООБЩЕНИЯ; ВЫЧИСЛИТЬ КОД АУТЕНТИФИКАЦИИ СООБЩЕНИЯ; ТРАНСЛИРОВАТЬ В ДВОИЧНОЕ; ТРАНСЛИРОВАТЬ В ДЕСЯТИЧНОЕ; ТРАНСЛИРОВАТЬ ЮНИКОД-16 В ЮНИКОД-32; ТРАНСЛИРОВАТЬ ЮНИКОД-16 В ЮНИКОД-8; ТРАНСЛИРОВАТЬ ЮНИКОД-32 В ЮНИКОД-16; ТРАНСЛИРОВАТЬ ЮНИКОД-32 В ЮНИКОД-8; ТРАНСЛИРОВАТЬ ЮНИКОД-8 В ЮНИКОД-16; ТРАНСЛИРОВАТЬ ЮНИКОД-8 В ЮНИКОД-32; РАЗДЕЛИТЬ; РАЗДЕЛИТЬ ЛОГИЧЕСКИ; РАЗДЕЛИТЬ ОДНОКРАТНО; ВЫПОЛНИТЬ; ВЫПОЛНИТЬ ОТНОСИТЕЛЬНО ДЛИННОЕ; ИЗВЛЕЧЬ АТРИБУТ КЭША; ИЗВЛЕЧЬ ВРЕМЯ ПРОЦЕССОРА; ИЗВЛЕЧЬ PSW; ИЗВЛЕЧЬ ГЛУБИНУ ВЛОЖЕНИЯ ТРАНЗАКЦИЙ; ЗАГРУЗИТЬ И СЛОЖИТЬ; ЗАГРУЗИТЬ И СЛОЖИТЬ ЛОГИЧЕСКИ; ЗАГРУЗИТЬ И И; ЗАГРУЗИТЬ И ИСКЛЮЧАЮЩЕЕ ИЛИ; ЗАГРУЗИТЬ И ИЛИ; ЗАГРУЗИТЬ ПАРУ НЕПЕРЕСЕКАЮЩУЮСЯ; ЗАГРУЗИТЬ ПАРУ ИЗ ЧЕТВЕРТНОГО СЛОВА; ВЫЗОВ МОНИТОРА; ПЕРЕМЕСТИТЬ ДЛИННОЕ; ПЕРЕМЕСТИТЬ ДЛИННОЕ РАСШИРЕННО; ПЕРЕМЕСТИТЬ ДЛИННОЕ ЮНИКОД; ПЕРЕМЕСТИТЬ СТРОКУ; НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ; ПРОИЗВЕСТИ КРИПТОГРАФИЧЕСКОЕ ВЫЧИСЛЕНИЕ; ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ; ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ ОТНОСИТЕЛЬНО ДЛИННОЕ; ГЕНЕРИРОВАТЬ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ; СЛЕДУЮЩИЙ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ; ВЫКЛЮЧИТЬ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ; ВКЛЮЧИТЬ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ; НАЙТИ СТРОКУ; НАЙТИ; СТРОКА ЮНИКОДА; УСТАНОВИТЬ РЕЖИМ АДРЕСАЦИИ; СОХРАНИТЬ СИМВОЛЫ ПО МАСКЕ ВЫШЕ, если поле М3 нуль, а код в поле Ri равен 6 или 7; СОХРАНИТЬ СИНХРОНИЗАЦИЮ; СОХРАНИТЬ СИНХРОНИЗАЦИЮ РАСШИРЕННО; СОХРАНИТЬ СИНХРОНИЗАЦИЮ БЫСТРО; СОХРАНИТЬ СПИСОК СРЕДСТВ РАСШИРЕНО; СОХРАНИТЬ ПАРУ В ЧЕТВЕРТНОМ СЛОВЕ; ПРОВЕРИТЬ РЕЖИМ АДРЕСАЦИИ; СБРОСИТЬ ТРАНЗАКЦИЮ; НАЧАТЬ ТРАНЗАКЦИЮ (обе TBEGIN и TBEGINC); ТРАНСЛИРОВАТЬ И ПРОВЕРИТЬ РАСШИРЕННО; ТРАНСЛИРОВАТЬ И ПРОВЕРИТЬ РЕВЕРСИВНО РАСШИРЕННО; ТРАНСЛИРОВАТЬ РАСШИРЕННО; ТРАНСЛИРОВАТЬ ОДИН К ОДНОМУ; ТРАНСЛИРОВАТЬ ОДИН К ДВУМ; ТРАНСЛИРОВАТЬ ДВА К ОДНОМУ и ТРАНСЛИРОВАТЬ ДВА К ДВУМ.
4. Операнды памяти транзакции имеют доступ не более чем к четырём восьмерным словам. Примечание: ЗАГРУЗИТЬ ПО УСЛОВИЮ и СОХРАНИТЬ ПО УСЛОВИЮ относятся к стандартной памяти независимо от кода состояния. Восьмерное слово является, например, группой из 32 последовательных байт на 32-байтной границе.
5. Транзакция, выполняющаяся на этом процессоре, или записи других процессоров или подсистемы ввода-вывода не имеют доступа к операндам памяти в любом 4-килобайтном блоке, который содержит 256 байт памяти, начиная с команды НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC).
6. Транзакция не имеет доступа к командам или операндам памяти, использующим различные логические адреса, которые отображаются на один и тот же абсолютный адрес.
7. Обращения к операндам, совершённые транзакцией, должны быть в пределах единого двойного слова за исключением того, что для ЗАГРУЗИТЬ ДОСТУП МНОЖЕСTВЕННО, ЗАГРУЗИТЬ МНОЖЕСTВЕННО, ЗАНРУЗИТЬ МНОЖЕСTВЕННО ВЫШЕ, СОХРАНИТЬ ДОСТУП МНОЖЕСTВЕННО, СОХРАНИТЬ МНОЖЕСTВЕННО и СОХРАНИТЬ МНОЖЕСTВЕННО ВЫШЕ обращения к операндам должны быть в пределах единого восьмерного слова.
Если вынужденная транзакция нарушает любое из ограничений 1-7, перечисленных выше, то или (а) обнаруживается вынужденное программное прерывание транзакции, или (б) выполнение продолжается, как если бы транзакция не была вынужденной, за исключением того, что дальнейшие нарушения ограничений всё ещё могут вызвать вынужденное программное прерывание транзакции. Нельзя предсказать, какое действие будет предпринято, и предпринятые действия могут отличаться в зависимости от того, какое ограничение нарушено.
В отсутствие нарушений ограничений, повторяющихся прерываний или конфликтов с другими процессорами и подсистемой ввода-вывода вынужденная транзакция в итоге завершится как описано выше.
1. Вероятность успешного завершения вынужденной транзакции повышается, если транзакция удовлетворяет следующим критериям:
а. Полученных инструкций меньше, чем максимальное число 32.
б. Обращений к операндам памяти меньше, чем максимальное число 4 восьмерных слова.
в. Обращения к операндам памяти находятся в одной и той же строке кэша.
г. Обращения к операндам памяти в одних и тех же ячейках происходят в одном и том же порядке во всех транзакциях.
2. Вынужденная транзакция не обязательно гарантированно успешно завершается при ее первом выполнении. Однако, если вынужденная транзакция, которая не нарушает ни одного из перечисленных ограничений, сбрасывается, процессор задействует схемы для гарантирования того, чтобы повторное выполнение транзакции было впоследствии успешным.
3. Внутри вынужденной транзакции НАЧАТЬ ТРАНЗАКЦИЮ является недопустимой командой, поэтому вынужденная транзакция не может быть вложенной.
4. Нарушение любого из ограничений 1-7 выше вынужденной транзакцией может привести к зацикливанию программы.
5. Ограничения вынужденной транзакции схожи с ограничениями цикла сравнить-и-обменять. Из-за возможности помех со стороны других процессоров и подсистемы ввода-вывода нет архитектурной гарантии, что команда СРАВНИТЬ И ОБМЕНЯТЬ всегда будет завершаться с кодом состояния 0. Вынужденная транзакция может страдать от подобных помех в виде сбросов из-за конфликта считывания или записи, или горячих прерываний.
Процессор задействует алгоритмы равного доступа для гарантирования того, что в отсутствие любых нарушений ограничения вынужденная транзакция в итоге завершается.
6. Для того чтобы определить число повторных итераций, необходимых для завершения вынужденной транзакции, программа может задействовать счетчик в регистре общего назначения, который не подчиняется маске сохранения регистров общего назначения. Пример показан ниже.
Отметим, что оба регистра 14 и 15 не восстанавливаются в этом примере. Также отметим, что на некоторых моделях счёт в регистре общего назначения 15 может быть низким, если процессор обнаруживает ситуацию сброса сразу после завершения команды TBEGINC, но до завершения команды AHI.
С точки зрения процессора считывание и запись, совершённые в режиме транзакционного выполнения, не отличаются от совершённых не в режиме транзакционного выполнения.
В одном из вариантов пользователь (т.е. создающий транзакцию) выбирает, будет ли транзакция вынужденной или нет. Одно воплощение логики, используемое для выполнения такого определения, описывается при помощи Фиг. 11. Сначала пользователь рассматривает, будет ли транзакция вынужденной, ШАГ 1100. Например, пользователь решает, будут ли приемлемыми ограничения, связанные с вынужденными транзакциями. Если это так, ЗАПРОС 1102, то создается вынужденная транзакция, ШАГ 1104. Что предусматривает применение команды TBEGINC для того, чтобы начать вынужденную транзакцию, включение одной или более команд после команды TBEGINC и завершение транзакции с помощью TEND. В противном случае, если вынужденная транзакция не должна создаваться, то, в одном варианте воплощения, создается невынужденная транзакция, ШАГ 1106. Что предусматривает применение команды TBEGIN для того, чтобы начать невынужденную транзакцию, включение одной или более команд и завершение транзакции с помощью TEND.
В дополнительном воплощении изобретения, процессор дает рекомендацию пользователю, относительно того должна ли быть использована вынужденная транзакция. Рекомендация основывается на сохраненных правилах ограничения (например, ограничения) доступных процессору. Например, процессор обращается к правилам и определяет, все ли ограничения являются приемлемыми. Если это так, то процессор рекомендует вынужденную транзакцию, в противном случае рекомендуется невынужденная транзакция.
Обзор обработки сброса, ассоциированного с транзакциями, описан со ссылкой на Фиг. 12. Первоначально процессор получает (например, выбирает, получает, и т. д.) транзакцию (например, TBEGIN или TBEGINC), ШАГ 1200, после этого процессором производится определение, является ли транзакция вынужденной, ЗАПРОС 1202. Например, определение того, является ли код операции команды инициирующей транзакцию (или другая область команды, в другом варианте воплощения) определяющим транзакцию TBEGINC. Если это так, то указанная транзакция обрабатывается как вынужденная транзакция, ШАГ 1204. Для вынужденной транзакции PSW сброса транзакции устанавливается, чтобы указывать на команду TBEGINC, которая начала транзакцию. Тогда при достижении ситуация сброса, ЗАПРОС 1206, управление передается на это PSW, которое указывает на команду TBEGINC, и код состояния устанавливается для указания, является ли состояние потенциально восстановимым или нет. Для вынужденной транзакции обработчик сброса не вызывается (кроме возвращения на TBEGINC), а вместо этого обработка продолжается с повторного выполнения команды TBEGINC. Если ситуация сброса не будет достигнута, в одном варианте воплощения, транзакция завершается по команде TRANSACTION END.
Однако, если транзакция не является ограниченной, ЗАПРОС 1202, то транзакция обрабатывается как невынужденная транзакция, ШАГ 1208. Для невынужденной транзакции, PSW сброса транзакции устанавливается, чтобы указывать на команду, следующую после команды TBEGIN. Предполагаемым использованием для невынужденной транзакции является то, что команда после TBEGIN будет командой перехода, которая передаст управление какому либо обработчику сброса, если код состояния отличается от нуля. Таким образом, если достигается ситуация сброса, ЗАПРОС 1210, то для невынужденной транзакции, обработка переходит на команду за командой TBEGIN, ШАГ 1212. В противном случае, обработка завершается по команде TRANSACTION END.
В еще одном варианте воплощения, производятся дополнительные проверки для определения того, должна ли транзакция обрабатываться как вынужденная транзакция. Например, если код операции указывает, что это вынужденная транзакция, но она является вложенной транзакцией, то в одном варианте осуществления транзакция выполняется как невынужденная транзакция. Также могут быть сделаны другие проверки.
Дополнительные детали, касающиеся обработки вынужденных транзакций и, в частности, обработки, связанной с командой TBEGINC, описаны при помощи Фиг. 13. Выполнение команды TBEGINC вызывает вход процессора в режим вынужденного транзакционного выполнения или продолжение в режиме невынужденного выполнения. ЦП (т.е. процессор), выполняющий TBEGINC, следует логике Фиг. 13.
Согласно Фиг. 13, на основе выполнения команды TBEGINC, исполняется функция сериализации, ШАГ 1300. Функция или операция сериализации включает завершение всех концептуально предшествующих обращений к памяти (и, для z/Architecture, к примеру, установление соответствующих бита ссылки и бита изменения) процессором, с точки зрения других процессоров и подсистемы ввода-вывода, до того как происходят концептуально последующие обращения к памяти (и установление соответствующих бита ссылки и бита изменения). Сериализация затрагивает последовательность всех обращений процессора к памяти и к ключам памяти за исключением связанных со считыванием пункта таблицы ARТ и пункта таблицы DAT.
С точки зрения процессора в режиме транзакционного выполнения сериализация работает нормально (как описано ниже). С точки зрения других процессоров и подсистемы ввода-вывода операция сериализации, исполняющаяся, когда процессор находится в режиме транзакционного выполнения, происходит, когда процессор выходит из режима транзакционного выполнения, либо в результате команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ, которая вызывает снижение глубины вложения транзакций до нуля (нормальное окончание), либо в результате сброса транзакции.
Вслед за осуществлением сериализации выполняется определение, обнаружено ли исключение, ЗАПРОС 1302. Если так, исключение обрабатывается, ШАГ 1304. Например, обнаруживается исключение специальной операции, и операция подавляется, если директива транзакционного выполнения, бит 8 управляющего регистра 0, равна 0. В других примерах обнаруживается исключение определения, и операция подавляется, если поле B1, биты 16-19 команды, не нуль; обнаруживается исключение выполнения, и операция подавляется, если TBEGINC является целью команды исполнительного типа; и обнаруживается исключение операции, и операция подавляется, если средство выполнения транзакции не установлено в данной конфигурации. Если процессор уже находится в режиме вынужденного транзакционного выполнения, то обнаруживается программное исключение исключения ограничения транзакции, и операция подавляется. Далее, если глубина вложения транзакций, будучи увеличена на 1, превысит зависящую от модели максимальную глубину вложения транзакций, транзакция сбрасывается с кодом сброса 13. Могут обнаруживаться и обрабатываться другие и разные исключения.
Однако, если нет исключения, выполняется определение, равна ли глубина вложения транзакций нулю, ЗАПРОС 1306. Если глубина вложения транзакций равна нулю, то адрес блока диагностики транзакций считается недействительным, ШАГ 1308; PSW сброса транзакции устанавливается из содержимого текущего PSW за исключением того, что адрес команды PSW сброса транзакции определяет команду TBEGINC, а не следующую последовательную команду, ШАГ 1310; а содержимое пар регистров общего назначения, как определено маской сохранения регистров общего назначения, сохраняется в зависящем от модели месте, которое недоступно программе напрямую, ШАГ 1312. Далее, глубина вложения устанавливается в 1, ШАГ 1314. Кроме того, эффективная величина разрешения операции с плавающей точкой (F) и директивы фильтрации программного прерывания (PIFC) устанавливаются в нуль, ШАГ 1316. Далее, определяется эффективная величина директивы разрешения изменения AR (A), поле бита 12 поля I2 команды, ШАГ 1318. Например, эффективная директива A является логическим И (AND) директивы A в команде TBEGINC для текущего уровня и для любых внешних команд TBEGIN.
Возвращаясь к ЗАПРОСУ 1306, если глубина вложения транзакций больше, чем нуль, то глубина вложения увеличивается на 1, ШАГ 1320. Далее, эффективная величина разрешения операции с плавающей точкой (F) устанавливается в нуль, а эффективная величина директивы фильтрации программного прерывания (PIFC) не изменяется, ШАГ 1322. Потом обработка продолжается с ШАГА 1318. В одном из вариантов успешный запуск транзакции приводит к коду состояния 0. Этим заканчивается один из вариантов логики, связанной с выполнением команды TBEGINC.
В одном из вариантов проверка исключения, предусмотренная выше, может происходить в ином порядке. Один из отдельных порядков проверки исключения следующий:
Исключения с таким же приоритетом, что и приоритет ситуаций программного прерывания, в общем случае.
Исключение определения из-за поля B1, содержащего ненулевое значение.
Сброс из-за превышения глубины вложения транзакций.
Код состояния 0 из-за нормального завершения.
Дополнительно, в одном или более вариантах применяется следующее:
1. Регистры, определенные к сохранению маской сохранения регистров общего назначения, восстанавливаются только если транзакция сбрасывается, а не тогда, когда транзакция заканчивается нормально при помощи ЗАКОНЧИТЬ ТРАНЗАКЦИЮ. Только регистры, определенные GRSM самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ, восстанавливаются при сбросе.
Поле I2 должно определить все пары регистров, которые предоставляют входные значения, которые изменяются в вынужденной транзакции. Таким образом, если транзакция сбрасывается, входные значения регистров будут восстановлены к их изначальному содержимому, когда вынужденная транзакция выполняется повторно.
2. На большинстве моделей можно реализовать улучшение производительности как в НАЧАТЬ ТРАНЗАКЦИЮ, так и при сбросе транзакции, задав минимальное число регистров, которые должны сохраняться и восстанавливаться в маске сохранения регистров общего назначения.
3. Следующее иллюстрирует результаты команды НАЧАТЬ ТРАНЗАКЦИЮ (обоих TBEGIN и TBEGINC) на основе текущей глубины вложения транзакций (TND) и, если TND не нуль, нахождения процессора в режиме невынужденного или вынужденного транзакционного выполнения:
Как описано здесь, в соответствии с одним аспектом, вынужденная транзакция гарантированно выполняется при условии, что она не содержит условия, которое делает её неспособной завершиться. Для обеспечения её завершения процессор (например, ЦП), выполняющий транзакцию, может предпринять некоторые действия. Например, если у вынужденной транзакции ситуация сброса, процессор может временно:
(а) приостановить выполнение с изменением последовательности;
(б) приостановить доступ других процессоров к конфликтующим ячейкам памяти;
(в) вызвать случайные задержки в обработке сброса; и/или
(г) вызвать другие средства для облегчения успешного завершения.
Дальнейшие подробности касательно обработки, связанные с выполнением действий по содействию завершению вынужденной транзакции описаны при помощи Фиг. 14.
Изначально процессор выполняет вынужденную транзакцию, которая начинается командой TBEGINC, ШАГ 1400. В случае, если встречается ситуация сброса, которая не приводит к прерыванию, ЗАПРОС 1402, то процессор, необязательно, (например, в зависимости от количества сбросов и / или причин для сброса) выполняет одно или несколько действий, как описано здесь, чтобы обеспечить завершение, ШАГ 1404. Кроме того, процессор повторно выполняет команду TBEGINC, ШАГ 1406, и обработка продолжается с ШАГА 1400.
Возвращение к ЗАПРОСУ 1402, если ситуация сброса отсутствует или присутствует ситуация сброса, приводящая к прерыванию, после этого обработка продолжается, пока не будет достигнуто завершение транзакции (например, TEND) или прерывание, ЗАПРОС 1408. В случае прерывания, процессор загружает PSW, связанное с типом прерывания. Основываясь на завершении или прерывании, транзакция завершается; в противном случае он продолжает обработку.
В одном варианте воплощение, решение о том, выполнять ли действие, когда транзакция сбрасывается и/или выбор действий, которые необходимо выполнить, основывается на значении счетчика сбросов, который обеспечивает счёт того, как часто транзакция сбрасывалась.
Счётчик увеличивает счёт каждый раз, когда транзакция сбрасывается, и переустанавливается в нуль при успешном завершении транзакции или прерывании, приводящему к прекращению повторных выполнений транзакции. Если счёт достигает порогового значения (например, 63 раза), то представляется прерывание, выполнение транзакции безуспешно, и счётчик переустанавливается. Однако перед тем как счёт достигнет порога можно предпринять ряд действий для повышения шансов на успешное выполнение транзакции. Эти действия включают действия, требующие выполнения внутри процессора, выполняющего транзакцию, и/или действия, требующие выполнения против конфликтующих процессоров (ЦП).
Внутри одного и того же процессора могут быть предприняты одно или более следующих действий в зависимости от счёта сбросов и критериев выбора для действий, имеющий одинаковый или перекрывающийся счёт сбросов: повторное выполнение транзакции (счёт 1-3); отключение предсказания ветвления через, например, переключатель (счёт 8-20); отключение упреждающего считывания команд за границей строки кэша текущей команды, которое достигается, в одном примере, посредством разрешения команде, пересекающей границу строки кэша, считываться только когда выход конвейера пуст (счёт 8-20); отключение суперскалярной диспетчеризации через, например, переключатель (счёт 8-20); отключение внеочередного выполнения через, например, переключатель (счёт 8-20); считывание всех непопаданий в кэш исключительно, даже для запросов только для чтения (счёт 8-20); выполнение одной команды за раз через весь конвейер (счёт 21-23), отключение суперскалярной диспетчеризации (счёт 24-28); и выполнение одной команды за раз через весь конвейер и считывание всех непопаданий в кэш исключительно (счёт 32-63). При задействовании некоторых из этих действий упреждающая агрессивность конвейера процессора успешно ограничивается при повторяющихся сбросах транзакции. Полная упреждающая агрессивность конвейера процессора восстанавливается на основе успешного завершения транзакции или прерывания, которое более не приводит к повтору транзакции.
В одном варианте все действия для определённого счёта производятся, например, параллельно. В другом варианте, если есть перекрывание, одно действие предпочитается другому на основе, например, выбора из списка в порядке, случайно выбирающем на основе функции выбора, или других методик.
Далее, при переходе к следующему уровню счёта сбросов выбранные действия заменяют предыдущие действия, в одном примере. Например, всё ранее отключенное включается, а предпринимаются новые действия. Однако в дальнейшем варианте новые действия прибавляются к предыдущим действиям. Таким образом, в данном контексте другое действие заменяет предыдущее действие, прибавляется к предыдущему действию, или их некоторая комбинация. Далее, действие может быть тем самым или другим, нежели предыдущее действие.
К примеру, действие предпринимается микропрограммой, устанавливающей аппаратный бит, который задействует специальный режим обработки (например, отключение предсказания ветвления и т.п.). Аппаратное обеспечение автоматически переустанавливает этот бит при тех же условиях, что и переустанавливается счётчик.
Если транзакция будет продолжать сбрасываться после осуществления одного или более вышеуказанных действий, а счёт достигает выбранного значения или уровня, то могут быть предприняты действия против конфликтующих процессоров. Например, при 4-15 сбросах могут быть произведены случайные задержки (т.е. повторное выполнение транзакции задерживается на определенное временя или количество машинных циклов, и т.д.); а при 16-23 сбросах может быть получен семафор для других процессоров раздела (например, зоны LPAR), в котором выполняет этот процессор, тем самым приостанавливая операции на других процессорах. Аналогично, при счёте 24-63 может быть получен семафор для всей системы, в которой все процессы в системе должны приостановить операции, пока семафор не очистится. В этом режиме обработки, на основе достижения выбранного уровня, на котором должен быть получен семафор, вызывается подпрограмма микропрограммы, для того чтобы получить семафор при помощи, например, механизма Сравнить и Обменять. Когда семафор получен, прерывание передаётся соответствующим процессорам (например, процессорам внутри того же раздела, или всем процессорам системы или некоторого другого подмножества). Потом процессор выходит из подпрограммы микропрограммы и выполняет транзакцию повторно один или более раз до успешного завершения или прерывания. Семафор переустанавливается, когда транзакция была успешно завершена, или больше не будет повторяться.
Хотя в вышеприведённом варианте действия предпринимаются на основе счёта сбросов, в другом варианте действия предпринимаются на основе причин сброса и/или на основе счёта. Таким образом, говорят, что действия предпринимаются на основе ситуации сброса, в которой ситуацией является счёт, причина сброса или сочетание счёта и причины сброса. Например, процессор мог бы определить, что сброс произошёл из-за другого процессора, и затем получить семафор. Это можно также комбинировать со счётом, например, “если сбросов > 16, и сброс из-за конфликта с другим процессором → получить семафор”. Существует много вариантов и возможностей.
В одном варианте, использованием вышеуказанных методов для вынужденных транзакций гарантируется успешное завершение транзакции, при условии, что такое завершение возможно (например, не нарушает установленные ограничения или не приводит к другим нарушениям).
Короче говоря, обработка вынужденной транзакции производится следующим образом:
1. Регистры, определенные к сохранению маской сохранения регистров общего назначения, восстанавливаются только если транзакция сбрасывается, а не тогда, когда транзакция заканчивается нормально при помощи ЗАКОНЧИТЬ ТРАНЗАКЦИЮ. Только регистры, определенные GRSM самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ, восстанавливаются при сбросе.
Поле I2 должно определить все пары регистров, которые предоставляют входные значения, которые изменяются в вынужденной транзакции. Таким образом, если транзакция сбрасывается, входные значения регистров будут восстановлены к их изначальному содержимому, когда вынужденная транзакция выполняется повторно.
2. На большинстве моделей можно реализовать улучшение производительности как в НАЧАТЬ ТРАНЗАКЦИЮ, так и при сбросе транзакции, задав минимальное число регистров, которые должны сохраняться и восстанавливаться в маске сохранения регистров общего назначения.
3. Следующее иллюстрирует результаты команды НАЧАТЬ ТРАНЗАКЦИЮ (обоих TBEGIN и TBEGINC) на основе текущей глубины вложения транзакций (TND) и, если TND не нуль, нахождения процессора в режиме невынужденного или вынужденного транзакционного выполнения:
Выше предоставляются эффективные средства обновления множественных, прерывистых объектов в памяти без классической (грубой) сериализации, такой как блокировка, что обеспечивает потенциал для значительного повышения многопроцессорной производительности. То есть множественные, прерывистые объекты обновляются без форсирования более грубого упорядочивания доступа к памяти, который обеспечивается классическими методами, такими как блокировки и семафоры. Вынужденные транзакции предлагаются для простых, нетребовательных обновлений.
Транзакционное выполнение может использоваться во множестве сценариев, включая, но не ограничиваясь, обходом блокировки. Один пример использования обхода блокировки описан с помощью Фиг. 15A-15Б и фрагмента кода, приведённого ниже.
На Фиг. 15А изображён двусвязанный список 1500 из множества элементов очереди 1502a-1502d. Новый элемент очереди 1502e должен быть вставлен в двусвязанный список элементов очереди 1500. Каждый элемент очереди 1502a-1502e включает прямой указатель 1504a-1504e и обратный указатель 1506a-1506e. Как изображено на Фиг. 15Б, чтобы добавить элемент очереди 1502e между элементами очереди 1502b и 1502c, (1) обратный указатель 1506e становится указывающим на элемент очереди 1502b, (2) прямой указатель 1504e становится указывающим на элемент очереди 1502c, (3) обратный указатель 1506c становится указывающим на элемент очереди 1502e, а (4) прямой указатель 1504b становится указывающим на элемент очереди 1502e.
Примерный фрагмент кода, соответствующий Фиг. 15А-15Б, находится ниже:
∗ R1 - адрес нового элемента очереди, который должен быть вставлен.
∗ R2 - адрес места вставки; новый элемент вставляется перед элементом, указанным R2.
В одном примере, если транзакция используется для обхода блокировки, но путь отката использует блокировку, транзакция должна, по крайней мере, считать блокировочное слово, чтобы увидеть, что оно доступно. Процессор гарантирует, что транзакция сбросится, если другой процессор обратится к блокировке нетранзакционно.
В данном контексте термины "память", "центральная память", "главная память", "главное запоминающее устройство" и "запоминающее устройство" используются как взаимозаменяемые, если не указано иное, неявно по контексту или явным образом. Далее, в одном варианте транзакция, эффективно задерживающая, включает задержку фиксации транзакционного сохранения в главную память до тех пор, пока не завершится выбранная транзакция; в другом варианте транзакция, эффективно задерживающая, включает разрешение транзакционных обновлений в памяти, но сохранение старых значений и восстановление старых значений в памяти при сбросе.
Как учтут специалисты в данной области техники, один или больше аспектов могут быть воплощены в виде системы, способа или компьютерного программного продукта. Соответственно, один или больше аспектов могут принимать форму целиком аппаратного варианта осуществления, целиком программного варианта осуществления (содержащего аппаратно-программное обеспечение, резидентное программное обеспечение, микрокод и т.д.) или варианта осуществления, сочетающего программные и аппаратные особенности, которые все могут в целом именоваться в описании "схемой", "модулем" или "системой". Кроме того, один или больше вариантов могут принимать форму компьютерного программного продукта, воплощенного в одной или нескольких машиночитаемых средах, в которых записан машиночитаемый программный код.
Может использоваться любое сочетание одной или нескольких машиночитаемых сред. Машиночитаемой средой может являться машиночитаемая запоминающая среда (носитель данных). Машиночитаемой запоминающей средой может являться, например, без ограничения электронная, магнитная, оптическая, электромагнитная, инфракрасная или полупроводниковая система, аппаратура или устройство или любое применимое сочетание перечисленного. Более конкретные примеры (неисчерпывающий список) машиночитаемой запоминающей среды включают: электрическое соединение, содержащее один или несколько проводов, портативный компьютерный диск, жесткий диск, оперативное запоминающее устройство (ОЗУ), постоянное запоминающее устройство (ПЗУ), стираемое программируемое постоянное запоминающее устройство (СППЗУ или флэш-память), оптическое волокно, портативное постоянное запоминающее устройство на компакт-диске (CD-ROM), оптическое запоминающее устройство, магнитное запоминающее устройство или любое применимое сочетание перечисленного. В контексте настоящего документа машиночитаемой запоминающей средой может являться любая материальная среда, в которой содержится или хранится программа для использования системой, аппаратурой или устройством выполнения команд или применительно к ним.
Как показано на фиг. 16, в одном из примеров компьютерный программный продукт 1600 содержит, например, одну или несколько не-временных машиночитаемых запоминающих сред 1602 для хранения в них машиночитаемого программного кода или логики 1604 для обеспечения и реализации одного или нескольких воплощений.
Программный код, воплощенный в машиночитаемой среде, может передаваться с использованием соответствующей среды, включая без ограничения беспроводную, проводную среду, оптоволоконный кабель, ВЧ-среду и т.д. или любое применимое сочетание перечисленного.
Компьютерный программный код для выполнения операций, для одного или более воплощений, может быть записан на одном или нескольких языках программирования в любом сочетании, включая объектно-ориентированный язык программирования, такой как Java, Smalltalk, C++ и т.п., и традиционных процедурных языках программирования, таких как "C" и языки ассемблера или аналогичные языки программирования. Программный код может целиком выполняться в пользовательском компьютере, частично в пользовательском компьютере, в качестве автономного пакета программного обеспечения, частично в пользовательском компьютере и частично в удаленном компьютере или целиком в удаленном компьютере или сервере. В случае последнего сценария удаленный компьютер может быть соединен с пользовательским компьютером посредством сети любого типа, включая локальную вычислительную сеть (ЛВС) или глобальную вычислительную сеть (ГВС), или может быть установлено соединение с внешним компьютером (например, по сети Интернет с использованием поставщика услуг Интернет).
Одно или более воплощений описаны со ссылкой на структурные схемы и/или блок-схемы способов, оборудования (систем) и компьютерных программных продуктов. Подразумевается, что каждый блок на структурных схемах и/или блок-схемах и сочетания блоков на структурных схемах и/или блок-схемах могут быть реализованы посредством команд управления компьютерной программой. Эти команды управления компьютерной программой могут передаваться процессору универсального компьютера, специализированного компьютера или другой программируемого аппаратуры для обработки данных с целью формирования механизма, в котором команды, выполняемые посредством процессора компьютера или другого программируемого оборудования обработки данных, создают средство реализации функций/действий, обозначенных блоком или блоками на структурных схемах и/или блок-схемах.
Эти команды управления компьютерной программой также могут храниться в машиночитаемой среде, которая способна предписывать компьютеру, другому программируемому оборудованию обработки данных или другим устройствам действовать конкретным способом, в результате чего команды, хранящиеся в машиночитаемой среде, формируют продукт, содержащий команды, в которых реализуется функция/действие, обозначенное блоком или блоками на структурных схемах и/или блок-схемах.
Команды управления компьютерной программой также могут загружаться в компьютер, другое программируемое оборудование обработки данных или другие устройства, чтобы инициировать выполнение последовательности оперативных шагов компьютером, другим программируемым оборудованием или другими устройствами с целью формирования реализованного в компьютере процесса, при этом команды, выполняемые компьютером или другим программируемым оборудованием, обеспечивают процессы реализации функций/действий, обозначенных блоком или блоками на структурных схемах и/или блок-схемах.
Приведенные на чертежах структурные схемы и блок-схемы иллюстрируют архитектуру, функциональные возможности и действие возможных вариантов реализации систем, способов и компьютерных программных продуктов согласно различным вариантам осуществления. В связи с этим каждым блоком на структурных схемах или блок-схемах может быть представлен определенный модуль, сегмент или часть кода, которая содержит одну или несколько выполняемых команд для реализации заданной логической функции(-й). Следует также отметить, что в некоторых альтернативных вариантах реализации указанные в блоке функции могут выполняться не в том порядке, в котором они представлены на чертежах. Например, функции, указанные двумя последовательно показанными блоками, в действительности, могут выполняться преимущественно одновременно, или функции иногда могут выполняться в обратном порядке в зависимости от соответствующих функциональных возможностей. Следует также отметить, что каждый блок на блок-схемах и/или структурных схемах и сочетания блоков на блок-схемах и/или структурных схемах могут быть реализованы посредством специализированных аппаратных систем, выполняющих заданные функции или действия, или посредством сочетаний специализированных аппаратных систем и компьютерных команд.
Помимо вышесказанного, одна или несколько особенностей может обеспечиваться, предлагаться, применяться, координироваться, обслуживаться и т.д. поставщиком услуг, который предлагает управление пользовательскими средами. Например, поставщик услуг способен создавать, вести, поддерживать и т.д. для одного или нескольких пользователей машинный код и/или вычислительную инфраструктуру, в которой выполняется одна или несколько особенностей. В ответ поставщик услуг может получать оплату от пользователя на основании соглашения о подписке и/или абонентской плате в качестве примеров. Дополнительно или в качестве альтернативы, поставщик услуг может получать плату за рекламное содержание, продаваемое одному или нескольким третьим лицам.
Согласно одному аспекту для выполнения одного или нескольких воплощений может быть развернуто приложение. В качестве одного из примеров, развертывание приложения включает использование вычислительной инфраструктуры, способной выполнять один или несколько вариантов осуществления настоящего изобретения.
В качестве одного из дополнительных аспектов, развертывание вычислительной инфраструктуры может включать интегрирование машиночитаемого кода в вычислительную систему, при этом код в сочетании с вычислительной системой способен выполнять один или несколько вариантов осуществления настоящего изобретения.
В качестве еще одного из дополнительных аспектов может быть предложен способ интегрирования вычислительной инфраструктуры, включающий интегрирование машиночитаемого кода в компьютерную систему. Компьютерная система содержит машиночитаемую среду, содержащую одну или несколько воплощений настоящего изобретения. Код в сочетании с компьютерной системой способен выполнять один или несколько вариантов осуществления настоящего изобретения.
Хотя различные варианты осуществления описаны выше, они являются лишь примерами. Например, вычислительные среды других архитектур могут быть использованы для включения и применения одного или нескольких вариантов осуществления настоящего изобретения. Кроме того, могут быть использованы различные команды, форматы команд, поля команд и/или значения команд. Кроме того, различные, другие и/или дополнительные ограничения / требования могут быть предусмотрены / использованы. Возможно множество вариантов.
Кроме того, другие типы вычислительных сред могут выгодно применяться. В качестве примера может использоваться система обработки данных, применимая для хранения и/или выполнения программного кода и содержащая по меньшей мере два процессора, прямо или косвенно связанных с средствами памяти посредством системной шины. Элементы памяти включают, например, локальную память, применяемую во время фактического выполнения программного кода, массовую память и кэш-память, которая обеспечивает временное хранение по меньшей мере части программного кода для уменьшения необходимого числа случаев извлечения кода из массовой памяти во время выполнения.
С системой прямой или косвенно посредством промежуточных контроллеров ввода-вывода могут быть связаны устройства ввода-вывода (включая без ограничения, клавиатуры, дисплеи, координатно-указательные устройства, ЗУПД, накопители на магнитной ленте, на компакт-дисках, на многоцелевых компакт-дисках, портативные миниатюрные накопители на жестких дисках и другие запоминающие среды и т.д.). С системой также могут быть связаны сетевые адаптеры, позволяющие системе обработки данных устанавливать связь с другими системами обработки данных или удаленными принтерами или запоминающими устройствами посредством промежуточной частных или общедоступных сетей. Модемы, кабельные модемы и сетевые карты Ethernet являются лишь несколькими из сетевых адаптеров доступных типов.
Согласно фиг. 17, на которой представлены характерные компоненты хост-компьютерной системы 5000 для реализации одного или нескольких воплощений настоящего изобретения. Характерный хост-компьютер 5000 содержит один или несколько процессоров 5001, поддерживающих связь с памятью (т.е. центральной памятью) 5002 компьютера, а также интерфейсы ввода-вывода с запоминающими устройствами 5011 и сетями 5010 для связи с другими компьютерами или SAN и т.п. процессором 5001 совместим с архитектурой, содержащей структурированный набор команд и структурированные функциональные возможности. Процессор 5001 может иметь трансляционный регистр доступа (ART) 5012, который включает в себя ассоциативный буфер ART (ALB) 5013, для выбора пространства адресов, которое будет использоваться динамической трансляцией адреса (DAT) 5003 для превращения адресов программ (виртуальных адресов) в действительные адреса памяти. DAT обычно содержит буфер 5007 быстрой трансляции адреса (TLB) для кэширования трансляций, чтобы при последующих доступах к блоку памяти 5002 компьютера не требовалась задержка трансляции адреса. Обычно между памятью 5002 компьютера и процессором 5001 используется кэш-память 5009. Кэш-память 5009 может являться иерархической и состоящей из кэша большой емкости, доступного для нескольких процессоров, и более быстродействующих кэшей (низкого уровня) меньшей емкости между кэшем большой емкости и каждым процессором. В некоторых случаях реализации кэши низкого уровня разделены на отдельные кэши низкого уровня для выборки команд и доступа к данным. В одном варианте осуществления для средства транзакционного выполнения, блок диагностики транзакции (TDB) 5100 и один или более буферов 5101 могут быть сохранены в одной или более из кэш-памяти 5009 и памяти 5002. В одном примере, в режиме TX, данные сначала сохраняются в буфере TX, и когда режим TX заканчивается (например, внешний TEND), данные из буфера сохраняются (выделенные) в память, или, в случае прерывания, данные в буфере отбрасываются.
В одном из вариантов осуществления блок 5004 выборки команд вызывает из памяти 5002 команду посредством кэш-памяти 5009. Команда декодируется в блоке 5006 декодирования команд и отправляется (с другими командами в некоторых вариантах осуществления) в блок или блоки 5008 выполнения команд. Обычно используется несколько блоков 5008 выполнения команд, например, блок выполнения арифметических команд, блок выполнения команд с плавающей точкой и блок выполнения команд перехода. Также, в одном варианте осуществления средства TX, могут применятся различные управления 5110 TX. Команда выполняется блоком, который в зависимости от необходимости осуществляет доступ к операндам из определяемых командами регистров или памяти. Если доступ (загрузка или сохранение) к операнду должен осуществляться из памяти 5002, блок 5005 загрузки/сохранения обычно обрабатывает процедуру доступа под управлением выполняемой команды. Команды могут выполняться в аппаратных схемах или во внутреннем микрокоде (аппаратно-программном обеспечении) или с использованием сочетания того и другого.
В соответствии с одним из аспектов средства TX, процессор 5001 также включает в себя PSW (например, TX и/или прервать PSW) 5102, глубину вложения 5104, 5106 TDBA, и один или более управляющих регистров 5108.
Как было отмечено, в локальном (или основном) запоминающем устройстве компьютерной системы хранится информация, а также адресные, защитные, контрольные и корректирующие записи. Некоторые особенности адресации включают формат адресов, концепцию адресных пространств, различные типы адресов и то, каким образом адрес одного типа трансляции в адрес другого типа. Некоторые из основных запоминающих устройств имеют постоянно абонированные ячейки. Основное запоминающее устройство обеспечивает систему запоминающим устройством с прямой адресацией и быстрой выборкой данных. В основное запоминающее устройство должны загружаться (из устройств ввода) как данные, так и программы, после чего они могут обрабатываться.
Основное запоминающее устройство может содержать одно или несколько буферных запоминающих устройств меньшей емкости с более быстрой выборкой, иногда называемых кэшами. Кэш обычно физически связан с процессором (ЦП) или процессором ввода-вывода. Физическая конструкция и использование различных запоминающих сред в целом не сказывается на программе за исключением производительности.
Для команд и операндов, хранимых в памяти, могу быть предусмотрены раздельные кэши. Информация содержится в кэше в форме непрерывных байтов на целочисленной границе, называемой блоком или строкой данных кэша (или для краткости строкой). Согласно одной из моделей может быть предусмотрена команда извлечения атрибута кэша (EXTRACT CACHE ATTRIBUTE), которая выдает размер строки кэша в байтах. Согласно одной из моделей также может быть предусмотрена команда упреждающей выборки данных (PREFETCH DATA) и команда упреждающей выборки данных относительно большой длины (PREFETCH DATA RELATIVE LONG) для упреждающей выборки данных из запоминающего устройства в кэш данных или команд или для высвобождения данных из кэша.
Запоминающее устройство рассматривается как длинная горизонтальная битовая строка. В случае большинства операций доступ к запоминающему устройству последовательно осуществляется слева направо. Битовая строка подразделяется на блоки из восьми разрядов. Восьмиразрядный блок называется байтом и является базовым конструктивным блоком всех форматов представления информации. Местоположение каждого байта в запоминающем устройстве идентифицируется однозначно определяемым неотрицательным целым числом, которое является адресом местоположения этого байта или просто адресом байта. Соседние местоположения байтов имеют идущие подряд адреса, начинающиеся слева с 0 и последовательно следующие слева направо. Адреса представляют собой двоичные целые числа без знака, содержащие 24, 31 или 64 разряда.
Обмен информацией между запоминающим устройством и процессором или канальной подсистемой осуществляется путем передачи одного байта или группы байтов за один раз. Если не оговорено иное, например, в системе z/Architecture хранящаяся группа байтов адресуется посредством крайнего левого байта из группы. Число байтов в группе подразумевается или прямо оговаривается выполняемой операцией. Используемая в работе процессора группа байтов называется полем. Разряды в каждой группе байтов, например, в системе z/Architecture последовательно нумеруются слева направо. Крайние левые разряды в z/Architecture иногда именуются "старшими" разрядами, а крайние правые разряды - "младшими" разрядами. Тем не менее, номера разрядов не являются адресами ячеек запоминающего устройства. Возможна только адресация байтов. Чтобы оперировать с отдельными разрядами хранящегося байта, осуществляется доступ ко всему байту. Разряды в байте пронумерованы слева направо от 0 до 7 (например, в системе z/Architecture). Разряды в адресе могут быть пронумерованы от 8 до 31 или от 40 до 63 в случае 24-разрядных адресов или от 1 до 31 или от 33 до 63 в случае 31-разрядных адресов и от 0 до 63 в случае 64-разрядных адресов. В одном примере, биты 8-31 и 1-31 применяются к адресам, которые находятся в месте (например, регистре), который составляет 32 бита, а биты 40-63 и 33-63 применяются к адресам, которые находятся в месте шириной 64-бита. В любом другом имеющем фиксированную длину формате из множества байтов разряды, образующие формат, последовательно пронумерованы, начиная с 0. В целях обнаружения ошибок и предпочтительно их исправления с каждым байтом или группой байтов может передаваться один или несколько контрольных разрядов. Такие контрольные разряды генерируются автоматически машиной и не могут непосредственно управляться программой. Емкость запоминающего устройства выражается в числе байтов. Когда кодом операций команды подразумевается длина хранящегося поля операнда, считается, что поле имеет фиксированную длину, которая может составлять 1, 2, 4, 8 или 16 байтов. Для некоторых команд могут подразумеваться более длинные поля. Когда длина хранящегося поля операнда не подразумевается, а прямо указывается, считается, что поле имеет переменную длину. Операнды переменной длины могут различаться по длине с шагом в 1 байт (или в случае некоторых команд с шагом в 2 байта и другими шагами). При сохранении информации в запоминающем устройстве замещается содержимое местоположений только тех байтов, которые включены в указанное поле, несмотря на то, что ширина физического пути доступа к запоминающему устройству может превышать длину сохраняемого поля.
Некоторые хранящиеся единицы информации должны находиться на целочисленной границе. Применительно к единице информации граница называется целочисленной, когда адрес ее ячейки запоминающего устройства кратен длине единицы информации в байтах. Полям длиной 2, 4, 8 16 и 32 байтам на целочисленной границе даются особые названия. Полуслово является группой из 2 идущих подряд байтов на двухбайтовой границе и представляет собой базовый конструктивный блок команд. Слово является группой из 4 идущих подряд байтов на четырехбайтовой границе. Двойное слово является группой из 8 идущих подряд байтов на 8-байтовой границе. Учетверенное слово является группой из 16 идущих подряд байтов на 16-байтовой границе. Увосьмирьонное слово является группой из 32 идущих подряд байтов на 32-байтовой границе. Когда в адресах ячеек запоминающего устройства указаны полуслова, слова, двойные слова, учетверенные слова, и увосьмиренные слова в двоичном представлении адреса содержится один, два, три, четыре или пять крайних правых нулевых разряда, соответственно. Команды должны находиться на двухбайтовых целочисленных границах. Хранящиеся операнды большинства команд не содержат требования размещения на границах.
В устройствах, в которых реализованы раздельные кэши для команд и операндов, хранимых в памяти, могут происходить значительные задержки, если программа сохраняется в строке кэша, из которой впоследствии осуществляется выборка команд, независимо от того, изменяются ли при сохранении команды, выборка которых впоследствии осуществляется.
В одном из примеров осуществления изобретение может быть реализовано на практике посредством программного обеспечения (иногда называемого лицензионным внутренним кодом, аппаратно-программным обеспечением, микрокодом, милликодом, пикокодом и т.п., что во всех случаях согласуется с настоящим изобретением). Как показано на фиг. 17, обычно процессор 5001 хост-системы 5000, получает доступ к программному коду системы программного обеспечения, в котором воплощено настоящее изобретение, посредством долговременных запоминающих сред 5011, таких как ПЗУ на компакт-дисках, накопитель на магнитной ленте или накопитель на жестких дисках. Программный код системы программного обеспечения может быть воплощен в любой из разнообразных известных сред для применения с системой обработки данных, такой как дискета, накопитель на жестких дисках или ПЗУ на компакт-дисках. Код может распределяться в таких средах или может распределяться пользователям из памяти 5002 компьютера или запоминающего устройства одной компьютерной системы по сети 5010 другим компьютерным системам для применения пользователями таких других систем.
Программный код включает операционную систему, которая управляет функцией и взаимодействием различных узлов вычислительной машины и одной или нескольких прикладных программ. Обычно подкачка страниц программного кода осуществляется из запоминающей среды 5011 в относительно быстродействующее запоминающее устройство 5002, в котором он доступен для обработки процессором 5001. Методы и способы воплощения программного кода системы программного обеспечения в памяти, в физических средах и/или распределения программного кода посредством сетей хорошо известны и не будут дополнительно рассматриваться в описании. Программный код, созданный и хранящийся в материальной среде (включая без ограничения модули электронной памяти (ОЗУ), флэш-память, компакт-диски, универсальные цифровые диски, магнитную ленту и т.п.) часто именуется "компьютерным программным продуктом". Содержащая компьютерный программный продукт среда обычно может считываться устройством обработки данных предпочтительно в компьютерной системе для выполнения устройством обработки данных.
На фиг. 18 проиллюстрирована характерная рабочая станция или аппаратная серверная система, в которой может быть на практике реализовано настоящее изобретение. В показанную на фиг. 18 систему 5020 входит характерная базовая компьютерная система 5021, такая как персональный компьютер, рабочая станция или сервер, включая необязательные периферийные устройства. Базовая компьютерная система 5021 имеет один или несколько процессоров 5026 и шину для соединения процессора(-ов) 5026 и других компонентов системы 5021 и обеспечения связи между ними известными способами. Шина соединяет процессор 5026 с памятью 5025 и долговременным запоминающим устройством 5027, которое может содержать накопитель на жестких дисках (например, включая любое из следующего: магнитный носитель, компакт-диск, универсальный цифровой диск и флэш-память) или, например, накопитель на магнитной ленте. В систему 5021 также может входить адаптер пользовательского интерфейса, который посредством шины соединяет микропроцессор 5026 с одним или несколькими устройствами сопряжения, такими как клавиатура 5024, мышь 5023, принтер/сканнер 5030 и/или другие устройства сопряжения, которыми могут являться любое пользовательское устройство сопряжения, такое как сенсорный экран, дополнительная цифровая клавиатура и т.д. Шина посредством дисплейного адаптера также соединяет дисплей 5022, такой как ЖК-дисплей или монитор с микропроцессором 5026.
Система 5021 может поддерживать связь с другими компьютерами или компьютерными сетями посредством сетевого адаптера, способного поддерживать связь 5028 с сетью 5029. Примерами сетевых адаптеров являются каналы связи, кольцевая сеть с эстафетным доступом, сеть Ethernet или модемы. В качестве альтернативы, система 5021 может поддерживать связь с использованием беспроводного интерфейса, такого как карта CDPD (сотовой системы передачи пакетов цифровых данных). Система 5021 может быть связана с другими такими компьютерами в локальной вычислительной сети (ЛВС) или глобальной вычислительной сети (ГВС), или системой 5021 может являться клиент, связанный отношениями клиент/сервер с другим компьютером и т.д. Все эти конфигурации, а также соответствующее коммуникационное оборудование и программное обеспечение известны из уровня техники.
На Фиг. 19 проиллюстрирована сеть 5040 обработки данных, в которой может быть реализовано на практике одно или несколько воплощений настоящего изобретения. В сеть 5040 обработки данных может входить множество отдельных сетей, таких как беспроводная сеть и проводная сеть, в каждую из которых может входить множество отдельных рабочих станций 5041, 5042, 5043, 5044. Кроме того, как известно специалистам в данной области техники, в нее может входить одна или несколько ЛВС, в которую может входить множество интеллектуальных рабочих станций, связанных с хост-процессором.
На фиг. 19 также показано, что в сети также могут входить мэйнфреймы или серверы, такие как шлюз (клиент-сервер 5046) или сервер приложений (удаленный сервер 5048, который может осуществлять доступ к хранилищу данных, а также может быть доступен непосредственно с рабочей станции 5045). Шлюз 5046 служит точкой входа в каждую отдельную сеть. Шлюз необходим при подсоединении одного сетевого протокола к другому. Шлюз 5046 предпочтительно может быть связан с другой сетью (например, сетью Интернет 5047) линией связи. Шлюз 5046 также может быть непосредственно связан с одной или несколькими рабочими станциями 5041, 5042, 5043, 5044 с использованием линии связи. Шлюз может быть реализован с использованием сервера IBM eServer System z производства International Business Machines Corporation.
Как показано на фиг. 18 и 19, доступ к программному коду 5031 системы программного обеспечения, в котором может быть воплощен один или несколько аспектов настоящего изобретения, может осуществлять процессор 5026 системы 5020 посредством долговременных запоминающих сред 5027, таких как ПЗУ на компакт-дисках, или накопитель на жестких дисках. Программный код системы программного обеспечения может быть воплощен в любой из разнообразных известных сред для применения с системой обработки данных, такой как дискета, накопитель на жестких дисках или ПЗУ на компакт-дисках. Код может распределяться в таких средах или может распределяться пользователям 5050, 5051 из памяти компьютера или запоминающего устройства одной компьютерной системы по сети другим компьютерным системам для применения пользователями таких других систем.
В качестве альтернативы, программный код может быть воплощен в памяти 5025 с возможностью доступа к нему для процессора 5026 с использованием процессорной шины. В таком программном коде реализована операционная система, которая управляет функцией и взаимодействием различных узлов вычислительной машины и одной или нескольких прикладных программ 5032. Обычно подкачка страниц программного кода осуществляется из запоминающих сред 5027 в быстродействующее запоминающее устройство 5025, в котором он доступен для обработки процессором 5026. Методы и способы воплощения программного кода системы программного обеспечения в памяти, в физических средах и/или распределения программного кода посредством сетей хорошо известны и не будут дополнительно рассматриваться в описании. Программный код, созданный и хранящийся в материальной среде (включая без ограничения модули электронной памяти (ОЗУ), флэш-память, компакт-диски, универсальные цифровые диски, магнитную ленту и т.п.) часто именуется "компьютерным программным продуктом". Содержащая компьютерный программный продукт среда обычно может считываться устройством обработки данных предпочтительно в компьютерной системе для выполнения устройством обработки данных.
Кэш, который является наиболее легкодоступным для процессора (обычно более быстродействующим и менее объемным, чем другие кэши процессора), представляет собой кэш низшего уровня (L1 или уровня 1), а основное запоминающее устройство (основная память) представляет собой кэш высшего уровня (L3 в случае 3 уровней). Кэш низшего уровня часто поделен кэш команд (I-кэш), в котором хранятся машинные команды для выполнения, и кэш данных (D-кэш), в котором хранятся операнды, хранимые в памяти.
На Фиг. 20 проиллюстрирован один из примеров осуществления процессора 5026. Обычно с целью помещения в буфер блоков памяти и повышения производительности процессора используется один или несколько уровней кэша 5053. Кэш 5053 представляет собой высокоскоростной буфер, в котором в строках данных кэша хранятся данные в памяти, которые вероятно будут использоваться. Типичные строки данных кэша содержат 64, 128 или 256 байтов данных в памяти. Для кэширования команд и для кэширования данных часто используются раздельные кэши. Согласованность кэшей (синхронизация копий строк в памяти и в кэшах) часто обеспечивается различными алгоритмами слежения ("snoop"), хорошо известными из уровня техники. Основное запоминающее устройство 5025 процессорной системы часто называют кэшем. В процессорной системе, имеющей уровня 4 кэша 5053, основное запоминающее устройство 5025 иногда называют кэшем уровня 5 (L5), поскольку оно обычно является более быстродействующими и представляет собой лишь часть энергонезависимого запоминающего устройство (ЗУПД, ЗУ на ленте и т.д.), которое доступно для компьютерной системы. Основное запоминающее устройство 5025 "кэширует" страницы данных, которые подкачиваются в основное запоминающее устройство 5025 и откачиваются из него операционной системой.
Программный счетчик (счетчик команд) 5061 отслеживает адрес текущей команды для выполнения. Счетчиком команд в процессоре на основе z/Architecture является 64-разрядным, при этом он может быть усечен до 31 или 24 разрядов с целью поддержки ранее существовавших ограничений адресации. Поскольку счетчик команд обычно воплощен в слове состояния программы (PSW) компьютера, оно сохраняется при переключении контекста. Соответственно, выполняемая программа с показанием счетчика команд может прерываться, например, операционной системой (при переключении контекста из программной среды в среду операционной системы). PSW программы поддерживает показание счетчика команд, пока программа неактивна, а во время выполнения операционной системы используется счетчик команд (в PSW) операционной системы. Обычно показание счетчика команд приращивается на величину, равную числу байтов текущей команды. RISC-команды (на основе вычислений с сокращенным набором команд) обычно имеют фиксированную длину, тогда как CISC-команды (на основе вычислений с полным набором команд) обычно имеют переменную длину. Команды, используемые в системе IBM z/Architecture, являются CISC-командами, имеющими длину 2, 4 или 6 байтов. Показание счетчика 5061 команд изменяется, например, в результате операции переключения контекста или операции выбранного перехода согласно команде перехода. При операции переключения контекста в слове состояния программы сохраняется текущее показание счетчика команд вместе с другой информацией о состоянии выполняемой программы (такой как коды условий), и загружается новое показание счетчика команд, указывающее на команду нового программного модуля для выполнения. Операция выбранного перехода выполняется, чтобы позволить программе принимать решения, или чтобы выполнять программный цикл путем загрузки в счетчик 5061 команд результата команды перехода.
Обычно для выборки команд от имени процессора 5026 применяется блок 5055 выборки команд. Блок выборки осуществляет выборку "очередных последовательных команд", целевых команд из команд выбранного перехода или первых команд программы, следующей за переключением контекста. В современных блоках выборки команд часто применяют методы выборки с целью предварительной выборки команд по предположению, исходя из вероятности использования команд, предварительная выборка которых была осуществлена. Например, блок выборки может осуществлять выборку 16 байтов команды, содержащих очередную последовательную команду, и дополнительных байтов следующих далее команд.
Затем вызванные команды выполняются процессором 5026. В одном из вариантов осуществления вызванная команда(-ы) передаются блоку 5056 диспетчеризации блока выборки. Блок диспетчеризации декодирует команду(-ы) и пересылает информацию о декодированной команде(-ах) соответствующим блокам 5057, 5058, 5060. Блок 5057 выполнения обычно принимает информацию о декодированных арифметических командах от блока 5055 выборки команд и выполняет арифметические операции с операндами в соответствии с содержащимся в команде кодом операции. Операнды предоставляются блоку 5057 выполнения предпочтительно из памяти 5025, структурированных регистров 5059 или из непосредственного поля выполняемой команды. Сохраненные результаты выполнения хранятся в памяти 5025, регистрах 5059 или в другом машинном аппаратном обеспечении (таком как управляющие регистры, регистры PSW и т.п.).
Виртуальные адреса транслируются в реальные адреса с помощью динамической трансляции адресов 5062 и, необязательно, с помощью трансляционного регистра доступа 5063.
Процессор 5026 обычно имеет один или несколько блоков 5057, 5058, 5060, выполнения функции команды. Как показано на фиг. 21A, блок 5057 выполнения, посредством интерфейсной логической схемы 5071, может поддерживать связь 5071 со структурированными общими регистрами 5059, блоком 5056 декодирования/диспетчеризации, блоком 5060 загрузки/сохранения и другими процессорными блоками 5065. В блоке 5057 выполнения может применяться несколько регистровых схем 5067, 5068, 5069 для хранения информации, с которой будет работать арифметическое логическое устройство (ALU) 5066. ALU выполняет арифметические операции, такие как сложение, вычитание, умножение и деление, а также логические функции, такие как И, ИЛИ и исключающее ИЛИ, поворот и смещение. ALU предпочтительно поддерживает зависящие от конструкции специализированные операции. В других схемах могут обеспечиваться другие структурированные средства 5072, включающие, например, коды условия и логическую схему поддержки восстановления. Обычно результат операции ALU хранится в схеме 5070 выходного регистра, из которой он может пересылаться целому ряду других функций обработки. Хотя существует множество конструкций процессоров, настоящее описание имеет целью лишь обеспечить понимание одного из вариантов осуществления.
Например, команда сложения выполняется блоком 5057 выполнения, обладающим арифметическими и логическими функциональными возможностями, а, например, команда с плавающей точкой выполняется блоком вычислений с плавающей точкой, обладающим специализированными возможностями работы с плавающей точкой. Блок выполнения предпочтительно работает с указанными командой операндами путем выполнения заданной кодом операции функции применительно к операндам. Например, команда сложения может выполняться блоком 5057 выполнения применительно к операндам, обнаруженным в двух регистрах 5059, указанных в регистровых полях команды.
Блок 5057 выполнения выполняет арифметическое сложение двух операндов и сохраняет результат в третьем операнде, которым может являться третий регистр или один из двух исходных регистров. Блок выполнения предпочтительно использует арифметическое логическое устройство (ALU) 5066, способное выполнять ряд логических функций, таких как смещение, поворот, И, ИЛИ и исключающее ИЛИ, а также ряд алгебраических функций, включая любые из следующих функций: сложение, вычитание, умножение, деление. Некоторые ALU 5066 рассчитаны на скалярные операции, а некоторые - на операции с плавающей точкой. В зависимости от архитектуры данные могут иметь обратный порядок следования байтов (когда наименьший значимый байт соответствует старшему байтовому адресу) или прямой порядок следования байтов (когда наименьший значимый байт соответствует младшему байтовому адресу). В системе IBM z/Architecture используется обратный порядок следования байтов. В зависимости от архитектуры поля чисел со знаком могут быть представлены в виде прямого кода, дополнения до единицы или дополнения до двух. Число в форме дополнения до двух выгодно в том смысле, что ALU не требуется поддерживать возможность вычитания, поскольку при отрицательной или положительной величине дополнения до двух в ALU требуется только сложение. Числа обычно описаны в сокращенном виде, в котором 12-разрядное поле определяет адрес блока из 4096 байтов и обычно описано, например, в виде 4-килобайтового блока.
Как показано на фиг. 21Б, содержащаяся в команде перехода информация для выполнения команды перехода обычно передается блоку 5058 перехода, в котором часто применяется алгоритм предсказания переходов, такой как таблица 5082 предыстории переходов (ТПП), для предсказания исхода перехода до завершения других условных операций. Целевой объект текущей команды перехода вызывается и выполняется по предположению до завершения условных операций. Когда условные операции завершены, выполненные по предположению команды перехода завершаются или отбрасываются, исходя из условной операции и предположенного исхода. Типичная команда перехода может предусматривать проверку кодов условий и переход к целевому адресу, если коды условий отвечают требованию команды перехода, при этом целевой адрес может вычисляться на основании нескольких чисел, включая, например, числа из регистровых полей или непосредственного поля команды. В блоке 5058 перехода может применяться ALU 5074, имеющее множество схем 5075, 5076, 5077 входных регистров и схему 5080 выходного регистра. Блок 5058 перехода, например, может поддерживать связь 5081 с общими регистрами 5059, декодировать блок 5056 диспетчеризации или другие схемы 5073.
Выполнение группы команд может прерываться по ряду причин, включая, например, переключение контекста, инициированное операционной системой, исключительную ситуацию или ошибку в процессе выполнения программы, приводящую к переключению контекста, сигнал прерывания ввода-вывода, приводящий к переключению контекста, или многопоточный режим работы множества программ (в многопоточной среде). Переключение контекста предпочтительно служит для сохранения информации о состоянии выполняемой в данный момент программы и затем для загрузки информации о состоянии другой вызываемой программы. Информация о состоянии может сохраняться, например, в аппаратных регистрах или в памяти. Информация о состоянии предпочтительно содержит показание счетчика команд, указывающее очередную команду для выполнения, коды условий, сведения о транслировании данных памяти и содержимое структурированного регистра. Переключение контекста может осуществляться аппаратными схемами, прикладными программами, программами операционной системы или аппаратно-программным кодом (микрокодом, пикокодом или лицензионным внутренним кодом (LIC) по отдельности или в сочетании).
Процессор осуществляет доступ к операндам в соответствии с определенными командами способами. Команда может содержать непосредственный операнд, в котором используется значение части команды, может содержать одно или несколько регистровых полей, прямо указывающих регистры общего назначения или регистры особо назначения (например, регистры с плавающей точкой). В команде могут использоваться подразумеваемые регистры, обозначаемые полем кода операции как операнды. В команде могут использоваться ячейки памяти для операндов. Ячейка памяти для операнда может обеспечиваться регистром, непосредственным полем или сочетанием регистров и непосредственного поля, примером чего является средство дальнего смещения на основе системы z/Architecture, в котором команда определяет базовый регистр, индексный регистр и непосредственное поле (поле смещения), которые суммируются с целью получения, например, адреса операнда в памяти. Под ячейкой в данном случае подразумевается ячейка основной памяти (основного запоминающего устройства), если не указано иное.
Как показано на Фиг. 21В, процессор осуществляет доступ к памяти с использованием блока 5060 загрузки/сохранения. Блок 5060 загрузки/сохранения может выполнять операцию загрузки путем получения адреса целевого операнда в памяти 5053 и загрузки операнда в регистр 5059 или другую ячейку памяти 5053, или может выполнять операцию сохранения путем получения адреса целевого операнда в памяти 5053 и сохранения данных, полученных из регистра 5059 или другой ячейки памяти 5053, в ячейке целевого операнда в памяти 5053. Блок 5060 загрузки/сохранения может действовать по предположению и осуществлять доступ к памяти в последовательности, которая не соответствует последовательности команд, тем не менее, блок 5060 загрузки/сохранения должен обеспечивать для программ видимость выполнения команды по порядку. Блок 5060 загрузки/сохранения может поддерживать связь 5084 с общими регистрами 5059, блоком 5056 декодирования/диспетчеризации, интерфейсом 5053 кэша/памяти или другими элементами 5083 и содержит различные регистровые схемы 5086, 5087, 5088 и 5089, ALU 5085 и управляющую логику 5090 для вычисления адресов ячеек запоминающего устройства и обеспечения последовательного потока для сохранения порядка следования операций. Некоторые операции могут выполняться не по порядку, но блок загрузки/сохранения обеспечивает функциональные возможности для того, чтобы выполняемые не по порядку операции выглядели для программы выполненными по порядку, как хорошо известно из уровня техники.
Адреса, которые "видит" прикладная программа, предпочтительно часто именуются виртуальными адресами. Иногда виртуальные адреса именуются "логическими адресами" и "исполнительными адресами". Эти виртуальные адреса являются виртуальными в том смысле, что их перенаправляют в ячейку физической памяти посредством одной из ряда технологий динамической трансляции адреса (DAT), включая без ограничения простое приписывание величины смещения к виртуальному адресу, трансляцию виртуального адреса посредством одной или нескольких таблиц трансляции, которые предпочтительно содержат по меньшей мере таблицу сегментов и таблицу страниц по отдельности или в сочетании, предпочтительно таблицу сегментов, содержащую запись с указанием таблицы страниц. В системе z/Architecture предусмотрена иерархия трансляции, в которую входит первая таблица региона, вторая таблица региона, третья таблица региона, таблица сегментов и необязательная таблица страниц. Эффективность трансляции адресов часто повышается за счет использования буфера быстрого трансляции адреса (TLB), который содержит записи, отображающие виртуальный адрес соответствующей ячейки физической памяти. Записи создаются, когда DAT транслирует виртуальный адрес с использованием таблиц перевода. Затем при последующем использовании виртуального адреса может использоваться запись из быстродействующего TLB вместо доступа к таблицам медленной последовательной трансляции. Содержимым TLB может управлять ряд алгоритмов замещения, включая алгоритм замещения наиболее давней по использованию страницы (LRU).
В том случае, когда процессором является процессор мультипроцессорной системы, каждый процессор отвечает за сохранение совместно используемых ресурсов, таких как средства ввода-вывода, кэши, TLB и память, взаимно заблокированных для обеспечения непротиворечивости. Обычно для поддержания непротиворечивости кэшей используются технологии "слежения". Для облегчения совместного использования каждая строка кэша может помечаться в среде слежения как находящаяся в одном из следующих состояний, включающих состояние совместного использования, состояние монопольного использования, измененное состояние, недействительное состояние и т.п.
Блоки 5054 ввода-вывода (Фиг. 20) обеспечивают процессор средствами подключения к периферийным устройствам, включая, например, накопители на магнитной ленте, накопители на дисках, принтеры, дисплеи и сети. Блоки ввода-вывода представлены в компьютерной программе программными драйверами. В мэйнфреймах, таких как System z производства IBM®, блоки ввода-вывода мэйнфрейма являются адаптерами каналов и адаптерами открытых систем и обеспечивают связь между операционной системой и периферийными устройствами.
Кроме того, одна или несколько особенностей настоящего изобретения могут выгодно применяться в вычислительных средах других типов. В качестве примера, среда может содержать эмулятор (например, программные или другие механизмы эмуляции), в которых эмулируется конкретная архитектура (включая, например, выполнение команд, структурированные функции, такие как трансляция адреса, и структурированные регистры) или ее сокращенная версия (например, в собственной компьютерной системе, имеющей процессор и память). В такой среде за счет одной или нескольких эмулирующих функций эмулятора может быть реализована одна или несколько особенностей настоящего изобретения, несмотря на то, что компьютер, в котором выполняется эмулятор, может иметь архитектуру, отличающуюся от эмулируемых возможностей. В качестве одного из примеров в режиме эмуляции декодируется конкретная эмулируемая команда или операция, и создается соответствующая эмулирующая функция с целью реализации отдельной команды или операции.
В эмулирующей среде хост-компьютер содержит, например, память для хранения команд и данных; блок выборки команд для выборки команд из памяти и необязательно локальной буферизации выбранных команд; блок декодирования команд для приема команд от блока выборки команд и определения типа команд, которые были выбраны; и блок выполнения команд для выполнения команд. Выполнение может предусматривать загрузку данных из памяти в регистр; сохранение данных из регистра в памяти; или выполнение арифметической или логической операции какого-либо типа, определяемой блоком декодирования. В одном из примеров каждый блок реализован посредством программного обеспечения. Например, выполняемые блоками операции реализованы в виде одной или нескольких подпрограмм в программном обеспечении эмулятора.
В частности, в мэйнфрейме структурированные машинные команды используются программаторами, обычно современными программаторами на языке "C" посредством компилирующего приложения. Эти команды, хранящиеся в запоминающей среде, могут выполняться в собственной системе команд сервера IBM® на основе z/Architecture® или в качестве альтернативы в машинах на основе других архитектур. Они могут эмулироваться в существующих и будущих серверах на основе мэйнфреймов IBM® и в других машинах IBM® (например, серверах Power Systems и серверах System x®). Они могут выполняться в операционной системе Linux разнообразными машинами, использующими аппаратное обеспечение производства IBM®, Intel®, AMD™ и других компаний. Помимо выполнения этим аппаратным обеспечением на основе Z/Architecture®, может использоваться Linux, а также машины, использующие эмуляцию Hercules, UMX или FSI (Fundamental Software, Inc), когда выполнение обычно происходит в режиме эмуляции. В режиме эмуляции эмулирующее программное обеспечение выполняется собственным процессором, эмулирующим архитектуру эмулируемого процессора.
Собственный процессор обычно выполняет эмулирующее программное обеспечение, представляющее собой аппаратно-программное обеспечение или собственную операционную систему для эмуляции эмулируемого процессора. Эмулирующее программное обеспечение отвечает за выборку и выполнение команд архитектуры эмулируемого процессора. Эмулирующее программное обеспечение поддерживает счетчик эмулируемых команд для слежения за границами команд. Эмулирующее программное обеспечение может осуществлять выборку одной или нескольких эмулируемых машинных команд за один раз и транслирование одной или нескольких эмулируемых машинных команд в соответствующую группу собственных машинных команд для выполнения собственным процессором. Эти транслированные команды могут помещаться в кэш, что позволяет ускорять транслирование. Тем не менее, эмулирующее программное обеспечение должно поддерживать правила архитектуры эмулируемого процессора с тем, чтобы обеспечивать правильную работу операционных систем и приложений, написанных для эмулируемого процессора. Кроме того, эмулирующее программное обеспечение должно обеспечивать ресурсы, указанные архитектурой эмулируемого процессора, включая без ограничения управляющие регистры, регистры общего назначения, регистры с плавающей точкой, функцию динамической трансляции адреса, включая таблицы сегментов и таблицы страниц, например, механизмы прерывания, механизмы переключения контекста, часы истинного времени (TOD) и структурированные интерфейсы с подсистемами ввода-вывода с тем, чтобы операционная система или прикладная программа, рассчитанная на работу в эмулируемом процессоре, могла быть запущена в собственном процессоре, имеющем эмулирующее программное обеспечение.
Конкретная эмулируемая команда декодируется, и вызывается подпрограмма для выполнения функции отдельной команды. Функция эмулирующего программного обеспечения, эмулирующая функцию эмулируемого процессора, реализуется, в подпрограмме или драйвере на языке "C" или каким-либо другим способом обеспечения драйвера для конкретного аппаратного обеспечения, доступным для специалистов в данной области техники, ознакомившихся в описанием предпочтительного варианта осуществления. В различных патентах, в которых предложена эмуляция программного и аппаратного обеспечения, включая без ограничения патент US 5551013 под названием "Multiprocessor for hardware emulation", выданный на имя Beausoleil и др., патент US 6009261 под названием "Preprocessing of stored target routines for emulating incompatible instructions on a target processor", выданный на имя Scalzi и др.; патент US 5574873 под названием "Decoding guest команда to directly access emulation routines that emulate the guest instructions", выданный на имя Davidian и др.; патент US 6308255 под названием "Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system", выданный на имя Gorishek и др.; патент US 6463582 под названием "Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method", выданный на имя Lethin и др.; патент US 5790825 под названием "Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions", выданный на имя Eric Traut; каждый из которых включен в данное описание во всей их полноте, и многие другие, проиллюстрированные разнообразные известные способы эмуляции формата команд, структурированного для отличающейся машины, в целевой машине, доступные для специалистов в данной области техники.
На фиг. 22 проиллюстрирован один из примеров известной из техники эмулирующей компьютерной хост-системы 5092, которая эмулирует компьютерную хост-систему 5000', имеющую хост-архитектуру. Хост-процессором (ЦП) 5091 в компьютерной хост-системе 5092 эмуляции является хост-процессор (или виртуальный хост-процессор) эмуляции, представляющий собой процессор 5093 эмуляции со структурой собственных команд, отличающейся от структуры команд процессора 5091 хост-компьютера 5000'. Компьютерная хост-система 5092 эмуляции имеет память 5094, доступную для процессора 5093 эмуляции. В примере осуществления память 5094 разделена на память 5096 хост-компьютера и память 5097 программ эмуляции. Память 5096 хост-компьютера доступна для программ эмулируемого хост-компьютера 5092 в зависимости от архитектуры хост-компьютера. Процессор 5093 эмуляции выполняет собственные команды структурированной системы команд, структура которых отличается от структуры команд эмулируемого процессора 5091 и которые извлекаются из памяти 5097 программ эмуляции, и может осуществлять выборку хост-команды для выполнения из программы в памяти 5096 хост-компьютера путем применения одной или нескольких команд из программы контроля последовательности и выборки/декодирования (Sequence & Access/Decode), которая может декодировать выбранную хост-команду(-ы) и определять программу выполнения собственных команд эмуляции функции выбранной хост-команды. Другие средства, которые предусмотрены в архитектуре компьютерной хост-системы 5000', могут эмулироваться программами структурированных средств (Architected Facilities Routines), включая такие средства, как, например, регистры общего назначения, управляющие регистры, поддержка подсистемы динамической трансляции адреса и ввода-вывода и кэш-память процессора. Программы эмуляции также могут использовать функции, доступные в процессоре 5093 эмуляции (такие как общие регистры и динамическое транслирование виртуальных адресов) для повышения производительности программ эмуляции. Также может быть предусмотрено особое программное обеспечение и механизмы разгрузки, облегчающие процессору 5093 эмуляцию функции хост-компьютера 5000'.
Используемая в описании терминология имеет целью описание лишь частных вариантов осуществления, а не ограничение изобретения. Подразумевается, что используемые в описании формы единственного числа включают также формы множественного числа, если из контекста ясно не следует иное. Дополнительно подразумевается, что термины "содержит" и/или "содержащий", используемые в описании, означают присутствие указанных признаков, чисел, шагов, операций, элементов и/или компонентов, но не исключают присутствие или добавление одного или нескольких других признаков, чисел, шагов, операций, элементов, компонентов и/или их групп.
Подразумевается, что соответствующие структуры, материалы, действия и эквиваленты всех элементов "средство или шаг плюс функция" следующей далее формулы изобретения, если таковые существуют, включают любую структуру, материал или действие для выполнения функции в сочетании с другими конкретно заявленными средствами. Описание одного или более из воплощений изобретения представлено в качестве иллюстрации и не имеет целью исчерпать или ограничить изобретение раскрытой формой. Для специалистов в данной области техники бесспорны многочисленные модификации и разновидности. Выбранный и описанный вариант осуществления имеет целью наилучшим образом пояснить различные аспекты изобретения и его практическое применение, а также позволить специалистам в данной области техники понять различные варианты осуществления с различными модификациями, рассчитанными на конкретное применение.
Группа изобретений относится к обработке транзакций в вычислительной среде. Технический результат заключается в повышении быстродействия обработки за счет корректирующего действия, основанного на определении ситуации. Предлагается обработка вынужденной транзакции, которая может быть инициирована выполнением команды Начать Транзакцию вынужденно. Вынужденная транзакция имеет ряд ограничений, связанных с нею. При отсутствии нарушений ограничений, указанная вынужденная транзакция завершается. В случае обнаружения ситуации сброса, указанная транзакция повторно выполняется начиная с команды Начать Транзакцию. Нарушение ограничений может привести к прерыванию. 2 н. и 15 з.п. ф-лы, 27 ил.