Предпосылки создания изобретения
Один или более аспектов изобретения относится, в общем, к многопроцессорным вычислительным средам, и в частности, к транзакционной обработке внутри таких вычислительных сред.
Постоянной проблемой в многопроцессорном программировании являются обновления одной и той же ячейки памяти несколькими центральными процессорными устройствами (ЦП). Многие команды, обновляющие ячейки памяти, включая даже простые логические операции, такие как И (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 изображен один из вариантов логики, связанной с выполнением команды TBEGINC;
На ФИГ.12 изображен один из вариантов логики, связанной с выполнением команды TBEGIN;
На ФИГ.13 изображен один из вариантов логики, связанной с выполнением команды TEND;
На ФИГ.14 изображен один из вариантов логики, связанной с обработкой сброса транзакции;
На ФИГ.15 изображен один пример уровней фильтрации программного прерывания;
На ФИГ.16А-16Б изображен один пример ситуаций программного исключения и соответствующих классов транзакций и кодов ситуаций;
На ФИГ.17А-17Б изображен один из вариантов логики, связанной с фильтрацией прерываний;
На ФИГ.18А-18Б изображен пример вставки элемента очереди в двусвязанный список элементов очереди;
На ФИГ.19 изображен один из вариантов компьютерного программного продукта;
На ФИГ.20 изображен один из вариантов хост-компьютерной системы;
На ФИГ.21 изображен другой пример компьютерной системы;
На ФИГ.22 изображен еще один пример компьютерной системы, содержащий компьютерную сеть;
На ФИГ.23 изображен один из вариантов различных элементов компьютерной системы;
На ФИГ.24А изображен один из вариантов исполнительного устройства компьютерной системы согласно ФИГ.23;
На ФИГ.24Б изображен один из вариантов устройства ветвления компьютерной системы согласно ФИГ.23;
На ФИГ.24В изображен один из вариантов устройства загрузки/сохранения компьютерной системы согласно ФИГ.23; и
На ФИГ.25 изображен один из вариантов эмулированной хост-компьютерной системы.
ПОДРОБНОЕ ОПИСАНИЕ
В соответствии с одним аспектом, предоставляется средство транзакционного выполнения (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)), поле В команды, использующееся для определения логического адреса для ссылки в операнде хранения, назначает регистр доступа, а элемент контроля пространства адресов, заданный регистром доступа, используется DAT для данной ссылки. Для некоторых команд используется поле R вместо поля В. Предоставляются команды для загрузки и сохранения содержимого регистров доступа и для перемещения содержимого одного регистра доступа в другой.
Каждый из регистров доступа 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 описана в публикации ШМ, озаглавленной "z/Architecture - Principles of Operation," публикация № SA 22-7932-08, 9 издание, август 2010, которая включается сюда по ссылке во всей ее целостности.
Z/ARCHITECTURE, IBM, Z/OS и Z/VM (упоминаемые ниже) являются зарегистрированными торговыми марками корпорации International Business Machines, Армонк, штат Нью-Йорк. Другие названия, использованные здесь, могут быть зарегистрированными торговыми марками, торговыми марками или названиями изделий корпорации International Business Machines или других компаний.
В качестве примера, вычислительная среда 100 включает центральный процессорный комплекс (СРС) 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 Regigter 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: Директива А, бит 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 (А) 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 начинает первую вложенную транзакцию, a TBEGIN 604 начинает вторую вложенную транзакцию. В этом примере TBEGIN 604 и TEND 606 определяют самую внутреннюю транзакцию 608. Когда выполняется TEND 610, фиксируются транзакционные сохранения 612 для самой внешней транзакции и всех внутренних транзакций.
Невынужденная Транзакция (Nonconstrained Transaction): Невынужденная транзакция является транзакцией, которая выполняется в режиме невынужденного транзакционного выполнения. Хотя невынужденная транзакция не ограничена наподобие вынужденной транзакции, она все еще может быть сброшена из-за множества причин.
Режим Невынужденного Транзакционного Выполнения (Nonconstrained Transactional Execution Mode): Если транзакция запускается командой TBEGIN, процессор входит в режим невынужденного транзакционного выполнения. Пока процессор находится в режиме невынужденного транзакционного выполнения, глубина вложения транзакций может изменяться от единицы до максимальной глубины вложения транзакций.
Нетранзакционное Обращение (Non-Transactional Access): Нетранзакционные обращения являются обращениями к операндам памяти, совершаемые процессором, не находящимся в режиме транзакционного выполнения, (то есть, классические обращения к памяти вне транзакции). Далее, обращения, совершаемые подсистемой ввода-вывода, являются нетранзакционными обращениями. Кроме того, команда НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ может использоваться для вызова нетранзакционного обращения к памяти, когда процессор находится в режиме невынужденного транзакционного выполнения.
Один из вариантов формата команды НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ описан при помощи ФИГ.7. К примеру, команда НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ 700 включает множество полей кода операции 702a, 702b, определяющих код операции, который задает нетранзакционную операцию с памятью: поле регистра 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): Транзакция включает обращения к операндам памяти и изменения выбранных регистров общего назначения, совершенные, когда процессор находится в режиме транзакционного выполнения. Для невынужденной транзакции обращения к операндам памяти могут включать как транзакционные обращения, так и нетранзакционные обращения. Для вынужденной транзакции обращения к операндам памяти ограничены транзакционными обращениями. С точки зрения других процессоров и подсистемы ввода-вывода, все обращения к операндам памяти, совершенные процессором в режиме транзакционного выполнения, выглядят как происходящие как единичная параллельная операция. Если транзакция сбрасывается, транзакционные обращения к памяти отбрасываются, а любые регистры, заданные маской сохранения регистров общего назначения (MCPOT) самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ, восстанавливают содержимое на момент до выполнения транзакции.
Транзакционные Обращения (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.
Переопределение Фильтрации Программного Прерывания Транзакционного Выполнения (Transaction Execution Program Interruption Filtering Override) (PIFO): Бит 9 управляющего регистра нуль является переопределением фильтрации программного прерывания Транзакционного выполнения. Этот бит предоставляет механизм, с помощью которого управляющая программа может убедиться, что любая ситуация программного исключения, которая происходит, когда процессор находится в режиме Транзакционного выполнения, вызывает прерывание безотносительно к эффективной директиве фильтрации программного прерывания, определенной или подразумеваемой командой (командами) НАЧАТЬ ТРАНЗАКЦИЮ.
Биты Управляющего Регистра 2 (Control Register 2 Bits): Назначение битов следующее, в одном варианте:
Область Диагностики Транзакций (TDS): Бит 61 управляющего регистра 2 управляет применимостью директивы диагностики транзакций (transaction diagnosis control) (TDC) в битах 62-63 регистра следующим образом:
Директива Диагностики Транзакций (TDC): Биты 62-63 управляющего регистра 2 являются 2-разрядным целым числом без знака, которое может использоваться для вызова случайного сброса транзакций в диагностических целях. Кодировка 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 может быть проверен в PID в ячейках 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, заданном адресом блока диагностики транзакций; иначе, это поле зарезервировано.
Адрес События Останова (Breaking Event Address) 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); СРАВНИТЬ НЕПОСРЕДСТВЕННО И РАЗВЕТВИТЬ (CIB, CGIB); СРАВНИТЬ НЕПОСРЕДСТВЕННО И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО (CIJ, CGIJ); СРАВНИТЬ ЛОГИЧЕСКИ И РАЗВЕТВИТЬ (CLRB, CLGRB); СРАВНИТЬ ЛОГИЧЕСКИ И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО (CLRJ, CLGRJ); СРАВНИТЬ ЛОГИЧЕСКИ НЕПОСРЕДСТВЕННО И РАЗВЕТВИТЬ (CLIB, CLGIB) и СРАВНИТЬ ЛОГИЧЕСКИ НЕПОСРЕДСТВЕННО И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО (CLIJ, CLGIJ).
Также считается, что событие останова происходит всегда, когда одна из следующих команд завершается: РАЗВЕТВИТЬ И УСТАНОВИТЬ ПОЛНОМОЧИЯ (BSA); РАЗВЕТВИТЬ В ПОДПРОСТРАНСТВЕННОЙ ГРУППЕ (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 недопустимые команды включают, к примеру, следующие непривилегированные команды: СРАВНИТЬ И ОБМЕНЯТЬ И СОХРАНИТЬ; ИЗМЕНИТЬ ДИРЕКТИВЫ ИНСТРУМЕНТА СРЕДЫ ВЫПОЛНЕНИЯ; ОСУЩЕСТВИТЬ БЛОКИРОВАННУЮ ОПЕРАЦИЮ; ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ (ОТНОСИТЕЛЬНО ДЛИННОЕ), если код в поле M1 равен 6 или 7; СОХРАНИТЬ СИМВОЛЫ ПО МАСКЕ ВЫШЕ, если поле M3 равно нулю, а код в поле R1 равен 6 или 7; СОХРАНИТЬ СПИСОК СРЕДСТВ РАСШИРЕННО; СОХРАНИТЬ ДИРЕКТИВЫ ИНСТРУМЕНТА СРЕДЫ ВЫПОЛНЕНИЯ; ВЫЗОВ СУПЕРВИЗОРА и ПРОВЕРИТЬ ДИРЕКТИВЫ ИНСТРУМЕНТА СРЕДЫ ВЫПОЛНЕНИЯ.
В вышеприведенном списке, СРАВНИТЬ И ОБМЕНЯТЬ И СОХРАНИТЬ и ОСУЩЕСТВИТЬ БЛОКИРОВАННУЮ ОПЕРАЦИЮ являются сложными командами, которые могут быть реализованы более эффективно с помощью базовых команд в режиме TX. Случаи для ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ и ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ ОТНОСИТЕЛЬНО ДЛИННОЕ недопустимы, так как коды 6 и 7 возвращают строку кэша, требующую фиксации данных потенциально ранее, чем завершение транзакции. ВЫЗОВ СУПЕРВИЗОРА недопустим, так как он вызывает прерывание (которое вызывает сброс транзакции).
В ситуациях, перечисленных ниже, следующие команды недопустимы:
- РАЗВЕТВИТЬ И СВЯЗАТЬ (BALR); РАЗВЕТВИТЬ И СОХРАНИТЬ (BASR) и РАЗВЕТВИТЬ И СОХРАНИТЬ И УСТАНОВИТЬ РЕЖИМ, если поле R2 команды не нуль, а трассировка ветвления включена,
- РАЗВЕТВИТЬ И СОХРАНИТЬ И УСТАНОВИТЬ РЕЖИМ и РАЗВЕТВИТЬ И УСТАНОВИТЬ РЕЖИМ, если поле R2 команды не нуль, а трассировка режима включена; УСТАНОВИТЬ РЕЖИМ АДРЕСАЦИИ, если трассировка режима включена.
- ВЫЗОВ МОНИТОРА, если обнаружена ситуация события монитора.
Вышеприведенный список включает команды, которые могут создавать трассировочные сообщения. Если этим командам разрешено выполняться транзакционно и создавать трассировочные сообщения, и транзакция впоследствии сбрасывается, указатель трассировочной таблицы в управляющем регистре 12 передвинется, но записи в трассировочную таблицу будут отброшены. Это оставит несоответствующий провал в трассировочной таблице. Поэтому команды недопустимы в случаях, когда они будут создавать трассировочные сообщения.
Если процессор находится в режиме транзакционного выполнения, недопустимы ли следующие команды, зависит от модели: ЗАШИФРОВАТЬ СООБЩЕНИЕ; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ CFB; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ СЦЕПЛЕНИЯ; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ СЧЕТЧИКА; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ OFB; ВЫЗОВ СЖАТИЯ; ВЫЧИСЛИТЬ КОНТРОЛЬНУЮ СУММУ ПРОМЕЖУТОЧНОГО СООБЩЕНИЯ; ВЫЧИСЛИТЬ КОНТРОЛЬНУЮ СУММУ ПОСЛЕДНЕГО СООБЩЕНИЯ; ВЫЧИСЛИТЬ КОД АУТЕНТИФИКАЦИИ СООБЩЕНИЯ; ТРАНСЛИРОВАТЬ ЮНИКОД-16 В ЮНИКОД-32; ТРАНСЛИРОВАТЬ ЮНИКОД-16 В ЮНИКОД-8; ТРАНСЛИРОВАТЬ ЮНИКОД-32 В ЮНИКОД-16; ТРАНСЛИРОВАТЬ ЮНИКОД-32 В ЮНИКОД-8; ТРАНСЛИРОВАТЬ ЮНИКОД-8 В ЮНИКОД-16; ТРАНСЛИРОВАТЬ ЮНИКОД-8 В ЮНИКОД-32; ПРОИЗВЕСТИ КРИПТОГРАФИЧЕСКОЕ ВЫЧИСЛЕНИЕ; ВЫКЛЮЧИТЬ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ и ВКЛЮЧИТЬ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ.
Каждая из этих команд или в настоящее время реализуется аппаратным сопроцессором, или была в прошлых машинах, и поэтому считается недопустимой.
Если эффективная директива разрешения изменения AR (A) равна нулю, недопустимы следующие команды: КОПИРОВАТЬ ДОСТУП; ЗАГРУЗИТЬ ДОСТУП МНОЖЕСТВЕННО; ЗАГРУЗИТЬ АДРЕС РАСШИРЕННО и УСТАНОВИТЬ ДОСТУП.
Каждая из вышеуказанных команд вызывает изменение содержимого регистра доступа. Если директива 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 обобщены примерные коды сброса, сохраняемые в блоке диагностики транзакций, и соответствующие коды состояния (СС). Описание на ФИГ.10 иллюстрирует одну частную реализацию. Возможны другие реализации и кодировки величин.
В одном из вариантов, и как упоминалось выше, транзакционное средство обеспечивает как вынужденные транзакции, так и невынужденные транзакции, а также связанную с ними обработку. Сначала обговорены вынужденные транзакции, а далее описаны невынужденные транзакции.
Вынужденная транзакция выполняется в транзакционном режиме без пути отката. Этот режим обработки полезен для компактных функций. В отсутствие повторяющихся прерываний или конфликтов с другими процессорами или подсистемой ввода-вывода (напр., вызванных ситуациями, которые не позволят транзакции завершиться успешно) вынужденная транзакция в итоге завершается; таким образом, не требуется и не определена подпрограмма-обработчик сброса. Например, в отсутствие нарушения условия, которое не может быть разрешено (напр., деление на 0); ситуации, которая не позволяет транзакции завершиться (напр., прерывание таймера, которое не позволяет команде запуститься; горячий ввод-вывод и т.п.); или нарушения ограничения или препятствия, связанного с вынужденной транзакцией, транзакция в итоге завершится.
Вынужденная транзакция запускается командой НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC), когда глубина вложения транзакций изначально равна нулю. Вынужденная транзакция подчиняется следующим ограничениям, в одном из вариантов.
1. Транзакция выполняет не более 32 команд, не включая команды НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC) и ЗАКОНЧИТЬ ТРАНЗАКЦИЮ.
2. Все команды в транзакции должны быть в пределах 256 непрерывных байт памяти, включая команды НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC) и ЗАКОНЧИТЬ ТРАНЗАКЦИЮ.
3. Кроме недопустимых команд, к вынужденной транзакции применяются следующие ограничения.
а. Команды ограничиваются теми, что называются Основными Командами, включая, например, сложить, вычесть, умножить, разделить, сдвинуть, циклически сдвинуть и т.д.
б. Команды ветвления ограничены следующими (перечислены команды для z/Architecture, в одном примере):
- РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО УСЛОВИЮ, в которой M1 не нуль, а поле RI2 содержит положительное значение.
- РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО ПО УСЛОВИЮ ДЛИННОЕ, в которой поле M1 не нуль, а поле RI2 содержит положительное значение, которое не вызывает циклического возврата адреса.
- СРАВНИТЬ И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО, СРАВНИТЬ НЕПОСРЕДСТВЕННО И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО, СРАВНИТЬ ЛОГИЧЕСКИ И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО и СРАВНИТЬ ЛОГИЧЕСКИ НЕПОСРЕДСТВЕННО И РАЗВЕТВИТЬ ОТНОСИТЕЛЬНО, в которых поле M3 не нуль, а поле RI4 содержит положительное значение. (То есть, только прямые ветвления с ненулевой маской ветвления).
в. За исключением ЗАКОНЧИТЬ ТРАНЗАКЦИЮ и команд, которые вызывают заданную сериализацию операндов, команды, которые вызывают функцию сериализации, недопустимы.
г. Команды операций сохранения-и-сохранения (CC-) и операций сохранения-и-сохранения с расширенным операционным кодом (CCP-) недопустимы.
д. Все следующие основные команды (для z/Architecture в этом примере) недопустимы: ПРОВЕРИТЬ СУММУ; ЗАШИФРОВАТЬ СООБЩЕНИЕ; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ CFB; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ СЦЕПЛЕНИЯ; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ СЧЕТЧИКА; ЗАШИФРОВАТЬ СООБЩЕНИЕ С ПОМОЩЬЮ OFB; СРАВНИТЬ И СОЗДАТЬ КОДОВОЕ СЛОВО; СРАВНИТЬ ЛОГИЧЕСКИ ДЛИННОЕ; СРАВНИТЬ ЛОГИЧЕСКИ ДЛИННОЕ РАСШИРЕННО; СРАВНИТЬ ЛОГИЧЕСКИ ДЛИННОЕ ЮНИКОД; СРАВНИТЬ ЛОГИЧЕСКИ СТРОКУ; СРАВНИТЬ ПОКА ПОДСТРОКА НЕ РАВНА; ВЫЗОВ СЖАТИЯ; ВЫЧИСЛИТЬ КОНТРОЛЬНУЮ СУММУ НЕПОСРЕДСТВЕННОГО СООБЩЕНИЯ; ВЫЧИСЛИТЬ КОНТРОЛЬНУЮ СУММУ ПОСЛЕДНЕГО СООБЩЕНИЯ; ВЫЧИСЛИТЬ КОД АУТЕНТИФИКАЦИИ СООБЩЕНИЯ; ТРАНСЛИРОВАТЬ В ДВОИЧНОЕ; ТРАНСЛИРОВАТЬ В ДЕСЯТИЧНОЕ; ТРАНСЛИРОВАТЬ ЮНИКОД-16 В ЮНИКОД-32; ТРАНСЛИРОВАТЬ ЮНИКОД-16 В ЮНИКОД-8; ТРАНСЛИРОВАТЬ ЮНИКОД-32 В ЮНИКОД-16; ТРАНСЛИРОВАТЬ ЮНИКОД-32 В ЮНИКОД-8; ТРАНСЛИРОВАТЬ ЮНИКОД-8 В ЮНИКОД-16; ТРАНСЛИРОВАТЬ ЮНИКОД-8 В ЮНИКОД-32; РАЗДЕЛИТЬ; РАЗДЕЛИТЬ ЛОГИЧЕСКИ; РАЗДЕЛИТЬ ОДНОКРАТНО; ВЫПОЛНИТЬ; ВЫПОЛНИТЬ ОТНОСИТЕЛЬНО ДЛИННОЕ; ИЗВЛЕЧЬ АТРИБУТ КЭША; ИЗВЛЕЧЬ ВРЕМЯ ПРОЦЕССОРА; ИЗВЛЕЧЬ PSW; ИЗВЛЕЧЬ ГЛУБИНУ ВЛОЖЕНИЯ ТРАНЗАКЦИЙ: ЗАГРУЗИТЬ И СЛОЖИТЬ; ЗАГРУЗИТЬ И СЛОЖИТЬ ЛОГИЧЕСКИ; ЗАГРУЗИТЬ И И; ЗАГРУЗИТЬ И ИСКЛЮЧАЮЩЕЕ ИЛИ; ЗАГРУЗИТЬ И ИЛИ; ЗАГРУЗИТЬ ПАРУ НЕПЕРЕСЕКАЮЩУЮСЯ; ЗАГРУЗИТЬ ПАРУ ИЗ ЧЕТВЕРТНОГО СЛОВА; ВЫЗОВ МОНИТОРА; ПЕРЕМЕСТИТЬ ДЛИННОЕ; ПЕРЕМЕСТИТЬ ДЛИННОЕ РАСШИРЕННО; ПЕРЕМЕСТИТЬ ДЛИННОЕ ЮНИКОД: ПЕРЕМЕСТИТЬ СТРОКУ; НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ; ПРОИЗВЕСТИ КРИПТОГРАФИЧЕСКОЕ ВЫЧИСЛЕНИЕ; ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ; ПРЕДВАРИТЕЛЬНО ВЫБРАТЬ ДАННЫЕ ОТНОСИТЕЛЬНО ДЛИННОЕ; ГЕНЕРИРОВАТЬ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ; СЛЕДУЮЩИЙ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ; ВЫКЛЮЧИТЬ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ; ВКЛЮЧИТЬ ИНСТРУМЕНТ СРЕДЫ ВЫПОЛНЕНИЯ; НАЙТИ СТРОКУ; НАЙТИ; СТРОКА ЮНИКОДА; УСТАНОВИТЬ РЕЖИМ АДРЕСАЦИИ; СОХРАНИТЬ СИМВОЛЫ ПО МАСКЕ ВЫШЕ, если поле M3 нуль, а код в поле R1 равен 6 или 7; СОХРАНИТЬ СИНХРОНИЗАЦИЮ; СОХРАНИТЬ СИНХРОНИЗАЦИЮ РАСШИРЕННО; СОХРАНИТЬ СИНХРОНИЗАЦИЮ БЫСТРО; СОХРАНИТЬ СПИСОК СРЕДСТВ РАСШИРЕНО; СОХРАНИТЬ ПАРУ В ЧЕТВЕРТНОМ СЛОВЕ; ПРОВЕРИТЬ РЕЖИМ АДРЕСАЦИИ; СБРОСИТЬ ТРАНЗАКЦИЮ; НАЧАТЬ ТРАНЗАКЦИЮ (обе TBEGIN и TBEGINC); ТРАНСЛИРОВАТЬ И ПРОВЕРИТЬ РАСШИРЕННО; ТРАНСЛИРОВАТЬ И ПРОВЕРИТЬ РЕВЕРСИВНО РАСШИРЕННО; ТРАНСЛИРОВАТЬ РАСШИРЕННО; ТРАНСЛИРОВАТЬ ОДИН К ОДНОМУ; ТРАНСЛИРОВАТЬ ОДИН К ДВУМ; ТРАНСЛИРОВАТЬ ДВА К ОДНОМУ и ТРАНСЛИРОВАТЬ ДВА К ДВУМ.
4. Операнды памяти транзакции имеют доступ не более чем к четырем восьмерным словам. Примечание: ЗАГРУЗИТЬ ПО УСЛОВИЮ и СОХРАНИТЬ ПО УСЛОВИЮ относятся к стандартной памяти независимо от кода состояния. Восьмерное слово является, например, группой из 32 последовательных байт на 32-байтной границе.
5. Транзакция, выполняющаяся на этом процессоре, или записи других процессоров или подсистемы ввода-вывода, не имеют доступа к операндам памяти в любом 4-килобайтном блоке, который содержит 256 байт памяти, начиная с команды НАЧАТЬ ТРАНЗАКЦИЮ вынужденно (TBEGINC).
6. Транзакция не имеет доступа к командам или операндам памяти, использующим различные логические адреса, которые отображаются на один и тот же абсолютный адрес.
7. Обращения к операндам, совершенные транзакцией, должны быть в пределах единого двойного слова, за исключением того, что для ЗАГРУЗИТЬ ДОСТУП МНОЖЕСТВЕННО, ЗАГРУЗИТЬ МНОЖЕСТВЕННО, ЗАНРУЗИТЬ МНОЖЕСТВЕННО ВЫШЕ, СОХРАНИТЬ ДОСТУП МНОЖЕСТВЕННО, СОХРАНИТЬ МНОЖЕСТВЕННО и СОХРАНИТЬ МНОЖЕСТВЕННО ВЫШЕ обращения к операндам должны быть в пределах единого восьмерного слова.
Если вынужденная транзакция нарушает любое из ограничений 1-7, перечисленных выше, то или (а) обнаруживается вынужденное программное прерывание транзакции, или (б) выполнение продолжается, как если бы транзакция не была вынужденной, за исключением того, что дальнейшие нарушения ограничений все еще могут вызвать вынужденное программное прерывание транзакции. Нельзя предсказать, какое действие будет предпринято, и предпринятые действия могут отличаться в зависимости от того, какое ограничение нарушено.
В отсутствие нарушений ограничений, повторяющихся прерываний или конфликтов с другими процессорами и подсистемой ввода-вывода вынужденная транзакция в итоге завершится как описано выше.
1. Вероятность успешного завершения вынужденной транзакции повышается, если транзакция удовлетворяет следующим критериям:
а. Полученных инструкций меньше, чем максимальное число 32.
б. Обращений к операндам памяти меньше, чем максимальное число 4 восьмерных слова.
в. Обращения к операндам памяти находятся в одной и той же строке кэша.
г. Обращения к операндам памяти в одних и тех же ячейках происходят в одном и том же порядке во всех транзакциях.
2. Вынужденная транзакция не обязательно гарантированно успешно завершается при ее первом выполнении. Однако, если вынужденная транзакция, которая не нарушает ни одного из перечисленных ограничений, сбрасывается, процессор задействует схемы для гарантирования того, чтобы повторное выполнение транзакции было впоследствии успешным.
3. Внутри вынужденной транзакции НАЧАТЬ ТРАНЗАКЦИЮ является недопустимой командой, поэтому вынужденная транзакция не может быть вложенной.
4. Нарушение любого из ограничений 1-7 выше вынужденной транзакцией может привести к зацикливанию программы.
5. Ограничения вынужденной транзакции схожи с ограничениями цикла сравнить-и-обменять. Из-за возможности помех со стороны других процессоров и подсистемы ввода-вывода нет архитектурной гарантии, что команда СРАВНИТЬ И ОБМЕНЯТЬ всегда будет завершаться с кодом состояния 0. Вынужденная транзакция может страдать от подобных помех в виде сбросов из-за конфликта считывания или записи, или горячих прерываний.
Процессор задействует алгоритмы равного доступа для гарантирования того, что в отсутствие любых нарушений ограничения вынужденная транзакция в итоге завершается.
6. Для того чтобы определить число повторных итераций, необходимых для завершения вынужденной транзакции, программа может задействовать счетчик в регистре общего назначения, который не подчиняется маске сохранения регистров общего назначения. Пример показан ниже.
Отметим, что оба регистра 14 и 15 не восстанавливаются в этом примере. Также отметим, что на некоторых моделях счет в регистре общего назначения 15 может быть низким, если процессор обнаруживает ситуацию сброса сразу после завершения команды TBEGINC, но до завершения команды AHI.
С точки зрения процессора, считывание и запись, совершенные в режиме транзакционного выполнения, не отличаются от совершенных не в режиме транзакционного выполнения.
В одном из вариантов пользователь (т.е., создающий транзакцию) выбирает, будет ли транзакция вынужденной или нет. Один вариант логики, связанный с обработкой вынужденных транзакций, и, в частности, обработкой, связанной с командой TBEGINC, описаны при помощи ФИГ.11. Выполнение команды TBEGINC вызывает вход процессора в режим вынужденного транзакционного выполнения или продолжение в режиме невынужденного выполнения. ЦП (т.е., процессор), выполняющий TBEGINC, следует логике ФИГ.11.
Согласно ФИГ.11, на основе выполнения команды TBEGINC, исполняется функция сериализации, ШАГ 1100. Функция или операция сериализации включает завершение всех концептуально предшествующих обращений к памяти (и, для z/Architecture, к примеру, установление соответствующих бита ссылки и бита изменения) процессором, с точки зрения других процессоров и подсистемы ввода-вывода, до того как происходят концептуально последующие обращения к памяти (и установление соответствующих бита ссылки и бита изменения). Сериализация затрагивает последовательность всех обращений процессора к памяти и к ключам памяти, за исключением связанных со считыванием пункта таблицы ART и пункта таблицы DAT.
С точки зрения процессора в режиме транзакционного выполнения, сериализация работает нормально (как описано ниже). С точки зрения других процессоров и подсистемы ввода-вывода операция сериализации, исполняющаяся, когда процессор находится в режиме транзакционного выполнения, происходит, когда процессор выходит из режима транзакционного выполнения, либо в результате команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ, которая вызывает снижение глубины вложения транзакций до нуля (нормальное окончание), либо в результате сброса транзакции.
Вслед за осуществлением сериализации выполняется определение, обнаружено ли исключение, ЗАПРОС 1102. Если так, исключение обрабатывается, ШАГ 1104. Например, обнаруживается исключение специальной операции, и операция подавляется, если директива транзакционного выполнения, бит 8 управляющего регистра 0, равна 0. В других примерах, обнаруживается исключение определения, и операция подавляется, если поле B1, биты 16-19 команды, не нуль; обнаруживается исключение выполнения, и операция подавляется, если TBEGINC является целью команды исполнительного типа, и обнаруживается исключение операции, и операция подавляется, если средство выполнения транзакции не установлено в данной конфигурации. Если процессор уже находится в режиме вынужденного транзакционного выполнения, то обнаруживается программное исключение исключения ограничения транзакции, и операция подавляется. Далее, если глубина вложения транзакций, будучи увеличена на 1, превысит зависящую от модели максимальную глубину вложения транзакций, транзакция сбрасывается с кодом сброса 13. Могут обнаруживаться и обрабатываться другие и разные исключения.
Однако, если нет исключения, выполняется определение, равна ли глубина вложения транзакций нулю, ЗАПРОС 1106. Если глубина вложения транзакций равна нулю, то адрес блока диагностики транзакций считается недействительным, ШАГ 1108; PSW сброса транзакции устанавливается из содержимого текущего PSW, за исключением того, что адрес команды PSW сброса транзакции определяет команду TBEGINC, а не следующую последовательную команду, ШАГ 1110; а содержимое пар регистров общего назначения, как определено маской сохранения регистров общего назначения, сохраняется в зависящем от модели месте, которое недоступно программе напрямую, ШАГ 1112. Далее, глубина вложения устанавливается в 1, ШАГ 1114. Кроме того, эффективная величина разрешения операции с плавающей точкой (F) и директивы фильтрации программного прерывания (PIFC) устанавливаются в нуль, ШАГ 1116. Далее, определяется эффективная величина директивы разрешения изменения AR (A), поле бита 12 поля I2 команды, ШАГ 1118. Например, эффективная директива A является логическим И (AND) директивы A в команде TBEGINC для текущего уровня и для любых внешних команд TBEGIN.
Возвращаясь к ЗАПРОСУ 1106, если глубина вложения транзакций больше, чем нуль, то глубина вложения увеличивается на 1, ШАГ 1120. Далее, эффективная величина разрешения операции с плавающей точкой (F) устанавливается в нуль, а эффективная величина директивы фильтрации программного прерывания (PIFC) не изменяется, ШАГ 1122. Потом обработка продолжается с ШАГА 1118. В одном из вариантов успешный запуск транзакции приводит к коду состояния 0. Этим заканчивается один из вариантов логики, связанной с выполнением команды TBEGINC.
В одном из вариантов проверка исключения, предусмотренная выше, может происходить в ином порядке. Один из отдельных порядков проверки исключения следующий:
Исключения с таким же приоритетом, что и приоритет ситуаций программного прерывания, в общем случае.
Исключение определения из-за поля B1, содержащего ненулевое значение.
Сброс из-за превышения глубины вложения транзакций.
Код состояния 0 из-за нормального завершения.
Дополнительно, в одном или более вариантах применяется следующее:
1. Регистры, определенные к сохранению маской сохранения регистров общего назначения, восстанавливаются только если транзакция сбрасывается, а не тогда, когда транзакция заканчивается нормально при помощи ЗАКОНЧИТЬ ТРАНЗАКЦИЮ. Только регистры, определенные GRSM самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ, восстанавливаются при сбросе.
Поле I2 должно определить все пары регистров, которые предоставляют входные значения, которые изменяются в вынужденной транзакции. Таким образом, если транзакция сбрасывается, входные значения регистров будут восстановлены к их изначальному содержимому, когда вынужденная транзакция выполняется повторно.
2. На большинстве моделей можно реализовать улучшение производительности как в НАЧАТЬ ТРАНЗАКЦИЮ, так и при сбросе транзакции, задав минимальное число регистров, которые должны сохраняться и восстанавливаться в маске сохранения регистров общего назначения.
3. Следующее иллюстрирует результаты команды НАЧАТЬ ТРАНЗАКЦИЮ (обоих TBEGIN и TBEGINC) на основе текущей глубины вложения транзакций (TND) и, если TND не нуль, нахождения процессора в режиме невынужденного или вынужденного транзакционного выполнения:
Как описано здесь, в соответствии с одним аспектом, вынужденная транзакция гарантированно выполняется при условии, что она не содержит условия, которое делает ее неспособной завершиться. Для обеспечения ее завершения процессор (напр., ЦП), выполняющий транзакцию, может предпринять некоторые действия. Например, если у вынужденной транзакции ситуация сброса, процессор может временно:
(а) приостановить выполнение с изменением последовательности;
(б) приостановить доступ других процессоров к конфликтующим ячейкам памяти;
(в) вызвать случайные задержки в обработке сброса; и/или
(г) вызвать другие средства для облегчения успешного завершения.
Короче говоря, обработка вынужденной транзакции производится следующим образом:
- Если процессор уже в режиме вынужденного TX, обнаруживается исключение ограничения транзакции.
- Если текущая TND (Глубина Вложения Транзакций)>0, выполнение производится, как для невынужденной транзакции
Как описано выше, кроме вынужденной транзакционной обработки, которая является опциональной, в одном из вариантов воплощения, транзакционное средство обеспечивает также невынуждснную транзакционную обработку. Дальнейшие подробности касательно обработки невынужденных транзакций, и, в частности, обработки, связанной с командой TBEGIN, описываются при помощи ФИГ.12. Выполнение команды TBEGIN вызывает вход или продолжение работы процессора в режиме невынужденного транзакционного выполнения. ЦП (т.е., процессор), выполняющий TBEGIN, следует логике ФИГ.12.
Согласно ФИГ.12, на основе выполнения команды TBEGIN исполняется функция сериализации (описана выше), ШАГ 1200. Вслед за осуществлением сериализации выполняется определение, обнаружено ли исключение, ЗАПРОС 1202. Если так, исключение обрабатывается, ШАГ 1204. Например, обнаруживается исключение специальной операции, и операция подавляется, если директива транзакционного выполнения, бит 8 управляющего регистра 0, равна нулю. Далее, обнаруживается исключение определения, и операция подавляется, если директива фильтрации программного прерывания, биты 14-15 поля I2 команды, содержит значение 3; или адрес первого операнда не определяет границу двойного слова. Обнаруживается исключение определения, и операция подавляется, если средство транзакционного выполнения не установлено в данной конфигурации; обнаруживается исключение выполнения, и операция подавляется, если TBEGIN является целью команды исполнительного типа. Кроме того, если процессор находится в режиме вынужденного транзакционного выполнения, то обнаруживается программное исключение исключения ограничения транзакции, и операция подавляется. Далее, если глубина вложения транзакций, будучи увеличена на 1, превысит зависящую от модели максимальную глубину вложения транзакций, транзакция сбрасывается с кодом сброса 13.
Еще далее, если поле B1 команды не нуль, а процессор не находится в режиме транзакционного выполнения, т.е., глубина вложения транзакций равна нулю, то определяется доступность памяти для первого операнда. Если первый операнд не может быть доступен для записи, то обнаруживается исключение доступа, а операция аннулируется, подавляется и прерывается, в зависимости от конкретной ситуации исключения доступа. Дополнительно, обнаруживается любое событие изменения памяти PER для первого операнда. Если поле B1 не нуль, а процессор уже находится в режиме транзакционного выполнения, нельзя предсказать, определяется ли доступность памяти для первого операнда, и обнаруживаются события изменения памяти PER для первого операнда. Если поле B1 равно нулю, то первый операнд недоступен.
В дополнение к проверке исключений, выполняется определение, находится ли процессор в режиме транзакционного выполнения (т.е., глубина вложения транзакций равна нулю), ЗАПРОС 1206. Если процессор не находится в режиме выполнения транзакций, то содержимое выбранных пар регистров общего назначения сохраняется, ШАГ 1208. В частности, содержимое пар регистров общего назначения, определенных маской сохранения регистров общего назначения, сохраняется в зависящем от модели месте, которое недоступно программе напрямую.
Далее, выполняется определение, равно ли поле B1 команды нулю, ЗАПРОС 1210. Если поле B1 не равняется нулю, адрес первого операнда помещается в адрес блока диагностики транзакций, ШАГ 1214, и адрес блока диагностики транзакций действителен. Далее, PSW сброса транзакции устанавливается из содержимого текущего PSW, ШАГ 1216. Адрес команды PSW сброса транзакции определяет следующую последовательную команду (то есть, команду, следующую за самой внешней TBEGIN).
Более того, определяется эффективная величина директивы разрешения изменения AR (А), поле бита 12 поля I2 команды, ШАГ 1218. Эффективная директива A является логическим И (AND) директивы A в команде TBEGIN для текущего уровня и для всех внешних уровней. Дополнительно, определяется эффективная величина директивы разрешения операции с плавающей точкой (F), бит 13 поля I2 команды, ШАГ 1220. Эффективная директива F является логическим И (AND) директивы F в команде TBEGIN для текущего уровня и для всех внешних уровней. Далее, определяется эффективная величина директивы фильтрации программного прерывания (PIFC), биты 14-15 поля I2 команды, ШАГ 1222. Эффективное значение PIFC является наивысшим значением в команде TBEGIN для текущего уровня и для всех внешних уровней.
Дополнительно, к глубине вложения транзакций прибавляется единица, ШАГ 1224, и команда завершается с установкой кода состояния 0, ШАГ 1226. Если глубина вложения транзакций изменяется от нуля к единице, процессор входит в режим невынужденного транзакционного выполнения; иначе процессор остается в режиме невынужденного транзакционного выполнения.
Возвращаясь к ЗАПРОСУ 1210, если B1 равняется нулю, то адрес блока диагностики транзакций недействителен, ШАГ 1211, и обработка продолжается с ШАГА 1218. Аналогично, если процессор находится в режиме транзакционного выполнения, ЗАПРОС 1206, обработка продолжается с ШАГА 1218.
Итоговые Коды Состояния выполнения TBEGIN включают, например:
0 Запуск транзакции успешный
1 -
2 -
3 -
Программные Исключения включают, например:
- Доступ (память, первый операнд)
- Операция (средство транзакционного выполнения не установлено)
- Специальная операция
- Определение
- Ограничение транзакции (из-за недопустимой команды)
В одном из вариантов проверка исключения, предусмотренная выше, может происходить в ином порядке. Один из отдельных порядков проверки исключения следующий:
- Исключения с таким же приоритетом, что и приоритет ситуаций программного прерывания, в общем случае.
- Исключение определения из-за зарезервированной величины PIFC.
- Исключение определения из-за того, что адрес первого операнда не на границе двойного слова.
- Исключение доступа (если поле B1 не нуль).
- Сброс из-за превышения максимальной глубины вложения транзакций.
- Код состояния 0 из-за нормального завершения.
Примечания:
1. Если поле B1 не нуль, применяется следующее:
- Должен быть предоставлен доступный блок диагностики транзакций (TDB), если запускается самая внешняя транзакция - даже если транзакция никогда не сбрасывается.
- Поскольку нельзя предсказать, проверена ли доступность TDB для вложенных транзакций, следует предоставить доступный TDB для любой вложенной команды TBEGIN.
- Производительность любой TBEGIN, в которой поле B1 не нуль, и производительность любой обработки сброса, которая производится для транзакции, которая была запущена самой внешней TBEGIN, в которой поле B1 не нуль, может быть медленнее, чем если поле B1 равно нулю.
2. Регистры, определенные к сохранению маской сохранения регистров общего назначения, восстанавливаются, в одном из вариантов, только если транзакция сбрасывается, а не тогда, когда транзакция заканчивается нормально при помощи ЗАКОНЧИТЬ ТРАНЗАКЦИЮ. Только регистры, определенные GRSM самой внешней команды НАЧАТЬ ТРАНЗАКЦИЮ, восстанавливаются при сбросе.
Поле I2 должно определить все пары регистров, которые предоставляют входные значения, которые изменяются в транзакции. Таким образом, если транзакция сбрасывается, входные значения регистров будут восстановлены к их изначальному содержимому, когда вмешивается обработчик сброса.
3. Ожидается, что команда НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN) сопровождается командой условного ветвления, которая определит, успешно ли запущена транзакция.
4. Если транзакция сбрасывается из-за ситуаций, не вызывающих прерывания, управление переходит к команде, определенной PSW сброса транзакции (то есть, команде, следующей за самой внешней НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN)). В дополнение к коду состояния, установленному командой НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN), коды состояния 1-3 также устанавливаются, когда транзакция сбрасывается.
Таким образом, последовательность команд, следующая за самой внешней командой НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN) должна быть способна разместить все четыре кода состояния, даже если команда TBEGIN устанавливает только код 0, в данном примере.
5. На большинстве моделей можно реализовать улучшение производительности как в НАЧАТЬ ТРАНЗАКЦИЮ, так и при сбросе транзакции, задав минимальное число регистров, которые должны сохраняться и восстанавливаться в маске сохранения регистров общего назначения.
6. Находясь в режиме невынужденного транзакционного выполнения, программа может вызвать служебную функцию, которая может изменять регистры доступа и регистры с плавающей точкой (включая управляющий регистр с плавающей точкой). Хотя такая служебная подпрограмма может сохранять измененные регистры при входе и восстанавливать их при выходе, транзакция может быть сброшена до нормального выхода из подпрограммы. Если вызывающая программа не обеспечивает сохранение этих регистров, пока процессор находится в режиме невынужденного транзакционного выполнения, она может быть неспособна выдержать изменение регистров служебной функцией.
Для предотвращения непреднамеренного изменения регистров доступа, пока процессор в режиме невынужденного транзакционного выполнения, программа может установить директиву разрешения изменения AR, бит 12 поля I2 команды НАЧАТЬ ТРАНЗАКЦИЮ, в нуль. Аналогично, для предотвращения непреднамеренного изменения регистров с плавающей точкой программа может установить директиву разрешения операции с плавающей точкой, бит 13 поля I2 команды TBEGIN, в нуль.
7. Ситуации программного исключения, обнаруженные во время выполнения команды НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN), подчиняются эффективной директиве фильтрации программного прерывания, установленной любой из внешних команд TBEGIN. Ситуации программного исключения, обнаруженные во время выполнения самой внешней команды TBEGINC, не подлежат фильтрации.
8. Для того чтобы обновлять многие ячейки памяти последовательным образом, традиционные кодовые последовательности могут задействовать блокировочное слово (семафор). Если (а) транзакционное выполнение используется для реализации обновления многих ячеек памяти, (б) программа также предусматривает путь "отката" для вызова в случае сброса транзакции, и (в) путь отката задействует блокировочное слово, то путь транзакционного выполнения должен также проверять доступность блокировки, а если блокировка недоступна, закончить транзакцию посредством команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ и ответвиться на путь отката. Это обеспечивает непротиворечивый доступ к сериализованным ресурсам независимо от того, обновляются ли они транзакционно.
Иначе, программа может сбрасываться, если блокировка недоступна, однако обработка сброса может быть значительно медленнее, чем просто окончание транзакции через TEND.
9. Если эффективная директива фильтрации программного прерывания (PIFC) больше нуля, процессор отфильтровывает большинство программных прерываний исключения данных. Если директива разрешения операции с плавающей точкой (F) равна нулю, код исключения данных (DXC) не будет установлен в управляющем регистре с плавающей точкой в результате сброса из-за ситуации программного исключения данных. В этом сценарии (фильтрация применяется и эффективная директива F равна нулю), единственным местом, в котором проверяется DXC, является TDB, заданный TBEGIN. Если обработчик сброса программы должен проверить DXC в такой ситуации, регистр общего назначения B1 должен быть ненулевым, так что устанавливается действительный адрес блока диагностики транзакций (TDBA).
10. Если есть изменение памяти PER или ситуация обнаружения нулевого адреса для TDB, заданного TBEGIN, самой внешней команды TBEGIN, а подавление событий PER не применяется, то обнаруживается событие PER во время выполнения команды, вызывая тем самым немедленный сброс транзакции независимо от того, есть ли другая ситуация сброса.
В одном из вариантов команда TBEGIN неявно устанавливает адрес сброса транзакции в следующую последовательную команду, следующую за TBEGIN. Этот адрес предназначен для команды условного ветвления, которая определяет, разветвляться или нет в зависимости от кода состояния (CC). Успешная TBEGIN устанавливает CC 0, тогда как сброшенная транзакция устанавливает CC 1, CC 2 или CC 3.
В одном из вариантов команда TBEGIN предоставляет опциональный операнд памяти, определяющий адрес блока диагностики транзакций (TDB), в котором сохраняется информация, если транзакция сбрасывается.
Далее, она предоставляет непосредственный операнд, включающий следующее:
Маску сохранения регистров общего назначения (GRSM), указывающую, какие пары регистров общего назначения должны сохраняться в начале транзакционного выполнения и восстанавливаться при сбросе транзакции;
Бит (A) для разрешения сброса транзакции, если транзакция изменяет регистры доступа;
Бит (F) для разрешения сброса транзакции, если транзакция пытается выполнить команды с плавающей точкой; и
Директиву фильтрации программного прерывания (PIFC), которая разрешает отдельным уровням транзакции обходить действительное представление программного прерывания, если транзакция сбрасывается. Директивы A, F и PIFC могут быть различны на разных уровнях вложения, и восстанавливаться к предыдущему уровню, когда заканчиваются внутренние уровни транзакции.
Более того, TBEGIN (или, в другом варианте, TBEGINC) используется для создания маркера транзакции. Опционально маркер может совпадать с маркером, созданным командой TEND. Для каждой команды TBEGIN (или TBEGINC), к примеру, маркер создается из адреса первого операнда. Этот маркер может создаваться независимо от того, равен ли базовый регистр нулю (в отличие от установки адреса TDB, которое происходит только если базовый регистр ненулевой). Для каждой команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ, выполненной с ненулевым базовым регистром, подобный маркер создается из его операнда памяти. Если маркеры не совпадают, может быть обнаружено программное исключение для предупреждения программы о непарной команде.
Совпадение маркеров обеспечивает механизм, предназначенный для повышения надежности программного обеспечения посредством гарантирования, что утверждение TEND надлежаще спарено с TBEGIN (или TBEGINC). Если команда TBEGIN выполняется на отдельном уровне вложения, маркер создается из адреса операнда памяти, который идентифицирует этот экземпляр транзакции. Когда выполняется соответственная команда TEND, маркер создается из адреса операнда памяти команды, и процессор сравнивает начальный маркер для уровня вложения с конечным маркером. Если маркеры не совпадают, обнаруживается ситуация исключения. Модель может реализовывать совпадение маркеров лишь для определенного числа вложенных уровней (или для не вложенных уровней). Маркер может задействовать не все биты адреса операнда памяти, или биты могут комбинироваться посредством хеширования или другими способами. Маркер может создаваться командой TBEGIN, даже если ее операнд памяти недоступен.
Короче говоря, обработка невынужденной транзакции производится следующим образом:
- Если TND=0:
- Эффективные директивы PIFC, А и F вычислены
- Глубина вложения транзакций (TND) увеличена
- Если TND превращается из 0 в 1, процессор входит в режим транзакционного выполнения
- Код состояния устанавливается в нуль
- Исключения:
Как отмечено выше, транзакция, вынужденная либо невынужденная, может заканчиваться по команде ЗАКОНЧИТЬ ТРАНЗАКЦИЮ (TEND). Дальнейшие подробности касательно обработки команды окончания транзакции (TEND) описываются при помощи ФИГ.13. ЦП (т.е., процессор), выполняющий TEND, следует логике ФИГ.13.
Согласно ФИГ.13, в начале, на основе получения (напр., считывания, выборки и т.п.) процессором команды TEND, производится проверка различных исключений, и, если есть исключение, ЗАПРОС 1300, то исключение обрабатывается, ШАГ 1302. Например, если ЗАКОНЧИТЬ ТРАНЗАКЦИЮ является целью инструкции исполнительного типа, операция подавляется и обнаруживается исключение выполнения; и обнаруживается исключение специальной операции, и операция подавляется, если директива транзакционного выполнения, бит 8 CR 0, равна нулю. Еще, обнаруживается исключение операции, и операция подавляется, если средство транзакционного выполнения не установлено в конфигурации.
Возвращаясь к ЗАПРОСУ 1300, если исключение не обнаружено, то глубина вложения уменьшается (напр., на 1), ШАГ 1340. Выполняется определение, равна ли глубина вложения транзакций нулю после уменьшения, ЗАПРОС 1306. Если глубина вложения транзакций равна нулю, то все обращения к памяти, совершенные транзакцией (и другими транзакциями внутри вложенного множества транзакций, если таковые имеются, частью которых является эта транзакция), фиксируются, ШАГ 1308. Далее, процессор выходит из режима транзакционного выполнения, ШАГ 1310, и команда завершается, ШАГ 1312.
Возвращаясь к ЗАПРОСУ 1306, если глубина вложения транзакций не равна нулю, то команда ЗАКОНЧИТЬ ТРАНЗАКЦИЮ просто завершается.
Если процессор находится в режиме транзакционного выполнения в начале операции, код состояния устанавливается в 0; иначе код состояния устанавливается в 2.
Отметим, что эффективная директива разрешения операции с плавающей точкой (F), директива разрешения изменения AR (A), и директива фильтрации программного прерывания (PIFC) повторно устанавливаются в их соответственные значения до команды НАЧАТЬ ТРАНЗАКЦИЮ, инициировавшей уровень, который заканчивается. Далее, функция сериализации выполняется при завершении операции.
События считывания команды PER и окончания транзакции, которые обнаруживаются при завершении самой внешней команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ, не приводят к сбросу транзакции.
В одном из примеров команда TEND включает также базовое поле B2 и поле смещения D2, которые комбинируются (напр., слагаются) для создания адреса второго операнда. В этом случае может выполняться сравнение маркеров. Например, если B2 не нуль, выбранные биты адреса второго операнда сравниваются с маркером транзакции, созданным соответствующей TBEGIN. Если есть несовпадение, есть исключение (напр., PIC 0006).
Далее, транзакция может сбрасываться неявным образом или явно посредством команды СБРОСИТЬ ТРАНЗАКЦИЮ. Сброс транзакции посредством TABORT или иначе включает исполнение ряда шагов. Пример шагов для обработки сброса, в общем, описывается при помощи ФИГ.14. Если есть различие в обработке в зависимости от запуска сброса посредством TABORT или иначе, это отмечено в описании ниже. В одном из примеров процессор (напр., ЦП) следует логике ФИГ.14.
Согласно ФИГ.14, в начале, на основе выполнения команды TABORT или неявного сброса, нетранзакционные обращения к памяти, совершенные, пока процессор находился в режиме транзакционного выполнения, фиксируются, ШАГ 1400. Другие сохранения (напр., транзакционные сохранения), совершенные, пока процессор находился в режиме транзакционного выполнения, отбрасываются, ШАГ 1402.
Процессор выходит из режима транзакционного выполнения, ШАГ 1404, и последующие сохранения происходят нетранзакционно. Текущее PSW заменяется содержимым PSW сброса транзакции, за исключением того, что код состояния устанавливается как описано выше (иначе, чем ситуация ниже, в которой TDBA действителен, но блокировка недоступна, следовательно CC=1), ШАГ 1406. Как часть обработки сброса или впоследствии обработка переходит к позиции, заданной PSW сброса транзакции, для осуществления действия. В одном примере, в котором транзакция является вынужденной транзакцией, позицией является команда TBEGINC, а действием является повторное выполнение этой команды; а в другом примере, в котором транзакция является невынужденной транзакцией, позицией является команда после TBEGIN, а действием является выполнение той команды, которая может быть, например, разветвлением к обработчику сброса.
Далее, выполняется определение, действителен ли адрес блока диагностики транзакций, ЗАПРОС 1408. Если адрес блока диагностики транзакций действителен, диагностическая информация, идентифицирующая причину сброса, и содержимое регистров общего назначения сохраняется в блок диагностики транзакций, заданный TBEGIN, ШАГ 1410. Сохраняемые поля TDB и условия, при которых они сохраняются, описываются относительно блока диагностики транзакций.
Если адрес блока диагностики транзакций действителен, но блок стал недосягаемым вслед за выполнением самой внешней команды TBEGIN, блок недоступен, и применяется код состояния 1.
Для транзакций, сброшенных из-за ситуаций программного исключения, которые вызывают прерывание, сохраняется TDB программного прерывания.
Возвращаясь к ЗАПРОСУ 1408, если адрес блока диагностики транзакций недействителен, TDB, заданный TBEGIN, не сохраняется, и применяется код состояния 2 или 3 в зависимости от причины сброса.
Дополнительно к вышесказанному, глубина вложения устанавливается равной нулю, ШАГ 1412. Далее, любые пары регистров общего назначения, определенных к сохранению самой внешней командой TBEGIN, восстанавливаются, ШАГ 1414. Пары регистров общего назначения, которые не были определены к сохранению самой внешней командой TBEGIN, не восстанавливаются, когда транзакция сбрасывается.
Далее, выполняется функция сериализации, ШАГ 1416. Функция или операция сериализации включает завершение всех концептуально предшествующих обращений к памяти (и, для z/Architecture, к примеру, установление соответствующих бита ссылки и бита изменения) процессором, с точки зрения других процессоров и подсистемы ввода-вывода, до того как происходят концептуально последующие обращения к памяти (и установление соответствующих бита ссылки и бита изменения). Сериализация затрагивает последовательность всех обращений процессора к памяти и к ключам памяти, за исключением связанных со считыванием пункта таблицы ART и пункта таблицы DAT.
С точки зрения процессора в режиме транзакционного выполнения, сериализация работает нормально (как описано ниже). С точки зрения других процессоров и подсистемы ввода-вывода операция сериализации, исполняющаяся, когда процессор находится в режиме транзакционного выполнения, происходит, когда процессор выходит из режима транзакционного выполнения, либо в результате команды ЗАКОНЧИТЬ ТРАНЗАКЦИЮ, которая вызывает снижение глубины вложения транзакций до нуля (нормальное окончание), либо в результате сброса транзакции.
Для обработки сброса, инициированного иначе, чем посредством TABORT, если транзакция сбрасывается из-за ситуации исключения, которая вызывает прерывание, ЗАПРОС 1418, коды прерывания или параметры, связанные с прерыванием, сохраняются в назначенных ячейках памяти, соответствующих типу прерывания, ШАГ 1420. Далее, текущее PSW, как установлено выше, сохраняется в старом PSW прерывания, ШАГ 1422. После этого, или если транзакция не была сброшена из-за ситуации исключения, которая вызывает прерывание, команда заканчивается с кодом состояния нуль.
В дополнение к вышесказанному, в одном варианте для интерпретационного выполнения z/Architecture, если процессор находится в режиме транзакционного выполнения, и возникает гостевая ситуация, которая нормально вызовет коды прерывания 4, 12, 44, 56, 64, 68 или 72, прерывание не происходит. Вместо этого процессор остается в режиме интерпретационного выполнения, а ситуации сброса указываются гостю следующим образом:
- Для невынужденной транзакции, транзакция сбрасывается из-за недопустимой команды (код сброса 11). Если обнаружено параллельное событие PER, а процессор задействован для PER, происходит программное прерывание с кодом прерывания 0280 шестнадцатеричное.
- Для вынужденной транзакции обнаруживается исключение ограничения транзакции. Если обнаружено параллельное событие PER, а процессор задействован для PER, происходит программное прерывание с кодом прерывания 0298 шестнадцатеричное.
Если транзакция сбрасывается из-за ситуации программного исключения, фильтрация программного прерывания может подавить представление прерывания. Для программных прерываний, которые могут вызвать перехват, фильтрация также подавляет перехват.
В одном варианте воплощения, во время транзакционного выполнения, ситуации исключения, включая ситуации программного исключения, приводят к тому, что транзакция сбрасывается и представляется прерывание. Однако, в соответствии с аспектом, транзакция, такая как невынужденная транзакция, может фильтровать прерывания программы; то есть транзакции, которые сбрасываются вследствие определенных ситуаций программного исключения, необязательно должны приводить к прерыванию. Вместо этого, программа может опционально задавать то, что определенные ситуации программного исключения не приводят к прерыванию. Это облегчает упреждающее выполнение, давая возможность программе восстановиться от определенных программных исключений без затратных расходов на установление подпрограмм восстановления.
В одном примере, фильтрация программного прерывания подвержена следующим директивам:
- переопределение фильтрации программного прерывания транзакционного выполнения, бит 9 управляющего регистра 0. Эта директива устанавливается операционной системой, на выбор, позволяя или блокируя фильтрацию транзакциями.
- эффективная величина директивы фильтрации программного прерывания (PIFC) по команде НАЧАТЬ ТРАНЗАКЦИЮ.
- ситуация исключения, которая произошла.
Когда переопределение фильтрации программного прерывания транзакционного выполнения является нулем, программа задает, какие классы ситуаций исключения должны быть отфильтрованы с помощью директивы фильтрации программного прерывания (PIFC), биты 14-15 поля I2 команды НАЧАТЬ ТРАНЗАКЦИЮ (TBEGIN). Эффективная PIFC является наивысшей величиной PIFC в команде TBEGIN для текущего уровня вложения и для всех внешних уровней.
Для большинства ситуаций программного исключения, имеется соответствующий класс транзакционного выполнения, определенный для ситуации исключения (смотри ФИГ.16А-16Б) и сохраненный внутри процессора. Эффективная PIFC и классы транзакционного выполнения взаимодействуют следующим образом:
Команда НАЧАТЬ ТРАНЗАКЦИЮ (TBEGINC) не обеспечивает четкой директивы фильтрации прерываний программы; подразумеваемая PIFC принимается равной нулю для TBEGINC. Таким образом, когда ЦПУ входит в режим вынужденного транзакционного выполнения в результате TBEGINC, эффективная PIFC является равной нулю; когда ЦПУ остается в режиме невынужденного транзакционного выполнения, в результате TBEGINC, эффективная PIFC остается неизменной.
Один из примеров обобщения взаимоотношений эффективной PIFC, типа фильтрации прерывания программы, класса транзакционного выполнения, и того, приведет ли ситуация исключения к прерыванию, представлен на ФИГ.15. В одном варианте воплощения, команда НАЧАЛЬ ТРАНЗАКЦИЮ (TBEGIN) определена для распознавания исключения определения, если PIFC=3. Однако, в дополнительном воплощении изобретения, она может быть изменена для обеспечения полной фильтрации прерывания программы, когда PIFC=3.
Один пример списка ситуаций программного исключения, соответствующего класса транзакционного выполнения, и кода состояния, который устанавливается, когда транзакция сбрасывается вследствие ситуации программного исключения, изображен наФИГ.16А-16Б.
Дополнительные подробности, связанные с фильтрацией прерываний программы, описаны со ссылкой на ФИГ.17А-17Б, на которых изображено одно воплощение логики обработки, связанной с фильтрацией прерываний программы. В одном примере, процессор выполняет представленную логику.
В отношении сначала ФИГ.17А, в одном варианте воплощения, выполняются одна или более транзакций, инициированных при помощи одной или более команд НАЧАТЬ ТРАНЗАКЦИЮ. В ходе транзакционной обработки, в пределах одной из транзакций распознается ситуация программного исключения, ШАГ 1700. После этого, выполняется определение, должно ли быть представлено прерывание, вызванное ситуацией программного исключения, ЗАПРОС 1702, как более детально описано ниже, со ссылкой на ФИГ.17Б.
Когда ситуация программного исключения не приводит к прерыванию (то есть, исключение фильтрованное), ЗАПРОС 1702, новое PSW программы не загружается, ШАГ 1704. Кроме того, не сохраняется ни одна из назначенных ячеек памяти, ассоциированных с программным прерыванием, ШАГ 1706. Указанные ячейки включают, например, идентификацию программного прерывания, адрес события останова, старое программное PSW, и, в соответствующих случаях, код исключения данных, код PER, адрес PER, идентификацию обращения исключения, идентификацию обращения PER, идентификацию обращения операнда, идентификацию исключения трансляции.
Когда ситуация программного исключения приводит к прерыванию, ЗАПРОС 1702, или когда ситуация программного исключения приводит к выходу из режима интерпретационного выполнения вследствие перехвата (то есть, исключение нефильтрованное), большинство назначенных ячеек памяти, ассоциированных с программным прерыванием, сохраняются как обычно, ШАГ 1708; однако, код длины команды в битах 13-14 идентификации программного прерывания соответствует команде, на которой была обнаружена ситуация исключения, ШАГ 1710. После этого, PSW сброса транзакции сохраняется как старое программное PSW, ШАГ 1712.
В одном примере, со ссылкой на ФИГ.17Б, для определения, должно ли быть представлено прерывание, выполняется определение относительно того, установлено ли переопределение фильтрации программного прерывания, бит 9 управляющего регистра 0, для разрешения фильтрации, ЗАПРОС 1750. Эта директива устанавливается операционной системой для разрешения или блокирования фильтрации транзакциями. Если фильтрация блокирована, то прерывание представляется, ШАГ 1752. В противном случае, если операционная система разрешает фильтрацию, выполняется определение относительно значения эффективной PIFC, ЗАПРОС 1754. То есть, каким является наивысшее значение PIFC текущего уровня вложения и любых внешних уровней, если они присутствуют. Если значение эффективной PIFC является нулем, ЗАПРС 1752, тогда прерывание представляется, ШАГ 1752.
Если значение эффективной PIFC отличается от нуля, то выполняется проверка относительно класса транзакции ситуации программного исключения относительно к PIFC, ШАГ 1756. К примеру, для эффективной PIFC=1, если класс ситуации программного исключения представляет собой 1 или 2, прерывание представляется, но не для класса 3; и для эффективной PIFC=2, прерывание представляется для класса 1, и не для классов 2 или 3. (В другом варианте выполнения, блоки принятия решений 1754 и 1756 могут быть сокращены в одно решение путем сравнения PIFC с обратным значением класса транзакционного исключения (TXC). Например, если (PIFC>(3-TXC)), то прерывание фильтруют, или если (PIFC<=(3-TXC)), то прерывание.)
В случае, если проверка указывает, что прерывание должно быть представлено, ЗАПРОС 1758, то прерывание представляется (т.е. прерывание представляется процессору, и управление получает операционная система), ШАГ 1752. В противном случае, оно обходится (т.е. никакого прерывания не представляется процессору), ШАГ 1760. На этом завершается один из вариантов воплощения логики фильтрации.
В дополнение к описанному выше, в одном варианте воплощения, если событие PER распознается в сочетании с любой другой отфильтрованной ситуацией программного исключения, применяется следующее:
- Применяют класс транзакции и код состояния для события PER. В этом случае, ситуацию исключения PER не фильтруют, и код состояния устанавливают в 3.
- Код прерывания программы в префиксной зоне не включает не-PER ситуацию исключения, равно как и любые другие не-PER параметры прерывания программы, сохраненные в префиксной зоне.
Когда транзакционное выполнение переопределения фильтрации программного прерывания (бит 9 управляющего регистра 0) равно единице, ситуации программного прерывания не подлежат фильтрации программного прерывания. В этом случае, выполнение продолжается, как если бы эффективная PIFC была равна нулю.
Состояния исключения доступа, распознаваемые во время выборки команды, не подлежат фильтрации программного прерывания. В этих случаях, состояние исключения приводит как к сбросу транзакции, так и к программному прерыванию.
В дополнение к коду прерывания программы, представляющему причину прерывания, бит 6 кода прерывания программы в реальных ячейках 142-143 устанавливается в единицу, что свидетельствует о том, что программное прерывание произошло во время транзакционного выполнения. Когда гостевая транзакция сбрасывается из-за прерывания главной (хост) программы, биты 5 и 6 кода прерывания главной программы устанавливаются в единицу. Текущее PSW заменяется содержимым PSW сброса транзакции, за исключением того, что код состояния устанавливается в соответствии с ФИГ.10 и 16А-16Б.
Фильтрация применяется как к гостевым, так и к главным (хост) ситуациям программного исключения. Если гостевая ситуация программного исключения фильтруется, любая ситуация перехвата, связанная с прерыванием не происходит.
В одном варианте воплощения:
1. Команда ВЫЗОВ МОНИТОРА, которая могла бы в других случаях вызвать события монитора, является недопустимой командой. Поэтому, программное прерывание события монитора не происходит, пока ЦПУ находится в режиме транзакционного выполнения, таким образом, когда транзакция сбрасывается, код монитора в реальных ячейках 176-183 не сохраняется.
Аналогично, не может происходить любая другая ситуация программного исключения, перечисленная на ФИГ.16А-16Б, имеющая не-применимый класс транзакции (-) и код состояния, поскольку команды вызывающие эти исключения являются недопустимыми. Таким образом, ни идентификация программного прерывания, ни любая другая дополнительная информация программного прерывания не сохраняется в реальных ячейках в префиксной зоне.
2. Фильтрация программного прерывания может быть полезной в программах, которые, по различным причинам, откладывают проверку данных, что иногда называют упреждающим выполнением. Вместо установки потенциально сложной среды восстановления, программа просто выполняет невынужденную(ые) транзакпию(и), в которой эффективная директива фильтрации программного прерывания (PIFC) является ненулевой. Это позволяет программной подпрограмме-обработчику сброса непосредственно получить контроль для некоторых типов ситуаций программного исключения - без вмешательства операционной системы.
Эффективная PIFC 1 указывает, что с помощью ЦПУ должна быть выполнена ограниченная фильтрация; это может быть полезно в обнаружении неожиданных данных или арифметических исключений. Эффективная PIFC 2 указывает, что должна быть выполнена умеренная фильтрация; это может быть полезно в обнаружении недоступных ячеек памяти.
Однако, следует отметить, что если программа сбрасывается вследствие различных типов фильтрованных исключений доступа, это не обязательно означает, что ячейка будет недоступна, если программа предпринимала нетранзакционное выполнение. Например, программа может установить PIFC равным 2, и впоследствии быть сброшенной в результате исключения трансляции страницы. Это исключение может указывать, что ячейка памяти не является частью виртуального адресного пространства, или это может просто указывать, что блок памяти был удален.
Предоставленное выше является одним из вариантов воплощения для управления прерываниями в транзакционной среде, в которой ситуации программного исключения, которые могли бы, в других случаях, обеспечить прерывание, фильтруются таким образом, что прерывание обходится.
В дополнение к вышесказанному, предоставленное выше является эффективным средством обновления множественных, прерывистых объектов в памяти без классической (грубой) сериализации, такой как блокировка, что обеспечивает потенциал для значительного повышения многопроцессорной производительности. То есть, множественные, прерывистые объекты обновляются без форсирования более грубого упорядочивания доступа к памяти, который обеспечивается классическими методами, такими как блокировки и семафоры. Обеспечивается упреждающее выполнение без обременительной настройки восстановления, а для простых, нетребовательных обновлений предлагаются вынужденные транзакции.
Транзакционное выполнение может использоваться во множестве сценариев, включая, но не ограничиваясь, частичное встраивание, упреждающую обработку и обход блокировки. При частичном встраивании, частичная область, требующая включения в исполняемый путь, упаковывается в TBEGIN/TEND. Туда же может быть включена TABORT для состояния отката при побочном выходе. Для упреждения, такого как в Java, проверки нуля на разыменованных указателях могут быть отсрочены до окончания цикла при помощи транзакции. Если указатель равен нулю, транзакция может сброситься безопасно посредством TABORT, которая включена внутрь TBEGIN/TEND.
Что касается обхода блокировки, один из примеров его использования описывается с помощью ФИГ.18А-18Б и фрагмента кода, приведенного ниже.
На ФИГ.18A изображен двусвязанный список 1800 из множества элементов очереди 1802a-1802d. Новый элемент очереди 1802e должен быть вставлен в двусвязанный список элементов очереди 1800. Каждый элемент очереди 1802a-1802e включает прямой указатель 1804a-1804e и обратный указатель 1806a-1806e. Как изображено на ФИГ.18Б, чтобы добавить элемент очереди 1802e между элементами очереди 1802b и 1802c, (1) обратный указатель 1806e становится указывающим на элемент очереди 1802b, (2) прямой указатель 1804e становится указывающим на элемент очереди 1802c, (3) обратный указатель 1806c становится указывающим на элемент очереди 1802e, а (4) прямой указатель 1804b становится указывающим на элемент очереди 1802e.
Примерный фрагмент кода, соответствующий ФИГ.18А-18Б, находится ниже:
- R1 - адрес нового элемента очереди, который должен быть вставлен.
- R2 - адрес места вставки; новый элемент вставляется перед элементом, указанным R2.
В одном примере, если транзакция используется для обхода блокировки, но путь отката использует блокировку, транзакция должна по крайней мере считать блокировочное слово, чтобы увидеть, что оно доступно. Процессор гарантирует, что транзакция сбросится, если другой процессор обратится к блокировке нетранзакционно.
В данном контексте, термины "память", "центральная память", "главная память", "запоминающее устройство" и "главное запоминающее устройство" используются как взаимозаменяемые, если не указано иное, неявно по контексту или явным образом. Далее, в одном варианте транзакция, эффективно задерживающая, включает задержку фиксации транзакционного сохранения в главную память до завершения выбранной транзакции; в другом варианте транзакция, эффективно задерживающая, включает разрешение транзакционных обновлений в памяти, но сохранение старых значений и восстановление старых значений в памяти при сбросе.
Как учтут специалисты в данной области техники, один или больше аспектов могут быть воплощены в виде системы, способа или компьютерного программного продукта. Соответственно, один или больше аспектов могут принимать форму целиком аппаратного варианта осуществления, целиком программного варианта осуществления (содержащего аппаратно-программное обеспечение, резидентное программное обеспечение, микрокод и т.д.) или варианта осуществления, сочетающего программные и аппаратные особенности, которые все могут в целом именоваться в описании "схемой", "модулем" или "системой". Кроме того, один или больше аспектов могут принимать форму компьютерного программного продукта, воплощенного в одной или нескольких машиночитаемых средах, в которых записан машиночитаемый программный код.
Может использоваться любое сочетание одной или нескольких машиночитаемых сред. Машиночитаемой средой может являться машиночитаемая запоминающая среда (носитель данных). Машиночитаемой запоминающей средой может являться, например, без ограничения электронная, магнитная, оптическая, электромагнитная, инфракрасная или полупроводниковая система, аппаратура или устройство или любое применимое сочетание перечисленного. Более конкретные примеры (неисчерпывающий список) машиночитаемой запоминающей среды включают: электрическое соединение, содержащее один или несколько проводов, портативный компьютерный диск, жесткий диск, оперативное запоминающее устройство (ОЗУ), постоянное запоминающее устройство (ПЗУ), стираемое программируемое постоянное запоминающее устройство (СППЗУ или флэш-память), оптическое волокно, портативное постоянное запоминающее устройство на компакт-диске (CD-ROM), оптическое запоминающее устройство, магнитное запоминающее устройство или любое применимое сочетание перечисленного. В контексте настоящего документа машиночитаемой запоминающей средой может являться любая материальная среда, в которой содержится или хранится программа для использования системой, аппаратурой или устройством выполнения команд или применительно к ним.
Как показано на ФИГ.19, в одном из примеров компьютерный программный продукт 1900 содержит, например, одну или несколько не-временных машиночитаемых запоминающих сред 1902 для хранения в них машиночитаемого программного кода или логики 1904 для обеспечения и реализации одного или нескольких воплощений.
Программный код, воплощенный в машиночитаемой среде, может передаваться с использованием соответствующей среды, включая без ограничения беспроводную, проводную среду, оптоволоконный кабель, ВЧ-среду и т.д. или любое применимое сочетание перечисленного.
Компьютерный программный код для выполнения операций, для одного или более воплощений, может быть записан на одном или нескольких языках программирования в любом сочетании, включая объектно-ориентированный язык программирования, такой как Java, Smalltalk, C++ и т.п., и традиционных процедурных языках программирования, таких как "C" и языки ассемблера или аналогичные языки программирования. Программный код может целиком выполняться в пользовательском компьютере, частично в пользовательском компьютере, в качестве автономного пакета программного обеспечения, частично в пользовательском компьютере и частично в удаленном компьютере или целиком в удаленном компьютере или сервере. В случае последнего сценария удаленный компьютер может быть соединен с пользовательским компьютером посредством сети любого типа, включая локальную вычислительную сеть (ЛВС) или глобальную вычислительную сеть (ГВС), или может быть установлено соединение с внешним компьютером (например, по сети Интернет с использованием поставщика услуг Интернет).
Одно или более воплощений описаны со ссыпкой на структурные схемы и/или блок-схемы способов, оборудования (систем) и компьютерных программных продуктов. Подразумевается, что каждый блок на структурных схемах и/или блок-схемах и сочетания блоков на структурных схемах и/или блок-схемах могут быть реализованы посредством команд управления компьютерной программой. Эти команды управления компьютерной программой могут передаваться процессору универсального компьютера, специализированного компьютера или другой программируемого аппаратуры для обработки данных с целью формирования механизма, в котором команды, выполняемые посредством процессора компьютера или другого программируемого оборудования обработки данных, создают средство реализации функций/действий, обозначенных блоком или блоками на структурных схемах и/или блок-схемах.
Эти команды управления компьютерной программой также могут храниться в машиночитаемой среде, которая способна предписывать компьютеру, другому программируемому оборудованию обработки данных или другим устройствам действовать конкретным способом, в результате чего команды, хранящиеся в машиночитаемой среде, формируют продукт, содержащий команды, в которых реализуется функция/действие, обозначенное блоком или блоками на структурных схемах и/или блок-схемах.
Команды управления компьютерной программой также могут загружаться в компьютер, другое программируемое оборудование обработки данных или другие устройства, чтобы инициировать выполнение последовательности оперативных шагов компьютером, другим программируемым оборудованием или другими устройствами с целью формирования реализованного в компьютере процесса, при этом команды, выполняемые компьютером или другим программируемым оборудованием, обеспечивают процессы реализации функций/действий, обозначенных блоком или блоками на структурных схемах и/или блок-схемах.
Приведенные на чертежах структурные схемы и блок-схемы иллюстрируют архитектуру, функциональные возможности и действие возможных вариантов реализации систем, способов и компьютерных программных продуктов согласно различным вариантам осуществления. В связи с этим каждым блоком на структурных схемах или блок-схемах может быть представлен определенный модуль, сегмент или часть кода, которая содержит одну или несколько выполняемых команд для реализации заданной логической функции(-й). Следует также отметить, что в некоторых альтернативных вариантах реализации указанные в блоке функции могут выполняться не в том порядке, в котором они представлены на чертежах. Например, функции, указанные двумя последовательно показанными блоками, в действительности, могут выполняться преимущественно одновременно, или функции иногда могут выполняться в обратном порядке в зависимости от соответствующих функциональных возможностей. Следует также отметить, что каждый блок на блок-схемах и/или структурных схемах и сочетания блоков на блок-схемах и/или структурных схемах могут быть реализованы посредством специализированных аппаратных систем, выполняющих заданные функции или действия, или посредством сочетаний специализированных аппаратных систем и компьютерных команд.
Помимо вышесказанного, одна или несколько особенностей может обеспечиваться, предлагаться, применяться, координироваться, обслуживаться и т.д. поставщиком услуг, который предлагает управление пользовательскими средами. Например, поставщик услуг способен создавать, вести, поддерживать и т.д. для одного или нескольких пользователей машинный код и/или вычислительную инфраструктуру, в которой выполняется одна или несколько особенностей. В ответ поставщик услуг может получать оплату от пользователя на основании соглашения о подписке и/или абонентской плате в качестве примеров. Дополнительно или в качестве альтернативы, поставщик услуг может получать плату за рекламное содержание, продаваемое одному или нескольким третьим лицам.
Согласно одному аспекту для выполнения одного или нескольких воплощений может быть развернуто приложение. В качестве одного из примеров, развертывание приложения включает использование вычислительной инфраструктуры, способной выполнять один или несколько вариантов осуществления настоящего изобретения.
В качестве одного из дополнительных аспектов, развертывание вычислительной инфраструктуры может включать интегрирование машиночитаемого кода в вычислительную систему, при этом код в сочетании с вычислительной системой способен выполнять один или несколько вариантов осуществления настоящего изобретения.
В качестве еще одного из дополнительных аспектов может быть предложен способ интегрирования вычислительной инфраструктуры, включающий интегрирование машиночитаемого кода в компьютерную систему. Компьютерная система содержит машиночитаемую среду, содержащую одну или несколько воплощений настоящего изобретения. Код в сочетании с компьютерной системой способен выполнять один или несколько вариантов осуществления настоящего изобретения.
Хотя различные варианты осуществления описаны выше, они являются лишь примерами. Например, вычислительные среды других архитектур могут быть использованы для включения и применения одного или нескольких вариантов осуществления настоящего изобретения. Кроме того, могут быть использованы различные команды, форматы команд, поля команд и/или значения команд. Кроме того, различные, другие и/или дополнительные значения фильтрации и/или уровни фильтрации могут быть предусмотрены/использованы. Возможно множество вариантов.
Кроме того, другие типы вычислительных сред могут выгодно применяться. В качестве примера, может использоваться система обработки данных, применимая для хранения и/или выполнения программного кода и содержащая по меньшей мере два процессора, прямо или косвенно связанных с средствами памяти посредством системной шины. Элементы памяти включают, например, локальную память, применяемую во время фактического выполнения программного кода, массовую память и кэш-память, которая обеспечивает временное хранение по меньшей мере част программного кода для уменьшения необходимого числа случаев извлечения кода из массовой памяти во время выполнения.
С системой прямой или косвенно посредством промежуточных контроллеров ввода-вывода могут быть связаны устройства ввода-вывода (включая без ограничения, клавиатуры, дисплеи, координатно-указательные устройства, ЗУПД, накопители на магнитной ленте, на компакт-дисках, на многоцелевых компакт-дисках, портативные миниатюрные накопители на жестких дисках и другие запоминающие среды и т.д.). С системой также могут быть связаны сетевые адаптеры, позволяющие системе обработки данных устанавливать связь с другими системами обработки данных или удаленными принтерами или запоминающими устройствами посредством промежуточной частных или общедоступных сетей. Модемы, кабельные модемы и сетевые карты Ethernet являются лишь несколькими из сетевых адаптеров доступных типов.
Согласно ФИГ.20, на которой представлены характерные компоненты хост-компьютерной системы 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 5102 (например, TX и/или прервать PSW), глубину вложения 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-байтовой границе. Когда в адресах ячеек запоминающего устройства указаны полуслова, слова, двойные слова, учетверенные слова, и увосьмиренные слова в двоичном представлении адреса содержится один, два, три, четыре или пять крайних правых нулевых разряда, соответственно. Команды должны находиться на двухбайтовых целочисленных границах. Хранящиеся операнды большинства команд не содержат требования размещения на границах.
В устройствах, в которых реализованы раздельные кэши для команд и операндов, хранимых в памяти, могут происходить значительные задержки, если программа сохраняется в строке кэша, из которой впоследствии осуществляется выборка команд, независимо от того, изменяются ли при сохранении команды, выборка которых впоследствии осуществляется.
В одном из примеров осуществления изобретение может быть реализовано на практике посредством программного обеспечения (иногда называемого лицензионным внутренним кодом, аппаратно-программным обеспечением, микрокодом, милликодом, пикокодом и т.п., что во всех случаях согласуется с настоящим изобретением). Как показано на ФИГ.20, обычно процессор 5001 хост-системы 5000, получает доступ к программному коду системы программного обеспечения, в котором воплощено настоящее изобретение, посредством долговременных запоминающих сред 5011, таких как ПЗУ на компакт-дисках, накопитель на магнитной ленте или накопитель на жестких дисках. Программный код системы программного обеспечения может быть воплощен в любой из разнообразных известных сред для применения с системой обработки данных, такой как дискета, накопитель на жестких дисках или ПЗУ на компакт-дисках. Код может распределяться в таких средах или может распределяться пользователям из памяти 5002 компьютера или запоминающего устройства одной компьютерной системы по сети 5010 другим компьютерным системам для применения пользователями таких других систем.
Программный код включает операционную систему, которая управляет функцией и взаимодействием различных узлов вычислительной машины и одной или нескольких прикладных программ. Обычно подкачка страниц программного кода осуществляется из запоминающей среды 5011 в относительно быстродействующее запоминающее устройство 5002, в котором он доступен для обработки процессором 5001. Методы и способы воплощения программного кода системы программного обеспечения в памяти, в физических средах и/или распределения программного кода посредством сетей хорошо известны и не будут дополнительно рассматриваться в описании. Программный код, созданный и хранящийся в материальной среде (включая без ограничения модули электронной памяти (ОЗУ), флэш-память, компакт-диски, универсальные цифровые диски, магнитную ленту и т.п.) часто именуется "компьютерным программным продуктом". Содержащая компьютерный программный продукт среда обычно может считываться устройством обработки данных предпочтительно в компьютерной системе для выполнения устройством обработки данных.
На ФИГ.21 проиллюстрирована характерная рабочая станция или аппаратная серверная система, в которой может быть на практике реализовано настоящее изобретение. В показанную на ФИГ.21 систему 5020 входит характерная базовая компьютерная система 5021, такая как персональный компьютер, рабочая станция или сервер, включая необязательные периферийные устройства. Базовая компьютерная система 5021 имеет один или несколько процессоров 5026 и шину для соединения процессора(-ов) 5026 и других компонентов системы 5021 и обеспечения связи между ними известными способами. Шина соединяет процессор 5026 с памятью 5025 и долговременным запоминающим устройством 5027, которое может содержать накопитель на жестких дисках (например, включая любое из следующего: магнитный носитель, компакт-диск, универсальный цифровой диск и флэш-память) или, например, накопитель на магнитной ленте. В систему 5021 также может входить адаптер пользовательского интерфейса, который посредством шины соединяет микропроцессор 5026 с одним или несколькими устройствами сопряжения, такими как клавиатура 5024, мышь 5023, принтер/сканнер 5030 и/или другие устройства сопряжения, которыми могут являться любое пользовательское устройство сопряжения, такое как сенсорный экран, дополнительная цифровая клавиатура и т.д. Шина посредством дисплейного адаптера также соединяет дисплей 5022, такой как ЖК-дисплей или монитор с микропроцессором 5026.
Система 5021 может поддерживать связь с другими компьютерами или компьютерными сетями посредством сетевого адаптера, способного поддерживать связь 5028 с сетью 5029. Примерами сетевых адаптеров являются каналы связи, кольцевая сеть с эстафетным доступом, сеть Ethernet или модемы. В качестве альтернативы, система 5021 может поддерживать связь с использованием беспроводного интерфейса, такого как карта CDPD (сотовой системы передачи пакетов цифровых данных). Система 5021 может быть связана с другими такими компьютерами в локальной вычислительной сети (ЛВС) или глобальной вычислительной сети (ГВС), или системой 5021 может являться клиент, связанный отношениями клиент/сервер с другим компьютером и т.д. Все эти конфигурации, а также соответствующее коммуникационное оборудование и программное обеспечение известны из уровня техники.
На ФИГ.22 проиллюстрирована сеть 5040 обработки данных, в которой может быть реализовано на практике одно или несколько воплощений настоящего изобретения. В сеть 5040 обработки данных может входить множество отдельных сетей, таких как беспроводная сеть и проводная сеть, в каждую из которых может входить множество отдельных рабочих станций 5041, 5042, 5043, 5044. Кроме того, как известно специалистам в данной области техники, в нее может входить одна или несколько ЛВС, в которую может входить множество интеллектуальных рабочих станций, связанных с хост-процессором.
На ФИГ.22 также показано, что в сети также могут входить мэйнфреймы или серверы, такие как шлюз (клиент-сервер 5046) или сервер приложений (удаленный сервер 5048, который может осуществлять доступ к хранилищу данных, а также может быть доступен непосредственно с рабочей станции 5045). Шлюз 5046 служит точкой входа в каждую отдельную сеть. Шлюз необходим при подсоединении одного сетевого протокола к другому. Шлюз 5046 предпочтительно может быть связан с другой сетью (например, сетью Интернет 5047) линией связи. Шлюз 5046 также может быть непосредственно связан с одной или несколькими рабочими станциями 5041, 5042, 5043, 5044 с использованием линии связи. Шлюз может быть реализован с использованием сервера IBM eServer System z производства International Business Machines Corporation.
Как показано на ФИГ.21 и 22, доступ к программному коду 5031 системы программного обеспечения, в котором может быть воплощен один или несколько аспектов настоящего изобретения, может осуществлять процессор 5026 системы 5020 посредством долговременных запоминающих сред 5027, таких как ПЗУ на компакт-дисках, или накопитель на жестких дисках. Программный код системы программного обеспечения может быть воплощен в любой из разнообразных известных сред для применения с системой обработки данных, такой как дискета, накопитель на жестких дисках или ПЗУ на компакт-дисках. Код может распределяться в таких средах или может распределяться пользователям 5050, 5051 из памяти компьютера или запоминающего устройства одной компьютерной системы по сети другим компьютерным системам для применения пользователями таких других систем.
В качестве альтернативы, программный код может быть воплощен в памяти 5025 с возможностью доступа к нему для процессора 5026 с использованием процессорной шины. В таком программном коде реализована операционная система, которая управляет функцией и взаимодействием различных узлов вычислительной машины и одной или нескольких прикладных программ 5032. Обычно подкачка страниц программного кода осуществляется из запоминающих сред 5027 в быстродействующее запоминающее устройство 5025, в котором он доступен для обработки процессором 5026. Методы и способы воплощения программного кода системы программного обеспечения в памяти, в физических средах и/или распределения программного кода посредством сетей хорошо известны и не будут дополнительно рассматриваться в описании. Программный код, созданный и хранящийся в материальной среде (включая без ограничения модули электронной памяти (ОЗУ), флэш-память, компакт-диски, универсальные цифровые диски, магнитную ленту и т.п.) часто именуется "компьютерным программным продуктом". Содержащая компьютерный программный продукт среда обычно может считываться устройством обработки данных предпочтительно в компьютерной системе для выполнения устройством обработки данных.
Кэш, который является наиболее легкодоступным для процессора (обычно более быстродействующим и менее объемным, чем другие кэши процессора), представляет собой кэш низшего уровня (L1 или уровня 1), а основное запоминающее устройство (основная память) представляет собой кэш высшего уровня (L3 в случае 3 уровней). Кэш низшего уровня часто поделен кэш команд (I-кэш), в котором хранятся машинные команды для выполнения, и кэш данных (D-кэш), в котором хранятся операнды, хранимые в памяти.
На ФИГ.23 проиллюстрирован один из примеров осуществления процессора 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, выполнения функции команды. Как показано на ФИГ.24А, блок 5057 выполнения, посредством интерфейсной логической схемы 5071, может поддерживать связь 5081 со структурированными общими регистрами 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-х килобайтового блока.
Как показано на ФИГ.24Б, содержащаяся в команде перехода информация для выполнения команды перехода обычно передается блоку 5058 перехода, в котором часто применяется алгоритм предсказания переходов, такой как таблица 5082 предыстории переходов (ТПП), для предсказания исхода перехода до завершения других условных операций. Целевой объект текущей команды перехода вызывается и выполняется по предположению до завершения условных операций. Когда условные операции завершены, выполненные по предположению команды перехода завершаются или отбрасываются, исходя из условной операции и предположенного исхода. Типичная команда перехода может предусматривать проверку кодов условий и переход к целевому адресу, если коды условий отвечают требованию команды перехода, при этом целевой адрес может вычисляться на основании нескольких чисел, включая, например, числа из регистровых полей или непосредственного поля команды. В блоке 5058 перехода может применяться ALU 5074, имеющее множество схем 5075, 5076, 5077 входных регистров и схему 5080 выходного регистра. Блок 5058 перехода, например, может поддерживать связь с общими регистрами 5059, декодировать блок 5056 диспетчеризации или другие схемы 5073.
Выполнение группы команд может прерываться по ряду причин, включая, например, переключение контекста, инициированное операционной системой, исключительную ситуацию или ошибку в процессе выполнения программы, приводящую к переключению контекста, сигнал прерывания ввода-вывода, приводящий к переключению контекста, или многопоточный режим работы множества программ (в многопоточной среде). Переключение контекста предпочтительно служит для сохранения информации о состоянии выполняемой в данный момент программы и затем для загрузки информации о состоянии другой вызываемой программы. Информация о состоянии может сохраняться, например, в аппаратных регистрах или в памяти. Информация о состоянии предпочтительно содержит показание счетчика команд, указывающее очередную команду для выполнения, коды условий, сведения о транслировании данных памяти и содержимое структурированного регистра. Переключение контекста может осуществляться аппаратными схемами, прикладными программами, программами операционной системы или аппаратно-программным кодом (микрокодом, пикокодом или лицензионным внутренним кодом (LIC) по отдельности или в сочетании).
Процессор осуществляет доступ к операндам в соответствии с определенными командами способами. Команда может содержать непосредственный операнд, в котором используется значение части команды, может содержать одно или несколько регистровых полей, прямо указывающих регистры общего назначения или регистры особо назначения (например, регистры с плавающей точкой). В команде могут использоваться подразумеваемые регистры, обозначаемые полем кода операции как операнды. В команде могут использоваться ячейки памяти для операндов. Ячейка памяти для операнда может обеспечиваться регистром, непосредственным полем или сочетанием регистров и непосредственного поля, примером чего является средство дальнего смещения на основе системы z/Architecture, в котором команда определяет базовый регистр, индексный регистр и непосредственное поле (поле смещения), которые суммируются с целью получения, например, адреса операнда в памяти. Под ячейкой в данном случае подразумевается ячейка основной памяти (основного запоминающего устройства), если не указано иное.
Как показано на ФИГ.24В, процессор осуществляет доступ к памяти с использованием блока 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 ввода-вывода (ФИГ.23) обеспечивают процессор средствами подключения к периферийным устройствам, включая, например, накопители на магнитной ленте, накопители на дисках, принтеры, дисплеи и сети. Блоки ввода-вывода представлены в компьютерной программе программными драйверами. В мэйнфреймах, таких как System z производства IBM®, блоки ввода-вывода мэйнфрейма являются адаптерами каналов и адаптерами открытых систем и обеспечивают связь между операционной системой и периферийными устройствами.
Кроме того, одна или несколько особенностей настоящего изобретения могут выгодно применяться в вычислительных средах других типов. В качестве примера, среда может содержать эмулятор (например, программные или другие механизмы эмуляции), в которых эмулируется конкретная архитектура (включая, например, выполнение команд, структурированные функции, такие как трансляция адреса, и структурированные регистры) или ее сокращенная версия (например, в собственной компьютерной системе, имеющей процессор и память). В такой среде за счет одной или нескольких эмулирующих функций эмулятора может быть реализована одна или несколько особенностей настоящего изобретения, несмотря на то, что компьютер, в котором выполняется эмулятор, может иметь архитектуру, отличающуюся от эмулируемых возможностей. В качестве одного из примеров в режиме эмуляции декодируется конкретная эмулируемая команда или операция, и создается соответствующая эмулирующая функция с целью реализации отдельной команды или операции.
В эмулирующей среде хост-компьютер содержит, например, память для хранения команд и данных; блок выборки команд для выборки команд из памяти и необязательно локальной буферизации выбранных команд; блок декодирования команд для приема команд от блока выборки команд и определения типа команд, которые были выбраны; и блок выполнения команд для выполнения команд. Выполнение может предусматривать загрузку данных из памяти в регистр; сохранение данных из регистра в памяти; или выполнение арифметической или логической операции какого-либо типа, определяемой блоком декодирования. В одном из примеров каждый блок реализован посредством программного обеспечения. Например, выполняемые блоками операции реализованы в виде одной или нескольких подпрограмм в программном обеспечении эмулятора.
В частности, в мэйнфрейме структурированные машинные команды используются программаторами, обычно современными программаторами на языке "С" посредством компилирующего приложения. Эти команды, хранящиеся в запоминающей среде, могут выполняться в собственной системе команд сервера IBM® на основе z/Architecture® или в качестве альтернативы в машинах на основе других архитектур. Они могут эмулироваться в существующих и будущих серверах на основе мэйнфреймов IBM® и в других машинах IBM® (например, серверах Power Systems и серверах System x®). Они могут выполняться в операционной системе Linux разнообразными машинами, использующими аппаратное обеспечение производства IBM®, Intel®, AMD™ и других компаний. Помимо выполнения этим аппаратным обеспечением на основе Z/Architecture®, может использоваться Linux, а также машины, использующие эмуляцию Hercules, UMX или FSI (Fundamental Software, Inc), когда выполнение обычно происходит в режиме эмуляции. В режиме эмуляции эмулирующее программное обеспечение выполняется собственным процессором, эмулирующим архитектуру эмулируемого процессора.
Собственный процессор обычно выполняет эмулирующее программное обеспечение, представляющее собой аппаратно-программное обеспечение или собственную операционную систему для эмуляции эмулируемого процессора. Эмулирующее программное обеспечение отвечает за выборку и выполнение команд архитектуры эмулируемого процессора. Эмулирующее программное обеспечение поддерживает счетчик эмулируемых команд для слежения за границами команд. Эмулирующее программное обеспечение может осуществлять выборку одной или нескольких эмулируемых машинных команд за один раз и транслирование одной или нескольких эмулируемых машинных команд в соответствующую группу собственных машинных команд для выполнения собственным процессором. Эти транслированные команды могут помещаться в кэш, что позволяет ускорять транслирование. Тем не менее, эмулирующее программное обеспечение должно поддерживать правила архитектуры эмулируемого процессора с тем, чтобы обеспечивать правильную работу операционных систем и приложений, написанных для эмулируемого процессора. Кроме того, эмулирующее программное обеспечение должно обеспечивать ресурсы, указанные архитектурой эмулируемого процессора, включая без ограничения управляющие регистры, регистры общего назначения, регистры с плавающей точкой, функцию динамической трансляции адреса, включая таблицы сегментов и таблицы страниц, например, механизмы прерывания, механизмы переключения контекста, часы истинного времени (TOD) и структурированные интерфейсы с подсистемами ввода-вывода с тем, чтобы операционная система или прикладная программа, рассчитанная на работу в эмулируемом процессоре, могла быть запущена в собственном процессоре, имеющем эмулирующее программное обеспечение.
Конкретная эмулируемая команда декодируется, и вызывается подпрограмма для выполнения функции отдельной команды. Функция эмулирующего программного обеспечения, эмулирующая функцию эмулируемого процессора, реализуется, в подпрограмме или драйвере на языке "С" или каким-либо другим способом обеспечения драйвера для конкретного аппаратного обеспечения, доступным для специалистов в данной области техники, ознакомившихся в описанием предпочтительного варианта осуществления. В различных патентах, в которых предложена эмуляция программного и аппаратного обеспечения, включая без ограничения патент 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; каждый из которых включен в данное описание во всей их полноте, и многие другие, проиллюстрированные разнообразные известные способы эмуляции формата команд, структурированного для отличающейся машины, в целевой машине, доступные для специалистов в данной области техники.
На ФИГ.25 проиллюстрирован один из примеров известной из техники эмулирующей компьютерной хост-системы 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'.
Используемая в описании терминология имеет целью описание лишь частных вариантов осуществления, а не ограничение изобретения. Подразумевается, что используемые в описании формы единственного числа включают также формы множественного числа, если из контекста ясно не следует иное. Дополнительно подразумевается, что термины "содержит" и/или "содержащий", используемые в описании, означают присутствие указанных признаков, чисел, шагов, операций, элементов и/или компонентов, но не исключают присутствие или добавление одного или нескольких других признаков, чисел, шагов, операций, элементов, компонентов и/или их групп.
Подразумевается, что соответствующие структуры, материалы, действия и эквиваленты всех элементов "средство или шаг плюс функция" следующей далее формулы изобретения, если таковые существуют, включают любую структуру, материал или действие для выполнения функции в сочетании с другими конкретно заявленными средствами. Описание одного или более из воплощений изобретения представлено в качестве иллюстрации и не имеет целью исчерпать или ограничить изобретение раскрытой формой. Для специалистов в данной области техники бесспорны многочисленные модификации и разновидности. Выбранный и описанный вариант осуществления имеет целью наилучшим образом пояснить различные аспекты изобретения и его практическое применение, а также позволить специалистам в данной области техники понять различные варианты осуществления с различными модификациями, рассчитанными на конкретное применение.
название | год | авторы | номер документа |
---|---|---|---|
СОХРАНЕНИЕ/ВОССТАНОВЛЕНИЕ ВЫБРАННЫХ РЕГИСТРОВ ПРИ ТРАНЗАКЦИОННОЙ ОБРАБОТКЕ | 2012 |
|
RU2562424C2 |
БЛОК ДИАГНОСТИКИ ТРАНЗАКЦИЙ | 2012 |
|
RU2571397C2 |
СПОСОБ И СИСТЕМА ДЛЯ УПРАВЛЕНИЯ ВЫПОЛНЕНИЕМ ВНУТРИ ВЫЧИСЛИТЕЛЬНОЙ СРЕДЫ | 2012 |
|
RU2577487C2 |
КОМАНДА НА НЕТРАНЗАКЦИОННОЕ СОХРАНЕНИЕ | 2012 |
|
RU2568324C2 |
ВЫПОЛНЕНИЕ ВЫНУЖДЕННОЙ ТРАНЗАКЦИИ | 2012 |
|
RU2549112C2 |
ОБРАБОТКА СОБЫТИЯ ЗАЩИЩЕННОГО СОХРАНЕНИЯ В ХОДЕ ТРАНЗАКЦИОННОГО ВЫПОЛНЕНИЯ | 2017 |
|
RU2728849C1 |
ЗАГРУЗКА И СОХРАНЕНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ, РЕГУЛИРУЮЩИХ ФУНКЦИОНИРОВАНИЕ СРЕДСТВА ЗАЩИЩЕННОГО СОХРАНЕНИЯ | 2018 |
|
RU2727614C1 |
КОМАНДА ЗАЩИЩЕННОЙ ЛОГИЧЕСКОЙ ЗАГРУЗКИ И СДВИГА | 2018 |
|
RU2731327C1 |
ОБРАБОТКА ТРАНЗАКЦИЙ | 2013 |
|
RU2606878C2 |
РАСШИРЕНИЕ СОГЛАСУЮЩЕГО ПРОТОКОЛА ДЛЯ ИНДИКАЦИИ СОСТОЯНИЯ ТРАНЗАКЦИИ | 2015 |
|
RU2665306C2 |
Изобретение относится к вычислительной технике. Технический результат заключается в повышении многопроцессорной производительности. Способ управления прерываниями внутри вычислительной среды включает осуществление транзакционной обработки транзакции, причем транзакция эффективно задерживает фиксацию транзакционных сохранений в главной памяти до тех пор, пока не завершится выбранная транзакция, причем транзакционная обработка имеет директиву фильтрации, установленную в одно значение из множества значений, указывающего множество уровней фильтрации прерывания, из которых первый уровень означает отсутствие фильтрации, при которой ситуации программного исключения приводят к прерыванию, второй уровень указывает на ограниченную фильтрацию, при которой ситуации программного исключения из выбранного класса транзакций не приводят к прерыванию, а третий уровень указывает на умеренную фильтрацию, при которой ситуации программного исключения из множества выбранных классов транзакций не приводят к прерыванию; обнаружение ситуации программного исключения; определение, должно ли прерывание быть представлено; и на основе определения, указывающего, что прерывание не должно быть представлено, обход представления прерывания. 3 н. и 7 з.п. ф-лы, 32 ил.
1. Способ управления прерываниями внутри вычислительной среды, включающий:
осуществление транзакционной обработки транзакции, причем указанная транзакция эффективно задерживает фиксацию транзакционных сохранений в главной памяти до тех пор, пока не завершится выбранная транзакция, причем транзакционная обработка имеет соответствующую директиву фильтрации, установленную в одно значение из множества значений, указывающего множество уровней фильтрации прерывания, из которых первый уровень означает отсутствие фильтрации, при которой ситуации программного исключения приводят к прерыванию, второй уровень указывает на ограниченную фильтрацию, при которой ситуации программного исключения из выбранного класса транзакций не приводят к прерыванию, а третий уровень указывает на умеренную фильтрацию, при которой ситуации программного исключения из множества выбранных классов транзакций не приводят к прерыванию;
обнаружение, с помощью процессора, в ходе транзакционной обработки, ситуации программного исключения, причем ситуация программного исключения определена для представления прерывания;
определение, основанное на обнаружении ситуации программного исключения, должно ли прерывание быть представлено, причем определение использует директиву фильтрации; и
на основе определения, указывающего, что прерывание не должно быть представлено, обход представления прерывания.
2. Способ по п. 1, в котором для второго уровня, ситуации программного исключения, имеющие значение класса транзакции три, не приводят к прерыванию, а для третьего уровня, ситуации программного исключения, имеющие значение класса транзакции два или три, не приводят к прерыванию.
3. Способ по п. 1 или 2, в котором указанное одно значение, в котором установлена директива фильтрации, указывает уровень фильтрации из множества уровней, и в котором определение включает:
определение класса транзакции для ситуации программного исключения; и
проверку для уровня фильтрации, будет ли класс транзакции приводить к прерыванию, причем определение указывает, что прерывание не должно быть представлено, основываясь на проверке, указывающей, что класс транзакции для этого уровня фильтрации не приводит к прерыванию.
4. Способ по п. 1, в котором директива фильтрации включена в команду начать транзакцию, причем команда начать транзакцию является одной командой начать транзакцию из множества команд начать транзакцию, используемых для создания вложенного множества транзакций, и причем одна или более из команд начать транзакцию включают директиву фильтрации, и причем применяемая директива фильтрации является наивысшей величиной из одной или более директив фильтрации.
5. Способ по п. 1, в котором определение дополнительно включает применение значения класса транзакции, связанного с ситуацией программного исключения и директивой фильтрования для определения, должно ли прерывание быть представлено.
6. Способ по п. 1, в котором транзакция представляет собой вынужденную транзакцию и директива фильтрации устанавливается в значение по умолчанию.
7. Способ по п. 1, в котором, основываясь на определении, указывающем, что прерывание должно быть представлено, способ дополнительно содержит:
сохранение содержимого в одной или более ячейках памяти, назначенных ситуацией программного исключения, причем сохранение включает установку кода длины команды идентификации программного прерывания относительно команды, в которой произошла ситуация программного исключения; и
сохранение слова состояния программы сброса транзакции как старого программного слова состояния программы.
8. Способ по п. 1, дополнительно включающий сбрасывание транзакции, основанное на обнаружении ситуации программного исключения, причем транзакция является невынужденной транзакцией и директива контроля указывает, что прерывание должно быть обойдено.
9. Компьютерная система для управления прерываниями внутри вычислительной среды, содержащая память и процессор, сообщающийся с памятью, причем компьютерная система настроена для осуществления способа по одному из предыдущих пунктов.
10. Машиночитаемый носитель данных, содержащий программный продукт, включающий команды для осуществления способа по одному из пп. 1-8.
Способ приготовления мыла | 1923 |
|
SU2004A1 |
Колосоуборка | 1923 |
|
SU2009A1 |
Способ приготовления мыла | 1923 |
|
SU2004A1 |
Станок для изготовления деревянных ниточных катушек из цилиндрических, снабженных осевым отверстием, заготовок | 1923 |
|
SU2008A1 |
ОПТИМИЗАЦИЯ ОПЕРАЦИЙ ПРОГРАММНОЙ ТРАНЗАКЦИОННОЙ ПАМЯТИ | 2006 |
|
RU2433453C2 |
Авторы
Даты
2015-11-20—Публикация
2012-11-15—Подача