ОБРАБОТКА ТРАНЗАКЦИЙ
TRANSACTION PROCESSING

Уровень техники
Настоящее изобретения относятся в целом к многопроцессорным вычислительным средам, в частности к обработке транзакций в таких вычислительных средах.
Актуальной проблемой программирования в многопроцессорной среде является обновление содержимого одной и той же ячейки запоминающего устройства несколькими центральными процессорными устройствами (ЦПУ). Многие команды, обновляющие содержимое ячеек запоминающего устройства, в том числе даже такие простые логические команды, как конъюнкция (AND), требуют для этого много обращений к данным ячейкам. Например, сначала выполняется выборка содержимого ячейки запоминающего устройства, затем обновленный результат возвращается на хранение в запоминающее устройство.
Для того чтобы набор ЦПУ успешно обновлял содержимое одной и той же ячейки запоминающего устройства, доступ к данной ячейке сериализуется (т.е. организуется последовательный доступ). В прошлом корпорацией International Business Machines Corporation вместе с архитектурой S/360 была введена команда "Проверка и установка" (от англ.: TEST AND SET), обеспечивающая обновление содержимого ячейки запоминающего устройства со взаимной блокировкой. Обновление со взаимной блокировкой означает, что с точки зрения других ЦПУ и подсистемы ввода-вывода (например, канальной подсистемы) обращение команды к запоминающему устройству представляется атомарным (т.е. исполняется полностью или не исполняется вовсе). Позднее, вместе с архитектурой S/370, предложенной корпорацией International Business Machines Corporation, были введены команды "Сравнение с обменом" (от англ.: COMPARE AND SWAP) и "Двойное сравнение с обменом" (от англ.: COMPARE DOUBLE AND SWAP), позволяющие более аккуратно выполнять обновление со взаимным блокированием, а также позволяющие осуществить методику, известную как блокировочное слово (семафор). Добавленные недавно команды, включая "Сравнение с обменом и очистка" (от англ.: COMPARE AND SWAP AND PURGE) и "Сравнение с обменом и сохранение" (от англ.: COMPARE AND SWAP AND STORE), реализовали дополнительные возможности обновления со взаимным блокированием. Тем не менее, все указанные выше команды обеспечивают взаимное блокирование только одиночной ячейки запоминающего устройства.
Более сложные программные методики могут потребовать обновление со взаимным блокированием большого числа ячеек запоминающего устройства, например, в случае добавления элемента в дважды связанный список. В такой операции с точки зрения других ЦПУ и подсистемы ввода-вывода должны обновляться одновременно как прямой, так и обратный указатели. Чтобы добиться такого обновления множества ячеек запоминающего устройства, программа вынуждена использовать отдельную, единую точку сериализации, такую как блокировочное слово. Однако блокировочные слова могут обеспечить только значительно более грубый уровень сериализации, чем требуется; например, блокировочные слова могут сериализовать очередь из миллиона элементов целиком, хотя обновляются всего два элемента. Для более аккуратной сериализации программа может структурировать данные (например, организовать иерархию точек блокировки), однако это порождает дополнительные проблемы, такие как возможность возникновения ситуации взаимоблокировки, если происходит нарушение иерархии; восстановление происходит, если программа обнаруживает ошибку во время одной или более блокировок или если установка блокировки окажется невозможной.
В дополнение к изложенному выше существует множество сценариев, по которым программа может выполнить последовательность команд, приводящую или не приводящую к возбуждению условия исключения. Однако если исключение возбуждается, то программа может предпринять корректирующее действие для устранения условия исключения. Например, в среде Java подобное выполнение может использоваться, например, для спекулятивного выполнения, частичного последовательного выполнения функции и/или при повторной организации последовательности проверки нулевого указателя.
В классических операционных системах, таких как z/OS и ее предшественницах, предложенных корпорацией International Business Machines Corporation, программа задает среду восстановления для перехвата случаев возбуждения любого возможного условия программного исключения. Если программа не перехватывает некоторое исключение, к обработке которого и операционная система не была подготовлена, то в случае возбуждения такого исключения, как правило, выполнение программы аварийно прекращается операционной системой. Организация и эксплуатация подобной вычислительной среды затратна и связана с трудностями.
Сущность изобретения
Для преодоления недостатков уровня техники предложен способ управления выполнением транзакции в вычислительной среде, включающий инициирование процессором выполнения транзакции в режиме выполнения транзакции посредством команды начала транзакции, используемой для инициирования транзакции первого типа или транзакции второго типа, причем транзакция включает множество подлежащих выполнению команд, и команда начала транзакции посредством своего поля явно указывает на инициирование транзакции первого типа или транзакции второго типа. Предлагаемый в изобретении способ характеризуется тем, что: при выполнении транзакции второго типа устанавливают код условия на первое значение; в режиме выполнения транзакции эффективно задерживают фиксацию транзакционных сохранений в главном запоминающем устройстве до завершения выбранной транзакции; в случае прерывания транзакции определяют на основании поля команды начала транзакции, инициирована ли транзакция первого типа или второго типа; в случае прерывания транзакции первого типа выполнение транзакции возобновляют с команды начала транзакции; в случае прерывания транзакции второго типа устанавливают код условия на второе значение, которое указывает на получение управления командой, следующей по очереди после команды начала транзакции, в результате прерывания транзакции, и выполнение транзакции возобновляют с команды, непосредственно следующей за командой начала транзакции в порядке, заданном программой; причем первым типом транзакции является ограниченная транзакция, обладающая одним или несколькими связанными с ней ограничениями, а команда начала транзакции является командой начала ограниченной транзакции, при этом одно или несколько ограничений, связанных с ограниченной транзакцией, включают: доступность только части набора общих команд для включения в ограниченную транзакцию, возможность выполнения только определенного числа команд в ограниченной транзакции, возможность доступа только к определенному числу операндов запоминающего устройства в ограниченной транзакции или ограничение ограниченной транзакции единственным уровнем вложения, а вторым типом транзакции является неограниченная транзакция, не обладающая одним или несколькими ограничениями, связанными с ограниченной транзакцией.
Объектами изобретения являются также система для управления выполнением транзакции в вычислительной среде, содержащая средства, приспособленные для выполнения всех шагов описанного выше способа, а также машиночитаемый носитель данных, в котором хранится компьютерная программа, содержащая команды для выполнения всех шагов описанного выше способа при ее выполнении при ее выполнении в компьютерной системе.
В изобретении предлагается транзакционная среда, позволяющая использовать различные типы транзакций. Данная транзакционная среда предполагает возможность обработки прерывания транзакции с учетом различных типов транзакций и выполнение обработки в соответствии с типом транзакции. Таким образом, тип транзакции определяет то, каким образом должна вестись обработка транзакции, включая обработку прерываний. Соответственно, используется логический поток прерывания, который учитывает тип транзакции и ведет себя по-разному в зависимости от определенного типа транзакции.
Технический результат, достигаемый при осуществлении изобретения, заключается в повышении производительности обработки транзакций в вычислительной среде.
Краткое описание чертежей
В описании и формуле изобретения в качестве примеров один или более аспектов указываются и отдельно формулируются. Вышеупомянутые и прочие объекты, особенности и преимущества раскрываются в последующем подробном описании, которое сопровождается чертежами. На чертежах показано:
на фиг. 1 - схема варианта осуществления вычислительной среды,
на фиг. 2А - схема примера команды начала неограниченной транзакции [от англ.: Transaction Begin, мнемокод (т.е. мнемоническое обозначение) - TBEGIN],
на фиг. 2Б - более подробная схема варианта осуществления поля команды начала неограниченной транзакции, схема которой показана на фиг. 2А,
на фиг. 3А - схема примера команды начала ограниченной транзакции (от англ.: Transaction Begin Constrained, мнемокод - TBEGINC);
на фиг. 3Б - более подробная схема варианта осуществления поля команды начала ограниченной транзакции, схема которой показана на фиг. 3А,
на фиг. 4 - схема примера команды окончания транзакции (от англ.: Transaction End, мнемокод - TEND),
на фиг. 5 - схема примера команды прерывания транзакции (от англ.: Transaction Abort, мнемокод - TABORT),
на фиг. 6 - схема примера вложенных транзакций,
на фиг. 7 - схема примера команды нетранзакционного сохранения (от англ.: Nontransactional Store, мнемокод -NTSTG),
на фиг. 8 - схема примера команды извлечения глубины вложения транзакции (от англ.: Extract Transaction Nesting Depth, мнемокод - ETND),
на фиг. 9 - схема примера блока диагностики транзакции,
на фиг. 10 - перечень причин прерывания транзакции с указанием соответствующих значений кода прерывания транзакции и кода условия,
на фиг. 11 - схема варианта осуществления алгоритма, связанного с выполнением команды начала ограниченной транзакции,
на фиг. 12 - схема варианта осуществления алгоритма, связанного с выполнением команды начала неограниченной транзакции,
на фиг. 13 - схема варианта осуществления алгоритма, связанного с выполнением команды окончания транзакции,
на фиг. 14 - схема варианта осуществления алгоритма, связанного с выполнением команды прерывания транзакции,
на фиг. 15А - схема варианта осуществления алгоритма, связанного с обработкой транзакций,
на фиг. 15Б - схема варианта осуществления алгоритма, связанного с продолжением обработки после прерывания неограниченной транзакции,
на фиг. 16А и 16Б - схемы примера вставки элемента очереди в дважды связанный список элементов очереди,
на фиг. 17 - графическое представление варианта осуществления компьютерного программного продукта,
на фиг. 18 - схема варианта осуществления хост-компьютерной системы,
на фиг. 19 - схема другого варианта осуществления компьютерной системы,
на фиг. 20 - схема другого варианта осуществления компьютерной системы, содержащей вычислительную сеть,
на фиг. 21 - схема варианта осуществления различных узлов компьютерной системы,
на фиг. 22А - схема варианта осуществления исполнительного устройства из состава компьютерной системы, показанной на фиг. 21,
на фиг. 22Б - схема варианта осуществления устройства ветвления из состава компьютерной системы, показанной на фиг. 21,
на фиг. 22В - схема варианта осуществления устройства загрузки-хранения из состава компьютерной системы, показанной на фиг. 21,
на фиг. 23 - схема варианта осуществления эмулируемой (виртуальной) хост-компьютерной системы.
Подробное описание
В одном аспекте изобретения предлагается средство выполнения транзакций (ТХ). Данное средство обеспечивает обработку транзакций для команд и, в соответствии с нижеизложенным, в одном или более вариантах осуществления предоставляет различные режимы выполнения и уровни вложения обработки транзакций.
Средство обработки транзакций вводит состояние ЦПУ, называемое режимом выполнения транзакции (ТХ). После перезагрузки ЦПУ не входит в режим выполнения транзакции. ЦПУ переводится в режим выполнения транзакции по команде начала транзакции. ЦПУ выходит из режима выполнения транзакции или (а) по крайней внешней команде окончания транзакции (подробные сведения о внешних и внутренних командах приведено ниже), или (б) в случае прерывания транзакции. В режиме выполнения транзакции обращения ЦПУ к запоминающему устройству с точки зрения других ЦПУ и подсистемы ввода-вывода выглядят едиными (т.е. неделимыми) и одновременными. Обращения к запоминающему устройству или (а) фиксируются (т.е. выполняются целиком и успешно), если крайняя внешняя транзакция завершается без прерывания транзакции (т.е. в этом случае, например, обновления данных в кэш-памяти или в буфере, локальных для данного ЦПУ, передаются далее, сохраняются в реальном запоминающем устройстве и видны другим ЦПУ), или (б) отбрасываются, если транзакция прерывается.
Транзакции могут быть вложенными. Это означает, что пока ЦПУ находится в режиме выполнения транзакции, данное ЦПУ может выполнять другую команду начала транзакции. Команда, которая переводит ЦПУ в режим выполнения транзакции, называется крайней внешней командой начала транзакции; по аналогии о программе говорят, что она выполняет крайнюю внешнюю транзакцию. Последующие вызываемые команды начала транзакции называются внутренними командами, при этом программа выполняет внутреннюю транзакцию. Изложенная модель обеспечивает как минимальное значение глубины вложения транзакции, так и зависящее от модели максимальное (т.е. максимально допустимое) значение глубины вложения транзакции. Команда извлечения глубины вложения транзакции возвращает текущее значение глубины вложения транзакции, и, согласно другому варианту осуществления, может возвращать максимальное значение глубины вложения транзакции. Такая методика использует модель, называемую "уплощенным вложением", согласно которой условие прерывания транзакции на любом уровне вложения транзакции приводит к прерыванию всех уровней транзакции и возвращению управления команде, следующей за крайней внешней командой начала транзакции.
В ходе обработки транзакции транзакционное обращение, совершаемое некоторым ЦПУ, считается конфликтующим (а) с транзакционным или нетранзакционным обращением, совершаемым другим ЦПУ, или (б) с нетранзакционным обращением, совершаемым подсистемой ввода-вывода в случае, если оба обращения адресованы к любой ячейке памяти в составе одной и той же строки кэш-памяти и одно или оба этих обращения являются обращениями сохранения. Иными словами, для того, чтобы выполнение транзакций было продуктивным, ЦПУ не должно совершать транзакционные обращения во время фиксации. Изложенная модель программирования в определенных случаях может быть высокоэффективной, например, при обновлении двух элементов дважды связанного списка, состоящего из миллиона элементов. Однако указанная модель может быть и менее эффективна в случае транзакционных обращений к большому числу ячеек запоминающего устройства.
В одной из моделей выполнения транзакции (называемой в настоящей заявке неограниченной транзакцией) при прерывании транзакции программа может либо пытаться заново выполнить данную транзакцию в надежде, что условие прерывания транзакции будет деактивировано, либо программа может "прибегнуть" к переходу на эквивалентную (резервную) нетранзакционную ветвь. Согласно другой модели выполнения транзакции (называемой в настоящей заявке ограниченной транзакцией), прерванная транзакция автоматически повторно выполняется ЦПУ; если условие прерывания транзакции не останется возбужденным непрерывно, то ограниченной транзакции в конечном счете гарантируется успешное выполнение.
При инициировании транзакции программа может задавать различные управляющие параметры, такие как: (а) перечень регистров общего назначения, содержимое которых в случае прерывания транзакции следует восстановить по состоянию на момент начала транзакции; (б) разрешение транзакции изменять содержимое регистров с плавающей запятой, в том числе, например, самих регистров с плавающей запятой и управляющего регистра операций с плавающей запятой; (в) разрешение транзакции изменять содержимое регистров доступа; (г) указание блокировать возникновение прерывания при возбуждении определенных условий программных исключений. Если неограниченная транзакция прерывается, то может предоставляться различная диагностическая информация. Например, крайняя внешняя команда начала транзакции (TBEGIN), инициирующая неограниченную транзакцию, может назначать определяемый программой блок диагностики транзакции. Кроме того, также может использоваться блок диагностики транзакции в зоне префикса ЦПУ или назначенный описанием состояния хост-компьютера, если транзакция прервана соответственно из-за программного прерывания или возникновения условия, вызывающего прекращение интерпретационного выполнения.
Выше были упомянуты различные типы регистров. Далее приводится их более подробное описание. Регистры общего назначения могут использоваться в качестве аккумуляторов в общих арифметических и логических операциях. Согласно одному из вариантов осуществления, каждый регистр содержит 64 двоичных разряда, всего имеется 16 регистров общего назначения. Регистры общего назначения идентифицируются по номерам, от 0 до 15, и обозначаются четырехразрядным полем R в составе команды. В некоторых командах предусмотрена адресация набора регистров общего назначения благодаря наличию набора полей R. В некоторых командах вместо явного обозначения с использованием поля R предусмотрено использование жестко заданных регистров общего назначения.
В дополнение к использованию в качестве аккумуляторов в общих арифметических и логических операциях, пятнадцать из шестнадцати регистров общего назначения также используются при формировании адресов в качестве регистров базового адреса и индекса. В этих случаях регистры обозначаются четырехразрядными полями (соответственно поля В и X) в составе команды. Значение ноль в поле В или X предписывает, что база или индекс не должны использоваться, в связи с чем регистр общего назначения с обозначением 0 не должен указываться как содержащий базовый адрес или индекс.
Команды с плавающей запятой используют набор регистров с плавающей запятой. В варианте осуществления ЦПУ снабжено шестнадцатью регистрами с плавающей запятой. Регистры с плавающей запятой идентифицируются по номерам, с 0 до 15, и обозначаются четырехразрядным полем R в составе команды с плавающей запятой. Каждый регистр с плавающей запятой является 64-разрядным и может содержать короткий (32-разрядный) или длинный (64-разрядный) операнд с плавающей запятой.
Управляющий регистр операций с плавающей запятой представляет собой 32-разрядный регистр, который содержит разряды маски, разряды флагов, код исключения данных и разряды режима округления, данный регистр используется при обработке операций с плавающей запятой.
Кроме того, в одном из вариантов осуществления ЦПУ снабжено шестнадцатью управляющими регистрами длиной 64 разряда каждый. Разряды этих управляющих регистров назначены определенным средствам системы, таким как средство регистрации программных событий (от англ.: Program Event Recording, аббревиатура PER) (описание приводится ниже), и используются для указания того, что либо операция может выполняться, либо должна быть предоставлена специальная информация, необходимая данному средству. В одном из вариантов осуществления для средства выполнения транзакции в соответствии с нижеизложенным используются поля управляющих регистров 0 (разряды с номерами 8 и 9) и 2 (разряды 61-63).
ЦПУ снабжено, например, шестнадцатью регистрами доступа с номерами 0-15. Регистры доступа являются 32-разрядными, разряды содержат косвенную спецификацию управляющего элемента адресного пространства. Управляющий элемент адресного пространства представляет собой параметр, используемый средством динамической трансляции адреса для преобразования ссылок в соответствующее адресное пространство. Если ЦПУ находится в режиме, называемом режимом регистра доступа [управление осуществляется разрядами слова состояния программы (ССП)], то поле В команды, используемое для указания логического адреса для ссылки на операнд запоминающего устройства, указывает регистр доступа и средство динамической трансляции адреса для выполняемой ссылки использует управляющий элемент адресного пространства, определенный регистром доступа. Для некоторых команд вместо поля В используется поле R. Предусмотрены команды для загрузки и сохранения содержимого регистров доступа и для перемещения содержимого из одного регистра доступа в другой.
Каждый регистр доступа, с 1-го по 15-й, может указывать любое адресное пространство. Регистр доступа 0 указывает первичное пространство команд. Если для указания адресного пространства используется один из регистров доступа с 0-го по 15-й, то ЦПУ определяет, какое из адресных пространств указано, путем преобразования содержимого регистра доступа. Если для указания адресного пространства используется регистр 0, то ЦПУ воспринимает содержимое регистра доступа как обозначающее первичное пространство команд и не проверяет фактическое содержимое регистра доступа. В связи с этим 16 регистров доступа в любой момент времени могут обозначать первичное пространство команд и до 15-ти других пространств.
Согласно варианту осуществления, существует несколько типов адресных пространств. Адресное пространство представляет собой непрерывную последовательность целых чисел (виртуальных адресов) и специфические параметры преобразования, что в совокупности позволяет ассоциировать каждое число последовательности с местоположением байта в запоминающем устройстве. Указанная последовательность начинается с нуля и нумеруется в направлении слева направо.
Например, в архитектуре z/Architecture при использовании центральным процессорным устройством виртуального адреса для обращения к главному запоминающему устройству (которое также называют главной памятью) этот виртуальный адрес вначале преобразуются средством динамической трансляции адреса в реальный адрес, затем путем добавления префикса преобразуется в абсолютный адрес. Средство динамической трансляции адреса может использовать в качестве параметров преобразования от одного до пяти уровней таблиц (таблицы страниц, сегментов, третьего региона, второго региона, первого региона). Обозначение (начало и длина) таблицы наиболее высокого уровня для специфического адресного пространства называется управляющим элементом адресного пространства, и средство динамической трансляции адреса получает эти сведения из управляющего регистра или по указанию регистра доступа. Согласно другому варианту, управляющий элемент адресного пространства для некоторого адресного пространства может быть реальным обозначением пространства, и средство динамической трансляции адреса должно воспринимать виртуальный адрес как реальный адрес и не использовать для преобразования какие-либо таблицы.
Средство динамической трансляции адреса в различные моменты времени использует управляющие элементы адресного пространства из различных управляющих регистров или указываемые регистрами доступа. Выбор определяется режимом преобразования, заданным текущим ССП. Возможно использование одного из четырех режимов трансляции: режим первичного пространства, режим вторичного пространства, режим регистра доступа и режим домашнего пространства. Адресация различных адресных пространств зависит от режима трансляции.
В любой момент времени, когда ЦПУ находится в режиме первичного пространства или в режиме вторичного пространства, оно может транслировать виртуальные адреса, принадлежащие двум адресным пространствам - первичному адресному пространству и вторичному адресному пространству. В любой момент времени, когда ЦПУ находится в режиме регистра доступа, оно может транслировать виртуальные адреса вплоть до 16-ти адресных пространств: первичного адресного пространства и до 15-ти адресных пространств, задаваемых регистром доступа. В любой момент времени, когда ЦПУ находится в режиме домашнего адресного пространства, оно может транслировать виртуальные адреса домашнего адресного пространства.
Первичное адресное пространство идентифицируется как таковое, поскольку оно состоит из виртуальных адресов, которые транслируются посредством управляющего элемента первичного адресного пространства. Аналогично, вторичное адресное пространство состоит из вторичных виртуальных адресов, которые транслируются посредством управляющего элемента вторичного адресного пространства; адресные пространства, определяемые регистрами доступа, состоят из определяемых регистрами доступа виртуальных адресов, которые транслируются посредством управляющих элементов адресных пространств, определяемых регистрами доступа; домашние адресные пространства состоят из домашних виртуальных адресов, которые транслируются посредством управляющих элементов домашних адресных пространств. Управляющие элементы первичного и вторичного адресных пространств располагаются в управляющих регистрах 1 и 7 соответственно. Управляющие элементы адресных пространств, определяемых регистрами доступа, располагаются в записях второй таблицы номеров адресных пространств, эти записи идентифицируются с помощью процесса, называемого трансляцией регистра доступа, с использованием управляющих регистров 2, 5 и 8. Управляющий элемент домашнего адресного пространства располагается в управляющем регистре 13.
Вариант осуществления вычислительной среды, пригодной для внедрения и использования одного или нескольких аспектов средства выполнения транзакций, описывается в настоящей заявке с использованием схемы на фиг. 1.
В соответствии со схемой на фиг. 1, в одном из примеров вычислительная среда 100 основана на архитектуре z/Architecture, предложенной корпорацией International Business Machines Corporation (корпорацией IBM) Армонк, штат Нью-Йорк, США. Архитектура z/Architecture описана в публикации IBM "z/Architecture - Principles of Operation" (от англ.: "Принцип действия архитектуры z/Architecture", публикация IBM №SA22-7832-08, 9-е издание, август 2010 г.).
Z/ARCHITECTURE, IBM, Z/OS и Z/VM (упоминается ниже) являются зарегистрированными торговыми марками корпорации International Business Machines Corporation, Армонк, штат Нью-Йорк, США. Прочие наименования, используемые в настоящей заявке, могут также быть зарегистрированными торговыми марками, торговыми марками или наименованиями продуктов корпорации International Business Machines Corporation или других компаний.
В одном из примеров в состав вычислительной среды 100 входит центральный процессорный комплекс 102, соединенный с одним или более устройствами 106 ввода-вывода через одно или более управляющих устройств 108. В состав центрального процессорного комплекса 102 входят, например, одно или более ЦПУ 110, один или более разделов 112 (например, логических разделов), гипервизор 114 логических разделов, а также подсистема 115 ввода-вывода. Описание перечисленных функциональных узлов приводится ниже.
ЦПУ 110 являются физическими процессорными ресурсами, выделенными логическим разделам. В частности, каждому логическому разделу 112 выделен один или более логических процессоров, каждый из которых представляет собой физический процессор 110, выделенный указанному разделу, или совместно используемую часть физического процессора 110. Логические процессоры конкретного раздела 112 могут быть специально выделенными данному разделу, так что соответствующий процессорный ресурс 110 зарезервирован данному разделу, либо совместно используемыми с другим разделом, так что соответствующий процессорный ресурс потенциально доступен другому разделу.
Логический раздел действует как отдельная система, в его состав входят одно или более приложений (т.е. прикладных программ) и резидентная операционная система, которая может отличаться от операционных систем других логических разделов. В варианте осуществления операционной системой является операционная система z/OZ, операционная система z/VM, операционная система Linux или операционная система TPF, предложенные корпорацией International Business Machines Corporation, Армонк, штат Нью-Йорк, США. Логические разделы 112 управляются гипервизором 114 логических разделов, который используется встроенным программным обеспечением, выполняемым процессорами 110. В данном случае в состав встроенного программного обеспечения входит, например, микрокод и/или милликод процессора. Это программное обеспечение включает, например, команды уровня аппаратного обеспечения и/или структуры данных, используемые при задействовании машинного кода более высокого уровня. В варианте осуществления указанное программное обеспечение включает, например, проприетарный код, который обычно поставляется как микрокод, содержащий выверенное программное обеспечение, или микрокод, специфический для контролируемого аппаратного обеспечения, и управляет доступом операционной системы к аппаратному обеспечению системы.
В состав логических разделов и супервизора логических разделов входит одна или более программ, располагающихся в соответствующих разделах центрального запоминающего устройства, связанного с центральными процессорами. Примером гипервизора 114 логических разделов является Процессорный менеджер ресурсов/системы, предложенный корпорацией International Business Machines Corporation, Армонк, штат Нью-Йорк, США.
Подсистема 115 ввода-вывода контролирует поток информации между устройствами 106 ввода-вывода и главным запоминающим устройством (также используется термин главная память). Указанная подсистема соединяется с центральным процессорным комплексом, благодаря чему она может быть как частью центрального процессорного комплекса, так и отдельным функциональным узлом. Подсистема ввода-вывода содействует центральным процессорным устройствам в обмене данными непосредственно с устройствами ввода-вывода и позволяет вести обработку данных совместно с выполнением ввода-вывода. Для осуществления обмена данными подсистема ввода-вывода использует коммуникационные адаптеры ввода-вывода. Существует множество типов коммуникационных адаптеров, в том числе, например, каналы, адаптеры ввода-вывода, платы шины PCI (от английского Peripheral Component Interconnect - межсоединение периферийных компонентов), платы шины Ethernet, платы интерфейса SCSI (от английского Small Computer Storage Interface - интерфейс малых вычислительных систем) и т.д. В конкретном примере, описываемом в данной заявке, коммуникационные адаптеры ввода-вывода относятся к типу каналов, в связи с чем подсистема ввода-вывода в данной заявке называется канальной подсистемой. Однако это лишь один из примеров, могут использоваться подсистемы ввода-вывода других типов.
При работе с потоком информации, поступающей от или к устройствам 106 ввода-вывода, подсистема ввода-вывода в качестве коммуникационных соединений использует один или более трактов ввода-вывода. В данном конкретном примере указанные тракты называются канальными тактами, поскольку коммуникационные адаптеры относятся к канальному типу.
Вычислительная среда, описанная выше, является лишь одним из примеров вычислительных сред, которые могут применяться. Могут использоваться другие среды, в том числе (но не ограничиваясь) среды без разбиения на разделы, среды с иной организацией разделов и/или эмулируемые среды; варианты осуществления не ограничиваются какой-либо одной средой.
Согласно одному или более аспектам, средство выполнения транзакций расширяет возможности ЦПУ, что позволяет ЦПУ выполнять последовательность команд, известную как транзакция, которая может обращаться к большому числу ячеек запоминающего устройства, в том числе, обновлять содержимое этих ячеек. С точки зрения других ЦПУ и подсистемы ввода-вывода транзакция является (а) полностью завершенной как одиночная атомарная операция или (б) прерванной, возможно, с неопределенностью относительно того, будет ли такая транзакция когда-либо выполнена (за исключением ряда условий, описанных в данной заявке). Таким образом, в результате успешно выполненной транзакции может быть обновлено значение набора ячеек запоминающего устройства без какого-либо специального блокирования, требуемого в классической многопроцессорной модели.
В состав средства выполнения транзакций входят, например: один или более управляющих параметров; одна или более команд; обработка транзакций, включая выполнение ограниченных и неограниченных транзакций а также обработку прерывания транзакций; все перечисленные составляющие описаны ниже.
В одном из вариантов осуществления для управления средством выполнения транзакций используются: три управляющих параметра специального назначения, включая ССП прерывания транзакции, адрес блока диагностики транзакции и глубину вложения транзакции; пять двоичных разрядов управляющего регистра; шесть общих команд, включая команды начала транзакции (ограниченной и неограниченной), команду окончания транзакции, команду извлечения глубины вложения транзакции, команду прерывания транзакции и команду нетранзакционного сохранения. Если указанное средство инсталлируется, то оно устанавливается, например, во всех ЦПУ в конфигурации. В одном из вариантов осуществления индикатором указанного средства является 73-й двоичный разряд: значение единица указывает, что средство выполнения транзакций инсталлировано.
Если средство выполнения транзакций инсталлировано, то конфигурация предоставляет средство выполнения неограниченных транзакций и, опционально, средство выполнения ограниченных транзакций, каждое из которых описывается ниже. Если значения индикаторов средства, например, разрядов 50 и 73, оба равны единице, то инсталлировано средство выполнения ограниченных транзакций. Оба индикатора указанного средства хранятся в определенных ячейках запоминающего устройства.
В соответствии с используемыми в настоящей заявке обозначениями, наименование "команда начала транзакции" обозначает команды с мнемокодами TBEGIN (команда начала неограниченной транзакции) и TBEGINC (команда начала ограниченной транзакции). При описании какой-либо конкретной команды из этих двух команд указывается наименование команды, за которым в круглых или квадратных скобках следует мнемокод, или же для краткости указывается только мнемокод.
1
1
2
1
1
1
Вариант осуществления формата команды начала транзакции (TBEGIN) показан на фиг. 2А и 2Б. Согласно примеру, в состав команды 200 TBEGIN входят: поле 202 кода операции, которое содержит код операции, определяющий операцию начала неограниченной транзакции; поле 204 базы (обозначение поля - B); поле 206 смещения (D); примыкающее поле 208 (I). Если значение поля B отлично от нуля, то для формирования адреса первого операнда содержимое регистра общего назначения, определенного полем 204 B добавляется к полю 206 D.
1
Если значение поля B отлично от нуля, что справедливо следующее:
- Если значение глубины вложения транзакции первоначально равно нулю, то адрес первого операнда обозначает местоположение блока диагностики транзакции длиной 256 байт, называемого блоком диагностики транзакции, определенным командой начала транзакции (TBEGIN) (описание приводится ниже), по которому в случае прерывания транзакции может быть сохранена различная диагностическая информация. Если ЦПУ находится в режиме первичного пространства или в режиме регистра доступа, то адрес первого операнда обозначает местоположение в первичном адресном пространстве. Если ЦПУ находится в режиме вторичного пространства или в режиме домашнего пространства, то адрес первого операнда обозначает местоположение соответственно во вторичном или в домашнем адресном пространстве. Если средство динамической трансляции адреса деактивировано, то адрес блока диагностики транзакции указывает местоположение в реальном запоминающем устройстве.
Определяется возможность сохранения первого операнда. Если сохранение возможно, то логический адрес указанного операнда помещается в адрес блока диагностики транзакции и адрес блока диагностики транзакции становится корректным.
- Если ЦПУ уже находится в режиме выполнения неограниченной транзакции, то адрес блока диагностики транзакции не изменяется, и то, проверена ли доступность первого операнда, является непредсказуемым.
1
Если значение поля В равно нулю, то для первого операнда исключения доступа не выявляются и для крайней внешней команды начала транзакции (TBEGIN) значение адреса блока диагностики транзакции некорректно.
1
В одном из примеров двоичные разряды поля B определяются следующим образом.
Маска 210 сохранения регистра общего назначения (см. фиг. 2Б).
2
Двоичные разряды 0-7 поля I содержат маску сохранения регистров общего назначения. Каждый разряд маски сохранения регистров общего назначения представляет собой пару четного-нечетного регистров общего назначения, причем разряд 0 представляет регистры 0 и 1, разряд 1 - регистры 2 и 3 и т.д. Если значение разряда маски сохранения регистров общего назначения крайней внешней команды начала транзакции (TBEGIN) равняется нулю, то содержимое соответствующей пары регистров не сохраняется. Если значение разряда маски сохранения регистров общего назначения крайней внешней команды начала транзакции (TBEGIN) равняется единице, то содержимое соответствующей пары регистров сохраняется в зависящей от модели ячейке запоминающего устройства, которая не доступна напрямую программе.
Если данная транзакция прерывается, то содержимое сохраненных пар регистров восстанавливается по состоянию на момент выполнения крайней внешней команды начала транзакции (TBEGIN). Содержимое всех прочих (несохраненных) регистров общего назначения в случае прерывания транзакции не восстанавливается.
Маска сохранения регистра общего назначения игнорируется для всех команд начала транзакции (TBEGIN) за исключением крайней внешней.
2
Управляющий параметр 212 разрешения изменения регистра доступа (А). Управляющий параметр А, определяемый 12-м двоичным разрядом поля I, управляет разрешением для данной транзакции изменять регистр доступа. Эффективным управляющим параметром А разрешения изменения регистра доступа является результат конъюнкции управляющего параметра А команд начала транзакции (TBEGIN) текущего и всех внешних уровней вложения.
Если значение указанного эффективного управляющего параметра А равно нулю и совершается попытка изменения значения любого регистра доступа, то данная транзакция прерывается с установкой значения кода прерывания транзакции равным 11 (ограниченная транзакция). Если значение указанного эффективного управляющего параметра А равно единице, то данная транзакция при изменении содержимого регистра доступа и отсутствии какого-либо другого условия прерывания транзакции не будет прервана.
2
Управляющий параметр 214 разрешения операций с плавающей запятой (F). Управляющий параметр F, являющийся 13-м двоичным разрядом поля I, определяет, разрешено ли данной транзакции выполнять определенные команды с плавающей запятой. Эффективным управляющим параметром F разрешения операций с плавающей запятой является результат конъюнкции управляющего параметра F команд начала транзакции (TBEGIN) текущего и всех внешних уровней вложения.
Если значение эффективного управляющего параметра F равно нулю, то (а) при попытке выполнения команды с плавающей запятой указанная транзакция будет прервана с установкой значения кода прерывания транзакции равным 11 (ограниченная транзакция) и (б) никаким программным условием исключения данных не будет установлен код исключения данных в байте 2 управляющего регистра операций с плавающей запятой. Если значение эффективного управляющего параметра F рано единице, то (а) данная транзакция не будет прервана при выполнении команды с плавающей запятой и отсутствии какого-либо другого условия прерывания транзакции и (б) программным условием исключения данных в управляющем регистре операций с плавающей запятой может быть установлен код исключения данных.
2
Управляющий параметр 216 фильтрации программных прерываний (от англ.: Program Interruption Filtering Control, аббревиатура PIFC). Двоичные разряды 14 и 15 поля I являются управляющим параметром фильтрации программных прерываний. Данный управляющий параметр определяет, вызывают ли прерывание определенные классы программных условий исключений (например, исключение адресации, исключение данных, исключение операции, исключение защиты и т.д.), возбуждаемых во время работы ЦПУ в режиме выполнения транзакций.
Эффективным управляющим параметром фильтрации программных прерываний является наибольший по значению управляющий параметр фильтрации программных прерываний команд начала транзакции (TBEGIN) среди текущего и всех внешних уровней вложения. Если значение эффективного управляющего параметра фильтрации программных прерываний равно нулю, то любое условие программного исключения вызывает прерывание. Если значение эффективного управляющего параметра фильтрации программных прерываний равно единице, то условия программного исключения, имеющие первый или второй класс выполнения транзакций, вызывают прерывание. (Каждому условию программного исключения в зависимости от значимости исключения назначается по меньшей мере один класс выполнения транзакции. Значимость зависит от вероятности восстановления при повторном выполнении транзакции, а также от того, требуется ли операционной системе отслеживать прерывание). Если значение эффективного управляющего параметра фильтрации программных прерываний равняется двум, то условия программного исключения с первым классом выполнения транзакции вызывают прерывание. Значение 3 эффективного управляющего параметра фильтрации программных прерываний зарезервировано.
2
Двоичные разряды 8-11 поля I (двоичные разряды 40-43 указанной команды) зарезервированы и должны содержать значение ноль; в противном случае в будущем не гарантируется совместимость при выполнении программы.
1
1
2
1
1
1
Вариант осуществления формата команды начала ограниченной транзакции (TBEGINC) показан на фиг. 3А и 3Б. Согласно примеру, в состав команды 300 TBEGINC входят: поле 302 кода операции, которое включает код операции, определяющий операцию начала ограниченной транзакции; поле 304 базы (B); поле 306 смещения (D); примыкающее поле 308 (I). Для формирования адреса первого операнда содержимое регистра общего назначения, определенного полем 304 В, добавляется к полю 306 D. Однако с командой начала ограниченной транзакции для доступа к запоминающему устройству адрес первого операнда не используется. Поле В данной команды должно быть заполнено нулями; в противном случае возбуждается исключение спецификации.
2
Согласно варианту осуществления, поле I содержит набор управляющих параметров, пример данного поля показан на фиг. 3Б.
2
Двоичные разряды поля I определяются, например, следующим образом.
2
Маска 310 сохранения регистров общего назначения. Двоичные разряды 0-7 поля I содержат маску сохранения регистров общего назначения. Каждый разряд маски сохранения регистров общего назначения представляет пару четный-нечетный регистр общего назначения, причем разряд 0 представляет регистры 0 и 1, разряд 1 - регистры 2 и 3 и т.д. Если значение разряда маски сохранения регистров общего назначения равняется нулю, то содержимое соответствующей пары регистров не сохраняется. Если значение разряда маски сохранения регистров общего назначения равняется единице, то содержимое соответствующей пары регистров сохраняется в зависящей от модели ячейке памяти, которая недоступна напрямую программе.
Если данная транзакция прерывается, то при выполнении крайней внешней команды начала транзакции в сохраненных парах регистров восстанавливаются первоначальные значения. Значения всех прочих (несохраненных) регистров в случае прерывания ограниченной транзакции не восстанавливаются.
Маска сохранения регистров общего назначения игнорируется, если команда начала ограниченной транзакции используется для продолжения выполнения в режиме неограниченной транзакции.
2
Управляющий параметр 312 разрешения изменения регистра доступа (А). Управляющий разряд 12 поля I определяет, разрешается ли данной транзакции изменять регистр доступа. Эффективным управляющим параметром А разрешения изменения регистра доступа является результат конъюнкции управляющего параметра А команды начала ограниченной транзакции (TBEGINC) текущего уровня вложения и команд начала неограниченной транзакции (TBEGIN) и команд начала ограниченной транзакции (TBEGINC) любых внешних уровней вложения. Если значение указанного эффективного управляющего параметра А равно нулю и совершается попытка изменения значения любого регистра доступа, то данная транзакция прерывается с установкой значения кода прерывания транзакции равным 11 (ограниченная транзакция). Если значение указанного эффективного управляющего параметра А равно единице, то данная транзакция не будет прервана в случае изменении содержимого регистра доступа и отсутствии какого-либо другого условия прерывания транзакции.
2
Разряды 8-11 и 13-15 поля I (разряды 40-43 и 45-47 команды) являются зарезервированными, их значения должны быть равны нулю.
Конец действия команды начала транзакции указывается командой окончания транзакции (TEND), формат которой показан на фиг. 4. В одном из примеров в состав команды 400 окончания транзакции входит поле 402 кода операции, которое содержит код операции, определяющий операцию окончания транзакции.
При описании средства выполнения транзакций используется набор терминов; далее исключительно для удобства приводится список терминов в алфавитном порядке расположения. В варианте осуществления указанные термины имеют следующее значение:
Прерывание транзакции. Считается, что транзакция прерывается, если она заканчивается до выполнения команды окончания транзакции, в результате значение глубины вложения транзакции становится равным нулю. Согласно варианту осуществления, если транзакция прерывается, то происходит следующее:
- Транзакционные обращения сохранения, сделанные на всех уровнях вложения транзакции, отбрасываются (т.е. фиксации не происходит).
- Нетранзакционные обращения сохранения, сделанные на всех уровнях транзакции, фиксируются.
- В регистрах, заданных маской сохранения регистров общего назначения крайней внешней команды начала транзакции, восстанавливаются значения, предшествовавшие выполнению транзакции (т.е. значение на момент начала выполнения крайней внешней команды начала транзакции). В регистрах общего назначения, не указанных маской сохранения регистров общего назначения крайней внешней команды начала транзакции, исходные значения не восстанавливаются.
- Значения регистров доступа, регистров с плавающей запятой, управляющих регистров операций с плавающей запятой не восстанавливаются. В случае прерывания транзакции сохраняются любые изменения значений указанных регистров, сделанные во время выполнения транзакции.
Транзакция может быть прервана по множеству причин, включая попытку выполнения ограниченной команды, попытку изменения ограниченного ресурса, конфликт транзакции, исчерпание различного рода ресурсов ЦПУ, возбуждение любого условия перехвата состояния интерпретационного выполнения, любое прерывание, команду прерывания транзакции, а также по другим причинам. Специфические причины, по которым транзакция могла быть прервана, предоставляются в коде прерывания транзакции.
2
2
2
2
2
2
2
Пример формата команды прерывания транзакции показан на фиг. 5. В одном из примеров в состав команды 500 прерывания транзакции входят: поле 502 кода операции, которое содержит код операции, определяющий операцию прерывания транзакции; поле 504 базы (В); поле 506 смещения (D). Если значение поля В отлично от нуля, то содержимое регистра общего назначения, определенного полем 504 В, добавляется к полю 506 D, в результате чего формируется адрес второго операнда; в противном случае адрес второго операнда формируется исключительно по полю D, а значение поля В игнорируется. Адрес второго операнда не используется для адресации данных; вместо этого адрес формирует код прерывания транзакции, который при выполнении прерывания транзакции помещается в блок диагностики транзакции. Вычисление адреса второго операнда производится по правилам арифметики для адресов: в режиме 24-разрядной адресации значения разрядов 0-29 устанавливаются равными нулю; в режиме 31-разрядной адресации значения разрядов 0-32 устанавливаются равными нулю.
Фиксация. При завершении крайней внешней команды окончания транзакции ЦПУ фиксирует обращения сохранения, сделанные транзакцией (т.е. крайней внешней транзакцией и всеми уровнями вложения), в результате чего результат данных обращений становится видим прочим ЦПУ и подсистеме ввода-вывода. Если происходит фиксация, то с точки зрения других ЦПУ и подсистемы ввода-вывода все обращения выборки и обращения сохранения, сделанные всеми вложенными уровнями данной транзакции, представляются единой одновременной операцией.
Содержимое регистров общего назначения, регистров доступа, регистров с плавающей запятой и управляющих регистров операций с плавающей запятой процессом фиксации не изменяется. Во время фиксации транзакционных сохранений внесение любых изменений в содержимое указанных регистров откладывается.
Конфликт. Транзакционное обращение, выполняемое одним ЦПУ, конфликтует с (а) транзакционным обращением или нетранзакционным обращением, выполняемым другим ЦПУ или (б) нетранзакционным обращением, совершаемым подсистемой ввода-вывода, если оба обращения выполняются к любой ячейке памяти из одной и той же строки кэш-памяти, и при этом одно или более обращений - обращение сохранения.
Конфликт может быть выявлен командами спекулятивного выполнения ЦПУ даже если этот конфликт не может быть выявлен в концептуальном порядке.
Ограниченная транзакция. Ограниченной транзакцией является транзакция, выполняемая в режиме выполнения ограниченной транзакции, на нее накладываются следующие ограничения:
- Доступна часть набора общих команд.
- Может быть выполнено ограниченное число команд.
- Возможен доступ к ограниченному числу ячеек запоминающего устройства для сохранения операндов.
- Транзакция ограничивается единственным уровнем вложения.
В отсутствие повторяющихся прерываний или конфликтов с другими ЦПУ и подсистемой ввода-вывода ограниченная транзакция в итоге выполняется, благодаря чему не требуется процедура управления прерыванием транзакции. Подробные сведения об ограниченных транзакциях приводятся далее.
Если команда начала ограниченной транзакции выполняется, когда ЦПУ уже находится в режиме выполнения неограниченной транзакции, то выполнение продолжается в форме вложенной неограниченной транзакции.
Режим выполнения ограниченной транзакции. Если значение глубины вложения транзакции равно нулю и командой начала ограниченной транзакции (TBEGINC) инициируется транзакция, то ЦПУ переходит в режим выполнения ограниченной транзакции. Пока ЦПУ находится в режиме выполнения ограниченной транзакции, значение глубины вложения транзакции равняется единице.
Вложенная транзакция. Если ЦПУ находится в режиме выполнения транзакции и поступает команда начала транзакции, то возникнет вложенная транзакция.
Средство выполнения транзакций использует модель, называемую уплощенным вложением. Сохранения, выполняемые внутренней транзакцией в режиме уплощенного вложения, невидимы другим ЦПУ и подсистеме ввода-вывода до тех пор, пока крайняя внешняя транзакция не выполнит фиксацию сохранений. Аналогичным образом, если транзакция прерывается, то все вложенные транзакции также прерываются и все транзакционные сохранения всех вложенных транзакций отбрасываются.
Схема примера вложенных транзакций показана на фиг. 6. Видно, что первая команда 600 начала неограниченной транзакции (TBEGIN) инициирует крайнюю внешнюю транзакцию 601. команда 602 начала неограниченной транзакции (TBEGIN) инициирует первую вложенную транзакцию, команда 604 начала неограниченной транзакции (TBEGIN) инициирует вторую вложенную транзакцию. В данном примере команды 604 начала неограниченной транзакции (TBEGIN) и окончания транзакции 606 определяют крайнюю внутреннюю транзакцию 608. При выполнении команды 610 окончания транзакции транзакционные сохранения для крайней внешней транзакции и всех внутренних транзакции фиксируются (указатель 612).
Неограниченная транзакция. Неограниченной транзакцией является транзакция, которая выполняется в режиме выполнения неограниченной транзакции. Несмотря на то, что на неограниченную транзакцию не накладываются такие ограничения, как на ограниченную транзакцию, тем не менее неограниченная транзакция все же может быть прервана по ряду причин.
Режим выполнения неограниченной транзакции. Если транзакция инициируется командой начала неограниченной транзакции (TBEGIN), то ЦПУ переходит в режим выполнения неограниченной транзакции. До тех пор, пока ЦПУ находится в указанном режиме выполнения неограниченной транзакции, значение глубины вложения транзакции может варьироваться от единицы до максимально допустимого.
Нетранзакционное обращение. Нетранзакционными обращениями являются обращения к операнду запоминающего устройства, выполняемые ЦПУ, режим работы которого отличен от режима транзакционного обращения (т.е. классические обращения к запоминающему устройству вне транзакции). Следует учесть, что обращения, выполняемые подсистемой ввода-вывода, являются нетранзакционными обращениями. Кроме того, если ЦПУ работает в режиме выполнения неограниченной транзакции, то для инициирования нетранзакционного обращения сохранения может использоваться команда нетранзакционного сохранения.
1
2
2
2
2
2
2
2
2
2
2
Схема варианта осуществления формата команды нетранзакционного сохранения показана на фиг. 7. В одном из примеров в состав команды 700 нетранзакционного сохранения входят: набор полей 702а и 702б кода операции, определяющий код операции, обозначающий операцию нетранзакционного сохранения; поле 704 регистра (R), определяющее регистр, содержимое которого называется первым операндом; поле 706 индекса (Х); поле 708 базы (В); первое поле 710 смещения (DL); второе поле 712 смещения (DH). Для формирования адреса второго операнда содержимое регистров общего назначения, определенных полями Х и В, добавляется к результату конкатенации содержимого полей DH и DL. Если значение одного или обоих полей Х и В равняется нулю, то соответствующий регистр не участвует в указанном добавлении.
Первый операнд длиной 64 разряда нетранзакционно и без изменений помещается в ячейку памяти второго операнда.
2
2
Значение смещения, сформированное в результате указанной конкатенации полей DH и DL, трактуется как 20-разрядное двоичное целое число со знаком.
Указанный второй операнд подлежит выравниванию в границах двойного слова; в противном случае возбуждается исключение спецификации и выполнение операции блокируется.
Внешняя и крайняя внешняя транзакции. Транзакция с меньшим значением глубины вложения транзакции является внешней транзакцией. Транзакция со значением глубины вложения транзакции, равным единице, является крайней внешней транзакцией.
Команда начала транзакции является крайней внешней командой начала транзакции, если она выполняется при исходном значении глубины вложения транзакции, равном единице. Команда окончания транзакции является крайней внешней, если ее выполнение приводит к изменению значения глубины вложения транзакции с единицы на ноль. В данном варианте осуществления ограниченная транзакция является крайней внешней транзакцией.
Фильтрация программных прерываний. Если транзакция прерывается из-за возбуждения определенных условий программных исключений, то программа опционально может предотвратить возникновение прерывания. Такой подход называется фильтрацией программных прерываний. Фильтрация программных прерываний зависит от транзакционного класса прерывания, эффективного управляющего параметра фильтрации программных прерываний, определяемого командой начала транзакции, а также управляющего параметра отмены фильтрации программных прерываний в составе управляющего регистра 0.
Транзакция. В состав транзакции входит выполнение обращений к операндам запоминающего устройства и изменений содержимого выбранных регистров общего назначения во время пребывания ЦПУ в режиме выполнения транзакции. При неограниченной транзакции обращения к операндам запоминающего устройства могут быть как транзакционными, так и нетранзакционными. При ограниченной транзакции обращения к операндам запоминающего устройства ограничиваются только транзакционными обращениями. С точки зрения других ЦПУ и подсистемы ввода-вывода все обращения к операндам запоминающего устройства в режиме выполнения транзакции выглядят как единая одновременная операция. Если транзакция прерывается, то обращения сохранения отбрасываются и содержимое всех регистров, указанных маской сохранения регистров общего назначения крайней внешней команды начала транзакции, восстанавливается по состоянию на момент, предшествовавший выполнению транзакции.
Транзакционные обращения. Транзакционными обращениями являются обращения к операндам запоминающего устройства, совершаемые в то время пребывания ЦПУ в режиме выполнения транзакции, за исключением обращений по команде нетранзакционного сохранения.
Режим выполнения транзакции. Термин "режим выполнения транзакции" (наряду с этим используется термин "режим транзакционного выполнения") обозначает в общем режимы выполнения неограниченной и ограниченной транзакций. Таким образом, при описании операции термины "неограниченный" и "ограниченный" используются для конкретизации режима выполнения транзакции.
Если значение глубины вложения транзакции равняется нулю, то ЦПУ не находится в режиме выполнения транзакции (наряду с этим используется термин "режим нетранзакционного выполнения").
Выборки и сохранения, выполняемые в режиме выполнения транзакции, с точки зрения ЦПУ не имеют отличий от производимых вне режима выполнения транзакции.
В одном из вариантов осуществления архитектуры z/Architecture управление средством выполнения транзакций осуществляется разрядами 8 и 9 управляющего регистра 0, разрядами 61-63 управляющего регистра 2, глубиной вложения транзакции (т.е. значением соответствующего параметра), адресом блока диагностики транзакции и ССП прерывания транзакции.
После начальной перезагрузки ЦПУ значения разрядов 8 и 9 управляющего регистра 0, разрядов 62 и 63 управляющего регистра 2 и глубины вложения транзакции устанавливаются равными нулю. Если значение управляющего параметра выполнения транзакций, т.е. разряда 8 управляющего регистра О, равно нулю, то ЦПУ не может быть переведено в режим выполнения транзакции.
Далее приводятся дополнительные сведения о различных управляющих параметрах.
В соответствии с ранее изложенным, средство выполнения транзакций управляется двумя разрядами управляющего регистра 0 и тремя разрядами управляющего регистра 2.
Пример
Разряды управляющего регистра 0. Согласно варианту осуществления, разряды имеют следующее значение.
Управляющий параметр выполнения транзакций (от англ.: Transactional Execution Control, аббревиатура ТХС). Разряд 8 управляющего регистра 0 является управляющим параметром выполнения транзакций. Этот разряд обеспечивает механизм, с помощью которого управляющая программа (например, операционная система) может указывать, может ли программа использовать средство выполнения транзакций. Для успешного перехода в режим выполнения транзакций значение разряда 8 должно быть равно единице.
Если значение разряда 8 управляющего регистра 0 равняется нулю, то попытка выполнения команд извлечения глубины вложения транзакции, начала транзакции и окончания транзакции приводит к выполнению специальной операции.
1
На фиг. 8 показана схема варианта осуществления формата команды извлечения глубины вложения транзакции. В одном из примеров в состав команды 800 извлечения глубины вложения транзакции входят: поле 802 кода операции, определяющее код операции, указывающий операцию извлечения глубины вложения транзакции; поле 804 (R) регистра, которое указывает регистр общего назначения.
1
1
Текущее значение глубины вложения транзакции размещается в разрядах 48-63 регистра R общего назначения. При этом значения разрядов 0-31 указанного регистра не изменяются, значения разрядов 32-47 указанного регистра устанавливаются равными нулю. В другом варианте осуществления в регистр R общего назначения, например, в его разряды 16-31, также помещается максимальное значение глубины вложения транзакции.
Согласно варианту осуществления, команда извлечения глубины вложения транзакции позволяет неограниченной транзакции проверять текущее значение глубины вложения транзакции и сохранять указанное значение в регистр. Текущее значение глубины вложения транзакции хранится во внутреннем счетчике ЦПУ. В режиме неограниченной транзакции при выполнении команды начала транзакции (TBEGIN) без промежуточной команды окончания транзакции значение указанного счетчика увеличивается. Значение указанного счетчика может использоваться программой для определения надлежащего порядка выполнения кода и в целях диагностики.
Согласно варианту осуществления, если значение управляющего параметра выполнения транзакции, т.е. разряда 8 управляющего регистра 0, равняется нулю, то возбуждается исключение специальной операции и выполнение указанной операции прекращается. Код условия.
Код условия не изменяется.
Программные исключения:
- Операция (средство выполнения транзакций не инсталлировано).
- Специальная операция.
- Ограничение транзакции (из-за ограниченной команды).
Примечание: Значение глубины транзакции, равное нулю, показывает, что ЦПУ не находится в режиме выполнения транзакции.
Управляющий параметр отмены фильтрации программных прерываний в режиме выполнения транзакции (от англ.: Transaction Execution Program Interruption Filtering Override, аббревиатура PIFO). Разряд 9 управляющего регистра 0 является управляющим параметром отмены фильтрации программных прерываний в режиме выполнения транзакции. Этот разряд обеспечивает механизм, с помощью которого управляющая программа может гарантировать возникновение прерывания в случае возбуждения любого условия программного исключения во время пребывания ЦПУ в режиме выполнения транзакции вне зависимости от значения эффективного управляющего параметра фильтрации программных прерываний, определенного или подразумеваемого командой (командами) начала транзакции.
Разряды управляющего регистра 2. Согласно варианту осуществления, разряды имеют следующее значение.
Управляющий параметр области диагностики транзакции (от англ.: Transaction Diagnostic Scope, аббревиатура TDS). Разряд 61 управляющего регистра 2 определяет область применения управляющего параметра диагностики транзакции, содержащегося в разрядах 62 и 63 указанного регистра, по следующему правилу.
Управляющий параметр диагностики транзакции (от англ.: Transaction Diagnostic Control, аббревиатура TDC). Разряды 62 и 63 управляющего регистра 2 содержат двухразрядное беззнаковое целое число, которое может использоваться для инициирования произвольного прерывания транзакции в целях диагностики. Например, значения управляющего параметра диагностики транзакции могут означать следующее.
Если транзакция прерывается из-за отличного от нуля значения управляющего параметра диагностики транзакции, то возможно любое из следующих событий.
- Код прерывания транзакции устанавливается в одно из значений 7-11, 13-16 или 255, значение кода случайным образом выбирается ЦПУ; код условия устанавливается в соответствии с кодом прерывания транзакции. Коды прерывания транзакции описаны ниже.
- В случае неограниченной транзакции значение кода условия устанавливается равным единице. В таком случае код прерывания транзакции неприменим.
Применимость значения 1 управляющего параметра диагностики транзакции зависит от модели. Если значение 1 неприменимо, то выполняются те же действия, что и в случае значения 2.
В случае ограниченной транзакции значение 1 управляющего параметра диагностики транзакции обрабатывается так же, как если бы было указано значение 2.
Если указано значение 3 управляющего параметра диагностики транзакции, то результаты непредсказуемы.
Адрес блока диагностики транзакции (от англ.: Transaction Diagnostic Block Address, аббревиатура TDBA).
1
Корректный адрес блока диагностики транзакции устанавливается по адресу первого операнда крайней внешней команды начала транзакции (TBEGIN) при условии, что значение поля В указанной команды отлично от нуля. Если ЦПУ действует в первичном пространстве или в режиме регистра доступа, то адрес блока диагностики транзакции указывает ячейку в первичном адресном пространстве. Если ЦПУ действует во вторичном пространстве или в режиме домашнего пространства, то адрес блока диагностики транзакции указывает ячейку соответственно во вторичном адресном пространстве или в домашнем адресном пространстве. Если средство динамической трансляции адреса отключено, то адрес блока диагностики транзакции указывает ячейку в реальном запоминающем устройстве.
Если транзакция впоследствии прерывается, то адрес блока диагностики транзакции используется ЦПУ для определения местоположения блока диагностики транзакции, называемого блоком диагностики транзакции, определяемым командой начала транзакции (TBEGIN). Значения крайних трех разрядов адреса блока диагностики транзакции равняются нулю, это означает, что блок диагностики транзакции, определяемый командой начала транзакции (TBEGIN), располагается в области двойных слов.
1
Если значение поля В крайней внешней команды начала транзакции (TBEGIN) равно нулю, то адрес блока диагностики транзакции некорректен, и если транзакция впоследствии прерывается, то блок диагностики транзакции, определяемый командой начала транзакции (TBEGIN), не сохраняется.
ССП прерывания транзакции (от англ.: Transaction Abort Program Status Word, аббревиатура TAPSW).
Если начальное значение глубины вложения транзакции равно нулю, то при выполнении команды начала транзакции (TBEGIN) текущим ССП становится ССП прерывания транзакции, а адрес команды, которой соответствует ССП прерывания транзакции, указывает следующую по счету команду, т.е. команду, следующую за крайней внешней командой начала транзакции (TBEGIN). Если начальное значение глубины вложения транзакции равно нулю, то во время выполнения команды начала ограниченной транзакции (TBEGINC) текущим ССП становится ССП прерывания транзакции за исключением того случая, когда адрес команды в ССП прерывания транзакции указывает команду начала ограниченной транзакции (TBEGINC) [вместо команды, следующей по счету за командой начала ограниченной транзакции (TBEGINC)].
Если транзакция прерывается, то код условия в ССП прерывания транзакции заменяется кодом, указывающим степень значимости условия прерывания. Затем, если указанная транзакция была прервана по причинам, не приводящим к возникновению прерывания, то выполняется загрузка ССП прерывания транзакции в ССП; в противном случае, если указанная транзакция была прервана по причинам, приводящим к возникновению прерывания, то ССП прерывания транзакции сохраняется в качестве старого ССП прерывания.
ССП прерывания транзакции не изменяется в ходе выполнения любой внутренней команды начала транзакции.
Глубина вложения транзакции (от англ.: Transaction Nesting Depth, аббревиатура TND).
Глубиной вложения транзакции является, например, 16-разрядное беззнаковое число, которое увеличивается каждый раз по завершении выполнения команды начала транзакции с кодом условия ноль и уменьшается каждый раз по завершении выполнения команды окончания транзакции. Глубине вложения транзакции присваивается значение ноль в случае прерывания транзакции или при перезагрузке ЦПУ.
В одном из вариантов осуществления реализовано максимальное значение глубины вложения транзакции, равное 15.
В одном из вариантов осуществления в случае, если ЦПУ находится в режиме выполнения ограниченной транзакции, значение глубины вложения транзакции равно единице. Кроме того, хотя максимальное значение глубины вложения транзакции может быть представлено четырехразрядным числом, однако указанная глубина вложения транзакции определяется как 16-разрядное число для упрощения контроля в блоке диагностики транзакции.
Блок диагностики транзакции (от англ.: Transaction Diagnostic Block, аббревиатура TDB).
Если транзакция прерывается, то в блоке диагностики транзакции может сохраняться различная информация о состоянии в соответствии с нижеизложенным.
1. Блок диагностики транзакции, определяемый командой начала транзакции (TBEGIN). В случае неограниченной транзакции если значение поля Bi крайней внешней команды начала транзакции (TBEGIN) отлично от нуля, то адрес первого операнда данной команды указывает местоположение блока диагностики транзакции, определяемого командой начала транзакции (TBEGIN). Это местоположение в пространстве памяти, определяемое прикладной программой, к которому может обращаться обработчик останова программы.
2. Блок диагностики транзакции для случая программного прерывания. Если неограниченная транзакция прерывается из-за непрошедшего фильтрацию условия программного исключения или если ограниченная транзакция прерывается из-за любого условия программного исключения (т.е. любого условия, которое приводит к возникновению программного прерывания), то в область памяти в префиксной зоне сохраняется блок диагностики транзакции для случая программного прерывания. Данный блок диагностики транзакции доступен операционной системе в полной мере для мониторинга и регистрации.
3. Блок диагностики транзакции для случая перехвата. Если транзакция прерывается по любому условию программного исключения, которое приводит к перехвату (т.е. условие приводит к выполнению программы в режиме интерпретации для завершения и передачи управления хост-программе), то блок диагностики транзакции сохраняется в области памяти, определенной в блоке описания состояния гостевой операционной системы.
1
В одном из вариантов осуществления блок диагностики транзакции, определяемый командой начала транзакции (TBEGIN), сохраняется только в том случае, если адрес блока диагностики транзакции корректен [т.е. если значение поля B крайней внешней команды начала транзакции (TBEGIN) отлично от нуля].
Для прерываний транзакции, вызванных непрошедшими фильтрацию условиями программных исключений, сохраняется либо блок диагностики транзакции для случая программного прерывания, либо блок диагностики транзакции для случая перехвата. То есть в случае прерывания транзакции могут сохраняться один или два блока диагностики транзакции, или же блок диагностики транзакции может не сохраняться.
Далее приводятся дополнительные сведения об одном из примеров каждого блока диагностики транзакции.
Блок диагностики транзакции, определяемый командой начала транзакции (TBEGIN). Местоположение длиной 256 байт в пространстве памяти определяется корректным адресом блока диагностики транзакции. Если адрес блока диагностики транзакции корректен, то в случае прерывания транзакции сохраняется блок диагностики транзакции, определяемый командой начала транзакции (TBEGIN). К блоку диагностики транзакции, определяемому командой начала транзакции (TBEGIN), применяются все механизмы защиты записей, действующие при выполнении крайней внешней команды начала транзакции. Событие изменения хранящегося результата регистрации программных событий для любой части блока диагностики транзакции, определяемого командой начала транзакции (TBEGIN), обнаруживается в ходе выполнения крайней внешней команды начала транзакции (TBEGIN), а не в ходе обработки прерывания транзакции.
Одна из целей регистрации программных событий состоит в содействии в отладке программ. Регистрация программных событий позволяет извещать программу о следующих типах событий, например:
- Успешное выполнение команды ветвления. Предоставляется возможность регистрировать событие только в случае, если точка назначения перехода по команде ветвления располагается в заданной области памяти запоминающего устройства.
- Выборка команды из заданной области памяти запоминающего устройства.
- Изменение содержимого заданной области памяти запоминающего устройства. Предоставляется возможность регистрировать событие только в случае, если заданной область памяти запоминающего устройства принадлежит указанным адресным пространствам.
- Выполнение команды сохранения по реальному адресу (от англ.: STORE USING REAL ADDRESS).
- Выполнение команды окончания транзакции.
Программа может выборочно указывать, что распознаются один или более типов событий из числа указанных выше, исключение составляет указанный тип событий выполнения команды сохранения по реальному адресу, который может указываться только совместно с указанным типом изменения содержимого заданной области памяти. Информация, относящаяся к регистрации программных событий, предоставляется программе посредством программного прерывания, если прерывание идентифицируется обработчиком прерывания.
Если адрес блока диагностики транзакции некорректен, то блок диагностики транзакции, определяемый командой начала транзакции, не сохраняется.
Блок диагностики транзакции для случая программного прерывания.
Реальные адреса запоминающего устройства - в интервале 6144-6399 (1800-18FF в шестнадцатеричной системе счисления). Блок диагностики транзакции для случая программного прерывания сохраняется, если транзакция прерывается по причине программного прерывания. Если транзакция прерывается по прочим причинам, то содержимое блока диагностики транзакции для случая программного прерывания непредсказуемо.
Блок диагностики транзакции для случая программного прерывания не контролируется никакими механизмами защиты. События типа изменения содержимого области памяти средства регистрации программных событий применительно к блоку диагностики транзакции для случая программного прерывания не обнаруживаются, если во время программного прерывания указанный блок диагностики транзакции для случая программного прерывания сохраняется.
Блок диагностики транзакции для случая перехвата. Реальное местоположение длиной 256 байт в пространстве хост-памяти определяется адресами в интервале 488-495 при описании состояния. Блок диагностики транзакции для случая перехвата сохраняется, если прерывание транзакции приводит к перехвату прерывания гостевой программы (т.е. значение кода перехвата - 8). Если транзакция прерывается по иным причинам, то содержимое блока диагностики транзакции для случая перехвата непредсказуемо. Блок диагностики транзакции для случая перехвата не контролируется никакими механизмами защиты.
Согласно варианту осуществления блока 900 диагностики транзакции, схема формата которого показана на фиг. 9, предусмотрены следующие поля.
Поле 902 формата. Байт 0 содержит указатель корректности и формата и означает следующее.
Блок диагностики транзакции, в котором значение поля формата равно нулю, называется пустым блоком диагностики транзакции.
Поле 904 флагов. Байт 1 содержит следующий набор указателей.
Корректность маркера конфликта. Если транзакция прерывается из-за конфликта выборки или конфликта сохранения (коды прерывания транзакции равны соответственно 9 и 10), то разряд 0 байта 1 служит индикатором корректности маркера конфликта. Если значение индикатора корректности маркера конфликта равно единице, то маркер 910 конфликта, расположенный в байтах 16-23 блока диагностики транзакции, содержит логический адрес, по которому был обнаружен конфликт. Если значение индикатора корректности маркера конфликта равно нулю, то значение байтов 16-23 блока диагностики транзакции непредсказуемо.
Если транзакция прерывается по любой причине за исключением конфликта выборки или конфликта сохранения, то значение разряда 0 байта 1 сохраняется равным нулю.
Индикатор ограниченной транзакции. Если ЦПУ находится в режиме выполнения ограниченной транзакции, то значение разряда 1 байта 1 устанавливается равным единице. Если ЦПУ находится в режиме выполнения неограниченной транзакции, то значение разряда 1 байта 1 устанавливается равным нулю.
Зарезервированные разряды. Разряды 2-7 байта 1 зарезервированы, в них хранится значение ноль.
Поле 906 глубины вложения транзакции. В случае, если транзакция была прервана, байты 6-7 содержат значение глубины вложения транзакции.
Поле 908 кода прерывания транзакции. Байты 8-15 содержат 64-разрядный беззнаковый код прерывания транзакции. Каждое значение кода указывает причину, по которой транзакция была прервана.
Если транзакция прерывается из-за возникновения любых условий кроме программного прерывания, то в зависимости от модели код прерывания транзакции может хранится в блоке диагностики транзакции для случая программного прерывания.
Поле 910 маркера конфликта. В случае транзакций, прерванных из-за конфликта выборки или конфликта сохранения (значения 9 и 10 кода прерывания транзакции соответственно), байты 16-23 содержат логический адрес ячейки запоминающего устройства, для которой был выявлен конфликт. Значение поля 910 маркера конфликта лишено смысла, если значение индикатора корректности маркера конфликта, т.е. разряда 0 байта 1, равно единице.
Если значение индикатора корректности маркера конфликта равно нулю, то значение байтов 16-23 непредсказуемо.
Из-за спекулятивного выполнения ЦПУ маркер конфликта может обозначать ячейку запоминающего устройства, обращение к которой не обязательно происходило в концептуальной последовательности выполнения транзакции.
Поле 912 адреса команды прерывания транзакции. Байты 24-31 содержат адрес команды, который указывает команду, выполнявшуюся в момент обнаружения прерывания транзакции. Если транзакция прерывается по кодам 2, 5, 6, 11, 13, а также 256 или более, либо если транзакция прерывается по кодам 4 или 13 и условие программного исключения обнуляется, то поле адреса команды прерывания транзакции указывает на команду, следующую за выполнявшейся командой.
Если транзакция прерывается по кодам 7-10, 14-16 или 255, то поле адреса команды прерывания транзакции не обязательно точно указывает на команду, ставшую причиной прерывания транзакции, оно может указывать на предыдущую или следующую команду в пределах транзакции. Если транзакция прерывается из-за команды, являющейся точкой назначения перехода по команде исполнимого типа, то в соответствии с вышеизложенным в зависимости от значения кода прерывания транзакции поле адреса команды прерывания транзакции указывает на команду исполнимого типа, по которой осуществляется переход на указанную команду-точку назначения, либо на следующую команду. Поле адреса команды прерывания транзакции не указывает команду-точку назначения перехода по команде исполнимого типа.
Если транзакция прерывается, то значение поля адреса команды прерывания транзакции зависит от режима адресации. В режиме 24-разрядной адресации значения разрядов 0-40 указанного поля равны нулю. В режиме 31-разрядной адресации значения разрядов 0-32 указанного поля равны нулю.
Если транзакция прерывается из-за каких-либо условий кроме программного прерывания, то в зависимости от модели адрес команды прерывания транзакции может храниться в блоке диагностики транзакции для случая прерывания.
Если транзакция прерывается по кодам прерывания транзакции со значениями 4 или 12 и условие программного исключения не обнуляется, то значение поля адреса команды прерывания транзакции не указывает на команду, вызвавшую прерывание транзакции. В условиях подавления или прекращения выполнения, а также по завершении событий, не удовлетворяющих критериям средства регистрации программных событий, команда, вызвавшая прерывание транзакции, может быть идентифицирована путем вычитания числа полуслов, определенного кодом длины прерывания, из значения поля адреса команды прерывания транзакции. Если транзакция прерывается по событию, удовлетворяющему критериям средства регистрации программных событий, и какие-либо другие условия программных исключений не возбуждены, то значение поля адреса команды прерывания транзакции непредсказуемо.
Если адрес блока диагностики транзакции корректен, то доступ к коду длины прерывания может осуществляться через поле идентификации программного прерывания в байтах 36-39 блока диагностики транзакции, определяемого командой начала транзакции (TBEGIN). Если фильтрация не применяется, то доступ к коду длины прерывания может осуществляться через поле идентификации программного прерывания в ячейках с реальными номерами 140-143 запоминающего устройства.
Поле 914 идентификатора исключения доступа. Для транзакций, прерываемых из-за определенных прошедших фильтрацию условий программных исключений, 32-й байт блока диагностики транзакции, определяемого командой начала транзакции (TBEGIN), содержит идентификатор исключения доступа. В одном из примеров архитектуры z/Architecture формат поля идентификатора исключения доступа, а также условия, при которых указанный идентификатор сохраняется, совпадают с описанными в реальной ячейке 160 запоминающего устройства для случая, когда условие исключения приводит к прерыванию, как изложено в указанной выше публикации IBM "z/Architecture - Principles of Operation". Для транзакций, которые прерываются по иным причинам, в том числе, из-за любых условий исключений, вызывающих программное прерывание, значение 32-го байта не определено. В блоке диагностики транзакции для случая программного прерывания значение 32-го байта не определено. Указанное поле хранится только в блоке диагностики транзакции, определенном адресом блока диагностики транзакции; в противном случае это поле зарезервировано.
Значение поля идентификатора исключения доступа хранится только для следующих программных исключений: программных исключений, определяемых списком доступа; программных исключений динамической трансляции адреса; программных исключений управляющего элемента адресного пространства; программных исключений трансляции страниц, первого региона, второго региона, третьего региона, сегментов.
Поле 916 кода исключения данных. Для транзакций, прерываемых из-за условий программных исключений, обусловленных фильтрованными исключениями данных, 33-й байт блока диагностики транзакции, определяемого командой начала транзакции (TBEGIN), содержит код исключения данных. В одном из примеров архитектуры z/Architecture формат поля кода исключения данных, а также условия, при которых указанный код исключения данных сохраняется, совпадают с описанными в реальной ячейке 147 запоминающего устройства для случая, когда условие исключения приводит к прерыванию, как изложено в указанной выше публикации IBM "z/Architecture - Principles of Operation". В одном из примеров местоположение 147 содержит код исключения данных.
Для транзакций, которые прерываются по иным причинам, в том числе, из-за любых условий исключений, вызывающих программное прерывание, значение 33-го байта не определено. В блоке диагностики транзакции для случая программного прерывания значение 33-го байта не определено.
Поле кода исключения данных хранится только в блоке диагностики транзакции, на который указывает адрес блока диагностики транзакции; в противном случае данное поле зарезервировано. Поле кода исключения данных сохраняется только для условий программных исключений данных.
Поле 918 идентификатора программного прерывания. Для транзакций, которые прерываются из-за возникновения прошедших фильтрацию условий программных исключений, байты 36-39 блока диагностики транзакции, определяемого командой начала транзакции (TBEGIN), содержат идентификатор программного прерывания. В одном из примеров архитектуры z/Architecture формат поля идентификатора программного прерывания совпадает с описанным в реальных ячейках 140-143 запоминающего устройства для случая, когда условие исключения приводит к прерыванию, как изложено в указанной выше публикации IBM "z/Architecture - Principles of Operation"; исключение составляет код длины команды, расположенный в разрядах 13-14 поля идентификатора программного прерывания, который относится к команде, при которой было возбуждено условие исключения.
Для транзакций, которые прерываются по иным причинам, в том числе, из-за условий исключений, вызывающих программное прерывание, значение байтов 36-39 непредсказуемо. В блоке диагностики транзакции для случая программного прерывания значение байтов 36-39 непредсказуемо. Поле идентификатора программного прерывания хранится только в блоке диагностики транзакции, на который указывает адрес блока диагностики транзакции; в противном случае данное поле зарезервировано. Поле кода исключения данных сохраняется только для условий программных исключений.
Поле 920 идентификатора исключения трансляции. Для транзакций, которые прерываются из-за возникновения любых из перечисленных ниже прошедших фильтрацию условий программных исключений, байты 40-47 блока диагностики транзакции содержат идентификатор исключения трансляции.
- Условие программного исключения, управляемое списком доступа, и условие программного исключения динамической трансляции адреса.
- Условие программного исключения управляющего элемента адресного пространства.
- Условие программного исключения трансляции страниц.
- Условие программного исключения трансляции первого региона.
- Условие программного исключения трансляции второго региона.
- Условие программного исключения трансляции третьего региона.
- Условие программного исключения трансляции сегментов.
В одном из примеров архитектуры z/Architecture формат поля идентификатора исключения трансляции совпадает с описанным в реальных ячейках 168-175 запоминающего устройства для случая, когда условие исключения приводит к прерыванию, как изложено в указанной выше публикации IBM "z/Architecture - Principles of Operation".
Для транзакций, которые прерываются по иным причинам, в том числе, из-за условий исключений, вызывающих программное прерывание, значение байтов 40-47 непредсказуемо. В блоке диагностики транзакции для случая программного прерывания значение байтов 40-47 непредсказуемо.
Поле идентификатора программного прерывания хранится только в блоке диагностики транзакции, на который указывает адрес блока диагностики транзакции; в противном случае данное поле зарезервировано.
Поле 922 адреса прерывающего события. Для транзакций, которые прерываются из-за возникновения прошедших фильтрацию условий программных исключений, байты 48-55 блока диагностики транзакции, определяемого командой начала транзакции (TBEGIN), содержат адрес прерывающего события. В одном из примеров архитектуры z/Architecture формат поля адреса прерывающего события совпадает с описанным в реальных ячейках 272-279 запоминающего устройства для случая, когда условие исключения приводит к прерыванию, как изложено в указанной выше публикации IBM "z/Architecture - Principles of Operation".
Для транзакций, которые прерываются по иным причинам, в том числе, из-за условий исключений, вызывающих программное прерывание, значение байтов 48-55 непредсказуемо. В блоке диагностики транзакции для случая программного прерывания значение байтов 48-55 непредсказуемо. Поле адреса прерывающего события хранится только в блоке диагностики транзакции, на который указывает адрес блока диагностики транзакции; в противном случае данное поле зарезервировано.
Далее приводятся дополнительные сведения о прерывающих событиях. Согласно варианту осуществления архитектуры z/Architecture, если инсталлировано средство регистрации программных событий PER-3, то оно сообщает программе адрес последней команды, вызвавшей прерывание процесса последовательного выполнения команд ЦПУ. Регистрация адреса прерывающего события может использоваться для помощи в отладке при выявлении ветвлений с неконтролируемой точкой назначения перехода.
Указанное средство регистрации программных событий использует, например, 64-разрядный регистр в составе ЦПУ, называемый регистром адреса прерывающего события. Каждый раз в случае, когда какая-либо команда за исключением команды окончания транзакции вызывает прерывание процесса последовательного выполнения команд (т.е. вместо приращения адреса команды в ССП на длину команды происходит замена адреса команды), адрес этой команды помещается в регистр адреса прерывающего события. Всякий раз при возникновении программного прерывания, вне зависимости от активности средства регистрации программных событий, текущее содержимое регистра адреса прерывающего события помещается в реальные ячейки 272-279 запоминающего устройства.
Если команда, вызывающая прерывающее событие, является точкой назначения перехода по команде исполнимого типа, например, EXECUTE или EXECUTE RELATIVE LONG, то в регистр адреса прерывающего события помещается адрес команды, по которому осуществлена выборка команды исполнимого типа.
В одном из вариантов осуществления архитектуры z/Architecture считается, что прерывающее событие возникает, если при выполнении какой-либо из следующих команд происходит ветвление: BRANCH AND LINK (BAL, BALR); BRANCH AND SAVE (BAS, BASR); BRANCH AND SAVE AND SET MODE (BASSM); BRANCH AND SET MODE (BSM); BRANCH AND STACK (BAKR); BRANCH ON CONDITION (ВС, BCR); BRANCH ON COUNT (BCT, BCTR, BCTG, BCTGR); BRANCH ON INDEX HIGH (BXH, BXHG); BRANCH ON INDEX LOW OR EQUAL (BXLE, BXLEG); BRANCH RELATIVE ON CONDITION (BRC); BRANCH RELATIVE ON CONDITION LONG (BRCL); BRANCH RELATIVE ON COUNT (BRCT, BRCTG); BRANCH RELATIVE ON INDEX HIGH (BRXH, BRXHG); BRANCH RELATIVE ON INDEX LOW OR EQUAL (BRXLE, BRXLG); COMPARE AND BRANCH (CRB, CGRB); COMPARE AND BRANCH RELATIVE (CRJ, CGRJ); COMPARE IMMEDIATE AND BRANCH (CIB, CGIB); COMPARE IMMEDIATE AND BRANCH RELATIVE (CIJ, CGIJ); COMPARE LOGICAL AND BRANCH (CLRB, CLGRB); COMPARE LOGICAL AND BRANCH RELATIVE (CLRJ, CLGRJ); COMPARE LOGICAL IMMEDIATE AND BRANCH (CLIB, CLGIB); COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE (CLIJ, CLGIJ).
Считается, что прерывающее событие также возникает по завершении выполнения какой-либо из следующих команд: BRANCH AND SET AUTHORITY (BSA); BRANCH IN SUBSPACE GROUP (BSG); BRANCH RELATIVE AND SAVE (BRAS); BRANCH RELATIVE AND SAVE LONG (BRASL); LOAD PSW (LPSW); LOAD PSW EXTENDED (LPSWE); PROGRAM CALL (PC); PROGRAM RETURN (PR); PROGRAM TRANSFER (PT); PROGRAM TRANSFER WITH INSTANCE (PTI); RESUME PROGRAM (RP); TRAP (TRAP2, TRAP4).
Считается, что прерывающее событие не возникает при прерывании транзакции (неявном или по команде прерывания транзакции).
Поле 924 диагностической информации, определяемой моделью. Байты 112-127 содержат диагностическую информацию, определяемую моделью. Для всех значений кода прерывания транзакции кроме значения 12 (означает программное прерывание, прошедшее фильтрацию) в каждом сохраняющемся блоке диагностики транзакции размещается диагностическая информация, определяемая моделью.
В одном из вариантов осуществления в состав диагностической информации, определяемой моделью, входят следующие сведения.
- Байты 112-119 содержат вектор длиной 64 разряда, называемый индикатором ветвления выполнения транзакции. Значение каждого из первых 63-х разрядов данного вектора указывает результат исполнения команды ветвления, совершенного во время работы ЦПУ в режиме выполнения транзакции:
Нулевой по счету разряд указывает результат выполнения первой команды ветвления, первый разряд - результат выполнения второй команды ветвления и т.д.
Если во время работы ЦПУ в режиме выполнения транзакции было выполнено менее 63-х команд ветвления, то значения крайних правых разрядов, не имеющих соответствия с командами ветвления, устанавливаются равными нулю (в том числе, разряд 63). Если же было выполнено более 63-х команд ветвления, то значение разряда 63 поля индикатора ветвления выполнения транзакции устанавливается равным единице.
Значения разрядов поля индикатора ветвления выполнения транзакции устанавливаются командами, перечисленными выше, способными создать прерывающее событие, за исключением следующих.
- Никакая ограниченная команда не устанавливает значения разрядов поля индикатора ветвления выполнения транзакции.
1
2
- Для команд, принадлежащих, например, к архитектуре z/Architecture, в случае, если значение поля М команд BRANCH ON CONDITION, BRANCH RELATIVE ON CONDITION и BRANCH RELATIVE ON CONDITION LONG равно нулю, a также в случае, если значение поля R команд BRANCH AND LINK (BALR), BRANCH AND SAVE (BASR), BRANCH AND SAVE AND SET MODE (BASSM), BRANCH AND SET MODE (BSM), BRANCH ON CONDITION (BCR), BRANCH ON COUNT (BCTR, BCTGR) равно нулю, установка значений разрядов поля индикатора ветвления выполнения транзакции при выполнении команд зависит от модели.
- Для условий прерывания транзакции, вызванных исключением доступа к хосту, значение 0-го разряда байта 127 устанавливается равным единице, а для всех прочих условий прерывания транзакции значение 0-го разряда байта 127 устанавливается равным нулю.
- Для условий прерывания транзакции, которые были выявлены устройством ввода-хранения, значения крайних правых разрядов байта 127 содержат индикатор причины возбуждения указанных условий; для условий прерывания транзакции, которые не были выявлены устройством ввода-хранения, байт 127 зарезервирован.
Поле 930 регистров общего назначения. В байтах 128-255 сохраняется содержимое регистров 0-15 общего назначения на момент прерывания транзакции. Содержимое регистров сохраняется в порядке возрастания номеров регистров, начиная с регистра 0 общего назначения (содержимое сохраняется в байты 128-135), затем - регистр 1 общего назначения (в байты 136-143) и т.д.
Зарезервированные поля. Все прочие поля зарезервированы. Если специально не указано иное, то содержимое зарезервированных полей непредсказуемо.
С точки зрения других ЦПУ и подсистемы ввода-вывода сохранение блока (блоков) диагностики транзакции во время прерывания транзакции представляет собой множественное обращение, происходящее после любых нетранзакционных сохранений.
Транзакция может быть прервана по причинам, которые выходят за рамки текущей конфигурации, в которых транзакция выполнялась. Например, переходные события, распознанные гипервизором [таким как гипервизор LPAR (от англ.: Logical Partition Access Resources hypervisor - гипервизор логического раздела в составе физического сервера) или z/VM (от англ.: System/z+Virtual Machines - операционная система виртуальных машин семейства System/z)], могут приводить к прерыванию транзакции.
Указанная информация, содержащаяся в блоке диагностики транзакции, используется в целях диагностики и по существу корректна. Тем не менее, поскольку прерывание транзакции может быть вызвано событием, выходящим за рамки действующей конфигурации, то такая информация как код прерывания транзакции и идентификатор программного прерывания не может точно описать условия в рамках действующей конфигурации и поэтому не должна использоваться при определении действия программы.
В дополнение к указанной диагностической информации, сохраняемой в блоке диагностики транзакции, во второй байт управляющего регистра операций с плавающей запятой записывается код исключения данных при прерывании транзакции из-за любого условия программного исключения данных, а также из-за равенства единице значения управляющего параметра дополнительного регистра с плавающей запятой, значения разряда 45 управляющего регистра 0 и эффективного управляющего параметра F разрешения операций с плавающей запятой, причем независимо от того, применяется ли фильтрация условия программного исключения. Если транзакция прерывается и равно нулю значение управляющего параметра дополнительного регистра с плавающей запятой или значение эффективного управляющего параметра F разрешения операций с плавающей запятой, то код исключения данных в управляющий регистр операций с плавающей запятой не записывается.
В одном из вариантов осуществления, как указано в настоящей заявке, если средство выполнения транзакций инсталлировано, то предоставляются следующие общие команды:
- команда извлечения глубины вложения транзакции;
- команда нетранзакционного сохранения;
- команда прерывания транзакции;
- команда начала транзакции;
- команда окончания транзакции.
Если ЦПУ находится в режиме выполнения транзакции, то выполнение некоторых команд ограничивается, попытки выполнения таких команд приводят к прерыванию транзакции.
В случае поступления указанных ограниченных команд в режиме выполнения ограниченной транзакции попытка их исполнения может также привести к программному прерыванию или может привести к реальному исполнению, как если бы указанная транзакция была неограниченной.
1
3
1
В одном из примеров архитектуры z/Architecture набор ограниченных команд, например, включает следующие непривилегированные команды: если значение кода в поле M равно 6 или 7 - COMPARE AND SWAP AND STORE, MODIFY RUNTIME INSTRUMENTATION CONTROLS, PERFORM LOCKED OPERATION, PREFETCH DATA (RELATIVE LONG); если значение кода в поле М равно нулю и значение кода в поле R равно 6 или 7 - STORE CHARACTERS UNDER MASK HIGH; STORE FACILITY LIST EXTENDED, STORE RUNTIME INSTRUMENTATION CONTROLS, SUPERVISOR CALL, TEST RUNTIME INSTRUMENTATION CONTROLS.
В приведенном выше списке команды COMPARE AND SWAP AND STORE и PERFORM LOCKED OPERATION являются составными командами, в режиме выполнения транзакции они могут применяться более эффективно с использованием основных команд. Команды PREFETCH DATA и PREFETCH DATA RELATIVE LONG ограничены, пока линия кэш-памяти не освободится по значениям 6 и 7 кода, что влечет фиксацию данных потенциально до завершения транзакции. Команда SUPERVISOR C ALL ограничена, поскольку она приводит к прерыванию, что, в свою очередь, приводит к прерыванию транзакции.
Следующие команды ограничены при выполнении соответствующих условий:
2
- BRANCH AND LINK (BALR), BRANCH AND SAVE (BASR), BRANCH AND SAVE AND SET MODE - если значение поля R команды равно нулю и активировано отслеживание траектории ветвления;
2
- BRANCH AND SAVE AND SET MODE, BRANCH AND SET MODE - если значение поля R команды отлично от нуля и активировано отслеживание траектории ветвления; SET ADDRESSING MODE - если активировано отслеживание режима;
- MONITOR CALL - если возбуждено условие монитора событий.
В приведенный выше список входят команды, которые могут формировать записи трассировки. Если разрешено исполнять указанные команды транзакционно и команды сформировали записи трассировки, то в случае прерывания транзакции будет увеличено значение указателя таблицы трассировки, располагающегося в управляющем регистре 12, однако записи для таблицы трассировки могут быть отброшены. В результате в таблице трассировки может образоваться пропуск. Таким образом, если команды формируют записи трассировки, то эти команды ограничиваются.
Если ЦПУ находится в режиме выполнения транзакции, то в зависимости от модели могут ограничиваться следующие команды: CIPHER MESSAGE, CIPHER MESSAGE WITH CFB, CIPHER MESSAGE WITH CHAINING, CIPHER MESSAGE WITH COUNTER, CIPHER MESSAGE WITH OFB, COMPRESSION CALL, COMPUTE INTERMEDIATE MESSAGE DIGEST, COMPUTE LAST MESSAGE DIGEST, COMPUTE MESSAGE AUTHENTICATION CODE, CONVERT UNICODE-16 TO UNICODE-32, CONVERT UNICODE-16 TO UNICODE-8, CONVERT UNICODE-32 TO UNICODE-16, CONVERT UNICODE-32 TO UNICODE-8, CONVERT UNICODE-8 TO UNICODE-16, CONVERT UNICODE-8 TO UNICODE-32, PERFORM CRYPTOGRAPHIC COMPUTATION, RUNTIME INSTRUMENTATION OFF, RUNTIME INSTRUMENTATION ON.
Каждая из перечисленных выше команд считается ограниченной в связи с тем, что она либо в настоящее время реализована в аппаратном сопроцессоре, либо существовала в системах предыдущих поколений.
Если значение эффективного управляющего параметра А разрешения изменения регистра доступа равно нулю, то ограничиваются следующие команды: COPY ACCESS, LOAD ACCESS MULTIPLE, LOAD ADDRESS EXTENDED, SET ACCESS.
Каждая из перечисленных выше команд приводит к изменению содержимого регистра доступа. Если значение управляющего параметра А в составе команды начала транзакции равно нулю, то программе явно указывается, что изменять содержимое регистра доступа запрещено.
Если значение эффективного управляющего параметра А разрешения операций с плавающей запятой равно нулю, то команды с плавающей запятой ограничиваются.
При определенных условиях могут ограничиваться следующие команды: EXTRACT CPU TIME, EXTRACT PSW, STORE CLOCK, STORE CLOCK EXTENDED, STORE CLOCK FAST.
Каждая из перечисленных выше команд зависит от управляющего параметра перехвата в составе описания состояния интерпретационного выполнения. Если гипервизор установил для указанных команд управляющий параметр перехвата, то выполнение этих команд может быть продлено во времени из-за действия гипервизора, команды считаются ограниченными в случае возникновения перехвата.
3
1
Если неограниченная транзакция прерывается из-за попытки выполнения ограниченной команды, то в блоке диагностики транзакции устанавливается значение 11 кода прерывания транзакции (значение кода 11 означает ограниченную команду) и значение 3 кода условия за исключением следующих случаев: если неограниченная транзакция прерывается из-за попытки выполнения команды, которая в иных условиях может возбудить исключение привилегированной операции, то нельзя предсказать, какое значение кода условия прерывания транзакции будет установлено, 11 (ограниченная команда) или 4 (нефильтрованное программное прерывание, вызванное выявленным программным прерыванием привилегированной операции). Если неограниченная транзакция прерывается из-за попытки выполнения команды PREFETCH DATA (RELATIVE LONG) (если значение кода в поле Mi равно 6 или 7) или команды STORE CHARACTERS UNDER MASK HIGH (если значение кода в поле М равно нулю и значение кода в поле R равно 6 или 7), то нельзя предсказать, какое значение кода условия прерывания транзакции будет установлено, 11 (ограниченная команда) или 16 (кэш, прочее). Если неограниченная транзакция прерывается из-за попытки выполнения команды MONITOR CALL и возбуждены оба условия - условие события монитора и условие исключения спецификации, то нельзя предсказать, какое значение кода условия прерывания транзакции будет установлено, 11 или 4, или же будет установлено значение 12 кода условия прерывания транзакции (в случае фильтрованного программного порывания).
При ограниченной транзакции могут быть ограничены и другие команды. Несмотря на то, что в настоящее время ограничение этих команд при неограниченной транзакции не предусмотрено, в перспективных процессорах эти команды при определенных условиях при неограниченной транзакции могут быть ограничены.
В перспективных процессорах в режиме выполнения транзакции может быть разрешено использование некоторых ограниченных команд. В связи с этим алгоритм программы не должен полагаться на прерывание транзакции, обусловленное попытками исполнения ограниченных команд. Для надежного прерывания транзакции следует использовать команду прерывания транзакции.
В случае неограниченной транзакции для обработки транзакции, которая прерывается из-за ограниченной команды, в алгоритме программы должна быть предусмотрена альтернативная ветвь с нетранзакционным кодом.
Если значение глубины вложения транзакции равно нулю, то при выполнении команды начала транзакции (TBEGIN) значение кода условия равно нулю и ЦПУ переводится в режим выполнения неограниченной транзакции. Если значение глубины вложения транзакции равно нулю, то при выполнении команды начала ограниченной транзакции (TBEGINC) значение кода условия равно нулю и ЦПУ переводится в режим выполнения ограниченной транзакции.
За исключением явно оговоренных случаев, все правила, применяемые к нетранзакционному выполнению, применяются и к транзакционному выполнению. Ниже приводятся дополнительные сведения об обработке во время пребывания ЦПУ в режиме выполнения транзакции.
Если ЦПУ находится в режиме выполнения неограниченной транзакции, то при выполнении команды начала транзакции значение кода условия равно нулю и ЦПУ остается в режиме выполнения неограниченной транзакции.
С точки зрения данного ЦПУ выборки и сохранения в режиме выполнения транзакции не отличается от совершаемых вне режима выполнения транзакции. С точки зрения других ЦПУ и подсистемы ввода-вывода все обращения к операндам запоминающего устройства, выполняемые во время пребывания ЦПУ в режиме выполнения транзакции, представляются единым блоковым одновременным обращением. Иными словами, обращения ко всем байтам полуслова, слова, двойного слова и четверного слова выполняются так, что с точки зрения других ЦПУ и программ ввода-вывода (например, канальных) представляются блоковым одновременным обращением. Термин "блок" в данной части заявки используется для обозначения полуслова, слова, двойного слова или четверного слова. Если ссылка типа выборка специфицируется так, чтобы представляться одновременной внутри блока, то запрещаются обращения сохранения в данный блок с точки зрения другого ЦПУ или программы ввода-вывода в то время, пока осуществляется выборка байтов данного блока. Если ссылка типа сохранение специфицируется так, чтобы представляться одновременной внутри блока, то запрещаются обращения сохранения и выборки в данный блок с точки зрения другого ЦПУ или программы ввода-вывода во время сохранения байтов данного блока.
Обращения сохранения к запоминающему устройству для команды и обращения выборки к таблицам динамической трансляции адреса и регистра доступа выполняются по правилам нетранзакционного обращения.
Штатно ЦПУ выходит из режима выполнения транзакции по команде окончания транзакции, которая приводит к обнулению значения глубины вложения транзакции, и в этом случае транзакция оканчивается.
Если ЦПУ выходит из режима выполнения транзакции в результате выполнения команды окончания транзакции, то все сохранения, выполненные во время режима выполнения транзакции, фиксируются; это означает, что все сохранения представляются другим ЦПУ и подсистеме ввода-вывода совершаемыми как единая блоковая одновременная операция.
В ряде случаев транзакция может быть прервана неявно, либо транзакция может быть прервана явно посредством команды прерывания транзакции. Ниже описаны примеры возможных случаев прерывания транзакции, соответствующие коды прерывания транзакции и коды условий, которые помещаются в ССП прерывания транзакции.
Внешнее прерывание. Устанавливается значение 2 кода прерывания транзакции и значение 2 кода условия в ССП прерывания транзакции. ССП прерывания транзакции хранится в виде внешнего старого ССП как составляющая обработки внешнего прерывания.
Программное прерывание (нефильтрованное). Условие программного исключения, которое приводит к прерыванию (т.е. нефильтрованное условие), вызывает прерывание транзакции со значением 4 кода. Код условия в ССП прерывания транзакции устанавливается в соответствии с кодом программного прерывания. ССП прерывания транзакции сохраняется в виде программного старого ССП как составляющая обработки программного прерывания.
Команда, которая в других условиях может привести к прерыванию транзакции из-за исключения операции, может привести к иным результатам: неограниченная транзакция может быть прервана со значением кода прерывания транзакции, равным 11 (ограниченная команда); при ограниченной транзакции вместо исключения операции может возникнуть программное прерывание ограниченной транзакции. Если возникает событие средства регистрации программных событий и совместно с ним возбуждается любое другое нефильтрованное условие программного исключения, то значение кода условия устанавливается равным 3.
Прерывание по сигналу аппаратного контроля. Значение кода прерывания транзакции устанавливается равным 5, значение кода условия в ССП прерывания транзакции устанавливается равным 2. ССП прерывания транзакции сохраняется в качестве старого ССП аппаратного контроля как составляющая обработки прерывания по сигналу аппаратного контроля.
Прерывание ввода-вывода. Значение кода прерывания транзакции устанавливается равным 6, значение кода условия в ССП прерывания транзакции устанавливается равным 2. ССП прерывания транзакции сохраняется в качестве старого ССП ввода-вывода как составляющая обработки прерывания ввода-вывода.
Переполнение выборки. Условие переполнения выборки возбуждается, если при транзакции осуществляется выборка из большего числа ячеек памяти, чем это поддерживается ЦПУ. Значение кода прерывания транзакции устанавливается равным 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, а значение кода условия в ССП прерывания транзакции устанавливается равным 2. Указанное ССП прерывания транзакции хранится в качестве старого ССП перезагрузки как часть обработки перезагрузки. Другим примером может служить условие вызова супервизора, по которому значение кода прерывания транзакции устанавливается равным 3, значение кода условия в ССП прерывания транзакции устанавливается также равным 3. Возможны другие или отличающиеся примеры.
Замечания.
1. Прочее условие может возникать в результате следующих обстоятельств.
- Выполнение другим ЦПУ конфигурации таких команд, как команды архитектуры z/Architecture COMPARE AND REPLACE DAT TABLE ENTRY, COMPARE AND SWAP AND PURGE, INVALIDATE DAT TABLE ENTRY, INVALIDATE PAGE TABLE ENTRY, PERFORM FRAME MANAGEMENT FUNCTION, в которых значение управляющего параметра NQ равно нулю и значение управляющего параметра SK равно единице, а также команды SET STORAGE KEY EXTENDED, в которой значение управляющего параметра NQ равно нулю. Значение кода условия устанавливается равным 2.
- ЦПУ выполняет такие функции оператора, как перезагрузка, рестарт, остановка или эквивалентная команда-директива SIGNAL PROCESSOR.
- Возбуждается какое-либо условие, неуказанное в перечислении выше. Значение кода условия устанавливается равным 2 или 3.
2. Ячейка, при работе с которой обнаруживается конфликт выборки или хранения, может располагаться в любом месте в пределах одной и той же строки кэш-памяти.
3. При определенных условиях ЦПУ может оказаться неспособным различить близкие условия прерывания транзакции. Например, переполнения выборки или сохранения могут быть неразличимы от соответствующего конфликта выборки или сохранения.
4. Спекулятивное выполнение ЦПУ набора ветвей команды может приводить к прерыванию транзакции из-за возбуждения условий конфликта или переполнения даже если подобные условия не возбуждаются при исполнении команды в оригинальной последовательности. Если ЦПУ работает в режиме выполнения ограниченной транзакции, то оно может временно приостановить спекулятивное выполнение, тем самым позволяя транзакции попытаться завершиться без возникновения подобных конфликтов и переполнений, возможных при спекулятивном выполнении.
Выполнение команды прерывания транзакции приводит к прерыванию транзакции. Код прерывания транзакции устанавливается исходя из адреса второго операнда. Значение кода условия устанавливается равным 2 или 3 в соответствии с тем, чему равно значение разряда 63 адреса второго операнда, нулю или единице.
На фиг. 10 в качестве примера приводится сводная таблица кодов прерывания транзакции, сохраняющихся в блоке диагностики транзакции, а также соответствующие коды условий. Описание на фиг. 10 иллюстрирует один частный вариант осуществления. Возможны другие варианты осуществления и иная кодировка значений.
В одном из вариантов осуществления, в соответствии с вышеизложенным, в средстве выполнения транзакций реализованы и ограниченные транзакции, и неограниченные транзакции, а также связанная с ними обработка. Вначале описываются ограниченные транзакции, затем - неограниченные транзакции.
Ограниченная транзакция выполняется в таком режиме выполнения транзакции без возможности перехода к резервной ветви (алгоритма). Такой режим обработки полезен при выполнении компактных функций. При отсутствии повторяющихся прерываний или конфликтов с другими ЦПУ или подсистемой ввода-вывода (т.е. вызванных условиями, которые не позволят транзакции успешно завершиться) ограниченная транзакция в итоге будет выполнена. В связи с этим процедура обработки прерывания транзакции не требуется и не специфицируется. Например, при отсутствии нарушений условия, которое не может быть адресовано (например, деление на ноль), условий, которые не позволяют завершить транзакцию (например, прерывание по таймеру, которое не позволяет выполнить команду, повторяющиеся прерывания устройств ввода-вывода, требующие вмешательства и т.п.), нарушений ограничений, связанных с ограниченной транзакцией, указанная транзакция в конечном итоге будет выполнена.
Ограниченная транзакция инициируется командой начала ограниченной транзакции (TBEGINC) при условии, что первоначальное значение глубины вложения транзакции равно нулю. Согласно варианту осуществления, на ограниченную транзакцию накладываются следующие ограничения.
1. Транзакция выполняет не более 32-х команд, не считая команду начала ограниченной транзакции (TBEGINC) и команду окончания транзакции.
2. Все команды транзакции умещаются в запоминающем устройстве в непрерывной области запоминающего устройства длиной 256 байт, включая команду начала ограниченной транзакции (TBEGINC) и команду окончания транзакции.
3. В дополнение к ограничениям на команды, для ограниченной транзакции действуют следующие ограничения.
А. Команды должны относиться к набору общих команд; такими командами в том числе являются, например, команды арифметического сложения, вычитания, умножения, деления, сдвига, кольцевого сдвига и др.
Б. Команды ветвления ограничиваются следующим набором (в одном из примеров перечисленные далее команды принадлежат архитектуре z/Architecture):
1
2
- команда BRANCH RELATIVE ON CONDITION, в которой значение поля M отлично от нуля, а поле RI содержит положительную величину;
1
2
- команда BRANCH RELATIVE ON CONDITION LONG, в которой значение поля M отлично от нуля, а поле RI содержит положительную величину, значение которой не приводит к циклическому завороту адреса;
3
4
- команды COMPARE AND BRANCH RELATIVE, COMPARE IMMEDIATE AND BRANCH RELATIVE, COMPARE LOGICAL AND BRANCH RELATIVE и COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE, в которых значение поля М отлично от нуля, а поле RI содержит положительную величину (т.е. команды ветвления с переходом вперед с ненулевыми масками ветвления).
В. Ограничиваются команды, вызывающие последовательное выполнение, за исключением команды окончания транзакции и команд, которые приводят к сериализации указанного операнда.
Г. Ограничиваются операции типа "запоминающее устройство -запоминающее устройство" и операции типа "запоминающее устройство - запоминающее устройство, с расширенным кодом операции".
3
1
Д. Ограничиваются все следующие общие команды (которые, например, принадлежат архитектуре z/Architecture): CHECKSUM, CIPHER MESSAGE, CIPHER MESSAGE WITH CFB, CIPHER MESSAGE WITH CHAINING, CIPHER MESSAGE WITH COUNTER, CIPHER MESSAGE WITH OFB, COMPARE AND FORM CODEWORD, COMPARE LOGICAL LONG, COMPARE LOGICAL LONG EXTENDED, COMPARE LOGICAL LONG UNICODE, COMPARE LOGICAL STRING, COMPARE UNTIL SUBSTRING EQUAL, COMPRESSION CALL, COMPUTE INTERMEDIATE MESSAGE DIGEST, COMPUTE LAST MESSAGE DIGEST, COMPUTE MESSAGE AUTHENTICATION CODE, CONVERT TO BINARY, CONVERT TO DECIMAL, CONVERT UNICODE-16 TO UNICODE-32, CONVERT UNICODE-16 TO UNICODE-8, CONVERT UNICODE-32 TO UNICODE-16, CONVERT UNICODE-32 TO UNICODE-8, CONVERT UNICODE-8 TO UNICODE-16, CONVERT UNICODE-8 TO UNICODE-32, DIVIDE, DIVIDE LOGICAL, DIVIDE SINGLE, EXECUTE, EXECUTE RELATIVE LONG, EXTRACT CACHE ATTRIBUTE, EXTRACT CPU TIME, EXTRACT PSW, EXTRACT TRANSACTION NESTING DEPTH, LOAD AND ADD, LOAD AND ADD LOGICAL, LOAD AND AND, LOAD AND EXCLUSIVE OR, LOAD AND OR, LOAD PAIR DISJOINT, LOAD PAIR FROM QUAD WORD, MONITOR CALL, MOVE LONG, MOVE LONG EXTENDED, MOVE LONG UNICODE, MOVE STRING, NON-TRANS ACTIONAL STORE, PERFORM CRYPTOGRAPHIC COMPUTATION, PREFETCH DATA, PREFETCH DATA RELATIVE LONG, RUNTIME INSTRUMENTATION EMIT, RUNTIME INSTRUMENTATION NEXT, RUNTIME INSTRUMENTATION OFF, RUNTIME INSTRUMENTATION ON, SEARCH STRING, SEARCH, STRING UNICODE, SET ADDRESSING MODE, STORE CHARACTERS UNDER MASK HIGH, в которых значение поля М равно нулю, а значение поля R равно 6 или 7; STORE CLOCK, STORE CLOCK EXTENDED, STORE CLOCK FAST, STORE FACILITY LIST EXTENDED, STORE PAIR TO QUADWORD, TEST ADDRESSING MODE, команда прерывания транзакции, команда начала транзакции (как TBEGIN, так и TBEGINC), TRANSLATE AND TEST EXTENDED, TRANSLATE AND TEST REVERSE EXTENDED, TRANSLATE EXTENDED, TRANSLATE ONE TO ONE, TRANSLATE ONE TO TWO TRANSLATE TWO TO ONE и TRANSLATE TWO TO TWO.
4. Длина операндов запоминающего устройства при ограниченной транзакции составляет не более четырех восьмерных слов. Примечание: команды LOAD ON CONDITION и STORE ON CONDITION рассматриваются по отношению к ассоциированному запоминающему устройству вне зависимости от значения кода условия. В данном случае под восьмерным словом понимается группа в пределах 32-байтного поля, состоящая из 32-х следующих последовательно байтов.
5. Ограниченная транзакция, выполняемая на данном ЦПУ, а также операции сохранения в запоминающее устройство другими ЦПУ и подсистемой ввода-вывода не могут обращаться к операндам запоминающего устройства из состава любых 4-килобайтных блоков данных, которые содержат 256 байтов данных начиная с указанной команды начала ограниченной транзакции (TBEGINC).
6. Ограниченная транзакция не должна обращаться к командам или операндам запоминающего устройства с использованием различающихся логических адресов, которые назначены одному и тому же абсолютному адресу.
7. Ссылки на операнды, осуществляемые ограниченной транзакцией, должны находиться в пределах одного двойного слова, за исключением команд LOAD ACCESS MULTIPLE, LOAD MULTIPLE, LOAD MULTIPLE HIGH, STORE ACCESS MULTIPLE, STORE MULTIPLE и STORE MULTIPLE HIGH, для которых ссылки на операнды должны находиться в пределах одного восьмерного слова.
Если ограниченная транзакция происходит с нарушением любого из перечисленных выше ограничений 1-7, то либо (а) возникает программное прерывание ограничения транзакции, либо (б) транзакция выполняется так, как если бы она была неограниченной, но с учетом того, что последующие нарушения ограничений могут все же вызвать программное прерывание ограничения транзакции. Заранее нельзя предсказать, какое из указанных последствий повлечет нарушение ограничения, предпринимаемые действия могут различаться в зависимости от того, какое именно ограничение было нарушено.
В соответствии с вышеизложенным, в отсутствие нарушений ограничений, повторяющихся прерываний и конфликтов с другими ЦПУ и устройствами ввода-вывода ограниченная транзакция в итоге завершится.
1. Вероятность успешного завершения ограниченной транзакции повышается, если такая транзакция удовлетворяет следующим критериям.
A. Число выданных команд не превышает максимального значения, равного 32.
Б. Размер ссылок на операнды запоминающего устройства не превышает максимального значения, равного четырем восьмерным словам.
B. Ссылки на операнды запоминающего устройства располагаются в пределах одной и той же строки кэш-памяти.
Г. Ссылки на операнды запоминающего устройства в одних и тех же ячейках памяти для всех транзакций происходят в той же последовательности.
2. Для ограниченной транзакции не обязательно гарантируется успешность завершения при первом выполнении. Тем не менее если все же прерывается ограниченная транзакция, при которой перечисленные выше ограничения не нарушаются, то ЦПУ задействует соответствующую схему, чтобы гарантировать успешность повторного выполнения транзакции.
3. Во время ограниченной транзакции команда начала транзакции является ограниченной, т.е. ограниченная транзакция не может иметь вложений.
4. Нарушение ограниченной транзакцией любого из указанных выше ограничений 1-7 может привести к зацикливанию программы.
5. Ограничения для ограниченной транзакции подобны ограничениям команды сравнения с обменом. Из-за возможных конфликтов, вызванных другими ЦПУ и подсистемой ввода-вывода, архитектурой не гарантируется, что команда сравнения с обменом будет каждый раз завершаться со значением кода условия, равным нулю. Ограниченная транзакция может также подвергаться подобному мешающему воздействию в виде прерывания транзакции из-за конфликтов выборки или сохранения, а также повторяющихся прерываний подсистемы ввода-вывода.
Чтобы гарантировать, что в отсутствие каких-либо нарушений ограничений ограниченная транзакция в конечном счете выполнялась, ЦПУ использует специальные алгоритмы "честности" (от англ.: fairness).
6. Чтобы определить число повторяющихся итераций, требуемых для завершения ограниченной транзакции, программа может использовать счетчик в регистре общего назначения, на который не воздействует маска сохранения регистров общего назначения. Далее приводится пример.
В приведенном примере следует обратить внимание, что значения в регистрах 14 и 15 не восстанавливаются. Также следует учесть, что в некоторых моделях содержимое регистра 15 общего назначения может быть меньше, если ЦПУ выявляет условие прерывания транзакции, возникающее в интервале между моментом завершения команды начала ограниченной транзакции (TBEGINC) и моментом завершения команды AHI (команда инкремента счетчика).
С точки зрения ЦПУ выборки и сохранения, выполненные в режиме выполнения транзакции, не отличаются от выполненных вне транзакционного режима.
В одном из вариантов осуществления пользователь (т.е. тот, кто формирует указанную команду) принимает решение, должна или не должна быть транзакция ограниченной. Схема варианта осуществления алгоритма, связанного с обработкой ограниченных транзакций, и, в частности, с обработкой команды начала ограниченной транзакции (TBEGINC), показана на фиг. 11. Выполнение команды начала ограниченной транзакции (TBEGINC) переводит ЦПУ в режим выполнения ограниченной транзакции или в режим выполнения неограниченной транзакции. Данное ЦПУ (т.е. процессор), выполняющее команду начала ограниченной транзакции (TBEGINC), действует по алгоритму, схема которого показан на фиг. 11.
Согласно фиг. 11, на основе выполнения команды начала ограниченной транзакции на шаге 1100 выполняется функция сериализации (т.е. упорядочивания). Функция или операция сериализации включает завершение (с точки зрения других ЦПУ и подсистемы ввода-вывода) всех концептуально предшествующих обращений данного ЦПУ к запоминающему устройству (а также, например, для архитектуры z/Architecture, завершение установки разряда связанной ссылки и разряда изменения) до начала концептуально следующих обращений к запоминающему устройству (а также до установки разряда связанной ссылки и разряда изменения). Сериализация влияет на последовательность всех обращений ЦПУ к запоминающему устройству и ключам запоминающего устройства за исключением тех, которые ассоциированы с выборкой записей таблицы регистра доступа и таблицы динамической трансляции адреса.
С точки зрения ЦПУ, находящегося в режиме выполнения транзакции, сериализация действует нормально (в соответствии с описанным выше). Сериализующая операция, выполняемая во время работы данного ЦПУ в режиме выполнения транзакции, с точки зрения других ЦПУ и подсистемы ввода-вывода выполняется в момент выхода данного ЦПУ из режима выполнения транзакции в результате исполнения команды окончания транзакции, уменьшающей значение глубины вложения транзакции до нуля (нормальное завершение) или в результате прерывания транзакции.
1
После выполнения сериализации на шаге 1102 принимается решение, возбуждено ли исключение. Если исключение возбуждено, то на шаге 1104 выполняется обработка исключения. Например, если значение управляющего разряда выполнения транзакции (разряда 8 регистра 0) равно нулю, то возбуждается специальное исключение операции и выполнение операции прекращается. Другие примеры: специальное исключение возбуждается и выполнение операции прекращается, если значение поля В (разряды 16-19 команды) отлично от нуля; специальное исключение возбуждается и выполнение операции прекращается, если команда начала отграниченной транзакции (TBEGINC) является точкой назначения перехода по команде исполнимого типа; специальное исключение возбуждается и выполнение операции прекращается, если средство выполнения транзакций в данной конфигурации не инсталлировано. Если ЦПУ уже находится в режиме выполнения ограниченной транзакции, то возбуждается исключение ограниченной транзакции (программное исключение) и выполнение операции прекращается. Кроме того, если значение глубины вложения транзакции, будучи увеличенным на единицу, превысит максимальное значение глубины вложения транзакции, зависящее от модели, то транзакция прерывается с установкой значения кода прерывания транзакции равным 13. Могут выявляться и обрабатываться другие или отличающиеся исключения.
Если исключение не возбуждено, то на шаге 1106 принимается решение, равно ли значение глубины вложения транзакции нулю. Если значение глубины вложения транзакции равно нулю, то на шаге 1108 значение адреса блока диагностики транзакции считается некорректным и на шаге 1110 формируется ССП прерывания транзакции из содержимого текущего ССП с тем отличием, что в ССП прерывания транзакции вместо адреса следующей по счету команды указывается адрес команды начала ограниченной транзакции (TBEGINC). Затем на шаге 1112 в зависящей от модели ячейке памяти, недоступной напрямую программе, сохраняется содержимое пар регистров общего назначения в соответствии с маской сохранения регистров общего назначения. Далее на шаге 1114 значение глубины вложения транзакции устанавливается равным 1. Затем на шаге 1116 эффективные значения управляющего параметра F операций с плавающей запятой и управляющего параметра фильтрации программных прерываний устанавливаются равными нулю. Затем на шаге 1118 определяется эффективное значение управляющего параметра А (разряд 12 поля I2 команды) разрешения изменения регистра доступа. Например, эффективное значение указанного управляющего параметра А определяется как конъюнкция значения управляющего параметра А команды начала ограниченной транзакции (TBEGINC) текущего уровня и команд начала транзакции любых внешних уровней вложения.
Если же на шаге 1106 значение глубины вложения транзакции больше нуля, то на шаге 1120 оно увеличивается на единицу. Далее на шаге 1122 эффективное значение управляющего параметра F операций с плавающей запятой устанавливается равным нулю, значение управляющего параметра фильтрации программных прерываний остается без изменений. Затем процедура переходит на шаг 1118. В одном из вариантов осуществления успешное начало транзакции приводит к установке значения кода условия равным нулю. На этом действие варианта осуществления алгоритма, связанного с выполнением команды начала ограниченной транзакции, завершается.
В одном из вариантов осуществления проверка исключений, предусмотренная в рассмотренном выше алгоритме, может выполняться в различном порядке. Один из вариантов порядка проверки исключений следующий.
Исключения с таким же приоритетом, как приоритет условий программных прерываний для общего случая.
1
Исключение спецификации, обусловленное тем, что значение поля В отлично от нуля.
Прерывание транзакции, обусловленное превышением глубины вложения транзакции максимального значения.
Значение кода условия равно нулю из-за нормального завершения.
Кроме того, в одном или более вариантах осуществления предусмотрено следующее.
1. Если транзакция прерывается, а не заканчивается нормально по команде окончания транзакции, то восстанавливаются значения только тех регистров, которые должны были быть сохранены в соответствии с указанием маски сохранения регистров общего назначения. В случае прерывания транзакции восстанавливаются значения только тех регистров, которые указаны маской сохранения регистров общего назначения крайней внешней команды начала транзакции.
2
Поле I должно указывать все пары регистров, которые определяют входные величины, изменяемые в ходе ограниченной транзакции. В частности, если указанная транзакция прерывается, то к моменту повторного выполнения ограниченной транзакции будут восстановлены первоначальные значения входных величин из указанных регистров.
2. В большинстве моделей может достигаться увеличение производительности при выполнении команды начала транзакции и прерывании транзакции путем указания в маске сохранения регистров общего назначения минимального числа регистров, значения которых должны быть сохранены и восстановлены.
3. Далее приводится пример результатов выполнения команды начала транзакции [как неограниченной транзакции (TBEGIN), так и ограниченной транзакции (TBEGINC)] в зависимости от текущей глубины вложения транзакции и (если значение глубины вложения транзакции отлично от нуля) режима, в котором находится ЦПУ (режим выполнения неограниченной транзакции или режим выполнения ограниченной транзакции).
В соответствии с изложенным, согласно одному из аспектов ограниченной транзакции гарантируется выполнение в предположении, что в ходе этой транзакции не возбуждается условие, которое делает невозможным ее выполнение. Для обеспечения выполнения этой транзакции процессор (например, ЦПУ), выполняющий транзакцию, может предпринимать определенные действия. Например, если при выполнении ограниченной транзакции возбудилось условие прерывания транзакции, то ЦПУ может временно выполнить по отдельности или в произвольной комбинации следующее:
а) приостановить выполнение в порядке, отличном от заданного;
б) приостановить конфликтующие обращения других ЦПУ к ячейкам запоминающего устройства;
в) ввести случайные задержки в обработку прерывания транзакции;
г) предпринять другие меры для успешного выполнения транзакции.
В итоге обработка ограниченной транзакции заключается в следующем.
- Если уже действует режим выполнения ограниченной транзакции, то возбуждается условие исключения ограниченной транзакции.
- Если текущее значение глубины вложения транзакции больше нуля, то выполнение ведется так же, как и в режиме выполнения неограниченной транзакции:
- эффективное значение управляющего параметра F устанавливается равным нулю;
- эффективное значение управляющего параметра фильтрации программных прерываний остается без изменений;
- внешним неограниченным транзакциям разрешается вызывать сервисную функцию, которой разрешается или не разрешается использовать ограниченные транзакции.
- Если текущее значение глубины вложения транзакции равно нулю:
- адрес блока диагностики транзакции некорректен (в случае прерывания транзакции блок диагностики транзакции, определяемый командой, не сохраняется);
- в ССП прерывания транзакции устанавливается адрес команды начала ограниченной транзакции (TBEGINC) (вместо адреса следующей по счету команды);
- в ячейке запоминающего устройства, зависящей от модели и недоступной программе, сохраняется содержимое пар регистров общего назначения, определенных маской сохранения регистров общего назначения;
2
- опционально из операнда поля D формируется маркер транзакции. Маркер транзакции представляет собой идентификатор транзакции. Значение маркера транзакции может быть равно адресу операнда запоминающего устройства или другой величине.
- Эффективное значение управляющего параметра А = конъюнкция значений управляющих параметров А команд начала ограниченной транзакции (TBEGINC) текущего и любых внешних уровней.
- Глубина вложения транзакции увеличивается:
- если значение глубины вложения транзакции изменяется с 0 на 1, то ЦПУ переходит в режим выполнения ограниченной транзакции,
- в противном случае ЦПУ продолжает действовать в режиме выполнения неограниченной транзакции.
- Команда завершается со значением кода условия, равным нулю.
- Перечень исключений:
1
- исключение спецификации (значение 0006 кода прерывания транзакции), если значение поля В отлично от нуля;
- исключение специальной операции (шестнадцатеричное значение 0013 кода прерывания транзакции), если значение управляющего параметра выполнения транзакции CR0.8 (т.е. разряда 8 управляющего регистра 0) равно нулю;
- исключение ограниченной транзакции (шестнадцатеричное значение 0018 кода прерывания транзакции) при возникновении в режиме выполнения ограниченной транзакции;
- исключение операции (шестнадцатеричное значение 0001 кода прерывания транзакции), если средство выполнения ограниченной транзакции не инсталлировано;
- исключение выполнения (шестнадцатеричное значение 0003 кода прерывания транзакции), если команда является точкой назначения перехода по команде исполнимого типа;
- значение 13 кода прерывания транзакции, если превышено максимально допустимое значение глубины вложения транзакции.
- Условия прерывания транзакции при ограниченной транзакции:
- ССП прерывания транзакции указывает на команду начала ограниченной транзакции (TBEGINC) (вместо адреса следующей за ней команды; условие прерывания транзакции приводит к повторному запуску всей транзакции; алгоритм не предусматривает ветви на случай сбоя выполнения транзакции);
- ЦПУ предпринимает специальные меры для того, чтобы при повторном запуске транзакции гарантировать успешное выполнение;
- если конфликт, прерывание или нарушение ограничения не являются перманентными, то транзакции в итоге гарантируется выполнение.
- Нарушение ограничения:
- устанавливается шестнадцатеричное значение 0018 кода прерывания транзакции, которое сигнализирует о нарушении ограничения транзакции, или
- транзакция выполняется так же, как выполняется неограниченная транзакция.
В соответствии с вышеизложенным, в дополнение к обработке ограниченной транзакции, которая является опциональной, в одном из вариантов осуществления средство выполнения транзакций также обеспечивает обработку неограниченных транзакций. Далее с использованием схемы, показанной на фиг. 12, приводятся дополнительные сведения об обработке неограниченных транзакций и, в частности, об обработке команды начала транзакции (TBEGIN). Выполнение команды начала транзакции (TBEGIN) приводит к переходу ЦПУ в режим выполнения неограниченной транзакции или не изменяет режим работы ЦПУ, если ЦПУ уже находится в данном режиме. ЦПУ (т.е. процессор), выполняющее команду начала транзакции (TBEGIN), действует по алгоритму, схема которого показана на фиг. 12.
В соответствии с фиг. 12, на основе выполнения команды начала транзакции (TBEGIN) на шаге 1200 выполняется функция сериализации (ее описание приведено выше). После выполнения сериализации на шаге 1202 принимается решение, возбуждено ли исключение. Если исключение возбуждено, то на шаге 1204 выполняется обработка исключения. Например, если значение управляющего параметра выполнения транзакций (разряда 8 регистра 0) равно нулю, то возбуждается специальное исключение операции и выполнение операции прекращается. Другие примеры: возбуждается специальное исключение и выполнение операции прекращается, если значение управляющего параметра фильтрации программных прерываний, т.е. значение разрядов 14-15 поля 1 г команды, равно трем; возбуждается специальное исключение и выполнение операции прекращается, если адрес первого операнда команды не указывает на величину в зоне двойных слов. Возбуждается исключение операции и выполнение операции прекращается, если средство выполнения транзакций в данной конфигурации не инсталлировано. Возбуждается исключение выполнения и выполнение операции прекращается, если команда начала транзакции (TBEGIN) является точкой назначения перехода по команде исполнимого типа. Кроме того, если ЦПУ находится в режиме выполнения ограниченной транзакции, то возбуждается исключение ограниченной транзакции (программное исключение) и выполнение операции прекращается. Кроме того, если значение глубины вложения транзакции, будучи увеличенным на единицу, превысит максимально допустимое значение, зависящее от модели, то транзакция прерывается с установкой кода прерывания транзакции равным 13.
1
1
Далее, если значение поля B команды отлично от нуля и ЦПУ не находится в режиме выполнения транзакции, т.е. значение глубины вложения транзакции равно нулю, то определяется доступность сохранения в первый операнд. Если доступ для сохранения в первый операнд невозможен, то возбуждается исключение доступа, операция обнуляется, откладывается или прекращается в зависимости от особенностей условия исключения доступа. Кроме того, для первого операнда распознается событие изменения хранящегося результата регистрации программных событий. Если значение поля Bi отлично от нуля и ЦПУ уже находится в режиме выполнения транзакции, то нельзя предсказать, можно ли определить доступность сохранения в первый операнд, в результате чего выявляются события изменения хранящегося результата регистрации программных событий для первого операнда. Если значение поля B равно нулю, то доступ к первому операнду отсутствует.
Помимо указанной проверки исключений, на шаге 1206 принимается решение, находится ли ЦПУ в режиме выполнения транзакции (т.е. равно ли значение глубины вложения транзакции нулю). Если ЦПУ не находится в режиме выполнения транзакции, то на шаге 1208 сохраняется содержимое выбранных пар регистров общего назначения. В частности, в зависящей от модели ячейке памяти, недоступной напрямую программе, сохраняется содержимое пар регистров общего назначения в соответствии с маской сохранения регистров общего назначения.
1
1
Затем на шаге 1210 принимается решение, равно ли значение поля B команды нулю. Если значение поля B отлично от нуля, то на шаге 1214 в поле адреса блока диагностики транзакции помещается адрес первого операнда, адрес блока диагностики транзакции становится корректным. Далее на шаге 1216 формируется ССП прерывания транзакции из содержимого текущего ССП. Адрес команды в ССП прерывания транзакции указывает следующую по порядку команду [т.е. команду, следующую за крайней внешней командой начала транзакции (TBEGIN)].
2
2
Кроме того, на шаге 1218 определяется эффективное значение управляющего параметра А разрешения изменения регистра доступа, т.е. определяется значение разряда 12 поля I команды. Эффективное значение указанного управляющего параметра определяется как конъюнкция значений управляющих параметров А команд начала транзакции текущего и всех внешних уровней. Также на шаге 1220 определяется эффективное значение управляющего параметра F разрешения операций с плавающей запятой, т.е. разряда 13 поля I команды. Эффективное значение указанного управляющего параметра F определяется как конъюнкция значений управляющих параметров F команд начала транзакции (TBEGIN) текущего и всех внешних уровней.
2
Далее на шаге 1222 определяется эффективное значение управляющего параметра фильтрации программных прерываний, т.е. значение разрядов 14-15 поля I команды. Эффективное значение указанного управляющего параметра фильтрации программных прерываний определяется как наибольшее значение данного управляющего параметра команд начала транзакции текущего и всех внешних уровней.
Далее на шаге 1224 значение глубины вложения транзакции увеличивается на единицу, после чего на шаге 1226 выполнение команды заканчивается установкой значения 0 кода условия. Если значение глубины вложения транзакции изменяется с нуля на единицу, то ЦПУ переходит в режим выполнения неограниченной транзакции, в противном случае ЦПУ продолжает оставаться в режиме выполнения неограниченной транзакции.
1
Если же на шаге 1210 значение поля B равно нулю, то на шаге 1211 адрес блока диагностики транзакции считается некорректным и выполнение алгоритма переходит на шаг 1218. Аналогично, если на шаге 1206 ЦПУ находится в режиме выполнения транзакции, то выполнение алгоритма переходит на шаг 1218.
Результирующий код условия выполнения команды начала транзакции (TBEGIN) имеет следующие значения:
0 - транзакция инициирована успешно;
1 - не определено;
2 - не определено;
3 - не определено.
Набор программных исключений содержит, например:
- исключение доступа (сохранение, первый операнд);
- исключение операции (средство выполнения транзакции не инсталлировано);
- исключение специальной операции;
- исключение спецификации;
- исключение ограничения транзакции (ограниченная команда).
В одном из вариантов осуществления проверка исключений, предусмотренная в рассмотренном выше алгоритме, может выполняться в различном порядке. Один из вариантов порядка проверки исключений следующий:
- исключения с таким же приоритетом, как приоритет условий программных прерываний для общего случая;
- исключение спецификации, обусловленное зарезервированным значением управляющего параметра фильтрации программных прерываний;
- исключение спецификации, обусловленное тем, что адрес первого операнда не указывает на зону двойных слов;
- исключение доступа (если значение поля В1 отлично от нуля);
- прерывание транзакции из-за превышения максимального значения глубины вложения транзакции;
- значение кода условия равно нулю в связи с нормальным выполнением.
Замечания:
1. Если значение поля Bi отлично от нуля, то выполняется следующее:
- Когда инициируется крайняя внешняя транзакция, то формируется блок диагностики транзакции, причем и в том случае, если транзакция не прерывается.
- Поскольку нельзя предсказать, проверяется ли доступность блока диагностики транзакции для вложенных транзакций, то для каждой вложенной команды начала транзакции (TBEGIN) формируются доступные блоки диагностики транзакции.
1
1
1
- Скорость выполнения каждой команды начала транзакции (TBEGIN), значение поля B которой отлично от нуля, а также каждой процедуры обработки прерывания транзакции, выполняемой для транзакции, инициированной крайней внешней командой начала транзакции (TBEGIN), значение поля B которой отлично от нуля, может быть ниже, чем была бы в случае равенства значения поля В нулю.
2. В одном из вариантов осуществления значения регистров, указанных для сохранения маской сохранения регистров общего назначения, восстанавливаются только в том случае, если транзакция прерывается, но не в случае, если транзакция оканчивается нормально по команде окончания транзакции. В случае прерывания транзакции восстанавливаются значения только тех регистров, которые указаны маской сохранения регистров общего назначения крайней внешней команды начала транзакции.
2
Поле I должно указывать все пары регистров, которые определяют входные величины, изменяемые в ходе транзакции. В частности, если транзакция прерывается, то при активации обработчика прерывания транзакции будут восстановлены первоначальные значения входных величин из указанных регистров.
3. Предполагается, что за командой начала транзакции (TBEGIN) следует команда условного ветвления, которая определит, была ли транзакция инициирована успешно.
4. Если транзакция прерывается из-за возникновения условий, которые не приводят к возникновению прерывания, то управление передается команде, указанной ССП прерывания транзакции [т.е. команде, следующей за крайней внешней командой начала транзакции (TBEGIN)]. Помимо установки значения кода условия командой начала транзакции (TBEGIN), значения 1-3 указанного кода также устанавливаются при прерывании транзакции.
В связи с этим набор команд, следующих за крайней внешней командой начала транзакции (TBEGIN), должен быть способен обработать все четыре значения кода условия даже несмотря на то, что в данном примере команда начала транзакции (TBEGIN) устанавливает только значение 0 данного кода.
5. В большинстве моделей может быть достигнуто повышение производительности и при выполнении команды начала транзакции, и при обработке прерывания транзакции путем указания в маске сохранения регистров общего назначения минимального числа регистров, значение которых должно быть сохранено и восстановлено.
2
2
6. Во время работы в режиме выполнения неограниченной транзакции программа может вызвать сервисную функцию, которая может изменить содержимое регистров доступа и регистров с плавающей запятой (в том числе, управляющего регистра операций с плавающей запятой). Такая сервисная процедура может при запуске сохранять содержимое измененных регистров и при выходе восстанавливать их содержимое, однако транзакция может быть прервана до нормального окончания указанной процедуры. Если вызывающая программа не сохраняет содержимое указанных регистров во время работы ЦПУ в режиме неограниченной транзакции, то изменение содержимого указанных регистров сервисной функцией может быть недопустимо. Чтобы предотвратить непредусмотрительное изменение содержимого регистров доступа во время режима выполнения неограниченной транзакции, эта программа может установить значение, управляющего параметра разрешения изменения регистра доступа (разряда 12 поля I команды начала транзакции) равным нулю. Аналогично, для того, чтобы предотвратить непредусмотрительное изменение содержимого регистров с плавающей запятой, эта программа может установить значение управляющего параметра разрешения изменения регистра с плавающей запятой [разряда 13 поля I команды начала транзакции (TBEGIN)] равным нулю.
7. Распознавание условий программных исключений во время выполнения команды начала транзакции (TBEGIN) зависит от значения управляющего параметра фильтрации программных прерываний, устанавливаемого любыми внешними командами начала транзакции (TBEGIN). Условия программных исключений, возбуждаемые во время выполнения крайней внешней команды начала транзакции, не подвергаются фильтрации.
8. Для последовательного обновления набора ячеек памяти в последовательностях обычного кода может использоваться блокировочное слово (семафор, т.е. слово, санкционирующее доступ к данным). Если: (а) для обновления содержимого набора ячеек памяти используются транзакции, (б) в случае прерывания транзакции программа также предусматривает возможность привлечения "резервной" ветви алгоритма выполнения и (в) резервная ветвь использует блокировочное слово, то ветвь алгоритма выполнения транзакции (транзакционная ветвь) должна также проверять состояние блокировочного слова: если блокировочное слово указывает на блокировку, то транзакция должна быть прекращена посредством команды окончания транзакции и должен быть выполнен переход к резервной ветви алгоритма. Такой порядок обеспечивает целостность доступа к сериализованным ресурсам, в том числе в случае их обновления с использованием транзакции.
Альтернативный вариант может предусматривать прекращение выполнения программы в случае, если блокировочное слово указывает на блокировку, однако при этом обработка прекращения выполнения программы может потребовать значительно большего времени, чем простое прекращение выполнения транзакции по команде окончания транзакции.
1
9. Если значение эффективного управляющего параметра фильтрации программных прерываний больше нуля, то ЦПУ выполняет фильтрацию большинства программных прерываний, вызванных исключением данных. Если значение эффективного управляющего параметра F разрешения операций с плавающей запятой равно нулю, то в управляющем регистре операций с плавающей запятой не устанавливается значение кода исключения данных как следствие прерывания транзакции, обусловленного условием программного исключения типа исключение данных. В данном случае (т.е. когда выполняется фильтрация и значение эффективного управляющего параметра F равно нулю) проверяется только то значение кода исключения данных, которое входит в состав блока диагностики транзакции, определенного командой начала транзакции (TBEGIN). Если обработчику прерывания программы в такой ситуации требуется проверять код исключения данных, то значение поля B регистра общего назначения должно быть отлично от нуля, т.е. должен быть установлен корректный адрес блока диагностики транзакции.
10. Если для блока диагностики транзакции, определяемого командой начала транзакции (TBEGIN), соответствующего крайней внешней команде начала транзакции (TBEGIN), возбуждается условие изменения хранящегося результата средства регистрации программных событий или обнаружения нулевого адреса, и блокирование средства регистрации программных событий не применяется, то во время выполнения команды выявляется событие средства регистрации программных событий, что приводит к немедленному прерыванию транзакции вне зависимости от того, существует ли какое-либо другое условие прерывания транзакции.
В одном из вариантов осуществления команда начала транзакции (TBEGIN) неявно устанавливает адрес прерывания транзакции как адрес команды, следующей по порядку за командой начала транзакции (TBEGIN). Данный адрес должен быть адресом команды условного перехода, который определяет, должно ли осуществляться ветвление в зависимости от значения кода условия. В случае успешного выполнения команды начала транзакции (TBEGIN) устанавливается значение 0 кода условия, а в случае прерывания транзакции устанавливаются значения 1, 2 или 3.
В одном из вариантов осуществления команда начала транзакции (TBEGIN) формирует опциональный операнд запоминающего устройства, указывающий адрес блока диагностики транзакции, в котором содержится информация в случае прерывания транзакции.
Кроме того, указанная команда формирует актуальный операнд, содержащий:
- маску сохранения регистров общего назначения, указывающую, содержимое каких пар регистров общего назначения должно сохраняться в начале выполнения транзакции и восстанавливаться в случае прерывания транзакции;
- разряд (управляющий параметр А), разрешающий прерывание транзакции в случае, если транзакция изменяет регистры доступа;
- разряд (управляющий параметр F), разрешающий прерывание транзакции в случае, если транзакция пытается выполнить команды с плавающей запятой;
- управляющий параметр фильтрации программных прерываний, который в случае прерывания транзакции позволяет отдельным уровням транзакции избегать фактического представления программного прерывания.
Управляющие параметры A, F и управляющий параметр фильтрации программных прерываний могут принимать различные значения для каждого уровня вложения транзакции, и по завершении выполнения внутренних уровней вложения транзакции могут восстанавливаться предыдущие значения указанных параметров.
Более того, команда начала транзакции (TBEGIN) [или в другом варианте осуществления - команда начала ограниченной транзакции (TBEGIN)] используется для формирования маркера транзакции. Указанный маркер может быть опционально сопоставлен с маркером, формируемым командой окончания транзакции. Например, для каждой команды начала транзакции (или команды начала ограниченной транзакции) маркер формируется из адреса первого операнда. Указанный адрес может формироваться независимо от того, равно ли значение базового регистра нулю (в отличие от адреса блока диагностики транзакции, который устанавливается только тогда, когда значение базового регистра отлично от нуля). Для каждой команды окончания транзакции, выполняемой с отличным от нуля значением базового регистра, из хранящегося операнда формируется аналогичный маркер. Если указанные маркеры не совпадают, то для предупреждения программы о непарной транзакции может быть возбуждено программное исключение.
Сопоставление маркеров лежит в основе механизма, используемого для улучшения стабильности программного обеспечения благодаря гарантии того, что команда окончания транзакции надлежащим образом сопоставлена с командой начала транзакции (TBEGIN) [или с командой начала ограниченной транзакции (TBEGINC)]. Если на некотором уровне вложения транзакции выполняется команда начала транзакции (TBEGIN), то из адреса операнда запоминающего устройства формируется маркер, который идентифицирует начавшуюся транзакцию. Когда выполняется соответствующая команда окончания транзакции, то из адреса команды операнда запоминающего устройства формируется маркер, и ЦПУ выполняет сравнение значений маркера начала и маркера окончания транзакции данного уровня. Если значения маркеров не совпадают, то возбуждается условие исключения. В модели может применяться сопоставление маркеров только до определенного значения глубины вложения транзакции (или сопоставляются маркеры транзакции только верхнего уровня). Маркер может не содержать всех разрядов адреса операнда запоминающего устройства либо разряды могут быть скомбинированы операцией хеширования или иным способом. Маркер может быть сформирован командой начала транзакции (TBEGIN) даже в случае, если доступ к операнду запоминающего устройства не производился.
Таким образом, обработка неограниченного прерывания выполняется следующим образом:
- Если значение глубины вложения транзакции равно нулю:
- если значение Bi отлично от нуля, то из первого операнда формируется блок диагностики транзакции;
- в ССП прерывания транзакции указывается адрес следующей по порядку команды;
2
- содержимое пар регистров общего назначения, определенных в поле I, сохраняется в зависящей от модели ячейке запоминающего устройства, причем эта ячейка недоступна напрямую программе.
- Вычисляются эффективные управляющие параметры A, F и эффективный управляющий параметр фильтрации программных прерываний:
- эффективный А = конъюнкция управляющих параметров А текущей и любой внешней команды начала транзакции (TBEGIN);
- эффективный F = конъюнкция управляющих параметров F текущей и любой внешней команды начала транзакции (TBEGIN);
- эффективный управляющий параметр фильтрации программных прерываний = максимальное среди значений управляющих параметров фильтрации программных прерываний текущей и любой внешней команды начала транзакции (TBEGIN).
- Значение глубины вложения транзакции увеличивается:
- если изменяется с 0 на 1, то ЦПУ переходит в режим выполнения транзакции;
- значение кода условия устанавливается равным нулю;
- когда управление передается команде, следующей за командой начала транзакции (TBEGIN), то:
значение 0 кода условия означает успешное выполнение команды начала транзакции (TBEGIN);
значение кода условия, отличное от нуля, означает прерванную транзакцию;
* Перечень исключений:
- превышение максимального значения глубины вложения транзакции, устанавливается значение 13 кода прерывания транзакции;
1
- исключение доступа, если значение поля B отлично от нуля и доступ к операнду запоминающего устройства на запись невозможен, устанавливается код из набора кодов программных прерываний;
- код 0003, исключение выполнения, если команда начала транзакции (TBEGIN) является точной назначения перехода по команде исполнимого типа;
- код 0001, исключение операции, если средство выполнения транзакций не инсталлировано;
- код 0006, если значение управляющего параметра фильтрации программных прерываний некорректно (значение равно трем) или адрес второго операнда располагается за пределами области двойных слов;
- код 0013 (шестнадцатеричное число), если значение управляющего параметра выполнения транзакций (разряда 8 управляющего регистра 0) равно нулю;
- код 0018 (шестнадцатеричное число) при возникновении в режиме выполнения ограниченной транзакции.
В соответствии с указанным выше, ограниченная и неограниченная транзакции могут завершаться по команде окончания транзакции. Далее с использованием схемы на фиг. 13 приводятся дополнительные сведения об обработке команды окончания транзакции. ЦПУ (т.е. процессор), выполняющее команду окончания транзакции, действует по алгоритму, схема которого показана на фиг. 13.
В соответствии с фиг. 13, вначале на шаге 1300 на основе получения процессором команды окончания транзакции (например, путем выборки, приема команды и т.д.) выполняется проверка различных исключений, и если исключение возбуждено, то на шаге 1302 выполняется обработка исключения. Например, если команда окончания транзакции является точной назначения перехода по команде исполнимого типа, то выполнение команды прекращается и возбуждается исключение выполнения; если значение управляющего параметра выполнения транзакций (разряда 8 управляющего регистра 0) равно нулю, то возбуждается исключение специальной операции и выполнение операции прекращается. Также возбуждается исключение операции и выполнение операции прекращается, если средство выполнения транзакций в конфигурации не инсталлировано.
Если же на шаге 1300 исключение не возбуждено, то на шаге 1304 уменьшается значение глубины вложения транзакции (например, на единицу). Затем на шаге 1306 принимается решение, стало ли значение глубины вложения транзакции после его уменьшения равным нулю. Если значение глубины вложения транзакции стало равным нулю, то на шаге 1308 фиксируются все обращения сохранения данной транзакции (а также всех прочих транзакций в наборе вложенных транзакций, частью которого является данная транзакция, если таковые имеются). Далее на шаге 1310 ЦПУ выходит из режима выполнения транзакции, после чего на шаге 1312 выполнение команды окончания транзакции завершается.
Если на шаге 1306 значение глубины вложения транзакции отлично от нуля, то завершение команды окончания транзакции происходит непосредственно.
Если ЦПУ находится в режиме выполнения транзакции в начале операции, то устанавливается нулевое значение кода условия, в противном случае значение кода условия устанавливается равным двум.
Учитывается, что значения эффективного управляющего параметра F разрешения операций с плавающей запятой, эффективного управляющего параметра А изменения содержимого регистров доступа и эффективного управляющего параметра фильтрации программных прерываний восстанавливаются: указанным параметрам присваиваются соответствующие значения на момент, предшествующий команде начала транзакции, инициировавшей завершаемый уровень транзакции. Затем по завершении операции выполняется функция сериализации.
Выборка команд, удовлетворяющая критериям средства регистрации программных событий, а также события окончания транзакции, возникающие в ходе завершения крайней внешней команды окончания транзакции, не влияют на прерываемую транзакцию.
2
2
2
В одном из примеров команда окончания транзакции также содержит поле В базы и поле D смещения, которые объединяются (т.е. добавляются друг к другу) для формирования адреса второго операнда. В данном примере может выполняться сопоставления маркеров. Например, если значение поля В отлично от нуля, то выбранные разряды адреса второго операнда сопоставляются с маркером транзакции, сформированным соответствующей командой начала транзакции (TBEGIN). Если выявлено несовпадение, то возбуждается исключение (например, со значением 0006 кода программного прерывания).
В дополнение к изложенному выше, транзакция может прерываться неявно или явно по команде прерывания транзакции. Прерывание транзакции по команде прерывания транзакции или иным способом включает выполнение набора шагов. Пример набора шагов по обработке прерывания транзакции описывается в общем с использованием схемы на фиг. 14. В последующем описании будут указаны возможные отличия в обработке при инициировании прерывания транзакции по команде прерывания транзакции и иными способами. В одном из примеров процессор (например, ЦПУ) действует по алгоритму, схема которого показана на фиг. 14.
Согласно фиг. 14, в начале на шаге 1400 на основе выполнения команды прерывания транзакции или на основе неявного прерывания транзакции фиксируются нетранзакционные обращения сохранения, инициированные во время пребывания ЦПУ в режиме выполнения транзакции. На шаге 1402 прочие обращения сохранения (например, транзакционные сохранения), инициированные во время пребывания ЦПУ в режиме выполнения транзакции, отбрасываются.
На шаге 1404 ЦПУ выходит из режима выполнения транзакции, и последующие сохранения выполняются нетранзакционно. На шаге 1406 текущее содержимое ССП заменяется содержимым ССП прерывания транзакции за исключением того, что код условия устанавливается в соответствии с вышеизложенным (в отличие от ситуации, описанной далее, в которой адрес блока диагностики транзакции корректен, но доступ к блоку диагностики транзакции невозможен, при этом значение кода условия устанавливается равным единице). Частью обработки прерывания транзакции или последующей за ней обработкой является переход к точке назначения, определенной ССП прерывания транзакции, для выполнения действия. Согласно одному из примеров, в котором транзакция является ограниченной, такой точкой назначения перехода является команда начала ограниченной транзакции (TBEGINC), а выполняемым действием - повторное выполнение данной команды; согласно другому примеру, в котором транзакция является неограниченной, точкой назначения перехода является команда, следующая по порядку за командой начала транзакции (TBEGIN), а выполняемым действием - выполнение этой команды, которая может быть, например, командой перехода к обработчику прерывания транзакции.
Далее на шаге 1408 принимается решение о корректности адреса блока диагностики транзакции. Если адрес блока диагностики транзакции корректен, то на шаге 1410 выполняется сохранение диагностической информации, идентифицирующей причину прерывания транзакции, а также содержимого регистров общего назначения в блок диагностики транзакции, определенный командой начала транзакции (TBEGIN). Подлежащие сохранению поля блока диагностики транзакции и условия, при которых эти поля сохраняются, описаны выше при описании блока диагностики транзакции.
Если адрес блока диагностики транзакции корректен, но доступ к данному блоку после выполнения крайней внешней команды начала транзакции (TBEGIN) стал невозможен, то обращение к блоку не производится и устанавливается значение 1 кода условия.
Для транзакций, которые прерываются из-за условий программных исключений, которые приводят к прерыванию, сохраняется блок диагностики транзакции для случая программного прерывания.
Если на шаге 1408 адрес блока диагностики транзакции некорректен, то блок диагностики транзакции, определяемый командой начала транзакции (TBEGIN), не сохраняется, и в зависимости от причины прерывания транзакции устанавливается значение 2 или 3 кода условия.
Кроме того, на шаге 1412 значение глубины вложения транзакции устанавливается равным нулю. Далее на шаге 1414 восстанавливаются значения всех пар регистров общего назначения, которые были указаны командой начала транзакции (TBEGIN) как подлежащие сохранению. Значения тех пар регистров общего назначения, которые не были указаны командой начала транзакции (TBEGIN) как подлежащие сохранению, в случае прерывания транзакции не восстанавливаются.
Затем на шаге 1416 выполняется функция сериализации. С точки зрения других ЦПУ и подсистемы ввода-вывода функция или операция сериализации содержит завершение всех ранее начатых обращений ЦПУ к запоминающему устройству (и в архитектуре z/Architecture, например, установку соответствующего разряда ссылки и разряда изменения) до начала концептуально следующего обращения к запоминающему устройству (и до установки соответствующего разряда ссылки и разряда изменения). Сериализация оказывает влияние на последовательность всех обращений ЦПУ к запоминающему устройству и на ключи защиты запоминающего устройства за исключением тех, которые связаны с выборкой записей таблицы регистра доступа и таблицы динамической трансляции адреса.
С точки зрения ЦПУ, находящегося в режиме выполнения транзакции, сериализация выполняется в штатном режиме (как описано выше). С точки зрения других ЦПУ и подсистемы ввода-вывода операция сериализации, выполняемая во время работы ЦПУ в режиме выполнения транзакции, выполняется в момент выхода ЦПУ из этого режима в результате выполнения команды окончания транзакции, которая уменьшает значение глубины вложения транзакции до нуля (штатное окончание), или в результате прерывания транзакции.
Если обработка прерывания транзакции инициирована не командой прерывания транзакции, а иной причиной, и если транзакция прерывается из-за такого условия исключения, которое приводит к прерыванию (проверяется на шаге 1418 алгоритма), то на шаге 1420 в специально предназначенных ячейках запоминающего устройства, соответствующих типу прерывания, сохраняются коды прерывания или параметры, связанные с прерыванием. Затем на шаге 1422 установленное ранее текущее ССП сохраняется в старом ССП прерывания. Далее, а также в том случае, если транзакция не была прервана по условию исключения, вызвавшему прерывание, выполнение команды заканчивается с установкой значения 0 кода условия.
В одном из вариантов осуществления интерпретационного выполнения архитектуры z/Architecture в дополнение к вышеизложенному в случае, если ЦПУ находится в режиме выполнения транзакции и возбуждается гостевое условие, которое в обычных условиях приводит к установке значений 4, 12, 44, 56, 64, 68 или 72 кодов перехвата, то перехват не происходит. Вместо этого ЦПУ остается в режиме интерпретационного выполнения, а условия прерывания транзакции указывают на гостевое условие следующим образом.
- В случае неограниченной транзакции: данная транзакция прерывается из-за ограниченной команды (значение 11 кода прерывания транзакции). Если было выявлено конкурентное событие средства регистрации программных событий и ЦПУ разрешена работа со средством регистрации программных событий, то возбуждается программное прерывание с установкой значения 0280 (шестнадцатеричное число) кода прерывания.
- В случае ограниченной транзакции: возбуждается исключение ограничения транзакции. Если было выявлено конкурентное событие средства регистрации программных событий и ЦПУ разрешена работа со средством регистрации программных событий, то возбуждается программное прерывание с установкой значения 0298 (шестнадцатеричное число) кода прерывания.
Если транзакция прерывается из-за условия программного исключения, то средство фильтрации программных прерываний может приостановить прерывание. Для программных прерываний, которые могут привести к перехвату, средство фильтрации также приостанавливает перехват.
Далее с использованием схем алгоритмов на фиг. 15А и 15Б приводятся дополнительные сведения об обработке транзакций. В одном из вариантов осуществления указанные алгоритмы выполняются процессором.
Согласно схеме алгоритма на фиг. 15А, вначале на шаге 1500 командой начала транзакции инициируется транзакция. Например, если указанная инициируемая транзакция должна быть ограниченной, то для инициирования транзакции используется команда начала ограниченной транзакции (TBEGINC). Если же указанная инициируемая транзакция должна быть неограниченной, то для инициирования транзакции используется команда начала транзакции (TBEGIN).
Если во время выполнения транзакции происходит ее прерывание (проверка на шаге 1502), то на шаге 1504 определяется тип транзакции. Определение типа транзакции необходимо в связи с тем, что обработка, связанная с прерыванием транзакции, зависит от типа транзакции, например, транзакции ограниченного типа или транзакции неограниченного типа.
На шаге 1506 принимается решения, является ли данная транзакция транзакцией первого типа, такой как ограниченная транзакция. Если транзакция является ограниченной транзакцией, то в связи с прерыванием транзакции на шаге 1508 выполняется восстановление содержимого одного или более регистров, определенных командой начала ограниченной транзакции (TBEGINC), а также отбрасываются транзакционные сохранения. Далее на шаге 1510 принимается решение, произошло ли прерывание транзакции из-за прерывания или перехвата. Если причиной являлось прерывание или перехват, то на шаге 1512 выполняется обработка прерывания или перехвата соответственно. Например, если прерывание транзакции произошло из-за прерывания, то выполняется сохранение ССП прерывания транзакции в качестве старого ССП прерывания (данное ССП указывает на команду начала транзакции и содержит код условия, указывающий вероятность успешности повторной попытки). Предусмотрены отдельные старое ССП прерывания и новое ССП прерывания для различных типов прерываний, например, внешнего прерывания, программного прерывания, прерывания ввода-вывода, прерывания от аппаратного контроля. Старое ССП прерывания указывает, что именно управляло процессом на момент возникновения прерывания. Затем управление передается новому ССП прерывания (например, передается адрес обработчика прерывания). Если же причиной прерывания транзакции был перехват, то выполняется сохранение ССП прерывания транзакции в дескрипторе состояния, после чего перехват приводит к выходу ЦПУ из режима интерпретационного выполнения. Однако если причиной прерывания транзакции не было прерывание или перехват, то на шаге 1516 выполнение возобновляется с команды начала транзакции.
Если же на шаге 1506 было принято решение, что данная транзакция является транзакцией второго типа, такой как неограниченная транзакция, то на шаге 1520 опционально сохраняется информация в одном или более блоках диагностики транзакции. Например, если командой начала транзакции (TBEGIN) предоставлен корректный адрес блока диагностики транзакции, то выполняется сохранение диагностической информации в указанном программой блоке диагностики транзакции [в блоке диагностики транзакции, определенном командой начала транзакции (TBEGIN)]. Далее если транзакция прерывается из-за некоторых нефильтрованных условий программных исключений, то информация сохраняется в блоке диагностики транзакции для случая программного прерывания; если транзакция прерывается из-за некоторых условий перехвата, то информация сохраняется в блоке диагностики транзакции перехвата.
Кроме того, процедура обработки прерывания транзакции в случае неограниченной транзакции на шаге 1522 содержит восстановление содержимого одного или более регистров, определенных командой начала транзакции (TBEGIN), а также отбрасывание транзакционных сохранений. Далее на шаге 1524 принимается решение, произошло ли прерывание транзакции из-за прерывания или перехвата. Если причиной являлось прерывание или перехват, то аналогично рассмотренному выше на шаге 1526 выполняется обработка прерывания или перехвата соответственно. Если же причиной прерывания транзакции не было прерывание или перехват, то на шаге 1530 выполнение возобновляется с команды, следующей за командой начала транзакции [например, команды, первой по счету после команды начала транзакции (TBEGIN); т.е. следующей по счету команды в транзакции, непосредственно следующей за командой начала транзакции (TBEGIN) в порядке, предусмотренном программой].
Далее с использованием схемы алгоритма на фиг. 15Б приводятся дополнительные сведения о продолжении выполнения после команды начала транзакции.
Вначале на шаге 1550 команда, которой передается управление, проверяет значение кода условия транзакции [например, код условия команды начала транзакции (TBEGIN)] для определения причины, по которой было передано управление. Если значение кода условия указывает, что управление было передано указанной команде, следующей за командой начала транзакции, по причине прерывания транзакции (например, значение кода условия отлично от нуля), то далее на шаге 1556 принимается решение, предписывает ли значение кода условия повторное выполнение. Например, если код условия имеет определенное значение (например, 2), то предписывается повторное выполнение транзакции, и на шаге 1558 это действие выполняется. Если же на шаге 1556 значение кода условия указывает, что повторное выполнение вряд ли будет успешным (например, значение кода условия равно трем), то на шаге 1560 выполняется переход к резервной ветви.
Если же на шаге 1552 передача управления на команду, следующую за командой начала транзакции (TBEGIN), обусловлена не прерыванием транзакции, а иными причинами, (например, равенством нулю значения кода условия), то на шаге 1554 выполнение транзакции продолжается.
Выше описан один из примеров обработки транзакций, в котором в случае прерывания транзакции ее тип используется для определения того, как должна выполняться обработка транзакций. Кроме того, тип транзакции также определяет обработку прерывания транзакции. Благодаря этому в среде выполнения транзакции становятся возможными различные типы транзакций.
В дополнение к вышеизложенному, также предлагаются эффективные средства обновления набора отдельных объектов в пространстве памяти без классической (грубой) сериализации, такой как блокировка, что дает потенциальную возможность значительного повышения производительности многопроцессорных вычислительных сред. Иными словами, набор отдельных объектов обновляется без привлечения дополнительного числа команд доступа к запоминающему устройству, что требуется в классических методиках, таких как применение блокировочных слов и семафоров. Предоставляется возможность спекулятивного выполнения без затруднительного механизма восстановления, предлагаются ограниченные транзакции для простых обновлений ограниченного объема.
Выполнение транзакций может осуществляться по множеству сценариев, включая (но не ограничиваясь) частичный инлайнинг (подстановку), спекулятивную обработку, элизию (частичный пропуск) блокировки. При частичном инлайнинге фрагмент кода, который должен быть подставлен в выполняемый код, помещается между командой начала транзакции (TBEGIN) и командой окончания транзакции. Для восстановления предыдущего состояния и организации дополнительной точки выхода из процедуры между указанными командами может помещаться команда прерывания транзакции. Для спекулятивного выполнения, такого как в среде Java, путем использования транзакции может задерживаться до границы цикла проверка пустых объектов с нулевыми указателями. Если значение указателя равно нулю, то транзакция может быть прервана безопасно с использованием команды прерывания транзакции, которая помещается между командой начала транзакции (TBEGIN) и командой окончания транзакции.
Пример использования элизии блокировки описывается с использованием схем на фиг. 16А и 16Б, а также приведенного далее фрагмента кода.
На фиг. 16А показан дважды связанный список 1600, состоящий из набора элементов 1602а-1602г очереди. В дважды связанный список 1600 элементов очереди должен быть вставлен новый элемент 1602д очереди. Каждый элемент 1602а-1602д содержит прямой указатель 1604а-1604д и обратный указатель 1606а-1606д. На фиг. 16Б показано, что для вставки элемента 1602д между элементами 16026 и 1602в очереди значения указателей устанавливаются следующим образом: (1) значение обратного указателя 1606д устанавливается таким, чтобы указывать на элемент 16026 очереди; (2) значение прямого указателя 1606д устанавливается таким, чтобы указывать на элемент 1602в очереди; (3) значение обратного указателя 1606в устанавливается таким, чтобы указывать на элемент 1602д очереди; (4) значение прямого указателя 16046 устанавливается таким, чтобы указывать на элемент 1602д очереди.
Ниже приводится фрагмент кода, соответствующий схемам на фиг. 16А и 16Б. Обозначения:
R1 - адрес нового элемента очереди, который должен быть вставлен.
R2 - адрес точки вставки; новый элемент вставляется перед элементом, на который указывает адрес R2.
Согласно одному из примеров, если транзакция используется для элизии блокировки, а резервная ветвь использует блокировку, то транзакция должна, по меньшей мере, обратиться к блокировочному слову, чтобы проверить его доступность. Процессор гарантирует прерывание транзакции, если другой ЦПУ обратится к блокировке нетранзакционно.
Используемые в настоящей заявке термины "запоминающее устройство", "центральное запоминающее устройство", "память" и "главная память" взаимозаменяемы, если не указано иное неявно при использовании или явно. Кроме того, в одном из вариантов осуществления эффективное транзакционное задерживание включает задержку фиксации транзакционного сохранения в главном запоминающем устройстве до завершения выбранной транзакции; в другом варианте осуществления эффективное транзакционное задерживание включает разрешение транзакционных обновлений содержимого запоминающего устройства с хранением прежних значений и восстановлением прежних значений содержимого запоминающего устройства в случае прерывания транзакции.
Специалисту в данной области должно быть понятно, что один или более аспектов могут быть воплощены в форме системы, способа или компьютерного программного продукта. Соответственно, один или более аспектов могут быть осуществлены в виде чисто аппаратного обеспечения, чисто программного обеспечения (в том числе, в виде программы, записанной в ПЗУ, резидентного программного обеспечения, микрокода и т.п.) или в виде комбинации аппаратного и программного обеспечения; для обозначения всех этих вариантов в настоящей заявке могут в общем использоваться термины "схема", "модуль" или "система". Кроме того, один или более аспектов могут принимать форму компьютерного программного продукта, осуществленного на одной или более машиночитаемых средах, содержащих машиночитаемый программный код.
Может использоваться любая комбинация одной или более машиночитаемых сред. Машиночитаемой средой может являться машиночитаемая среда хранения данных. Машиночитаемой средой хранения данных может быть, в том числе (но не ограничиваясь): электронная, магнитная, оптическая, электромагнитная, инфракрасная или проводная система, средство или устройство или любая работоспособная комбинация перечисленных сред. Более специфическими примерами машиночитаемых сред хранения данных могут быть, в том числе (но не ограничиваясь): электрическое соединение, содержащее один или более проводников; портативная компьютерная дискета (накопитель на гибких дисках); накопитель на жестких дисках; оперативное запоминающее устройство (ОЗУ); ПЗУ; стираемое программируемое постоянное запоминающее устройство (СППЗУ) или флеш-память; оптоволокно; CD-ROM (от английского Compact Disc Read Only Memory - постоянное запоминающее устройство на компакт-диске); оптическое запоминающее устройство; магнитное запоминающее устройство; любая работоспособная комбинация перечисленных сред. Применительно к настоящей заявке машиночитаемой средой хранения данных может являться любая материальная среда, которая может содержать или хранить программу для использования или коммуникационное соединение с системой, средством или устройством, способным выполнять команды.
На фиг. 17 в одном из примеров компьютерный программный продукт 1700 содержит, например, одну или более нестираемых машиночитаемых сред 1702 хранения данных. Эта среда (среды) 1702 используется для хранения средств или логики 1704 машиночитаемого программного кода для предоставления и облегчения использования одним или более аспектами.
Программный код, хранящийся на машиночитаемой среде, может быть передан с использованием соответствующей среды, содержащей в том числе (но не ограничиваясь) беспроводную, проводную, кабельную оптоволоконную, радиочастотную и т.п.среду или любую работоспособную комбинацию перечисленных сред.
Компьютерный программный код для выполнения операций одного или более аспектов может быть написан на одном или любой комбинации нескольких языков программирования, в том числе, на языках объектно-ориентированного программирования, таких как Java, Smalltalk, С++ или подобных, и на обычных языках процедурного программирования, таких как язык "С", ассемблера или подобных им языках программирования. Программный код может выполняться: полностью на компьютере пользователя; частично на компьютере пользователя как автономный программный пакет; частично на компьютере пользователя и частично на удаленном компьютере; полностью на удаленном компьютере или сервере. В приведенном далее сценарии удаленный компьютер может быть соединен с компьютером пользователя через коммуникационную сеть любого типа, в том числе, локальную вычислительную сеть (ЛВС) или глобальную сеть связи, либо может быть реализовано соединение с внешним компьютером (например, через сеть Интернет при посредничестве поставщика услуг Интернет).
Один или более аспектов описываются в настоящей заявке с использованием изображений схем алгоритмов и/или структурных схем способов, средств (систем) и компьютерных программных продуктов. Должно быть понятно, что каждая операция на чертежах схем алгоритмов и/или структурных схем, а также комбинации операций на чертежах схем алгоритмов и/или структурных схем могут быть реализованы командами компьютерной программы. Эти команды компьютерной программы могут выполняться процессором универсального компьютера, специализированного компьютера или иными средствами обработки данных с программным управлением, образующими машину (вычислительное устройство), таким образом, что команды, выполняемые процессором компьютера или иными средствами обработки данных с программным управлением, формируют среду для осуществления функций (действий), описанных схемой алгоритма и/или операцией или операциями структурной схемы.
Указанные команды компьютерной программы могут также храниться в машиночитаемой среде и могут заставлять компьютер, иное средство обработки данных с программным управлением или иные устройства действовать определенным образом, чтобы команды, хранящиеся в машиночитаемой среде, образовывали программное изделие, в том числе, реализующее команды, которые осуществляют функцию или действуют в соответствии со схемой алгоритма, и/или операцию или операции, показанные на структурных схемах.
Команды компьютерной программы могут также быть загружены в компьютер, иное средство обработки данных с программным управлением или иные устройства для выполнения последовательности операций компьютером, иным средством обработки данных с программным управлением или другими устройствами для организации вычислительного процесса, в результате которого команды, выполняемые на компьютере или ином средстве обработки данных с программным управлением, реализуют процессы для осуществления функции или действия в соответствии со схемой алгоритма и/или операцию или операции, показанные на структурных схемах.
Схемы алгоритмов и структурные схемы, показанные на рисунках, иллюстрируют архитектуру, функциональность и действие возможных вариантов осуществления систем, методов и компьютерных программных продуктов согласно различным вариантам осуществления. С учетом этого каждая операция (блок) на схемах алгоритмов или структурных схемах может представлять модуль, сегмент или фрагмент кода, содержащий одну или более исполнимых команд для осуществления определенной логической функции или функций. Следует также заметить, что в некоторых альтернативных вариантах осуществления функции, указанные в блоках, могут выполняться в иной последовательности, чем показано на прилагаемых чертежах. Например, две операции, показанные следующими одна за другой, могут фактически выполняться по существу одновременно, либо иногда операции могут выполняться в обратном порядке в зависимости от имеющихся функциональных возможностей. Также далее будет показано, что каждая операция на изображениях структурных схем и/или схем алгоритмов и каждая комбинация операций на изображениях структурных схем и/или схем алгоритмов может быть реализована специализированными аппаратными системами, которые выполняют определенные функции или действия, или комбинациями специализированного аппаратного обеспечения и компьютерных команд.
Кроме того, один или более аспектов могут предоставляться, предлагаться, размещаться, администрироваться, обслуживаться и т.п. поставщиком услуг, который предлагает администрирование пользовательских сред. Например, поставщик услуг может создать, поддерживать, обслуживать и т.п.компьютерный код и/или компьютерную инфраструктуру, которая воплощает один или более аспектов для одного или более пользователей. За это поставщик услуг может получать от потребителя плату, например, в соответствии с подпиской на услуги и/или договором об оплате. Кроме того или вместо того, поставщик услуг может получать плату от продажи или рекламы от третьих лиц.
Согласно варианту осуществления, для реализации одного или более аспектов может использоваться приложение (программное обеспечение). Как один из примеров, реализация приложения включает, в том числе, создание компьютерной инфраструктуры, позволяющей осуществить один или более аспектов.
Согласно другому аспекту, вычислительная инфраструктура может быть организована встраиванием объединяющего машиночитаемого кода в вычислительную систему, и их комбинация позволяет реализовать один или более аспектов вариантов осуществления.
Согласно другому аспекту, может быть предусмотрен порядок объединения вычислительной инфраструктуры, содержащий встраивание машиночитаемого кода в компьютерную систему. Компьютерная система имеет в своем составе машиночитаемую среду, которая содержит один или более вариантов осуществления. Указанный код совместно с компьютерной системой позволяют реализовать один или более вариантов осуществления.
Следует учитывать, что описанные выше различные варианты осуществления являются всего лишь примерами. Например, могут использоваться вычислительные среды иной архитектуры, содержащие и использующие один или более вариантов осуществления. Кроме того, могут использоваться иные команды, форматы команд, поля команд и/или параметры команд. Кроме того, могут предоставляться/использоваться отличные, прочие и/или дополнительные типы транзакции. Возможно большое число вариаций.
Кроме того, преимущества могут получить другие типы вычислительных сред. Пример подобной среды - система обработки данных, используемая для хранения и/или выполнения программного кода, которая содержит по меньшей мере два процессора, соединенных непосредственно или опосредованно с элементами запоминающего устройства через системную шину. Элементы запоминающего устройства содержат, например: локальное запоминающее устройство, используемое при фактическом выполнении программного кода; устройство массовой памяти (запоминающее устройство большого объема); кэш-память (быстродействующее буферное запоминающее устройство для временного хранения информации с целью повышения быстродействия вычислительной системы), обеспечивающую временное хранение по меньшей мере фрагмента программного кода для сокращения числа обращений к устройству массовой памяти для извлечения кода за интервал времени исполнения.
К системе либо непосредственно, либо через промежуточные контроллеры ввода-вывода могут быть подключены устройства ввода-вывода, в том числе (но не ограничиваясь) клавиатура, дисплеи, указательные устройства, запоминающее устройство с прямым доступом, ленточные накопители, CD-ROM, DVD-ROM (от английского Digital Video Disc Read-Only Memory - постоянное запоминающее устройство на цифровом видеодиске), внешние отключаемые запоминающие устройства и прочие запоминающие устройства. Для соединения системы обработки данных с другими системами обработки данных или удаленными принтерами или запоминающими устройствами через промежуточные приватные или публичные сетевые подключения к системе могут подключаться сетевые адаптеры. Примерами сетевых адаптеров могут служить, в том числе, телефонные модемы, кабельные модемы, платы адаптеров сети Ethernet.
На фиг. 18 представлены характерные компоненты хост-компьютерной системы 5000 для осуществления одного или более аспектов. Характерный хост-компьютер 5000 содержит одно или более ЦПУ 5001, соединенных линиями передачи данных с запоминающим устройством компьютера (т.е. с центральным запоминающим устройством) 5002, а также с интерфейсами ввода-вывода запоминающих устройств 5011 и сетей 5010 для связи с другими компьютерами или сетями хранения данных (специализированными высокоскоростными сетями, объединяющими устройства хранения данных и серверы) и т.п. ЦПУ 5001 совместимо с архитектурой, обладающей собственным набором команд и функциональными возможностями. ЦПУ 5001 может обладать средством 5012 трансляции регистра доступа, которое содержит буфер 5013 трансляции регистра доступа, используемым для выбора адресного пространства, используемого средством 5003 динамической трансляции адреса. Средство 5003 динамической трансляции адреса используется для преобразования адресов, использующихся в программах (виртуальных адресов) в реальные адреса запоминающего устройства. Средство динамической трансляции адреса обычно содержит буфер 5007 ассоциативной трансляции для кэширования (временного хранения) результатов трансляции, благодаря чему последующие обращения к блоку памяти центрального запоминающего устройства 5002 не приведут к задержке трансляции адресов. Как правило, кэш-память 5009 может быть организована иерархически, т.е. содержать большую по объему часть, доступную более чем одному ЦПУ, и меньшую по объему, более быстродействующую (более низкого уровня) часть, служащую буфером между большей частью кэш-памяти и каждым ЦПУ. В некоторых вариантах осуществления кэш-память более низкого уровня разделяется для организации нескольких низкоуровневых пространств кэш-памяти для выборки команд и доступа к данным. Согласно варианту осуществления, для организации передачи данных в одном или более устройств 5009 кэш-памяти и запоминающих устройств 5002 могут располагаться блок 5100 диагностики транзакции и один или более буферов 5101 транзакции. В одном из примеров в режиме выполнения транзакции данные первоначально хранятся в буфере транзакции, и при выходе из режима выполнения транзакции (например, по крайней внешней команде окончания транзакции) данные из буфера транзакции сохраняются в запоминающем устройстве (выполняется фиксация), либо при прерывании транзакции данные из буфера транзакции утрачиваются.
Согласно варианту осуществления, команда выбирается из запоминающего устройства 5002 устройством 5004 выборки команд через кэш-память 5009. Указанная команда декодируется в устройстве 5006 декодирования команд и направляется (в некоторых вариантах осуществления - совместно с другими командами) в устройство или устройства 5008 выполнения команд. Как правило, используются несколько устройств 5008 выполнения команд, например, арифметическое устройство, устройство выполнения операций с плавающей запятой, устройство ветвления команд. Кроме того, в одном из вариантов осуществления средства выполнения транзакций могут применяться различные управляющие параметры 5110 транзакции. Команда, выполняемая исполнительным устройством, по мере необходимости обращается к операндам команды, указанным регистрам или запоминающему устройству. Если требуется доступ (загрузка или хранение) к операндам из запоминающего устройства 5002, то доступ контролируется устройством 5005 хранения-загрузки под управлением выполняемой команды. Команды могут выполняться в аппаратных схемах или с помощью внутреннего микрокода (хранящегося в ПЗУ) или комбинацией этих двух способов.
Согласно аспекту средства выполнения транзакций, процессор 5001 также содержит ССП 5102 (например, ССП выполнения транзакции и/или ССП прерывания транзакции), глубину 5104 вложения транзакции, адрес 5106 блока диагностики транзакции и один или более управляющих регистров 5108.
Как было указано, в состав компьютерной системы входит информация, хранящаяся в локальном (или главном) запоминающем устройстве, а также средства адресации, защиты, ссылок и учета изменений. Некоторые варианты правил адресации содержат формат адресов, концепцию адресных пространств, различные типы адресов, а также способ, по которому адреса одного типа преобразуются в адреса другого типа. Часть главного запоминающего устройства содержит постоянно выделенные области памяти. Главное запоминающее устройство обеспечивает системе быстродействующее хранение данных с прямой адресацией. И данные, и программы должны быть загружены из устройств ввода в главном запоминающем устройстве перед тем, как смогут быть обработаны.
Главное запоминающее устройство может содержать одно или более буферных запоминающих устройств меньшего объема с более быстрым доступом, которые иногда называются устройствами кэш-памяти. Устройство кэш-памяти обычно физически связано с ЦПУ или процессором ввода-вывода. Различия в физическом устройстве и использовании различных типов запоминающих устройств обычно незаметны для программы (за исключением различия в быстродействии).
Для операций с командами и данными могут использоваться отдельные устройства кэш-памяти. Информация в кэш-памяти содержится в виде непрерывной последовательности байтов в пределах целостного пространства памяти, называемого блоком данных кэш-памяти или строкой данных кэш-памяти (коротко - строкой). Модель может сформировать команду EXTRACT CACHE ATTRIBUTE, которая возвращает длину строки кэш-памяти в байтах. Также модель может сформировать команды PREFETCH DATA и PREFETCH DATA RELATIVE LONG, которые влияют на выборку данных из запоминающего устройства в кэш-память данных или команд или на удаление данных из кэш-памяти.
Пространство памяти запоминающего устройства представляется в виде протяженных горизонтально ориентированных строк двоичных символов. Для большинства операций доступ к запоминающему устройству выполняется в последовательности слева направо. Строки двоичных символов подразделяются на группы по восемь бит. Группа из восьми бит называется байтом, байт является основным образующим элементом всех форматов представления информации. Каждое местоположение байта в запоминающем устройстве обозначается уникальным неотрицательным целым числом, называемым адресом местоположения данного байта или коротко - адресом. Адресация ячеек памяти - последовательная, т.е. адреса соседних ячеек хранения байтов отличаются на единицу. Адреса начинаются с нуля для крайней левой ячейки и возрастают слева направо. Адреса - беззнаковые двоичные целые числа длиной 24, 31 или 64 разряда.
Информация передается между запоминающим устройством и ЦПУ или подсистемой канала передачи данных по одному байту или по группе байтов в один момент времени. Если иное не оговорено, то, например, в архитектуре z/Architecture группа байтов в запоминающем устройстве адресуется по крайнему левому байту группы. Число байтов в группе либо определено заранее, либо однозначно указывается выполняемой операцией. В операциях с ЦПУ группа байтов называется полем. Внутри каждой группы байтов, например, в архитектуре z/Architecture, биты нумеруются в направлении слева направо. В архитектуре z/Architecture крайние левые биты иногда называют старшими, крайние правые биты - младшими. Следует учитывать, что номера битов не являются адресами запоминающего устройства, адресуются только байты. Для обращения к отдельным битам из состава байта осуществляется доступ к целому байту запоминающего устройства. Биты в байте нумеруются слева направо от нуля до семи (например, в архитектуре 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-разрядных ячейках памяти. В любом другом формате групп байтов фиксированной длины разряды, образующие формат, нумеруются последовательно начиная с нуля. В целях обнаружения шибок и, предпочтительно, их коррекции с каждым байтом или с каждой группой байтов может передаваться один или более дополнительных проверочных битов. Такие проверочные биты формируются внутри вычислительной системы автоматически, они не могут непосредственно контролироваться программой. Емкость запоминающего устройства выражается числом байтов. Если длина поля запоминающего устройства определяется кодом операции, входящим в состав команды, то считается, что поле имеет фиксированную длину, которая может составлять один, два, четыре, восемь или 16 байтов. В некоторых командах могут использоваться поля большей длины. Если длина поля запоминающего устройства не определена заранее, а явно указывается, то говорят, что поле имеет переменную длину. Длина операндов с переменной длиной может изменяться с инкрементом в один байт (или, для некоторых команд, с инкрементом, кратным двум байтам или кратным другому числу байтов). Когда информация помещается в запоминающее устройство, то заменяется содержимое только тех ячеек хранения байтов запоминающего устройства, которые входят в состав поля-получателя, причем это справедливо даже в том случае, когда ширина физического канала передачи данных к запоминающему устройству превышает длину сохраняемого поля.
Определенные элементы информации должны храниться в целостном пространстве памяти запоминающего устройства. Пространство памяти считается целостным применительно к элементу информации, если его адрес кратен длине элемента информации в байтах. Предусмотрены специальные названия для полей из двух, четырех, восьми и шестнадцати байтов. Полусловом называется элемент памяти из двух следующих друг за другом байтов, полуслово является основным составляющим элементом команд. Словом называется элемент памяти из четырех следующих друг за другом байтов в четырехбайтном пространстве. Двойным словом называется элемент памяти из восьми следующих друг за другом байтов в восьмибайтном пространстве. Четверным словом называется элемент памяти из шестнадцати следующих друг за другом байтов 16-байтном пространстве. Восьмерным словом называется группа из 32 располагающихся подряд байтов в 32-байтном пространстве. Если адреса запоминающего устройства указывают на полуслова, слова, двойные слова, четверные слова или восьмерные слова, то в двоичном представлении адрес содержит справа соответственно один, два, три, четыре или пять битов, равных нулю. Команды занимают двухбайтные целостные элементы памяти. Операнды большинства команд не имеют ограничений по размещению в памяти.
В устройствах, в которых используется раздельное кэширование команд и данных (операндов), может возникать значительная задержка, если программа выполняет запись в строку кэш-памяти, из которой производится последовательная выборка команд, причем вне зависимости от того, изменяются ли эти команды в результате записи.
В одном из примеров варианты изобретения могут быть осуществлены программным обеспечением, называемым также лицензионным внутренним кодом, содержимым ПЗУ, микрокодом, милликодом, пикокодом и т.п., причем каждый из терминов может относиться к одному или более вариантам осуществления. На фиг. 18 процессор 5001 хост-компьютерной системы 5000 может обращаться к коду программного обеспечения, содержащему один или более аспектов настоящего изобретения и хранящемуся в долговременных запоминающих устройствах 5011, таких как привод CD-ROM, привод ленточного накопителя, накопитель на жестких дисках. Программный код может располагаться на любой из множества известных машиночитаемых сред, используемых в системе обработки данных, таких как гибкий диск, накопитель на жестких дисках или CD-ROM. Код может распространяться на подобной машиночитаемой среде или поставляться пользователям из запоминающего устройства 5002 компьютера или из запоминающего устройства одного компьютера через сеть 5010 другим компьютерным системам для их пользователей.
Код программного обеспечения содержит операционную систему, которая управляет функционированием и взаимодействием различных компонентов компьютера и одной или более прикладных программ. Программный код обычно передается из долговременного запоминающего устройства 5011 в относительно более быстродействующее запоминающее устройство 5002 компьютера, из которого код доступен процессору 5001 для обработки. Приемы и способы размещения кода программного обеспечения в пространстве памяти запоминающего устройства, на физической машиночитаемой среде и/или передача кода программного обеспечения через сети передачи данных достаточно хорошо известны и в настоящей заявке далее обсуждаться не будут. Программный код, созданный и размещенный на материальном носителе, в том числе (но не ограничиваясь) на электронных модулях памяти (ОЗУ), запоминающих устройствах флеш-памяти, CD-ROM, DVD-ROM, магнитной ленте и т.п.часто называют компьютерным программным продуктом. Информация со среды-носителя компьютерного программного продукта обычно считывается схемой обработки предпочтительно в компьютерной системе с целью выполнения программного кода схемой обработки.
На фиг. 19 показана схема примера рабочей станции или аппаратной части сервера, в которых могут быть осуществлены один или более вариантов изобретения. На фиг. 19 система 5020 содержит типичную основную компьютерную систему 5021, например, персональный компьютер, рабочую станцию или сервер, в состав которой, в свою очередь, могут входить периферийные устройства. Основная компьютерная система 5021 содержит один или более процессоров 5026 и шину передачи данных, используемую для подключения и осуществления соединения между процессором или процессорами 5026 и другими компонентами системы 5021 по хорошо известной методике. Шина соединяет процессор 5026 с запоминающим устройством 5025 и запоминающим устройством 5027 длительного хранения, которое может содержать, например, дисковый накопитель (в свою очередь содержащий, например, любые магнитные среды хранения данных, CD-ROM, DVD-ROM или устройства флеш-памяти) или ленточный накопитель. Система 5021 может также содержать адаптер интерфейса пользователя, который соединяет микропроцессор 5026 через шину с одним или более интерфейсными устройствами, такими как клавиатура 5024, мышь 5023, принтер или сканер 5030 и/или с устройствами интерфейса пользователя других типов, такими как сенсорный экран, устройство цифрового координатного ввода планшетного типа и т.п. Шина также обеспечивает подключение устройства 5022 отображения, такого как жидкокристаллический экран или монитор, к микропроцессору 5026 через адаптер дисплея.
Система 5021 может обмениваться данными с другими компьютерами или сетями компьютеров с помощью сетевого адаптера, способного осуществлять соединение 5028 с сетью 5029 передачи данных. Примерами сетевых адаптеров являются адаптеры сетей типа Token ring (от англ.: маркерное кольцо) и Ethernet, а также модемы. Система 5021 может обмениваться данными с использованием беспроводного интерфейса, такого как адаптер CDPD (от английского Cellular Digital Packet Data - цифровая пакетная передача данных по сети сотовой связи). Система 5021 может быть соединена с другими компьютерами в ЛВС или глобальную вычислительную сеть, либо система 5021 может выступать в качестве клиента в системе клиент-сервер вместе с другим компьютером и т.д. Все подобные конфигурации наряду с соответствующим коммуникационным аппаратным и программным обеспечением известны достаточно хорошо.
На фиг. 20 показана схема сети 5040 обработки данных, с помощью которой могут быть осуществлены один ли более вариантов изобретения. Сеть 5040 обработки данных может содержать набор индивидуальных сетей, таких как беспроводные и проводные сети, в состав каждой из которых может входить множество индивидуальных рабочих станций 5041, 5042, 5043, 5044. Кроме того, специалисты в данной области техники должны понимать, что может быть задействована одна или более ЛВС, причем ЛВС могут содержать набор рабочих станций, соединенных с хост-процессором.
На фиг. 20 сети могут также содержать компьютеры-мэйнфреймы или серверы, такие как компьютер-шлюз (клиентский сервер 5046) или сервер приложений (удаленный сервер 5048, который может обращаться к хранилищу данных и к которому может также осуществляться доступ непосредственно с рабочей станции 5045). Компьютер-шлюз 5046 служит точной доступа в каждую индивидуальную сеть. Шлюз требуется при переходе от одного сетевого протокола на другой. Компьютер-шлюз 5046 предпочтительно может быть подключен к другой сети, например, к сети 5047 Интернет с помощью канала передачи данных. Компьютер-шлюз 5046 также может быть непосредственно соединен с одной или более рабочих станций 5041, 5042, 5043, 5044 с использованием канала передачи данных. Компьютер-шлюз может быть реализован на основе сервера IBM eServer System z, предлагаемого корпорацией International Business Machines Corporation.
На фиг. 19 и 20 процессор 5026 системы 5020 может обращаться к коду программного обеспечения, в котором могут быть осуществлены один или более аспектов и который располагается на запоминающем устройстве 5027 долговременного хранения, таком как привод CD-ROM или накопитель на жестких дисках. Код программного обеспечения для его использования системой обработки данных может располагаться на любой из множества известных машиночитаемых сред, или носителей информации, таких как гибкий диск, накопитель на магнитных дисках или CD-ROM. Код может предоставляться на такой машиночитаемой среде или может предоставляться пользователям 5050, 5051 компьютерным системам по сети передачи данных из запоминающих устройств другой компьютерной системы.
В другом варианте код программного обеспечения может располагаться в запоминающем устройстве 5025, и процессор 5026 может обращаться к этому коду по шине процессора. Такой код программного обеспечения содержит операционную систему, которая управляет функционированием и взаимодействием различных компонентов компьютера и одной или более прикладных программ 5032. Программный код обычно передается из запоминающего устройства 5027 в относительно более быстродействующее запоминающее устройство 5025 компьютера, из которого код доступен процессору 5026 для обработки. Приемы и способы размещения кода программного обеспечения в пространстве памяти запоминающего устройства, на физической машиночитаемой среде и/или передача кода программного обеспечения через сети передачи данных достаточно хорошо известны и в настоящей заявке далее обсуждаться не будут. Программный код, созданный и размещенный на материальном носителе, в том числе (но не ограничиваясь) на электронных модулях памяти (ОЗУ), запоминающих устройствах флеш-памяти, CD-ROM, DVD-ROM, магнитной ленте и т.п.часто называют компьютерным программным продуктом. Информация со среды-носителя компьютерного программного продукта обычно считывается схемой обработки, предпочтительно, в компьютерной системе с целью выполнения схемой обработки.
Процессору наиболее доступна кэш-память низшего уровня (первого уровня; обозначение первого уровня - L1), которая обычно обладает наибольшим быстродействием и меньшим объемом по сравнению с процессорной кэш-памятью других уровней. Уровень основного запоминающего устройства считается наивысшим (уровень 3, обозначение L3, если всего предусмотрено три уровня). Кэш-память низшего уровня часто разделяется на кэш-память команд I-кэш (от английского Instructions cache - кэш-память команд) для хранения используемых команд и кэш-память данных D-кэш (от английского Data cache - кэш-память данных), используемую для хранения операндов.
На фиг. 21 показан пример осуществления процессора 5026. Как правило, для буферизации блоков информации запоминающего устройства используется одноуровневая или многоуровневая кэш-память 5053, что позволяет увеличить производительность процессора. Кэш-память 5053 представляет собой быстродействующий буфер, хранящий строки данных основного запоминающего устройства, которые, вероятно, должны использоваться в будущем. Как правило, длина строк данных в кэш-памяти составляет 64, 128 или 256 байтов. Часто применяются отдельные функциональные узлы кэш-памяти для буферизации команд и данных. Для поддержания когерентности содержимого кэш-памяти, т.е. для синхронизации копий строк данных в основном запоминающем устройстве и в кэш-памяти часто применяются различные хорошо известные снуп-алгоритмы (от английского Snoop algorithm, специальный алгоритм поиска необходимых данных в кэш-памяти). Основное запоминающее устройство 5025 вычислительной системы часто также рассматривается как кэш-память. В вычислительной системе с четырьмя уровнями кэш-памяти 5053 основное запоминающее устройство 5025 иногда рассматривается как кэш-память пятого уровня (L5), поскольку оно обычно обладает большим быстродействием по сравнению с быстродействием большинства доступных вычислительной системе энергонезависимых запоминающих устройств - запоминающих устройств с прямым доступом, ленточных запоминающих устройств с последовательным доступом и т.п. и хранит только часть данных указанных устройств. Основное запоминающее устройство 5025 "кэширует" (буферизирует) страницы данных, которые загружаются и выгружаются из него операционной системой.
Программный счетчик (счетчик команд) 5061 содержит адрес следующей команды, которая должна исполняться. Программный счетчик в процессоре, построенном по архитектуре z/Architecture, является 64-разрядным, его длина может быть сокращена до 31 или до 24 разрядов для поддержки предыдущих схем адресации. Как правило, программный счетчик входит в состав ССП компьютера, поскольку его содержимое требуется сохранять при переключении задач. Так, выполнение программы при определенном значении программного счетчика может быть прервано, например, операционной системой (задание переключается от окружения программы к окружению операционной системы). В то время, пока программа неактивна, значение счетчика программ сохраняется в ССП программы, и при выполнении задачи операционной системы используется счетчик программ ССП операционной системы. Как правило, программный счетчик увеличивается на величину, равную длине в байтах исполняемой в данный момент команды. Команды типа RISC (от англ. Reduced Instruction Set Computing - вычисления с сокращенным набором команд), как правило, имеют фиксированную длину, в то время как команды типа CISC (от англ. Complex Instruction Set Computing - вычисления со сложным набором команд), как правило, имеют переменную длину. Команды в архитектуре IBM z/Architecture относятся к типу CISC, их длина составляет два, четыре или шесть байтов. Значение в программном счетчике 5061 изменяется либо операцией переключения задач, либо при выполнении операции ветвления, например, по команде ветвления. При операции переключения задачи текущее значение программного счетчика сохраняется в ССП вместе с другой информацией о состоянии выполнявшейся программы (такой как коды состояния), после чего загружается новое значение программного счетчика, указывающее на команду нового программного модуля, подлежащего исполнению. Операция ветвления, используемая в программе при принятии решений или выполнении циклов, исполняется путем загрузки в программный счетчик 5061 результата команды ветвления.
Как правило, для выборки команд по указанию процессора 5026 применяется устройство 5055 выборки команд. Устройство выборки команд выбирает команду в порядке следования либо команду, на которую указывает команда ветвления, либо по указанию о переключении задачи - очередную команду программы. В современных устройствах выборки команд часто применяются упреждающие методы для спекулятивной выборки команд, основанные на гипотезе о том, что заблаговременно выбранные команды могут потребоваться в будущем. Например, устройство выборки может загрузить 16 байтов команд, в число которых входят следующая по очереди команда и, кроме того, байты команд, следующих за ней.
Затем выбранные команды выполняются процессором 5026. Согласно варианту осуществления, выбранная команда (команды) передаются на устройство 5056 диспетчеризации. Устройство диспетчеризации декодирует команду (команды) и передает информацию о декодированной команде (командах) далее на устройства 5057, 5058, 5060. Исполнительный блок 5057, как правило, принимает информацию о декодированных арифметических операциях от устройства 5055 выборки команд и выполняет арифметические операции над операндами согласно коду операции команды. Операнды передаются в исполнительное устройство 5057 предпочтительно либо из запоминающего устройства 5025, либо из регистров 5059, либо извлекаются из внутреннего поля выполняемой команды. Результат выполнения команды сохраняется либо в запоминающем устройстве 5025, либо в регистрах 5059, либо в ином аппаратном обеспечении вычислительной системы (в управляющих регистрах, регистрах ССП и т.п.).
Виртуальные адреса преобразуются в реальные адреса с использованием средства 5062 динамической трансляции адреса и, опционально, с использованием средства 5063 трансляции регистра доступа.
Как правило, процессор 5026 снабжен одним или более устройствами 5057, 5058, 5060, используемыми для выполнения указанной командой операции. На схеме, показанной на фиг. 22А, исполнительное устройство 5057 может обмениваться информацией с регистрами общего назначения 5059, устройством 5056 декодирования и диспетчеризации, устройством 5060 загрузки-хранения и другими устройствами 5065 процессора с помощью интерфейсной логики 5071. В исполнительном устройстве 5057 могут применяться различные схемы регистров 5067, 5068, 5069 для временного хранения информации, используемой для обработки арифметико-логическим устройством (АЛУ) 5066. АЛУ выполняет арифметические операции, такие как сложение, вычитание, умножение и деление, а также логические операции, такие как конъюнкция, сложение по модулю 2, сдвиг и циклический сдвиг. АЛУ предпочтительно поддерживает специализированные операции, зависящие от особенностей архитектуры. Прочие схемы 5072 могут обеспечивать другие функции, в том числе, например, коды условий и логику поддержки восстановления. Как правило, результат операции, выполненной АЛУ, сохраняется в схеме 5070 регистра вывода, которая может передавать указанный результат набору других функций обработки. Существует множество схем построения процессорных устройств, и настоящее описание предназначено исключительно для пояснения одного из вариантов осуществления.
Например, команда арифметического сложения (команда ADD) может выполняться в исполнительном устройстве 5057, позволяющем выполнять арифметические и логические операции, в то время как, например, команды с плавающей запятой могут выполняться в исполнительном устройстве команд с плавающей запятой, обладающем соответствующими возможностями. Исполнительное устройство предпочтительно работает с операндами, идентифицируемыми по команде, т.е. по выполняемой функции над операндами, определяемой кодом операции. Например, команда ADD может выполняться исполняющим устройством 5057 над операндами, располагающимися в двух регистрах 5059, идентифицируемых по входящим в состав команды полям регистров.
Исполнительное устройство 5057 выполняет арифметическое сложение двух операндов и сохраняет результат операции в третьем операнде, причем указанный третий операнд может располагаться в третьем регистре или в одном из регистров, в которых располагались исходные операнды. Исполнительное устройство предпочтительно использует АЛУ 5066, которое способно выполнять различные логические функции, такие как сдвиг, циклический сдвиг, конъюнкцию, дизъюнкцию, сложение по модулю 2, а также различные арифметические операции, в том числе сложение, вычитание, умножение, деление. Некоторые разновидности АЛУ 5066 проектируются для скалярных операций, а некоторые - для операций с плавающей запятой. В зависимости от архитектуры данные могут представляться в обратном порядке следования битов (т.е. наименее значимому биту соответствует наибольший адрес) или в прямом порядке следования битов (т.е. наименее значимому биту соответствует наименьший адрес). В архитектуре IBM z/Architecture для представления данных используется обратный порядок следования битов. Числа со знаком зависимости от архитектуры могут храниться в виде знака и значения числа, в виде дополнения числа до единицы или дополнения до двух. Представление чисел в виде дополнения до двух обладает преимуществом, поскольку в этом случае в АЛУ не требуется предусматривать отдельную функцию вычитания: для положительных и отрицательных чисел, представленных в форме дополнения до двух, требуется только операция сложения. Числа обычно описываются в сокращенной форме, как блоки длиной, например, 4 килобайта: 12-разрядное поле определяет адрес блока длиной 4096 байтов.
Как показано на фиг. 22Б, информация о команде ветвления при выполнении такой команды обычно передается в устройство 5058 ветвления, которое часто использует алгоритм предсказания ветвления, такой как таблица 5082 истории ветвления, для предсказания результата ветвления еще до того, как будут завершены другие условные операции. В этом случае ветвь алгоритма -возможный исход текущей команды ветвления будет загружена и спекулятивно выполнена до того, как будет завершено выполнение условных операций. Когда выполнение условных операций завершится, то спекулятивно выполненные команды ветви алгоритма либо будут использованы, либо будут отброшены в зависимости от условий операции принятия решения и результатов спекулятивно выполненных операций. Типичная команда ветвления может проверять коды условий, и если коды условий удовлетворяют требованию ветви команды ветвления, то переходить по адресу соответствующей ветви. Адрес перехода может быть рассчитан на основе различных чисел, в том числе, например, содержащихся в полях регистров или во внутренних полях команды. Устройство 5058 ветвления может использовать АЛУ 5074, содержащее набор схем 5075, 5076, 5077 входных регистров и схему 5080 выходного регистра. Устройство 5058 ветвления может обмениваться информацией через блок 5081 с регистрами 5059 общего назначения, устройством 5056 декодирования и диспетчеризации или, например, другими схемами 5073.
Выполнение группы команд может быть прервано по ряду причин, в том числе, например: по команде смены задачи от операционной системы; при возбуждении программного исключения или ошибки, вызывающих переключение задач; сигнала прерывания ввода-вывода, приводящего к переключению задач; многопоточной активности многих программ (в многопоточных вычислительных системах). Операция переключения задач предпочтительно сохраняет информацию о состоянии программы, выполнявшейся до настоящего момента времени, после чего загружает информацию о состоянии другой запускаемой программы. Информация о состоянии может храниться, например, в регистрах аппаратного обеспечения либо в запоминающем устройстве. Информация о состоянии предпочтительно содержит: значение программного счетчика, указывающее на следующую подлежащую выполнению команду; коды условий; информацию о трансляции пространства памяти; содержимое собственных регистров вычислительной системы. Переключение задач может выполняться аппаратными схемами, прикладными программами, программами операционной системы или кодом в ПЗУ (микрокодом, пикокодом или лицензированным внутренним кодом) по отдельности или совместно.
Процессор обращается к операндам в соответствии с методами, определенными командой. Команда может предоставить в качестве операнда значение, содержащееся в части команды, может предоставить одно или более полей регистров, явно указывающих либо на регистры общего назначения или на специальные регистры (например, на регистры с плавающей запятой). Команда может косвенно указывать на регистры, идентифицируемые в соответствии с кодом операции как операнды. Команда может использовать в качестве операндов ячейки памяти. На местоположение операнда в пространстве памяти может указывать содержимое регистра, поля из состава команды или комбинация данных в регистрах и в поле команды, как, например, это реализовано в функционале длинного размещения в архитектуре z/Architecture, в котором команда определяет, например, базовый регистр, регистр индекса и поле внутри команды (поле смещения), объединенное содержимое которых даст адрес операнда в запоминающем устройстве. Здесь подразумевается местоположение в главном запоминающем устройстве, если явно не оговорено иное.
На фиг. 22В процессор обращается к запоминающему устройству, используя устройство 5060 загрузки-хранения. Устройство 5060 загрузки-хранения может выполнять операцию ввода путем получения адреса требуемого операнда в запоминающем устройстве 5053 и загрузки операнда в регистр 5059 или другую ячейку запоминающего устройства 5053 либо может выполнять операцию сохранения путем получения адреса требуемого операнда в запоминающем устройстве 5053 и записи данных, полученных из регистра 5059 или другой ячейки запоминающего устройства 5053, в соответствующую ячейку запоминающего устройства 5053. Устройство 5060 загрузки-хранения может действовать спекулятивно и может обращаться к запоминающему устройству в последовательности, не соответствующей той, которая определяется порядком следования команд. Однако устройство 5060 загрузки-хранения должно предоставлять данные таким образом, чтобы команды выполнялись в установленном программой порядке. Устройство 5060 загрузки-хранения может обмениваться данными через блок 5084 с регистрами 5059 общего назначения, устройством декодирования и диспетчеризации 5056, интерфейсом 5053 кэш-память - запоминающее устройство или другими функциональными узлами 5083 и содержать в своем составе различные схемы 5086, 5087, 5088 и 5089 регистров, АЛУ 5085 и управляющую логику 5090 для вычисления адресов хранения и формирования конвейерной последовательности данных для обеспечения правильной очередности выполнения команд. В данной области техники хорошо известно, что некоторые операции могут выполняться в порядке, отличном от установленного, однако при этом устройство выборки и хранения должно действовать таким образом, чтобы выполненные в ином порядке операции представлялись программе будто бы выполненными в правильном порядке.
Адреса, которыми оперирует прикладная программа, являются предпочтительно виртуальными. Для обозначения виртуальных адресов иногда используются термины "логические адреса" и "эффективные адреса". Указанные виртуальные адреса виртуальны в том смысле, что они преобразуются в адресное пространство физической памяти с использованием одной из множества технологий динамической трансляции адреса, в том числе (но не ограничиваясь) простым добавлением значения смещения как префикса к виртуальному адресу, преобразованием виртуальных адресов в соответствии с одной или более таблиц трансляции, причем таблицы трансляции предпочтительно состоят по меньшей мере из отдельной таблицы сегментов и отдельной таблицы страниц или из комбинации этих таблиц, предпочтительно такой, что таблица сегментов содержит запись, указывающую на таблицу страниц. В архитектуре z/Architecture предусмотрена иерархия трансляции, в том числе, таблица первого региона, таблица второго региона, таблица третьего региона, таблица сегментов и, опционально, таблица страниц. Производительность трансляции адресов часто повышается при использовании буфера быстрой трансляции адреса, который содержит записи, отображающие виртуальные адреса на адреса ячеек физической памяти. Записи создаются, когда процедура динамической трансляции адреса транслирует виртуальный адрес с использованием таблиц трансляции. При последующем обращении по виртуальному адресу вместо последовательных обращений к медленной таблице преобразования адреса может использоваться запись в буфере быстрого преобразования адреса. Содержимое буфера быстрой трансляции адреса может поддерживаться различными алгоритмами замены, в том числе, алгоритмом удаления дольше всех неиспользовавшихся элементов.
В многопроцессорной системе каждый процессор отвечает за взаимное блокирование совместно используемых ресурсов, таких как устройства ввода-вывода, кэш-память, буфер быстрой трансляции адреса, запоминающее устройство, что необходимо для обеспечения когерентности информации. Как правило, для поддержания когерентности содержимого кэш-памяти используются снуп-технологии. В снуп-технологиях для упрощения использования каждая строка кэш-памяти может быть помечена как находящаяся в одном из состояний совместного использования, в состоянии эксклюзивного использования, в измененном состоянии, в недостоверном состоянии и т.п.
Устройства 5054 ввода-вывода (см. фиг. 21) дают процессору возможность обмениваться данными с периферийными устройствами, например, с такими как ленточный накопитель, дисковый накопитель, принтеры, дисплеи, сетевое окружение. Устройства ввода-вывода часто представляются компьютерной программе программами-драйверами. В компьютерах-мейнфреймах, таких как System z корпорации IBM, адаптеры каналов и адаптеры открытой системы являются устройствами ввода-вывода, которые обеспечивают связь операционной системы с периферийными устройствами.
Кроме того, преимущества от одного или более аспектов могут получать вычислительные среды других типов. Например, вычислительная среда может содержать эмулятор (например, программное обеспечение или иной механизм эмуляции), с помощью которого имитируется определенная архитектура (в том числе, например, имитируется выполнение команд, базовые функции, такие как трансляция адреса, а также соответствующие регистры) или ее частная разновидность (например, компьютерная система, оснащенная процессором и запоминающим устройством). В такой вычислительной среде в одной или более функций эмулятора могут использоваться один или более вариантов осуществления даже в случае, если компьютер, на котором осуществляется эмуляция, построен по иной архитектуре, отличной от той, функциональные возможности которой эмулируются. Например, в режиме эмуляции декодируется некоторая эмулируемая команда или операция, и формируется соответствующая функция эмуляции для реализации указанной команды или операции.
В эмулируемой среде хост-компьютер, например, содержит: запоминающее устройство для хранения команд и данных; устройство выборки команд для извлечения команд из запоминающего устройства и, опционально, для локальной буферизации извлеченной команды; устройство декодирования команд для приема извлеченных из запоминающего устройства команд и определения типа каждой такой команды; устройство исполнения команд, выполняющее команды. Выполнение может содержать загрузку данных из запоминающего устройства в регистр; сохранение данных в обратном направлении из регистра в запоминающее устройство; выполнение арифметической или логической операции, тип которой определяется устройством декодирования команд. В одном из примеров каждое из устройств реализуется программно, с помощью программного обеспечения. Например, операции, которые должны выполняться устройствами, выполняются в виде одной или более подпрограмм внутри программы-эмулятора.
В частности, команды, присущие архитектуре компьютеров-мейнфреймов, часто используются программистами (в настоящее время, как правило, пользующимися языком программирования "С") через приложения-компиляторы. Указанные команды, хранящиеся в машиночитаемой среде, могут выполняться в собственной вычислительной среде на сервере, построенном по архитектуре корпорации IBM z/Architecture, или же на вычислительных машинах, построенных по другим архитектурам. Эти команды могут эмулироваться на существующих и на будущих серверах-мейнфреймах корпорации IBM и на других вычислительных машинах IBM (например, на серверах типа Power Systems и System х). Указанные команды могут выполняться на вычислительных машинах, работающих под управлением операционной системы Linux и использующих аппаратное обеспечение производства предприятий IBM, Intel, AMD и др. Помимо указанного аппаратного обеспечения в рамках архитектуры z/Architecture и операционной системы Linux, могут применяться вычислительные машины с эмуляторами Hercules (программный эмулятор мейнфреймов IBM и совместимых), UMX или FSI (от англ.: Fundamental Software, Inc.), при этом выполнение обычно осуществляется в режиме эмуляции. В режиме эмуляции программа-эмулятор выполняется собственным (физическим) процессором вычислительной системы и имитирует архитектуру эмулируемого процессора.
Как правило, собственный процессор хост-вычислительной системы выполняет программное обеспечение-эмулятор, в состав которого входят программы из ПЗУ или собственная операционная система, необходимые для имитации эмулируемого процессора. Для эмулируемой архитектуры программное обеспечение-эмулятор отвечает за выборку и выполнение команд. Программное обеспечение-эмулятор имитирует программный счетчик для отслеживания границ команд. Программное обеспечение-эмулятор может в один момент времени выбирать одну или более команд в формате эмулируемой вычислительной машины и преобразовывать указанные одну или более команд в соответствующую группу команд в собственном формате хост-вычислительной машины для выполнения собственным процессором. Команды эмулируемой процессорной архитектуры могут кэшироваться (т.е. буферизироваться с помощью устройства кэш-памяти), благодаря чему преобразование может выполняться более быстро. Тем не менее, программное обеспечение-эмулятор должно поддерживать правила архитектуры эмулируемой процессорной архитектуры, чтобы обеспечить корректность выполнения операционной системы и приложений, используемых для эмулируемого процессора. Более того, программное обеспечение-эмулятор должно предоставлять вычислительные ресурсы, понятные для эмулируемой процессорной архитектуры, в том числе (но не ограничиваясь) управляющие регистры, регистры общего назначения, регистры с плавающей запятой, функцию динамической трансляции адреса, включая, например, таблицы сегментов и таблицы страниц, механизмы прерываний, механизмы переключения задач, часы времени суток, интерфейсы к подсистемам ввода-вывода, благодаря чему операционная система или прикладная программа, разработанные для выполнения на эмулируемом процессоре, смогут быть выполнены на собственном (физическом) процессоре, оснащенном программным обеспечением-эмулятором.
Конкретная эмулируемая команда декодируется, и для выполнения команды вызывается соответствующая подпрограмма. Для имитации эмулируемого процессора применяется функция программного обеспечения-эмулятора, например, в виде подпрограммы, написанной на языке "С", либо программа-драйвер, либо используется иной способ осуществления драйвера конкретного аппаратного обеспечения, о чем специалистам в данной области станет ясно после изучения описания предпочтительного варианта осуществления. Различные способы программного и аппаратного осуществления эмуляции команд, формат которых используется в вычислительных системах, отличных от хост-вычислительной системы, раскрыты специалистам в данной области в многочисленных патентах, в том числе (но не ограничиваясь): в патенте US 5551013 "Multiprocessor for Hardware Emulation" (Микропроцессор для эмуляции аппаратного обеспечения), авторы Beausoleil и др.; в патенте US 6009261 "Preprocessing of Stored Target Routines for Emulating Incompatible Instruction on a Target Processor" (Предобработка хранящихся целевых процедур для эмулируемых встроенных команд на целевом процессоре), авторы Scalzi и др.; в патенте US 5574873 "Decoding Guest Instruction 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.
На фиг. 23 показан пример схемы эмулируемой хост-компьютерной системы 5092, которая имитирует хост-компьютерную систему 5000', выполненную по хост-архитектуре. В эмулируемой хост-компьютерной системе 5092 хост-процессор (т.е. ЦПУ) 5091 является эмулируемым хост-процессором (или виртуальным хост-процессором) и содержит эмулирующий (реальный) процессор 5093, собственный набор команд которого отличается от набора команд процессора 5091 хост-компьютера 5000'. Эмулируемая хост-компьютерная система 5092 в своем составе содержит запоминающее устройство 5094, доступное для эмулирующего процессора 5093. Согласно примеру осуществления, запоминающее устройство 5094 разделяется: часть его служит запоминающим устройством 5096 хост-компьютера, другая часть 5097 используется процедурами эмуляции. Запоминающее устройство 5096 хост-компьютера доступно программам эмулируемого хост-компьютера 5092 согласно эмулируемой архитектуре хост-компьютера. Эмулирующий процессор 5093 выполняет собственные команды из характерного для него набора команд в рамках архитектуры, отличающейся от архитектуры эмулируемого процессора 5091. Указанные собственные команды поступают из запоминающего устройства 5097 процедур эмуляции. Эмулирующий процессор 5093 может обращаться к хост-команде из состава программы, расположенной в запоминающем устройстве 5096 хост-компьютера для ее выполнения путем использования одной или более команд, полученными процедурой определения порядка следования, доступа и декодирования, которая в свою очередь может декодировать полученную хост-команду (команды) для определения порядка выполнения собственных команд для эмуляции функции хост-команды, к которой произошло обращение. Могут эмулироваться прочие функциональные возможности, предусмотренные в архитектуре хост-компьютерной системы 5000', например, такие как регистры общего назначения, управляющие регистры, динамическая трансляция адреса, поддержка подсистемы ввода-вывода, кэш-память процессора. Эмулирующие процедуры для повышения производительности могут также пользоваться преимуществом функций, доступных в архитектуре эмулирующего процессора 5093, такими как регистры общего назначения и динамическая трансляция виртуального адреса. Могут также предоставляться специальное аппаратное обеспечение и снижающие нагрузку на процессор программные механизмы, помогающие процессору 5093 эмулировать действия хост-компьютера 5000'.
Терминология, употребляемая в настоящей заявке, используется исключительно для описания конкретных вариантов осуществления и не должна рассматриваться как ограничение. Используемые в настоящей заявке термины в единственном числе обозначают также и сущности во множественном числе, если иное явно не следует из контекста. Следует учитывать, что термины "содержит" и/или "содержащий" при их использовании в настоящем описании указывают на наличие заявленных особенностей, целых чисел, шагов, операций, элементов и/или компонентов, однако не исключают наличие или добавление одной или более других особенностей, целых чисел, шагов, операций, элементов, компонентов и/или их групп.
В следующей далее формуле изобретения соответствующие структуры, материалы, действия, заменители, эквиваленты всех средств или шагов и функциональных элементов, если таковые упоминаются, предназначены для включения в свой состав любой структуры, материала или действия по выполнению функции в комбинации с другими заявленными элементами, как это конкретно заявлено. Описание одного или более вариантов осуществления было дано в целях иллюстрации и раскрытия, описание не предназначено для ограничения исключительно изложенными вариантами осуществления. Специалистам в данной области будут очевидны многочисленные модификации и видоизменения. Выбор и описание вариантов осуществления обусловлен стремлением наилучшим образом объяснить различные аспекты и практическое приложение, а также дать возможность специалистам в данной области понять различные варианты осуществления с различными модификациями, пригодными для конкретного применения.