Средство разделенной загрузки/сохранения и команда для него

Изобретение относится к области функциональных возможностей команд процессора компьютерной системы. Техническим результатом является повышение эффективности выполнения неделимых операций. В заявке описана команда разделенной загрузки/сохранения, при выполнении которой ЦП осуществляется доступ к операндам из двух разделенных ячеек памяти, и устанавливаются индикаторы кода условия, указывающие, был ли осуществлен неделимый доступ к двум операндам посредством блочно-параллельного заблокированного выбираемого обращения к операндам без промежуточных операций обращения к запоминающему устройству из других ЦП. При использовании упомянутой команды в форме разделенной загрузки пары доступом является загрузка, а разделенные данные хранятся в общих регистрах. 3 н. и 13 з.п. ф-лы, 19 ил.

 

Область техники, к которой относится изобретение

Настоящее изобретение относится к компьютерным системам, более точно, к функциональным возможностям команд процессора компьютерной системы. Предпосылки создания изобретения

Товарные знаки: IBM® является зарегистрированным товарным знаком International Business Machines Corporation (Армонк, штат Нью-Йорк, США). S/390, Z900 и z990 и названия других продуктов могут являться зарегистрированными товарными знаками или названиями продуктов International Business Machines Corporation или других компаний.

Начиная с появившихся в 60-х годах машин, известных как IBM® System 360, и до настоящего времени усилиями множества высокоодаренных инженеров IBM была создана особая архитектура, которая получила известность как "мэйнфрейм" в силу своей неотъемлемой принадлежности к вычислительной системе и принципы работы которой определяют архитектуру машины путем описания команд, которые могут выполняться путем реализации в "мэйнфрейме" созданных изобретателями IBM команд, которые с учетом их существенной роли в течение многих лет включены в руководство IBM Principles of Operation. Восьмое издание руководства IBM® z/Architecture® Principles of Operation, опубликованное в феврале 2009 г., стало стандартным справочным материалом SA22-7832-07 и включено в описание серверов на основе мэйнфреймов IBM ZlO™.

Как указано в патенте US 5742785 под названием "Posting multiple reservations with a conditional store atomic operations in a multiprocessing environment", правопреемником которого является IBM, и заявка на который подана 20 ноября 1995 г., "Несколько переменных, которые совместно используются в режиме мультипроцессорной обработки, могут обновляться как одна неделимая операция. Каждый компьютерный процессор, работающий в режиме мультипроцессорной обработки, содержит несколько регистров резервирования, которые наряду с новым способом используются для резервирования каждой из нескольких совместно используемых переменных. Во время выполнения программы может резервироваться множество совместно используемых переменных, каждая ее соответствующим регистром резервирования. Резервирование совместно используемой переменной осуществляется посредством особой команды. Регистр резервирования отслеживает: адрес совместно используемой переменной, которую он резервирует, значение измененных результатов, которые должны обновляться в совестно используемом переменном адресе, была ли обновлена переменная, разрешено ли резервирование, и обладает ли процессор, содержащий регистр резервирования, полномочием обновлять совместно используемую переменную. Резервирование может быть аннулировано, если второй процессор попытается считать адрес зарезервированной совместно используемой переменной. При обнаружении команды, которая пытается обновить совместно используемую переменную, набор указанных этой командой зарезервированных измененных совместно используемых переменных, которые содержат обновленные измененные результаты, обновляются как одна неделимая операция, тогда и только тогда, когда в указанном наборе разрешены все резервирования. Если какое-либо из резервирований в наборе аннулировано, ни одна из совместно используемых переменных из набора не обновляется. Код условия указывает, было ли обновление успешным, или оно не произошло. Код условия может проверяться, и последовательность команд может повторяться до ее успешного выполнения".

На фиг.1А представлены характерные элементы известной из техники компьютерной хост-системы 50. В компьютерной системе также могут применяться другие варианты размещения элементов, которые хорошо известны из техники. Характерный хост-компьютер 50 содержит один или несколько ЦП 1, связанных с основным запоминающим устройством (памятью 2 компьютера), а также интерфейсы ввода-вывода для сопряжения с запоминающими устройствами 11 и подключения к сетям 10 для связи с другими компьютерами или SAN и т.п. ЦП 1 совместим с архитектурой, содержащей структурированную систему команд и структурированные функциональные возможности. ЦП 1 может осуществлять динамическое преобразование 3 адреса (DAT) с целью преобразования адресов программ (виртуальных адресов) в действительный адрес памяти. DAT обычно содержит буфер 7 быстрого преобразования адреса (TLB) для кэширования преобразований, чтобы при последующих доступах к блоку памяти 2 компьютера не требовалась задержка преобразования адреса. Обычно между памятью 2 компьютера и процессором 1 используется кэшпамять 9. Кэш-память 9 может являться иерархической и состоящей из кэша большой емкости, доступного для нескольких ЦП, и более быстродействующих кэшей (низкого уровня) меньшей емкости между кэшем большой емкости и каждым ЦП. В некоторых случаях реализации кэши низкого уровня разделены на отдельные кэши низкого уровня для выборки команд и доступа к данным. В одном из вариантов осуществления блок 4 выборки команд вызывает из памяти 2 команду посредством кэш-памяти 9. Команда декодируется в блоке 6 декодирования команд и отправляется (с другими командами в некоторых вариантах осуществления) в блоки 8 выполнения команд. Используется несколько блоков 8 выполнения команд, например, блок выполнения арифметических команд, блок выполнения команд с плавающей точкой и блок выполнения команд перехода. Команда выполняется блоком, который в зависимости от необходимости осуществляет доступ к операндам из определяемых командами регистров или памяти. Если доступ (загрузка или сохранение) к операнду должен осуществляться из памяти 2, блок 5 загрузки/сохранения обычно обрабатывает процедуру доступа под управлением выполняемой команды. Команды могут выполняться в аппаратных схемах или во внутреннем микрокоде (аппаратно-программном обеспечении) или с использованием сочетания того и другого.

На фиг.1Б проиллюстрирован один из примеров известной из техники компьютерной хост-системы 21 эмуляции, которая эмулирует компьютерную хост-систему 50, имеющую хост-архитектуру. Хост-процессором (ЦП) 1 в компьютерной хост-системе 21 эмуляции является хост-процессор (или виртуальный хост-процессор) эмуляции, представляющий собой процессор 27 эмуляции со структурой собственных команд, отличающейся от структуры команд процессора 1 хост-компьютера 50. Компьютерная хост-система 21 эмуляции имеет память 22, доступную для процессора 27 эмуляции. В примере осуществления память 22 разделена на память 2 хост-компьютера и память 23 программ эмуляции. Память 2 хост-компьютера доступна для программ хост-компьютера 21 эмуляции в зависимости от архитектуры хост-компьютера. Процессор 27 эмуляции выполняет собственные команды структурированной системы команд, структура которых отличается от структуры команд эмулируемого процессора 1 и которые извлекаются из памяти 23 программ эмуляции, и может осуществлять выборку хост-команды для выполнения из программы в памяти 2 хост-компьютера путем применения одной или нескольких команд из программы контроля последовательности и выборки/декодирования (Sequence & Access/Decode), которая может декодировать выбранную хост-команду(-ы) и определять программу выполнения собственных команд эмуляции функции выбранной хост-команды. Другие средства, которые предусмотрены в архитектуре компьютерной хост-системы 50, могут эмулироваться программами структурированных средств (Architected Facilities Routines), включая такие средства, как, например, регистры общего назначения, управляющие регистры, поддержка подсистемы динамического преобразования адреса и ввода-вывода и кэш-память процессора. Программы эмуляции также могут использовать функции, доступные в процессоре 27 эмуляции (такие как общие регистры и динамическое преобразование виртуальных адресов) для повышения производительности программ эмуляции. Также может быть предусмотрено особое программное обеспечение и механизмы разгрузки, облегчающие процессору 27 эмуляцию функции хост-компьютера 50.

В мэйнфрейме структурированные машинные команды используются программаторами, обычно современными программаторами на языке "С" посредством компилирующего приложения. Эти команды, хранящиеся в запоминающей среде, могут выполняться в собственной системе команд сервера IBM® на основе z/Architecture® или в качестве альтернативы в машинах на основе других архитектур. Они могут эмулироваться в существующих и будущих серверов на основе мэйнфреймов IBM и в других машинах IBM (например, серверах pSeries® и xSeries®). Они могут выполняться в операционной системе Linux разнообразными машинами, использующими аппаратное обеспечение производства IBM, Intel, AMD, Sun Microsystems и других компаний. Помимо выполнения этим аппаратным обеспечением на основе системы Z/Architecture®, может использоваться Linux, а также машины, использующие эмуляцию, как описано на сайтах http://www.turbohercules.com, http://www.hercules-390.org и http://www.funsoft.com. В режиме эмуляции эмулирующее программное обеспечение выполняется собственным процессором, эмулирующим архитектуру эмулируемого процессора.

Собственный процессор 27 обычно выполняет эмулирующее программное обеспечение 23, представляющее собой аппаратно-программное обеспечение или собственную операционную систему для эмуляции эмулируемого процессора. Эмулирующее программное обеспечение 23 отвечает за выборку и выполнение команд архитектуры эмулируемого процессора. Эмулирующее программное обеспечение 23 поддерживает счетчик эмулируемых команд для слежения за границами команд. Эмулирующее программное обеспечение 23 может осуществлять выборку одной или нескольких эмулируемых машинных команд за один раз и преобразование одной или нескольких эмулируемых машинных команд в соответствующую группу собственных машинных команд для выполнения собственным процессором 27. Эти преобразованные команды могут помещаться в кэш, что позволяет ускорять преобразование. Тем не менее, эмулирующее программное обеспечение должно поддерживать правила архитектуры эмулируемого процессора с тем, чтобы обеспечивать правильную работу операционных систем и приложений, написанных для эмулируемого процессора. Кроме того, эмулирующее программное обеспечение должно обеспечивать ресурсы, указанные архитектурой эмулируемого процессора 1, включая без ограничения управляющие регистры, регистры общего назначения, регистры с плавающей точкой, функцию динамического преобразования адреса, включая таблицы сегментов и таблицы страниц, например, механизмы прерывания, механизмы переключения контекста, часы истинного времени (TOD) и структурированные интерфейсы с подсистемами ввода-вывода с тем, чтобы операционная система или прикладная программа, рассчитанная на работу в эмулируемом процессоре, могла быть запущена в собственном процессоре, имеющем эмулирующее программное обеспечение.

Конкретная эмулируемая команда декодируется, и вызывается подпрограмма для выполнения функции отдельной команды. Функция 23 эмулирующего программного обеспечения, эмулирующая функцию эмулируемого процессора 1, реализуется, в подпрограмме или драйвере на языке "С" или каким-либо другим способом обеспечения драйвера для конкретного аппаратного обеспечения, доступным для специалистов в данной области техники, ознакомившихся в описанием предпочтительного варианта осуществления. В различных патентах, в которых предложена эмуляция программного и аппаратного обеспечения, включая без ограничения патент US 5551013 под названием "Multiprocessor for hardware emulation", выданный на имя Beausoleil и др., патент US 6009261 под названием "Preprocessing of stored target routines for emulating incompatible instructions on a target processor", выданный на имя Scalzi и др.; патент US 5574873 под названием "Decoding guest 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; и многие другие, проиллюстрированы разнообразные известные способы эмуляции формата команд, структурированного для отличающейся машины, в целевой машине, доступные для специалистов в данной области техники, а также используемые ими промышленные средства программного обеспечения.

В патенте US 5870598 под названием "Method and apparatus for providing an optimized compare-and-branch instruction" от 29 августа 1997 г., правопреемником которого является Intel®, Corp., описана оптимизированная команда сравнения и перехода для выполнения в микропроцессоре с сокращенным набором команд. Реализованный в микропроцессоре задатчик последовательности команд реагирует на команду сравнения и перехода с целью ее эффективного выполнения. Задатчик последовательности команд обнаруживает команду сравнения и перехода и выполняет ее как обычную команду сравнения. В следующем цикле задатчик последовательности команд преобразует ее в команду перехода и обеспечивает преобразованную команду для выполнения одним из блоков выполнения команд. Выполняется команда перехода, выбирается или не выбирается переход, и продолжается нормальный процесс выполнения программы. Команда Intel имеет несколько недостатков, в том числе то, что в ходе выполнения задаются коды условия, что разрушает установки контекста, которые могут потребовать восстановления.

В патенте US 7296120 В2 под названием "Mechanism that Provides Efficient Multi-Word Load Atomicity", выданном 13 ноября 2007 г.на имя Corrigan и др., описаны устройство, способ и программный продукт для обеспечения поддержки неделимой загрузки нескольких слов без дополнительного использования памяти. Двойное слово загружается как одна неделимая операция без использования одного или нескольких дополнительных полей и без блокировки. В случае неудачного обращения к кэш-памяти используется маркер недостоверности, чтобы установить, было ли двойное слово сохранено и загружено как одна неделимая операция, и, соответственно, является ли оно достоверным.

Краткое изложение сущности изобретения

В изобретении предложена команда для доступа к памяти и установки индикатора, указывающего, выглядит ли осуществленный доступ неделимым, иными словами, был ли доступ к данным, вызванным из памяти или сохраненным в памяти, осуществлен без какой-либо промежуточной операции обращения к запоминающему устройству, которая могла изменить часть данных, к которым был получен доступ.

В вариантах осуществления изобретения эта команда используется для вызова хранимых в памяти разделенных операндов, предусматривающего выполнение первой подпрограммы, содержащей команды вызова хранимых в памяти разделенных операндов, при этом упомянутые команды включают команду разделенной загрузки пары (Load Pair Disjoint) для загрузки двух разделенных операндов из памяти и установки значения кода условия. Если значение кода условия указывает, что два разделенных операнда могли быть загружены в любой из двух разделенных операндов с использованием промежуточной операции обращения к запоминающему устройству, выполняется вторая подпрограмма, содержащая команды вызова из памяти хранимых разделенных операндов. Если значение кода условия указывает, что два разделенных операнды были загружены в любой из двух разделенных операндов без промежуточной операции обращения к запоминающему устройству, выполняется третья подпрограмма использования загруженных двух разделенных операндов.

В одном из вариантов осуществления вторая программа повторно выполняется, пока значение кода условия не будет указывать, что два разделенных операнда были загружены в любой из двух разделенных операндов без промежуточной операции обращения к запоминающему устройству.

В одном из вариантов осуществления устанавливается предельное значение для повторного выполнения. Если значение кода условия указывает, что два разделенных операнда могли быть загружены в любой из двух разделенных операндов с использованием промежуточной операции обращения к запоминающему устройству, вторая подпрограмма повторно выполняется, пока не произойдет одно из следующего: вторая подпрограмма будет повторно выполнена то число раз, которое установлено предельным значением, или значение кода условия будет указывать, что два разделенных операнда были загружены в любой из двух разделенных операндов без промежуточной операции обращения к запоминающему устройству.

В одном из вариантов осуществления команда разделенной загрузки пары приводит к загрузке двух разделенных операндов в соответствующие положения общего регистра.

В одном из вариантов осуществления в процессоре мультипроцессорной системы выполняется команда разделенной загрузки/сохранения (LSD - от англ. Load/Store Disjoint). Выполняемая команда разделенной загрузки/сохранения содержит код операции, а ее выполнение включает выполнение определяемой командой LSD операции, исходя из заданного кода операции, которая представляет собой доступ к одному или нескольким операндам в памяти. В зависимости от того, мог ли один из одного или нескольких операндов быть изменен во время доступа к одному или нескольким операндам в памяти в результате события обращения к запоминающему устройству из другого процессора мультипроцессорной системы, устанавливается первое значение индикатора, указывающее, мог ли один из одного или нескольких операндов быть изменен во время доступа к одному или нескольким операндам в памяти в результате события обращения к запоминающему устройству из другого процессора мультипроцессорной системы.

В одном из вариантов осуществления первое значение индикатора представляет собой любое из следующего: первое значение кода условия или второе значение кода условия. Если определено, что первый операнд в памяти или второй операнд в памяти из одного или нескольких операндов мог быть изменен во время упомянутого доступа в результате события обращения к запоминающему устройству, устанавливается первое значение кода условия, указывающее, что во время упомянутого доступа могло быть изменено любое из следующего: первый операнд в памяти или второй операнд в памяти. Если определено, что в результате события обращения к запоминающему устройству во время упомянутого доступа не был изменен ни первый операнд в памяти, ни второй операнд в памяти, устанавливается второе значение кода условия, указывающее, что во время упомянутого доступа не был изменен ни первый операнд в памяти, ни второй операнд в памяти.

В одном из вариантов осуществления командой LSD является команда разделенной загрузки пары (LPD - от англ. Load Pair Disjoint), при этом доступ к одному или нескольким операндам в памяти включает вызов из памяти первого операнда и второго операнда, и дополнительно включает сохранение первого операнда в первом регистре, указанном командой LPD, и сохранение второго операнда во втором регистре, указанном командой LPD.

В одном из вариантов осуществления, в котором команда разделенной загрузки пары содержит поле первого общего регистра, указывающее первый общий регистр, поле второго общего регистра, указывающее второй общий регистр, и поле третьего общего регистра, указывающее первый регистр и второй регистр, при этом из первого общего регистра, указанного в поле первого общего регистра, извлекается первый адрес, который используется для вызова первого операнда в памяти. Из второго общего регистра, указанного в поле второго общего регистра, извлекается второй адрес, который используется для вызова второго операнда в памяти. Операция разделенной загрузки пары включает сохранение первого операнда в первом регистре, который является старшей частью общего регистра, указанного в поле третьего общего регистра, и сохранение второго операнда во втором регистре, который является младшей частью общего регистра, указанного в поле третьего общего регистра.

В одном из вариантов осуществления, в котором команда разделенной загрузки пары дополнительно содержит первое поле смещения и второе поле смещения, первое поле смещения арифметически суммируется с полученным первым адресом с целью создания первого адреса памяти для вызова первого операнда в памяти. Второе поле смещения арифметически суммируется с полученным вторым адресом с целью создания второго адреса памяти для вызова второго операнда в памяти.

В одном из вариантов осуществления от множества процессоров мультипроцессорной системы принимаются события обращения к запоминающему устройству, и данные принятых операций обращения к запоминающему устройству сохраняются в памяти.

В одном из вариантов осуществления, в котором команда разделенной загрузки пары, заданная для вычислительной машины с определенной архитектурой, вызывается и выполняется центральным процессором вычислительной машины с альтернативной архитектурой, команда разделенной загрузки пары интерпретируется, чтобы идентифицировать заданную программу системы программного обеспечения для эмуляции функции команды разделенной загрузки пары, при этом выполнение команды разделенной загрузки пары включает выполнение заданной программы системы программного обеспечения для осуществления шагов способа выполнения машинной команды.

Перечисленные, а также дополнительные задачи, признаки и преимущества настоящего изобретения станут ясны из следующего далее описания.

Краткое описание чертежей

Далее лишь в качестве примера описаны варианты осуществления изобретения со ссылкой на сопровождающие его чертежи, на которых:

на фиг.1А схематически проиллюстрирован один из примеров известной из техники компьютерной хост-системы,

на фиг.1Б - один из примеров известной из техники эмулирующей компьютерной хост-системы,

на фиг.1В - один из примеров известной из техники компьютерной системы,

на фиг.2 - один из примеров известной из техники компьютерной сети, на фиг.3 - один из примеров элементов известной из техники

компьютерной системы,

на фиг.4А-4В - подробные элементы известной из техники компьютерной системы,

на фиг.5А-5Е - известный из техники формат машинной команды компьютерной системы,

на фиг.6 - один из примеров форматов команд согласно вариантам осуществления изобретения,

на фиг.7-9 - один из примеров осуществления и

на фиг.10 - примеры элементов мультипроцессорной системы, в которой применяется и осуществляется изобретение.

Осуществление изобретения

В современных мультипроцессорных компьютерных системах обеспечивается возможность для двух или более процессоров осуществлять доступ к ячейкам общей памяти и изменять их. Такие ячейки считаются совместно используемыми, при этом считается, что в каждой из них содержится совместно используемая переменная.

Другим контекстом, в котором совместно используемые переменные существуют в компьютерной системе, является отдельный процессор, в котором одновременно постоянно хранятся отдельные и различные программы (иногда называемые процессами). Каждый процесс осуществляет управление в течение определенного периода времени, называемого квантом, а в конце кванта управление приостанавливается, и доступ к процессору получает другой процесс. Процессы выполняются таким образом, что их соответствующие кванты чередуются во времени, при этом их выполнение разрешается на циклической основе или на основе приоритетов. Процессы способны осуществлять доступ к ячейкам общей памяти и изменять их, и, соответственно, эти процессы логически действуют в одном процессоре в ячейках совместно используемой памяти, как если бы они действовали в отдельных и различных процессорах.

В любом случае, поскольку два или более параллельных процесса способны обновлять совместно используемую переменную, существует возможность внесения несогласованного обновления. Предположим, что перед каждым из двух процессов стоит задача приращения значения в ячейке памяти. Каждый процесс пытается выполнить задачу путем считывания значения из ячейки в регистр машины, приращения значения регистра машины и затем записи в память нового значения регистра машины. Если процесс 1 выполняет операцию чтения/изменения/записи без вмешательства со стороны процесса 2, и, если затем процесс 2 выполняет такие же операции, совместно используемая переменная будет корректно изменена путем приращения дважды.

Несогласованность возникает, когда операции чтения/изменения/записи двух процессов чередуются во времени. Иными словами, если процесс 1 считывает значение переменной X, затем процесс 2 считывает такое же значение переменной X, и последующие приращения и записи происходят в произвольном порядке, каждый процесс сохранит значение X, равное его первоначальному значению, приращенному один раз. Соответственно, в окончательном значении X будет отображено только одно приращение. Одно приращение будет потеряно.

Причиной получения неверного окончательного значения является то, что два процесса оперируют несогласованными данными. Если процесс 1 считывает значение X с намерением изменить его, логическая резиденция X перемещается из совместно используемой памяти в частный регистр, связанный с процессом 1. Если затем процесс 2 считывает значение X, при этом значение X еще не было изменено процессом 1, значение, считанное процессом 2, не согласуется с фактическим значением X, поскольку значение X в данный момент недоступно в совместно используемой памяти, и не будет доступно снова до его перезаписи.

Для обеспечения правильности необходимо обеспечивать согласованность. Достаточным условием согласованного поведения является обеспечение того, что при выполнении последовательности операций чтения/изменения/записи совместно используемой переменной X, последовательность выполняется как одна неделимая операция. Под одной неделимой операцией подразумевается, что последовательность выполняется таким образом, чтобы какой-либо другой процесс не мог изменить значение X в интервале между моментом чтения значения X и моментом записи значения X.

Существует множество способов обеспечения правильности и согласованности последовательностей операций чтения/изменения/записи. Одним из способов является помещение таких последовательностей в область программы, называемую критической секцией. Критической секции предшествует одна или несколько команд, которые выполняют операцию блокирования, а за критической секцией следует одна или несколько команд, которые выполняют операцию разблокирования. Операции блокирования и разблокирования гарантируют, что в любой определенный момент код в критической секции способен выполнять самое большее один процесс. Если по соглашению или согласно протоколу все остальные процессы обновляют одни и те же совместно используемые переменные посредством критических секций, управляемых одним и тем же механизмом блокирования и разблокирования, обновление совместно используемых переменных может выполняться как одна неделимая операция в ходе операций чтения/изменения/записи в критической секции, поскольку ни один другой процесс не способен осуществлять промежуточный доступ к совместно используемым переменным в то время, как какой-либо процесс выполняет операции чтения/изменения/записи в критической секции.

Для создания критической секции необходима функция блокирования. Как известно из техники, обычным средством реализации такой функции является команда, которая сама выполняет неделимые операции чтения/изменения/записи с заблокированной переменной. В число команд, используемых с этой целью, входит команда проверки и установки (Test-and-Set) и команда приращения (Increment) (или отрицательного приращения) (Decrement).

Команда проверки и установки считывает значение переменной X, присваивает значению переменной X разряд 1 независимо от исходного состояния разряда, перезаписывает значение переменной X, и выдает код условия, значение которого равно исходному разряду до принудительного приравнивания его значения к 1. Поскольку эта команда выполняет операции чтения/изменения/записи совместно используемой переменной, она должна быть реализована в расчете на осуществление такого обновления в качестве одной неделимой операции, чтобы обеспечить согласованность выполнения. Эта одна команда может использоваться для установки блокировки, защищающей критическую секцию, в которой может согласованно выполняться последовательность операций чтения/изменения/записи произвольной сложности, поскольку блокировка предотвращает промежуточный доступ со стороны других процессов к совместно используемым переменным.

С целью использования команды проверки и установки для создания блокировки каждый процесс защищает критическую секцию с помощью команды проверки и установки, которая осуществляет доступ к заблокированной переменной. Заблокированная переменная сохраняет значение 1 непосредственно после выполнения команды проверки и установки независимо от ее прежнего значения. Каждый процесс проверяет код условия после выполнения команды проверки и установки, и только процесс, который обнаруживает значение кода, равное 0 (соответствующее исходному значению, равному 0), способен входить в критическую секцию и выполнять в ней последовательность операций чтения/изменения/записи. Все остальные процессы, пытающиеся выполнять код чтения/изменения/записи в своих соответствующих критических секциях, должны ожидать или выполнять какие-либо другие действия, пока заблокированное состояние критической секции не изменится на разблокированное (0) состояние. Когда какой-либо процесс завершает выполнение последовательности чтения/изменения/записи и выходит из критической секции, блокировка снимается путем сохранения 0 в блокировке, что позволяет другому процессу входить в критическую секцию путем выполнения заблокированной команды проверки и установки при исходном значении переменной, равном 0.

Команда проверки и установки реализована в системе IBM 370. Приращение и отрицательное приращение могут быть реализованы как неделимые операции чтения/изменения/записи и могут использоваться для выполнения преимущественно тех же функций, которые выполняет команда проверки и установки, почти в качестве прямой замены команды проверки и установки. Они являются более универсальными, поскольку способны осуществлять приращение и отрицательное приращение совместно используемых переменных как одну неделимую операцию, тогда как команда проверки и установки способна лишь устанавливать разряд. Процессор DEC VAX содержит команды неделимого приращения и отрицательного приращения.

Использование операций чтения/изменения/записи для создания критической секции сопряжено с рядом сложностей. В их число входят:

1. Вход в критическую секцию возможен самое большее для одного процесса за один раз. Если процесс входит в критическую секцию и дает сбой, происходит сбой всей системы, поскольку ни один другой процесс не может войти в критическую секцию.

2. Длительная и сложная для выполнения критическая секция является узким местом в мультипроцессорной системе. Поскольку только один процесс может за один раз входить в критическую секцию, если в эту же критическую секцию должны войти другие процессы, они должны ожидать, пока она не станет доступной, и они могут принуждаться к простою на протяжении этого времени. Желательным выходом является обновление совместно используемых переменных посредством последовательностей команд, которые выполняют операции чтения/изменения/записи вне критической секции. Это усовершенствование должно тщательно контролироваться с целью сохранения согласованности.

3. Поскольку критическая секция содержит множество команд, временной квант процесса может завершаться внутри критической секции, и этот процесс может приостанавливаться на длительное время, в течение которого управление процессором берут на себя другие процессы. На протяжении периода приостановки процесса, который отвечает за блокировку критической секции, ни один другой процесс не может входить в критическую секцию и обновлять совместно используемые переменные, управляемые этой критической секцией.

Для преодоления этих недостатков комплексные операции с совместно используемыми переменными могут быть реализованы в виде единой команды, выполняемой как одна неделимая операция. Например, процессор DEC VAX содержит неделимые команды постановки в очередь (ENQUEUE) и удаления из очереди (DEQUEUE), каждая из которых параллельно и как одна неделимая операция изменяет до четырех совместно используемых переменных и тем самым вносит изменения согласованно.

Если следовать этому подходу, проектировщик машин должен создавать неделимую команду для каждой отдельной операции с совместно используемыми переменными для каждого представления данных. Например, процессор DEC VAX содержит различные команды постановки в очередь и удаления из очереди для очередей с различными представлениями. Манипуляции с очередями с одним указателем на элемент должны выполняться одной из пар команд постановки в очередь/удаления из очереди, а манипуляции с очередями с двумя указателями на элемент должны выполняться отличающейся парой команд постановки в очередь/удаления из очереди.

Одним из недостатков в этом случае является необходимость для проектировщика машин предусматривать любую потенциальную неделимую операцию и любое потенциальное представление данных, поскольку каждая такая операция является в высшей степени специализированной. Этот подход не действует, поскольку программист не способен легко создавать и использовать специализированную неделимую операцию для каждого конкретного контекста и представления данных.

Соответственно, одной из важных задач, требующих решения, является способность создавать специализированные неделимые операции для комплексных обновлений совместно используемых переменных и выполнять эти неделимые операции, чтобы фактическое обновление происходило во время выполнения единой команды. За счет этого надежность и производительность мультипроцессорной системы не находятся под угрозой в случае сбоев или прерываний процесса, который отвечает за блокировку критической секции.

Частичное решение этой задачи достигается за счет применения команды сравнения и свопинга (Compare-and-Swap), реализованной в системе IBM 370. Команда сравнения и свопинга обеспечивает последний этап последовательности команд чтения/изменения/записи, который не защищен критической секцией и выполняет операцию записи только при определенных условиях, которые предположительно обеспечивают согласованность и неделимость. Для применения команды сравнения и свопинга сначала в процессе выполняются все действия последовательности чтения/изменения/записи посредством традиционных не являющихся неделимыми команд с целью обновления совместно используемой переменной за исключением операции окончательной записи обновленного значения совместно используемой переменной. Команда сравнения и свопинга применяется в процессе для выполнения операции окончательной записи. При выполнении команды сравнения и свопинга переменная повторно считывается из памяти, и ее хранящееся текущее значение сравнивается с копией предыдущего значения, которое хранится в регистре машины. Если значения совпадают, хранящееся значение переменной обновляется вновь вычисленным значением. Если копия предыдущего значения, хранящегося в регистре машины, и текущее значение, хранящееся в совместно используемой памяти, различаются, при выполнении команды сравнения и свопинга память не обновляется, и копия предыдущего значения, хранящегося в регистре машины, заменяется копией текущего значения переменной в совместно используемой памяти. При выполнении команды передается отчет о том, что произошло с кодом условия. Поскольку команда сравнения и свопинга сама выполняет действия последовательности чтения/изменения/записи, эти действия должны выполняться как одна неделимая операция, чтобы обеспечить правильность программы.

В основу команды сравнения и свопинга положена идея, согласно которой значение совместно используемой переменной может обновляться, если оно не было изменено ни одним другим процессом с момента его последнего считывания. Тем самым предположительно обеспечивается согласованное поведение. Тем не менее, существует возможность несогласованного обновления. Когда в ходе первого процесса выполняется последовательность чтения/изменения/записи, которую завершает команда сравнения и свопинга, значение совместно используемой переменной (скажем, значение А) может считываться и изменяться на новое значение (скажем, значение В) в ходе параллельно выполняемого второго процесса, и возвращаться к предыдущему значению (значению А) в ходе еще одного процесса, пока в ходе первого процесса на основании значения А вычисляется новое значение. Когда первый процесс достигает команды сравнения и свопинга, осуществляется сравнение и свопинг, поскольку текущее значение и предыдущее значение равны А.

Тем не менее, во многих случаях для обеспечения правильности необходимо не только, чтобы предыдущее и текущее значения совместно используемой переменной были одинаковыми, но также, чтобы хранящаяся переменная непрерывно имела значение А в период между ее первым считыванием во время выполнения последовательности

чтения/изменения/записи и выполнением команды сравнения и свопинга. Сбой команды сравнения и свопинга при обнаружении такого изменения называется проблемой ABA.

Большинство алгоритмов параллельного доступа к совместно используемым переменным и их изменения могут давать сбой, если может возникать проблема ABA. Существуют различные схемы на базе программного обеспечения, которые используются во взаимодействии с командой сравнения и свопинга, чтобы исключить или снизить вероятность сбоя в связи с проблемой ABA.

Другой подход к решению этой задачи очень похож на использование команды сравнения и свопинга за исключением того, что в данном случае определяется, сохраняется ли значение переменной непрерывно на протяжении попытки обновления. По существу, эта схема действует, как если бы команда сравнения и свопинга проверяла, изменилось ли значение переменной, вместо того, чтобы проверять, равны ли текущее и предыдущее значения. В этой схеме применяется идея, известная как резервирование.

Используются две команды: загрузка с резервированием (Load-with-Reservation) и записи, если действует резервирование (Write-if-Reserved), хотя они имеют различные названия в различных процессорах, в которых они используются. Они используются в процессоре MIPS® R-4000® и процессоре DEC ALPHA. В случае загрузки с резервированием из памяти считывается совместно используемая переменная, и одновременно адрес этой переменной помещается в особый регистр, известный как регистр резервирования. Регистр резервирования отслеживает изменения переменной, вносимые в ходе других процессов, которыми могут являться процессы, выполняемые в том же самом процессоре или в других процессорах. Если в ходе какого-либо другого процесса значение переменной изменяется, резервирование исчезает. В противном случае оно сохраняется, пока осуществивший резервирование процесс не достигает команды записи, если действует резервирование. При выполнении команды записи, если действует резервирование, обновление происходит только при наличии резервирования. Если это не так, при выполнении команды записи, если действует резервирование, обновление не происходит. В любом случае команда выдает код условия, указывающий, что произошло. Затем во многих случаях в ходе процесса проверяется код условия и повторно выполняется последовательность команд, включающих загрузку с резервированием, изменение, запись, если действует резервирование, пока не будет успешно осуществлено обновление.

В одном из вариантов осуществления настоящее изобретение может быть реализовано на практике посредством программного обеспечения (иногда называемого лицензионным внутренним кодом, аппаратно-программным обеспечением, микрокодом, милликодом, пикокодом и т.п., что во всех случаях согласуется с настоящим изобретением). Как показано на фиг.1А, обычно процессор, также известный как ЦП (центральный процессор) 1 системы 50, получает доступ к программному коду системы программного обеспечения, в котором воплощено настоящее изобретение, посредством долговременных запоминающих сред 7, таких как ПЗУ на компакт-дисках, накопитель на магнитной ленте или накопитель на жестких дисках. Программный код системы программного обеспечения может быть воплощен в любой из разнообразных известных сред для применения с системой обработки данных, такой как дискета, накопитель на жестких дисках или ПЗУ на компакт-дисках. Код может распределяться в таких средах или может распределяться пользователям из памяти 2 компьютера или запоминающего устройства одной компьютерной системы по сети 10 другим компьютерным системам для применения пользователями таких других систем.

В качестве альтернативы, программный код может быть воплощен в памяти 2 с возможностью доступа к нему для процессора 1, использующего процессорную шину. В таком программном коде реализована операционная система, которая управляет функцией и взаимодействием различных узлов вычислительной машины и одной или нескольких прикладных программ. Обычно подкачка страниц программного кода осуществляется из плотных запоминающих сред 11 в быстродействующее запоминающее устройство 2, в котором он доступен для обработки процессором 1. Методы и способы воплощения программного кода системы программного обеспечения в памяти, в физических средах и(или) распределения программного кода посредством сетей хорошо известны и не будут дополнительно рассматриваться в описании. Программный код, созданный и хранящийся в материальной среде (включая без ограничения модули электронной памяти (ОЗУ), флэш-память, компакт-диски (CD), DVD, магнитную ленту и т.п.) часто именуется "компьютерным программным продуктом". Содержащая компьютерный программный продукт среда обычно может считываться цепью обработки данных предпочтительно в компьютерной системе для выполнения цепью обработки данных.

На фиг.1В проиллюстрирована характерная рабочая станция или аппаратная серверная система, в которой может быть на практике реализовано настоящее изобретение. В показанную на фиг.1В систему 100 входит характерная компьютерная система 101, такая как персональный компьютер, рабочая станция или сервер, включая необязательные периферийные устройства. Рабочая станция 101 имеет один или несколько процессоров 106 и шину для соединения процессора(-ов) 106 и других компонентов системы 101 и обеспечения связи между ними известными способами. Шина соединяет процессор 106 с памятью 105 и долговременным запоминающим устройством 107, которое может содержать накопитель на жестких дисках (например, включая любое из следующего: магнитный носитель, компакт-диск, цифровой многофункциональный диск и флэш-память) или, например, накопитель на магнитной ленте. В систему 101 также может входить адаптер пользовательского интерфейса, который посредством шины соединяет микропроцессор 106 с одним или несколькими устройствами сопряжения, такими как клавиатура 104, мышь 103, принтер/сканнер 110 и(или) другие устройства сопряжения, которыми могут являться любое пользовательское устройство сопряжения, такое как сенсорный экран, дополнительная цифровая клавиатура и т.д. Шина посредством дисплейного адаптера также соединяет дисплей 102, такой как ЖК-дисплей или монитор с микропроцессором 106.

Система 101 может поддерживать связь с другими компьютерами или компьютерными сетями посредством сетевого адаптера, способного поддерживать связь 108 с сетью 109. Примерами сетевых адаптеров являются каналы связи, кольцевая сеть с эстафетным доступом, сеть Ethernet или модемы. В качестве альтернативы, рабочая станция 101 может поддерживать связь с использованием беспроводного интерфейса, такого как карта CDPD (сотовой системы передачи пакетов цифровых данных). Рабочая станция 101 может быть связана с другими такими компьютерами в локальной вычислительной сети (ЛВС) или глобальной вычислительной сети (ГВС), или рабочей станцией 101 может являться клиент, связанный отношениями клиент/сервер с другим компьютером и т.д. Всех эти конфигурации, а также соответствующее коммуникационное оборудование и программное обеспечение известны из техники.

На фиг.2 проиллюстрирована сеть 200 обработки данных, в которой может быть реализовано на практике настоящее изобретение. В сеть 200 обработки данных может входить множество отдельных сетей, таких как беспроводная сеть и проводная сеть, в каждую из которых может входить множество отдельных рабочих станций 101, 201, 202, 203, 204. Кроме того, как известно специалистам в данной области техники, в нее может входить одна или несколько ЛВС, в которую может входить множество интеллектуальных рабочих станций, связанных с хост-процессором.

Как также показано на фиг.2, в сети также могут входить мэйнфреймы или серверы, такие как шлюз (клиент-сервер 206) или сервер приложений (удаленный сервер 208, который может осуществлять доступ к хранилищу данных, а также может быть доступен непосредственно с рабочей станции 205). Шлюз 206 служит точкой входа в каждую сеть 207. Шлюз необходим при подсоединении одного сетевого протокола к другому. Шлюз 206 предпочтительно может быть связан с другой сетью (например, сетью Интернет 207) линией связи. Шлюз 206 также может быть непосредственно связан с одной или несколькими рабочими станциями 101, 201, 202, 203, 204 с использованием линии связи. Шлюз может быть реализован с использованием сервера IBM™eServe10™ zSeries® z10™ производства IBM Corp.

Доступ к программному коду системы программного обеспечения, в котором воплощено настоящее изобретение, обычно осуществляет процессор 106 системы 101 посредством долговременных запоминающих сред 107, таких как ПЗУ на компакт-дисках, или накопитель на жестких дисках. Программный код системы программного обеспечения может быть воплощен в любой из разнообразных известных сред для применения с системой обработки данных, такой как дискета, накопитель на жестких дисках или ПЗУ на компакт-дисках. Код может распределяться в таких средах или может распределяться пользователям 210, 211 из памяти компьютера или запоминающего устройства одной компьютерной системы по сети другим компьютерным системам для применения пользователями таких других систем.

В качестве альтернативы, программный код 111 может быть воплощен в памяти 105 с возможностью доступа к нему для процессора 106 с использованием процессорной шины. В таком программном коде реализована операционная система, которая управляет функцией и взаимодействием различных узлов вычислительной машины и одной или нескольких прикладных программ 112. Обычно подкачка страниц программного кода осуществляется из плотных запоминающих сред 107 в быстродействующее запоминающее устройство 105, в котором он доступен для обработки процессором 106. Методы и способы воплощения программного кода системы программного обеспечения в памяти, в физических средах и(или) распределения программного кода посредством сетей хорошо известны и не будут дополнительно рассматриваться в описании. Программный код, созданный и хранящийся в материальной среде (включая без ограничения модули электронной памяти (ОЗУ), флэш-память, компакт-диски, цифровые многофункциональные диски, магнитную ленту и т.п.) часто именуется "компьютерным программным продуктом". Содержащая компьютерный программный продукт среда обычно может считываться цепью обработки данных предпочтительно в компьютерной системе для выполнения цепью обработки данных.

Кэш, который является наиболее легкодоступным для процессора (обычно более быстродействующим и менее объемным, чем другие кэши процессора), представляет собой кэш низшего уровня (L1 или уровня 1), а основное запоминающее устройство (основная память) представляет собой кэш высшего уровня (L3 в случае 3 уровней). Кэш низшего уровня часто поделен кэш команд (I-кэш), в котором хранятся машинные команды для выполнения, и кэш данных (D-кэш), в котором хранятся операнды, хранимые в памяти.

На фиг.3 проиллюстрирован один из примеров осуществления процессора 106. Обычно с целью помещения в буфер блоков памяти и повышения производительности процессора используется один или несколько уровней кэша 303. Кэш 303 представляет собой высокоскоростной буфер, в котором в строках данных кэша хранятся данные в памяти, которые вероятно будут использоваться. Типичные строки данных кэша содержат 64, 128 или 256 байтов данных в памяти. Для кэширования команд и для кэширования данных часто используются раздельные кэши. Согласованность кэшей (синхронизация копий строк в памяти и в кэшах) часто обеспечивается различными алгоритмами слежения ("snoop"), хорошо известными из техники. Основное запоминающее устройство 105 процессорной системы часто называют кэшем. В процессорной системе, имеющей 4 уровня кэша 303, основное запоминающее устройство 105 иногда называют кэшем уровня 5 (L5), поскольку оно обычно является более быстродействующими и представляет собой лишь часть энергонезависимого запоминающего устройство (ЗУПД, ЗУ на ленте и т.д.), которое доступно для компьютерной системы. Основное запоминающее устройство 105 "кэширует" страницы данных, которые подкачиваются в основное запоминающее устройство 105 и откачиваются из него операционной системой.

Программный счетчик (счетчик команд) 311 отслеживает адрес текущей команды для выполнения. Счетчиком команд в процессоре на основе z/Architecture является 64-разрядным, при этом он может быть усечен до 31 или 24 разрядов с целью поддержки ранее существовавших ограничений адресации. Поскольку счетчик команд обычно воплощен в слове состояния программы (PSW) компьютера, оно сохраняется при переключении контекста. Соответственно, выполняемая программа с показанием счетчика команд может прерываться, например, операционной системой (при переключении контекста из программной среды в среду операционной системы). PSW программы поддерживает показание счетчика команд, пока программа неактивна, а во время выполнения операционной системы используется счетчик команд (в PSW) операционной системы. Обычно показание счетчика команд приращивается на величину, равную числу байтов текущей команды. RISC-команды (на основе вычислений с сокращенным набором команд) обычно имеют фиксированную длину, тогда как CISC-команды (на основе вычислений с полным набором команд) обычно имеют переменную длину. Команды, используемые в системе IBM z/Architecture, являются CISC-командами, имеющими длину 2, 4 или 6 байтов. Показание счетчика 311 команд изменяется, например, в результате операции переключения контекста или операции выбранного перехода согласно команде перехода. При операции переключения контекста в слове состояния программы (PSW) сохраняется текущее показание счетчика команд вместе с другой информацией о состоянии выполняемой программы (такой как коды условий), и загружается новое показание счетчика команд, указывающее команду нового программного модуля для выполнения. Операция выбранного перехода выполняется, чтобы позволить программе принимать решения, или чтобы выполнять программный цикл путем загрузки в счетчик 311 команд результата команды перехода.

Обычно для выборки команд от имени процессора 106 применяется блок 305 выборки команд. Блок выборки осуществляет выборку "очередных последовательных команд", целевых команд из команд выбранного перехода или первых команд программы, следующей за переключением контекста. В современных блоках выборки команд часто применяют методы выборки с целью предварительной выборки команд по предположению, исходя из вероятности использования команд, предварительная выборка которых была осуществлена. Например, блок выборки может осуществлять выборку 16 байтов команды, содержащих очередную последовательную команду, и дополнительных байтов следующих далее команд.

Затем вызванные команды выполняются процессором 106. В одном из вариантов осуществления вызванная команда(-ы) передаются блоку 306 диспетчеризации блока выборки. Блок диспетчеризации декодирует команду(-ы) и пересылает информацию о декодированной команде(-ах) соответствующим блокам 307, 308, 310. Блок 307 выполнения обычно принимает информацию о декодированных арифметических командах от блока 305 выборки команд и выполняет арифметические операции с операндами в соответствии с содержащимся в команде кодом операции. Операнды предоставляются блоку 307 выполнения предпочтительно из памяти 105, структурированных регистров 309 или из непосредственного поля выполняемой команды. Сохраненные результаты выполнения хранятся в памяти 105, регистрах 309 или в другом машинном аппаратном обеспечении (таком как управляющие регистры, регистры PSW и т.п.).

Процессор 106 обычно имеет один или несколько блоков 307, 308, 310, выполнения функции команды. Как показано на фиг.4А, блок 307 выполнения посредством интерфейсной логической схемы 407 может поддерживать связь со структурированными общими регистрами 309, блоком 306 декодирования/диспетчеризации, блоком 310 загрузки/сохранения и другими процессорными блоками 401. В блоке 307 выполнения может применяться несколько регистровых схем 403, 404, 405 для хранения информации, с которой будет работать арифметическое логическое устройство (АЛУ) 402. АЛУ выполняет арифметические операции, такие как сложение, вычитание, умножение и деление, а также логические функции, такие как И, ИЛИ и исключающее ИЛИ, поворот и смещение. АЛУ предпочтительно поддерживает зависящие от конструкции специализированные операции. В других схемах могут обеспечиваться другие структурированные средства 408, включающие, например, коды условия и логическую схему поддержки восстановления. Обычно результат операции АЛУ хранится в схеме 406 выходного регистра, из которой он может пересылаться целому ряду других функций обработки. Хотя существует множество конструкций процессоров, настоящее описание имеет целью лишь обеспечить понимание одного из вариантов осуществления.

Например, команда сложения выполняется блоком 307 выполнения, обладающим арифметическими и логическими функциональными возможностями, а, например, команда с плавающей точкой выполняется блоком вычислений с плавающей точкой, обладающим специализированными возможностями работы с плавающей точкой. Блок выполнения предпочтительно работает с указанными командой операндами путем выполнения заданной кодом операции функции применительно к операндам. Например, команда сложения может выполняться блоком 307 выполнения применительно к операндам, обнаруженным в двух регистрах 309, указанных в регистровых полях команды.

Блок 307 выполнения выполняет арифметическое сложение двух операндов и сохраняет результат в третьем операнде, которым может являться третий регистр или один из двух исходных регистров. Блок выполнения предпочтительно использует арифметическое логическое устройство (АЛУ) 402, способное выполнять ряд логических функций, таких как смещение, поворот, И, ИЛИ и исключающее ИЛИ, а также ряд алгебраических функций, включая любые из следующих функций: сложение, вычитание, умножение, деление. Некоторые АЛУ 402 рассчитаны на скалярные операции, а некоторые - на операции с плавающей точкой. В зависимости от архитектуры данные могут иметь обратный порядок следования байтов (когда наименьший значимый байт соответствует старшему байтовому адресу) или прямой порядок следования байтов (когда наименьший значимый байт соответствует младшему байтовому адресу). В системе IBM z/Architecture используется обратный порядок следования байтов. В зависимости от архитектуры поля чисел со знаком могут быть представлены в виде прямого кода, дополнения до единицы или дополнения до двух. Число в форме дополнения до двух выгодно в том смысле, что АЛУ не требуется поддерживать возможность вычитания, поскольку при отрицательной или положительной величине дополнения до двух в АЛУ требуется только сложение. Числа обычно описаны в сокращенном виде, в котором 12-разрядное поле определяет адрес блока из 4096 байтов и обычно описано, например, в виде 4-х килобайтового блока.

Как показано на фиг.4Б, содержащаяся в команде перехода информация для выполнения команды перехода обычно передается блоку 308 перехода, в котором часто применяется алгоритм предсказания переходов, такой как таблица 432 предыстории переходов (ТПП), для предсказания исхода перехода до завершения других условных операций. Целевой объект текущей команды перехода вызывается и выполняется по предположению до завершения условных операций. Когда условные операции завершены, выполненные по предположению команды перехода завершаются или отбрасываются, исходя из условной операции и предположенного исхода. Типичная команда перехода может предусматривать проверку кодов условий и переход к целевому адресу, если коды условий отвечают требованию команды перехода, при этом целевой адрес может вычисляться на основании нескольких чисел, включая, например, числа из регистровых полей или непосредственного поля команды. В блоке 308 перехода может применяться АЛУ 426, имеющее множество схем 427, 428, 429 входных регистров и схему 430 выходного регистра. Блок 308 перехода, например, может поддерживать связь с общими регистрами 309, декодировать блок 306 диспетчеризации или другие схемы 425.

Выполнение группы команд может прерываться по ряду причин, включая, например, переключение контекста, инициированное операционной системой, исключительную ситуацию или ошибку в процессе выполнения программы, приводящую к переключению контекста, сигнал прерывания ввода-вывода, приводящий к переключению контекста, или многопоточный режим работы множества программ (в многопоточной среде). Переключение контекста предпочтительно служит для сохранения информации о состоянии выполняемой в данный момент программы и затем для загрузки информации о состоянии другой вызываемой программы. Информация о состоянии может сохраняться, например, в аппаратных регистрах или в памяти. Информация о состоянии предпочтительно содержит показание счетчика команд, указывающее очередную команду для выполнения, коды условий, сведения о преобразовании данных памяти и содержимое структурированного регистра. Переключение контекста может осуществляться аппаратными схемами, прикладными программами, программами операционной системы или аппаратно-программным кодом (микрокодом, пикокодом или лицензионным внутренним кодом (LIC) по отдельности или в сочетании).

Процессор осуществляет доступ к операндам в соответствии с определенными командами способами. Команда может содержать непосредственный операнд, в котором используется значение части команды, может содержать одно или несколько регистровых полей, прямо указывающих регистры общего назначения или регистры особо назначения (например, регистры с плавающей точкой). В команде могут использоваться подразумеваемые регистры, обозначаемые полем кода операции как операнды. В команде могут использоваться ячейки памяти для операндов. Ячейка памяти для операнда может обеспечиваться регистром, непосредственным полем или сочетанием регистров и непосредственного поля, примером чего является средство дальнего смещения на основе системы z/Architecture, в котором команда определяет базовый регистр, индексный регистр и непосредственное поле (поле смещения), которые суммируются с целью получения, например, адреса операнда в памяти. Под ячейкой в данном случае подразумевается ячейка основной памяти (основного запоминающего устройства), если не указано иное.

Как показано на фиг.4 В, процессор осуществляет доступ к памяти с использованием блока 310 загрузки/сохранения. Блок 310 загрузки/сохранения может выполнять операцию загрузки путем получения адреса целевого операнда в памяти 303 и загрузки операнда в регистр 309 или другую ячейку памяти 303, или может выполнять операцию сохранения путем получения адреса целевого операнда в памяти 303 и сохранения данных, полученных из регистра 309 или другой ячейки памяти 303, в ячейке целевого операнда в памяти 303. Блок 310 загрузки/сохранения может действовать по предположению и осуществлять доступ к памяти в последовательности, которая не соответствует последовательности команд, тем не менее, блок 310 загрузки/сохранения должен обеспечивать для программ видимость выполнения команды по порядку. Блок 310 загрузки/сохранения может поддерживать связь с общими регистрами 309, блоком 306 декодирования/диспетчеризации, интерфейсом 303 кэша/памяти или другими элементами 455 и содержит различные регистровые схемы, АЛУ 458 и управляющую логику 463 для вычисления адресов ячеек запоминающего устройства и обеспечения последовательного потока для сохранения порядка следования операций. Некоторые операции могут выполняться не по порядку, но блок загрузки/сохранения обеспечивает функциональные возможности для того, чтобы выполняемые не по порядку операции выглядели для программы выполненными по порядку, как хорошо известно из техники.

Адреса, которые "видит" прикладная программа, предпочтительно часто именуются виртуальными адресами. Иногда виртуальные адреса именуются "логическими адресами" и "исполнительными адресами". Эти виртуальные адреса являются виртуальными в том смысле, что их перенаправляют в ячейку физической памяти посредством одной из ряда технологий 312 динамического преобразования адреса (DAT), включая без ограничения простое приписывание величины смещения к виртуальному адресу, преобразование виртуального адреса посредством одной или нескольких таблиц перевода, которые предпочтительно содержат по меньшей мере таблицу сегментов и таблицу страниц по отдельности или в сочетании, предпочтительно таблицу сегментов, содержащую запись с указанием таблицы страниц. В системе z/Architecture предусмотрена иерархия преобразования, в которую входит первая таблица региона, вторая таблица региона, третья таблица региона, таблица сегментов и необязательная таблица страниц. Эффективность преобразования адресов часто повышается за счет использования буфера быстрого преобразования адреса (TLB), который содержит записи, отображающие виртуальный адрес соответствующей ячейки физической памяти. Записи создаются, когда DAT 312 преобразует виртуальный адрес с использованием таблиц перевода. Затем при последующем использовании виртуального адреса может использоваться запись из быстродействующего TLB вместо доступа к таблицам медленного последовательного преобразования. Содержимым TLB может управлять ряд алгоритмов замещения, включая алгоритм замещения наиболее давней по использованию страницы (LRU).

В том случае, когда процессором является процессор мультипроцессорной системы, каждый процессор отвечает за сохранение совместно используемых ресурсов, таких как средства ввода-вывода, кэши, TLB и память, взаимно заблокированных для обеспечения непротиворечивости. Обычно для поддержания непротиворечивости кэшей используются технологии "слежения". Для облегчения совместного использования каждая строка кэша может помечаться в среде слежения как находящаяся в одном из следующих состояний, включающих состояние совместного использования, состояние монопольного использования, измененное состояние, недействительное состояние и т.п.

Блоки 304 ввода-вывода обеспечивают процессор средствами подключения к периферийным устройствам, включая, например, накопители на магнитной ленте, накопители на дисках, принтеры, дисплеи и сети. Блоки ввода-вывода представлены в компьютерной программе программными драйверами. В мэйнфреймах, таких как z/Series производства IBM, блоки ввода-вывода мэйнфрейма являются адаптерами каналов и адаптерами открытых систем и обеспечивают связь между операционной системой и периферийными устройствами.

В описанных далее принципах работы системы z/Architecture рассмотрена архитектура компьютерной системы. Запоминающее устройство

В основном запоминающем устройстве компьютерной системы хранится информация, а также адресные, защитные, контрольные и корректирующие записи. Некоторые особенности адресации включают формат адресов, концепцию адресных пространств, различные типы адресов и то, каким образом адрес одного типа преобразуется в адрес другого типа. Некоторые из основных запоминающих устройств имеют постоянно абонированные ячейки. Основное запоминающее устройство обеспечивает систему запоминающим устройством с прямой адресацией и быстрой выборкой данных. В основное запоминающее устройство должны загружаться (из устройств ввода) как данные, так и программы, после чего они могут обрабатываться.

Основное запоминающее устройство может содержать одно или несколько буферных запоминающих устройств меньшей емкости с более быстрой выборкой, иногда называемых кэшами. Кэш обычно физически связан с ЦП или процессором ввода-вывода. Физическая конструкция и использование различных запоминающих сред в целом не сказывается на программе за исключением производительности.

Для команд и операндов, хранимых в памяти, могу быть предусмотрены раздельные кэши. Информация содержится в кэше в форме непрерывных байтов на целочисленной границе, называемой блоком или строкой данных кэша (или для краткости строкой). Согласно одной из моделей может быть предусмотрена команда извлечения атрибута кэша (EXTRACT CACHE ATTRIBUTE), которая выдает размер строки кэша в байтах. Согласно одной из моделей также может быть предусмотрена команда упреждающей выборки данных (PREFETCH DATA) и команда упреждающей выборки данных относительно большой длины (PREFETCH DATA RELATIVE LONG) для упреждающей выборки данных из запоминающего устройства в кэш данных или команд или для высвобождения данных из кэша.

Запоминающее устройство рассматривается как длинная горизонтальная битовая строка. В случае большинства операций доступ к запоминающему устройству последовательно осуществляется слева направо. Битовая строка подразделяется на блоки из восьми разрядов. Восьмиразрядный блок называется байтом и является базовым конструктивным блоком всех форматов представления информации. Местоположение каждого байта в запоминающем устройстве идентифицируется однозначно определяемым неотрицательным целым числом, которое является адресом местоположения этого байта или просто адресом байта. Соседние местоположения байтов имеют идущие подряд адреса, начинающиеся слева с 0 и последовательно следующие слева направо. Адреса представляют собой двоичные целые числа без знака, содержащие 24, 31 или 64 разряда.

Обмен информацией между запоминающим устройством и ЦП или канальной подсистемой осуществляется путем передачи одного байта или группы байтов за один раз. Если не оговорено иное, хранящаяся группа байтов адресуется посредством крайнего левого байта из группы. Число байтов в группе подразумевается или прямо оговаривается выполняемой операцией. Используемая в работе ЦП группа байтов называется полем. Разряды в каждой группе байтов последовательно нумеруются слева направо. Крайние левые разряды иногда именуются "старшими" разрядами, а крайние правые разряды -"младшими" разрядами. Тем не менее, номера разрядов не являются адресами ячеек запоминающего устройства. Возможна только адресация байтов. Чтобы оперировать с отдельными разрядами хранящегося байта, необходим доступ ко всему байту. Разряды в байте пронумерованы слева направо от 0 до 7, Разряды в адресе могут быть пронумерованы от 8 до 31 или от 40 до 63 в случае 24 разрядных адресов или от 1 до 31 или от 33 до 63 в случае 31-разрядных адресов и от 0 до 63 в случае 64-разрядных адресов. В любом другом имеющем фиксированную длину формате из множества байтов разряды, образующие формат, последовательно пронумерованы, начиная с 0. В целях обнаружения ошибок и предпочтительно их исправления с каждым байтом или группой байтов может передаваться один или несколько контрольных разрядов. Такие контрольные разряды генерируются автоматически машиной и не могут непосредственно управляться программой. Емкость запоминающего устройства выражается в числе байтов. Когда кодом операций команды подразумевается длина хранящегося поля операнда, считается, что поле имеет фиксированную длину, которая может составлять 1, 2, 4, 8 или 16 байтов. Для некоторых команд могут подразумеваться более длинные поля. Когда длина хранящегося поля операнда не подразумевается, а прямо указывается, считается, что поле имеет переменную длину. Операнды переменной длины могут различаться по длине с шагом в 1 байт. При сохранении информации в запоминающем устройстве замещается содержимое местоположений только тех байтов, которые включены в указанное поле, несмотря на то, что ширина физического пути доступа к запоминающему устройству может превышать длину сохраняемого поля.

Некоторые хранящиеся единицы информации должны находиться на целочисленной границе. Применительно к единице информации граница называется целочисленной, когда адрес ее ячейки запоминающего устройства кратен длине единицы информации в байтах. Полям длиной 2, 4, 8 и 16 байтам на целочисленной границе даются особые названия. Полуслово является группой из 2 идущих подряд байтов на двухбайтовой границе и представляет собой базовый конструктивный блок команд. Слово является группой из 4 идущих подряд байтов на четырехбайтовой границе. Двойное слово является группой из 8 идущих подряд байтов на 8-байтовой границе. Учетверенное слово является группой из 16 идущих подряд байтов на 16 - байтовой границе. Когда в адресах ячеек запоминающего устройства указаны полуслова, слова, двойные слова и учетверенные слова, в двоичном представлении адреса содержится один, два, три или четыре крайних правых нулевых разряда, соответственно. Команды должны находиться на двухбайтовых целочисленных границах. Хранящиеся операнды большинства команд не содержат требования размещения на границах.

В моделях, в которых реализованы раздельные кэши для команд и операндов, хранимых в памяти, могут происходить значительные задержки, если программа сохраняется в строке кэша, из которой впоследствии осуществляется выборка команд, независимо от того, изменяются ли при сохранении команды, выборка которых впоследствии осуществляется.

Команды

Обычно работа ЦП управляется посредством хранящихся команд, которые последовательно выполняются по одной за один раз слева направо в возрастающей последовательности адресов ячеек запоминающего устройства. Изменение последовательного выполнения операций может быть вызвано переходом, командой загрузки PSW, прерываниями, командами процессора обработки сигналов или вмешательством оператора.

Команда предпочтительно содержит две основные части:

код операции, который определяет операцию для выполнения,

необязательно указание участвующих операндов.

на фиг.5А-5Е показаны форматы команд в системе z/Architecture. Команда может просто содержать код 501 операции или код операции и ряд полей, содержащих непосредственные операнды или описатели регистров для определения местонахождения операндов в регистрах или в памяти. Код операции может указывать аппаратному обеспечению на необходимость использования подразумеваемых ресурсов (операндов и т.д.), таких как один или несколько конкретных регистров общего назначения (GPR). Операнды могут быть сгруппированы в три класса: операнды, находящиеся в регистрах, непосредственные операнды и хранящиеся операнды. Операнды могут указываться прямо или неявно. Регистровые операнды могут находиться в общих регистрах, регистрах с плавающей точкой, регистрах доступа или управляющих регистрах, при этом тип регистра указывается кодом операции. Регистр, содержащий операнд, определяется путем указания регистра в 4-разрядном поле команды, называемом полем R. В случае некоторых команд операнд находится в неявно указанном регистре, который подразумевается кодом операции. Непосредственные операнды содержатся в команде, а 8-, 16-или 32-разрядное поле, в котором содержится непосредственный операнд, называется полем I. Хранящиеся операнды могут иметь подразумеваемую длину, обозначаться битом маски, указанием в команде 4- или 8-разрядной длины, которое называется полем L, или могут иметь длину, определяемую содержимым общего регистра. Адреса хранящихся операндов определяются посредством формата, в котором содержимое общего регистра используется в составе адреса. Это позволяет:

указывать полный адрес путем использования сокращенной записи, выполнять манипуляции с адресом путем использования команд, в которых для операндов используются общие регистры,

изменять адреса программными средствами без изменения потока команд, действовать независимо от местоположения областей данных путем прямого использования адресов, принимаемых от других программ.

Адрес, используемый для указания запоминающего устройства, содержится в регистре, указанном в поле R команды, или вычисляется на основании базового адреса, индекса и смещения, указанных в полях В, X и D, соответственно, команды. Когда ЦП находится в регистровом режиме доступа, помимо указания адреса поле В или R может использоваться для указания регистра доступа. Для описания выполнения команд операнды предпочтительно обозначаются как первый и второй операнды, а в некоторых случаях как третий и четвертый операнды. Обычно в выполнении команды участвуют два операнда, при этом результат выполнения замещает первый операнд.

Команда имеет длину, составляющую одно, два или три полуслова, и должна храниться на границе полуслова. Как показано на фиг.5А-5Е, на которых проиллюстрированы форматы команд, каждая команда имеет один из 25 основных форматов: Е 501, I 502, RI 503 504, RIE 505 551 552 553 554, RIL 506 507, RIS 555, RR 510, RRE 511, RRF 512 513 514, RRS, RS 516 517, RSI 520, RSL 521, RSY 522 523, RX 524, RXE 525, RXF 526, RXY 527, S 530, SI 531, SIL 556, SIY 532, SS 533 534 535 536 537, SSE 541 и SSF 542, при этом формат RRF имеет три разновидности, форматы RI, RIL, RS и RSY имеют по две разновидности, а форматы RIE и SS имеют по пять разновидностей.

В названиях форматов указываются в общих чертах классы операндов, которые участвуют в операции, и некоторые подробности о полях.

RIS обозначает регистровую операцию с непосредственной адресацией (register-and-immediate operation) и операцию обращения к запоминающему устройству.

RRS обозначает операцию типа регистр-регистр (register-and-register operation) и операцию обращения к запоминающему устройству.

SIL обозначает операцию обращения к запоминающему устройству с непосредственной адресацией (storage-and-immediate operation) с использованием 16-разрядного непосредственного поля.

В форматах I, RR, RS, RSI, RX, SI и SS в первом байте команды содержится код операции. В форматах Е, RRE, RRF, S, SIL и SSE в первых двух байты команды содержится код операции за исключением, того, что для некоторых команд в формате S код операции содержится только в первом байте. В форматах RI и RIL код операции содержится в первом байте и в двоичных разрядах 12-15 команды. В форматах RIE, RIS, RRS, RSL, RSY, RXE, RXF, RXY и SIY код операции содержится в первом байте и в шестом байте команды. В первых двух разрядах первого или единственного байта кода операции следующим образом указаны длина и формат команды.

В форматах RR, RRE, RRF, RRR, RX, RXE, RXF, RXY, RS, RSY, RSI, RI, RIE и RIL содержимое регистра, указанное в поле R1, называется первым операндом. Регистр, содержащий первый операнд, иногда именуется "местоположением первого операнда", а иногда "регистром R1". В форматах RR, RRE, RRF и RRR в поле R2 указан регистр, содержащий второй операнд, при этом тот же самый регистр может быть указан в поле R2 как R1. В форматах RRF, RXF, RS, RSY, RSI и RIE использование поля R3 зависит от команды. В форматах RS и RSY вместо поля R3 может быть указано поле М3, определяющее маску. В поле R обозначен общий регистр или регистр доступа для общих команд, общий регистр для управляющих команд и регистр с плавающей точкой или общий регистр для команд с плавающей точкой. Регистровый операнд общих и управляющих регистров находится в двоичных разрядах 32-63 64 - разрядного регистра или занимает весь регистр в зависимости от команды.

В формате I содержимое восьмиразрядного поля данных с непосредственной адресацией, т.е. поля I команды непосредственно используется как операнд. В формате SI содержимое восьмиразрядного поля данных с непосредственной адресацией, т.е. поля 12 команды непосредственно используется как второй операнд. В полях В1 и D1 указан первый операнд, имеющий длину 1 байт. Формат SIY аналогичен за исключение того, что вместо поля D1 используются поля DH1 и DLL В формате RI для команд сложения полуслова с непосредственной адресацией (ADD HALFWORD IMMEDIATE), сравнения полуслова с непосредственной адресацией (COMPARE HALFWORD IMMEDIATE), загрузки полуслова с непосредственной адресацией (LOAD HALFWORD IMMEDIATE) и умножения полуслова с непосредственной адресацией (MULTIPLY HALFWORD IMMEDIATE) содержимое 16-разрядного поля 12 команды используется непосредственно как двоичное целое число со знаком, а в поле R1 указан первый операнд, имеющий длину 32 или 64 разряда в зависимости от команды. Для команды проверки с маскированием (TEST UNDER MASK) (ТМНН, TMHL, TMLH, TMLL) содержимое поля 12 используется как маска, а в поле R1 указан первый операнд, имеющий длину 64 разряда.

Для команд вставки с непосредственной адресацией (INSERT IMMEDIATE), И с непосредственной адресацией (AND IMMEDIATE), ИЛИ с непосредственной адресацией (OR IMMEDIATE) и логической загрузки с непосредственной адресацией (LOAD LOGICAL IMMEDIATE) содержимое поля 12 используется как двоичное целое число без знака или логическое значение, а в поле R1 указан первый операнд, имеющий длину 64 разряда. Для команд относительного перехода в форматах RI и RSI содержимое 16 - разрядного поля 12 используется как двоичное целое число со знаком, указывающее количество полуслов. Это число при его сложении с адресом команды перехода указывает адрес перехода. Для команд относительного перехода в формате RIL поле 12 содержит 32 разряда и используется таким же образом.

Для команд относительного перехода в форматах RI и RSI содержимое 16-разрядного поля 12 используется как двоичное целое число со знаком, указывающее количество полуслов. Это число при его сложении с адресом команды перехода указывает адрес перехода. Для команд относительного перехода в формате RIL таким же образом используется поле 12 длиной 32 разряда. Для команд сравнения с непосредственной адресацией и относительного перехода (COMPARE IMMEDIATE AND BRANCH RELATIVE) и логического сравнения с непосредственной адресацией и относительного перехода (COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE) в форматах RIE, содержимое 8-разрядного поля 12 непосредственно используется как второй операнд. Для команд сравнения с непосредственной адресацией и перехода (COMPARE IMMEDIATE AND BRANCH), сравнения с непосредственной адресацией и системного прерывания (COMPARE IMMEDIATE AND TRAP), логического сравнения с непосредственной адресацией и перехода (COMPARE LOGICAL IMMEDIATE AND BRANCH) и логического сравнения с непосредственной адресацией и системного прерывания (COMPARE LOGICAL IMMEDIATE AND TRAP) в формате RIE содержимое 16-разрядного поля 12 непосредственно используется как второй операнд. Для команд сравнения и относительного перехода (COMPARE AND BRANCH RELATIVE), сравнения с непосредственной адресацией и относительного перехода (COMPARE IMMEDIATE AND BRANCH RELATIVE), логического сравнения и относительного перехода (COMPARE LOGICAL AND BRANCH RELATIVE) и логического сравнения с непосредственной адресацией и относительного перехода (COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE) в формате RIE содержимое 16 - разрядного поля 14 используется как двоичное целое число со знаком, указывающее количество полуслов, складываемых с адресом команды для формирования адреса перехода.

Для команд сложения с непосредственной адресацией (ADD IMMEDIATE), логического сложения с непосредственной адресацией (ADD LOGICAL IMMEDIATE), логического сложения чисел со знаком с непосредственной адресацией (ADD LOGICAL WITH SIGNED IMMEDIATE), сравнения с непосредственной адресацией (COMPARE IMMEDIATE), логического сравнения с непосредственной адресацией (COMPARE LOGICAL IMMEDIATE), загрузки с непосредственной адресацией (LOAD IMMEDIATE) и однопоточного умножения с непосредственной адресацией (MULTIPLY SINGLE IMMEDIATE) в формате RIL содержимое 32-разрядного поля 12 непосредственно используется как второй операнд.

Для команд в формате RIS содержимое 8-разрядного поля 12 непосредственно используется как второй операнд. В формате SIL содержимое 16-разрядного поля 12 непосредственно используется как второй операнд. В полях В1 и D1 указан первый операнд, как описано далее.

В форматах RSL, SI, SIL, SSE и большинстве разновидностей формата SS содержимое общего регистра, указанное в поле В1 прибавляется к содержимому поля D1 для формирования адреса первого операнда. В форматах RS, RSY, S, SIY, SS и SSE содержимое общего регистра, указанное в поле В2, прибавляется к содержимому поля D2 или полей DH2 и DL2 для формирования адреса второго операнда. В форматах RX, RXE, RXF и RXY содержимое общих регистров, указанное в полях Х2 и В2, прибавляется к содержимому поля D2 или полей DH2 и DL2 для формирования адреса третьего операнда. В форматах RIS и RRS и в одной из разновидностей формата SS содержимое общего регистра, указанное в поле В4, прибавляется к содержимому поля D4 для формирования адреса четвертого операнда.

Для команд И (AND) (NC), исключающее ИЛИ (EXCLUSIVE OR) (ХС), перемещения (MOVE) (MVC), модификации адреса внутри зоны (MOVE NUMERICS), перемещения зон (MOVE ZONES) и ИЛИ (OR) (ОС) в формате SS с использованием одного 8-разрядного поля в L указывается количество дополнительных байтов операнда справа от байта, указанного в адресе первого операнда. Соответственно, первый операнд имеет длину 1-256 байт, что соответствует длине 0-255 кода в L. В результате сохранения первый операнд замещается и никогда не сохраняется вне поля, заданного адресом и длиной. В этом формате второй операнд имеет такую же длину, как и первый операнд. Существуют разновидности предыдущего определения, которые относятся к командам редактирования (EDIT), редактирования и разметки (EDIT AND MARK), уплотнения согласно стандарту ASCII (PACK ASCII), уплотнения согласно стандарту UNICODE (PACK UNICODE), трансляции (TRANSLATE), трансляции и проверки (TRANSLATE AND TEST), разуплотнения согласно стандарту ASCII (UNPACK ASCII) и разуплотнения согласно стандарту UNICODE (UNPACK UNICODE).

В формате SS с использованием поле двух длин и в формате RSL в L1 указывается количество дополнительных байтов операнда справа от байта, указанного в адресе первого операнда. Соответственно, первый операнд имеет длину 1-16, что соответствует длине 0-15 кода в L1. Аналогичным образом, в L2 указывается количество дополнительных байтов операнда справа от местоположения, указанного в адресе второго операнда. В результате сохранения первый операнд замещается и никогда не сохраняется вне поля, заданного адресом и длиной. Если длина первого операнда превышает длину второго операнда, второй операнд дополняется слева нулями до длины первого операнда. В результате этого дополнения хранящийся второй операнд не изменяется. В формате SS с двумя полями R, которые используются командами перемещения к первичному выражению (MOVE ТО PRIMARY), перемещения к вторичному выражению (MOVE ТО SECONDARY) и перемещения с ключом, содержимое общего регистра, указанное в поле R1, представляет собой 32-разрядное число без знака, называемое точной длиной. Оба операнда имеют длину, называемую эффективной длиной. Эффективная длина равна точной длине или 256 в зависимости от того, какая величина меньше. Команды устанавливают код условия, чтобы способствовать программному циклу для перемещения общего количества байтов, определенных точной длиной. Формат SS с двумя полями R также используется, чтобы определять интервал регистров и два хранящихся операнда для команды множественной разделенной загрузки (LOAD MULTIPLE DISJOINT) и определять один или два регистра и один или два хранящихся операнда для команды выполнения заблокированной операции (PERFORM LOCKED OPERATION).

Ноль в любом из полей В1, В2, Х2 или В4 указывает на отсутствие соответствующего компонента адреса. Вместо соответствующего компонента используется ноль, передающий промежуточную сумму независимо от содержимого общего регистра 0. Смещение нуля не несет особого смысла.

Разряды 31 и 32 текущего PSW являются разрядами режима адресации. Разряд 31 является разрядом режима расширенной адресации, а разряд 32 является разрядом режима базовой адресации. Эти разряды регулируют размер исполнительного адреса, полученного путем формирования адреса. Когда оба разряда 31 и 32 текущего PSW равны нулю, ЦП находится в режиме 24 - разрядной адресации, и генерируется 24 - разрядная команда и исполнительные адреса операндов. Когда разряд 31 текущего PSW равен нулю, а разряд 32 равен единице, ЦП находится в режиме 31-разрядной адресации, и генерируется 31-разрядная команда и исполнительные адреса операндов. Когда оба разряда 31 и 32 текущего PSW равны единице, ЦП находится в режиме 64 - разрядной адресации, и генерируется 64-разрядная команда и исполнительные адреса операндов. Выполнение команд ЦП предусматривает генерирование адресов команд и операндов.

При выборке команды из местоположения, указанного текущим PSW, адрес команды увеличивается на количество байтов в команде, и команда выполняется. Эти же шаги затем повторно осуществляются с использованием нового значения адреса команды с целью выборки очередной команды из последовательности. В режиме 24 - разрядной адресации происходит круговая адресация команд, при этом за полусловом по адресу 2 - 2 команды следует полуслово по адресу 0 команды. Таким образом, в режиме 24-разрядной адресации теряется любой перенос двоичного разряда 104 PSW в результате обновления адреса команды. В режиме 31-разрядной или 64-разрядной адресации происходит аналогичная круговая адресация команд, при этом за полусловом по адресу 231 - 2 или 264 - 2 команды, соответственно, следует полуслово по адресу 0 команды. Перенос двоичного разряда 97 или 64, соответственно, PSW теряется.

Адрес операнда, который указывает на запоминающее устройство, выводится из промежуточного значения, которое содержится в регистре, указанном в полем R команды, или вычисляется, исходя из суммы трех двоичных чисел: базового адреса, индекса и смещения. Базовым адресом (В) является 64-разрядное число, содержащееся в общем регистре, который указан в программе в 4-разрядном поле команды, называемом полем В. Базовые адреса могут использоваться как средство независимой адресации каждой программы и области данных. В случае матричных вычислений они могут указывать местоположение матрицы, а в случае обработки записей они могу идентифицировать запись. Базовый адрес обеспечивает адресацию всего запоминающего устройства. Базовый адрес также может использоваться для индексации.

Индексом (X) является 64-разрядное число, содержащееся в общем регистре, который указан в программе в 4 - разрядном поле команды, называемом полем X. Он входит только в адрес, указанный командами формата RX, RXE и RXY. Команды формата RX, RXE, RXF и RXY допускают двойное индексирование; иными словами, индекс может использоваться для обеспечения адреса элемента в матрице.

Смещением (D) является 12-разрядное или 20-разрядное число, содержащееся в поле команды, называемом полем D. 12-разрядное число смещения является числом без знака и обеспечивает относительную адресацию до 4095 байтов после местоположения, указанного базовым адресом. 20 - разрядное число смещения является числом со знаком и обеспечивает относительную адресацию до 524287 байтов после местоположения базового адреса и до 524288 байтов до него. В случае матричных вычислений смещение может использоваться для указания одной из множества составляющих, связанных с элементом. В случае обработки записей смещение может использоваться для идентификации составляющих внутри записи. 12 - разрядное число смещения содержится в двоичных разрядах 20-31 команд некоторых форматов. В командах некоторых форматов в двоичных разрядах 36-47 также содержится второе 12 - разрядное число смещения.

20 - разрядное число смещения содержится в командах только форматов RSY, RXY или SIY. В этих командах поле D состоит из (слабого) DL поля в двоичных разрядах 20-31 и (сильного) поля DH двоичных разрядах 32-39. Если установлено средство длительного смещения, численная величина смещения формируется путем присоединения содержимого поля DH слева к содержимому поля DL. Когда средство длительного смещения не установлено, численная величина смещения формируется путем присоединения восьми нулевых разрядов слева содержимому поля DL, при этом содержимое поля DH не учитывается.

При формировании промежуточной суммы базовый адрес и индекс обрабатываются как 64-разрядные двоичные целые числа. 12-разрядное число смещения обрабатывается как 12 - разрядное двоичное целое число без знака, слева к которому присоединены 52 нулевых разряда. 20-разрядное число смещения обрабатывается как 20 - разрядное двоичное целое число со знаком, слева к которому присоединены 44 знаковых разряда. Все три числа складываются как 64 - разрядные двоичные числа без учета переполнения. Сумма всегда имеет длину 64 разряда и используется как промежуточное значение для формирования генерируемого адреса. Разряды промежуточной суммы пронумерованы от 0 до 63. Нулевой разряд в любом из полей В1, В2, Х2 или В4 указывает на отсутствие соответствующего компонента адреса. Вместо отсутствующего компонента при формировании промежуточной суммы используется ноль независимо от содержимого общего регистра 0. Смещение нуля не несет особого смысла.

Когда в описании команд говорится, что содержимое общего регистра, указанного в поле полем R, используется для адресации хранящегося операнда, содержимое регистра используется как 64 -разрядное промежуточное значение.

В команде может быть указан один и тот же общий регистр для вычисления адреса и в качестве местоположения операнда. Вычисление адреса завершается до изменения, если они имеют место, регистров при выполнении операции. Если в определении отдельной команды не указано иное, в генерированном адресе операнда указан крайний левый байт хранящегося операнда.

Генерированный адрес операнда всегда имеет длину 64 разряда, при этом разряды пронумерованы с 0 до 63. Способ получения генерированного адреса из промежуточного значения зависит от текущего режима адресации. В режиме 24 - разрядной адресации разряды 0-39 промежуточного значения не учитываются, разряды 0-39 генерированного адреса принудительно приравниваются к нулю, а разряды 40-63 промежуточного значения становятся разрядами 40-63 генерированного адреса. В режиме 31 - разрядной адресации разряды 0-32 промежуточного значения не учитываются, разряды 0-32 генерированного адреса принудительно приравниваются к нулю, а разряды 33-63 промежуточного значения становятся разрядами 33-63 генерированного адреса. В режиме 64-разрядной адресации разряды 0-63 промежуточного значения становятся разрядами 0-63 генерированного адреса. В индексе и регистрах базовых адресов могут использоваться отрицательные величины. В режиме 31-разрядной адресации не учитываются разряды 0-32 этих величин, а в режиме 24 - разрядной адресации не учитываются разряды 0-39.

В случае команд перехода адрес очередной команды для выполнения при выборе перехода называет адресом перехода. В зависимости от команды перехода она может иметь формат RR, RRE, RX, RXY, RS, RSY, RSI, RI, RIE или RIL. В форматах RS, RSY, RX и RXY адрес перехода определяется базовым адресом, смещением, а в форматах RX и RXY - индексом. В этих форматах промежуточное значение генерируется согласно таким же правилам, как и при генерировании промежуточного значения адреса операнда. В форматах RR и RRE содержимое общего регистра, указанное в поле R2, используется как промежуточное значение, на основании которого формируется адрес перехода. Общий регистр 0 не может быть указан как содержащий адрес перехода. В случае нулевого значения в поле R2 команда выполняется без перехода.

Команды относительного перехода находятся в форматах RSI, RI, RIE и RIL. В форматах RSI, RI и RIE команд относительного перехода содержимое поля 12 обрабатывается как 16-разрядное двоичное целое число со знаком, указывающее количество полуслов. В формате RIL содержимое поля 12 обрабатывается как 32-разрядное двоичное целое число со знаком, указывающее количество полуслов. Адресом перехода является количество полуслов, указанное в поле 12, плюс адрес команды относительного перехода.

64-разрядным промежуточным значением для команды относительного перехода в форматах RSI, RI, RIE или RIL является сумма двух слагаемых без учета переполнения из двоичного разряда 0. В форматах RSI, RI или RIE первым слагаемым является содержимое поля 12 с одним нулевым разрядом, присоединенным справа, и 47 разрядами, равными знаковому разряду содержимого, присоединенными слева, а в случае команд сравнения и относительного перехода (COMPARE AND BRANCH RELATIVE), сравнения с непосредственной адресацией и относительного перехода (COMPARE IMMEDIATE AND BRANCH RELATIVE), логического сравнения и относительного перехода (COMPARE LOGICAL AND BRANCH RELATIVE) и логического сравнения с непосредственной адресацией и относительного перехода (COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE) первым слагаемым является содержимое поля 14 с разрядами, присоединенными, как описано выше применительно к полю 12. В формате RIL первым слагаемым является содержимое поля 12 с одним нулевым разрядом, присоединенным справа, и 31 разрядом, равным знаковому разряду содержимого, присоединенным слева. Во всех форматах вторым слагаемым является 64-разрядный адрес команды перехода. Адресом команды перехода является адрес команды в PSW до того, как адрес будет обновлен с целью указания очередной команды из последовательности, или адрес объекта команды выполнения (EXECUTE), если она используется. При использовании команды выполнения в режиме 24-разрядной или 31-разрядной адресации адресом команды перехода является целевой адрес с 40 или 33 нулями, соответственно, присоединенными слева.

Адрес перехода всегда содержит 64 разряда, которые пронумерованы от 0 до 63. Адрес перехода замещает разряды 64-127 текущего PSW. Способ получения адреса перехода из промежуточного значения зависит от режима адресации. Для команд перехода, которые изменяют режим адресации, используется новый режим адресации. В режиме 24-разрядной адресации разряды 0-39 промежуточного значения не учитываются, разряды 0-39 адреса перехода приравниваются к нулю, а разряды 40-63 промежуточного значения становятся разрядами 40-63 адреса перехода. В режиме 31-разрядной адресации разряды 0-32 промежуточного значения не учитываются, разряды 0-32 адреса перехода приравниваются к нулю, а разряды 33-63 промежуточного значения становятся разрядами 33-63 адреса перехода. В режиме 64-разрядной адресации разряды 0-63 промежуточного значения становятся разрядами 0-63 адреса перехода.

В случае нескольких команд перехода переход зависит от того, выполнено ли заданное условие. Когда условие не выполнено, продолжается нормальное последовательное выполнение команд, и адрес перехода не используется. При выборе перехода разряды 0-63 адреса перехода замещают разряды 64-127 текущего PSW. В ходе операции перехода адрес перехода не используется до доступа к запоминающему устройству. Исключительная ситуация при нарушении заданных условий вследствие нечетного адреса перехода и исключительные ситуации при доступе вследствие выборки команд в местоположении перехода распознаются не как часть операцию перехода, а как исключительные ситуации, связанные с выполнением команды в местоположении перехода.

В команде перехода, такой как команда перехода с сохранением (BRANCH AND SAVE), один и тот общий регистр может указываться для вычисления адреса перехода и как местоположение операнд. Вычисление адреса перехода завершается до завершения остальной операции.

В слове состояния программы (PSW), описанном в главе 4 "Управление", содержится информация, необходимая для надлежащего выполнения программы. PSW используется для управления порядком следования команд и для фиксации и указания состояния ЦП в зависимости от выполняемой программы. Активное или управляющее PSW называется текущим PSW. Команды перехода выполняют функции принятия решений, управления циклом и компоновки подпрограмм. Команда перехода влияет на порядок следования команд путем включения нового адреса команды в текущее PSW. Команды относительного перехода с использованием 16-разрядного поля 12 позволяют выбирать переход в местоположение со смещением до плюс 64 килобайта - 2 байта или минус 64 килобайта относительно местоположения команды перехода без использования базового регистра. Команды относительного перехода с использованием 32-разрядного поля 12 позволяют выбирать переход в местоположение со смещением до плюс 4 гигабайта - 2 байта или минус 4 гигабайта относительно местоположения команды перехода без использования базового регистра.

Средства принятия решений обеспечиваются командами условного перехода (BRANCH ON CONDITION), относительного условного перехода (BRANCH RELATIVE ON CONDITION) и длительного относительного условного перехода (BRANCH RELATIVE ON CONDITION LONG). Эти команды проверяют код условия, который отражает результаты большинства арифметических, логических операций и операций ввода-вывода. В коде условия, который состоит из двух разрядов, предусмотрены четыре возможные установки: 0, 1, 2 и 3.

Конкретное значение любой установки зависит от операции, которая устанавливает код условия. Например, код условия отражает такие условия, как нулевое состояние, ненулевое состояние, наибольшее значение первого операнда, равенство, переполнение и занятость подканала. После установки код условия остается без изменений, пока не будет изменен командой, которая приводит к установке отличающегося кода условия.

Управление циклом может осуществляться с использованием команд условного перехода, относительного условного перехода и длительного относительного условного перехода для проверки исходов адресной арифметики и операций счета. Для некоторых особо распространенных сочетаний арифметики и проверок предусмотрены операции перехода по значению счетчика (BRANCH ON COUNT), перехода по высокому индексу (BRANCH ON INDEX HIGH) и перехода по низкому или равному индексу (BRANCH ON INDEX LOW OR EQUAL), а также предусмотрены эквиваленты относительного перехода для этих команд. Эти переходы, являющиеся специализированными, обеспечивают повышенную эффективность выполнения этих задач.

Компоновка подпрограмм, когда не требуется изменение режима адресации, обеспечивается командами перехода и возврата (BRANCH AND LINK) и перехода с сохранением (рассмотрение команды перехода с сохранением также относится к командам относительного перехода с сохранением (BRANCH RELATIVE AND SAVE) и длительного относительного перехода с сохранением (BRANCH RELATIVE AND SAVE LONG)). Обе эти команды позволяют не только вводить новый адрес команды, но также сохранять адрес обратного перехода и соответствующую информацию. Адресом обратного перехода является адрес команды, следующей за хранящейся командой, за исключением того, что он является адресом команды, следующей за командой выполнения, целевым объектом которой является команда перехода.

Команды перехода и возврата и перехода с сохранением содержат поле R1. Они формируют адрес перехода посредством полей, которые зависят от команды. Действие команд можно обобщить следующим образом.

В режиме 24-разрядной адресации обе команды помещают адрес обратного перехода в двоичные разряды 40-63 общего регистра R1 и оставляют разряды 0-31 этого регистра без изменений. Команда перехода и возврата помещает код длины команды, а также код условия и программную маску из текущего PSW в двоичные разряды 32-39 общего регистра R1. Команда перехода с сохранением помещает нули в эти двоичные разряды.

В режиме 31-разрядной адресации обе команды помещают адрес обратного перехода в двоичные разряды 33-63, единицу в двоичный разряд 32 общего регистра R1, и оставляют разряды 0-31 регистра без изменений.

В режиме 64-разрядной адресации обе команды помещают адрес обратного перехода в двоичные разряды 0-63 общего регистра R1.

В любом режиме адресации обе команды генерируют адрес перехода под управлением текущего режима адресации. Команды помещают разряды 0-63 адреса перехода в двоичные разряды 64-127 PSW. В формате RR обе команды не осуществляют переход, если поле R2 команды равно нулю.

Видно, что в режиме 24-разрядной или 31-разрядной адресации команда перехода с сохранением помещает разряд режима базовой адресации, т.е. разряд 32 PSW в двоичный разряд 32 общего регистра R1. Команда перехода и возврата делает это в режиме 31-разрядной адресации. Команды перехода с сохранением и установки режима (BRANCH AND SAVE AND SET MODE) и перехода и установки режима (BRANCH AND SET MODE) используются, когда во время компоновки необходимо изменить режим адресации. Эти команды содержат поля R1 и R2. Действие команд можно обобщить следующим образом.

Команда перехода с сохранением и установки режима устанавливает такое же содержимое общего регистра R1, как и команда перехода с сохранением. Кроме того, команда помещает разряд режима расширенной адресации, т.е. разряд 31 PSW в двоичный разряд 63 регистра.

Если поле R1 не равно нулю, команда перехода и установки режима действует следующим образом. В режиме 24- или 31 - разрядной адресации она помещает разряд 32 PSW в двоичный разряд 32 общего регистра R1, и оставляет разряды 0-31 и 33-63 регистра без изменений. Следует отметить, что разряд 63 регистра должен быть равен нуля, если в регистре содержится адрес команда. В режиме 64 - разрядной адресации команда помещает разряд 31 PSW (единицу) в двоичный разряд 63 общего регистра R1, оставляет разряды 0-62 регистра без изменений.

Когда поле R2 не равно нулю, обе команды устанавливают режим адресации и осуществляют переход следующим образом. Разряд 63 общего регистра R2 помещается в двоичный разряд 31 PSW. Если разряд 63 равен нулю, разряд 32 регистра помещается в двоичный разряд 32 PSW. Если разряд 63 равен единице, разряд 32 PSW приравнивается к единице. Затем под управлением нового режима адресации генерируется адрес перехода на основании содержимого регистра за исключением того, что разряд 63 регистра обрабатывается как ноль. Команды помещают разряды 0-63 адреса перехода в двоичные разряды 64-127 PSW. Разряд 63 общего регистра R2 остается без изменений и, соответственно, может равняться единице после входа в вызванную программу. Если R2 является таким же, как R1, результаты в указанном общем регистре являются такими же, как в случае регистра R1. Прерывания (переключение контекста)

Механизм прерывания позволяет ЦП изменять свое состояние под действием внешних по отношению к конфигурации условий, условий внутри конфигурации или внутри самого ЦП. Чтобы обеспечить быстрое реагирование на высокоприоритетные условия и немедленное распознавание типа условия, условия прерывания сгруппированы в шесть классов: внешние, по вводу-выводу, по машинному сбою, по программе, по рестарту и по обращению к супервизору.

Прерывание состоит в сохранении текущего PSW как старого PSW, сохранении информации, идентифицирующей причину прерывания, и выборке нового PSW. Обработка возобновляется в соответствии с новым PSW. В старом PSW, сохраненном при прерывании, обычно содержит адрес команды, которая выполнялась бы следующей, если бы не произошло прерывание, что позволяет возобновлять прерванную программу. В случае прерываний по программе и по обращению к супервизору в сохраненной информации также содержится код, который определяет длину последней выполненной команды, что позволяет программе реагировать на причину прерывания. В случае некоторых программных условий, для которых нормальной реакцией является повторное выполнение команды, вызвавшей прерывание, в адресе команды прямо указывается последняя выполненная команда.

За исключением рестарта прерывание может происходить только при нахождении ЦП в рабочем состоянии. Прерывание по рестарту может происходить при остановленном ЦП или ЦП в рабочем состоянии.

Любая исключительная ситуация при доступе распознается как часть выполнения команды, которой сопутствует исключительная ситуация. Исключительная ситуация при доступе не распознается, когда ЦП пытается осуществить упреждающую выборку из недоступного местоположения или обнаруживает какое-либо другое условие возникновения исключительной ситуации при доступе, но команда перехода или прерывание изменяет последовательность команд, в результате чего команда не выполняется. Каждая команда способна вызывать исключительную ситуацию при доступе, распознаваемую по причине выборки команды. Кроме того, исключительные ситуации при доступе, сопутствующие выполнению команды, могут возникать из-за доступа к хранящемуся операнду. Исключительная ситуация при доступе вследствие выборки команды регистрируется при невозможности выборки первого полуслова команды без возникновения исключительной ситуации. Когда первое полуслово команды не вызывает исключительных ситуаций при доступе, исключительные ситуации при доступе могут регистрироваться применительно к дополнительным полусловам в зависимости от длины команды, заданной первыми двумя разрядами команды; тем не менее, когда операция может быть выполнена без доступа ко второму или третьему полусловам команды, невозможно предсказать, будет ли зарегистрирована исключительная ситуация при доступе применительно к неиспользуемой части. Поскольку регистрация исключительных ситуаций при доступе применительно к выборке команд характерна для всех команд, она не включается в определения отдельных команд.

За исключением случаев, когда в описании отдельных команд указано иное, в отношении исключительных ситуаций, связанных с доступом к местоположению операнда, действуют следующие правила. В случае операнда выбираемого типа исключительные ситуации при доступе в силу необходимости регистрируются только применительно к той части операнда, которая требуется для выполнения операции. Невозможно предсказать, будут ли зарегистрированы исключительные ситуации при доступе применительно к тем частям операнда выбираемого типа, которые не требуются для выполнения операции.

В случае операнда хранимого типа исключительные ситуации при доступе распознаются применительно ко всему операнду даже, если операция могла быть выполнена без использования недоступной части операнда. В тех ситуациях, в которых значение операнд хранимого типа характеризуется как непредсказуемое, невозможно предсказать, будет ли зарегистрирована исключительная ситуация при доступе. Всякий раз, когда доступ к местоположению операнда способен вызвать исключительную ситуацию при доступе, которая должна распознаваться, в список исключительных ситуаций в процессе выполнения программы в описании команды включается слово "доступ". Оно также указывает, какой операнд может вызвать исключительную ситуацию, которая должна распознаваться, и распознается ли исключительная ситуация при выборке или доступе к запоминающему устройству в местоположении этого операнда. Исключительные ситуации при доступе распознаются только применительно к части операнда, определяемой для каждой конкретной команды.

Исключительная ситуация в процессе выполнения операции распознается, когда ЦП пытается выполнить команду с недействительным кодом операции. Код операции может быть не назначен, или команда с этим кодом операции может быть не установлена в ЦП. Операция блокируется. Код длины команды равен 1, 2 или 3. Исключительная ситуация в процессе выполнения операции обозначается шестнадцатеричным кодом 0001 программного прерывания (или 0081, если зарегистрировано одновременное событие PER).

В некоторых моделях могут быть предложены команды, не описанные в настоящем документе, такие как команды, предусмотренные как вспомогательные или входящие в состав особых или заказных функций. Следовательно, не описанные в настоящем документе коды операций необязательно приводят к подлежащей распознаванию исключительной ситуации в процессе выполнения операции. Кроме того, эти команды могут приводить к установке режимов работы или могут иначе влиять на машину с тем, чтобы воздействовать на выполнение последующих команд. Во избежание такой работы команда, код операции которой не описан в настоящем документе, должна выполняться только, если желательна конкретная функция, соответствующая коду операции

Исключительная ситуация при нарушении заданных условий распознается, когда справедливо любое из следующего.

1. В не присвоенный двоичный разряд PSW (то есть любой из двоичных разрядов 0, 2-4, 24-30 или 33-63) вводится единица. Этот случай обрабатывается как связанная с PSW ранняя исключительная ситуация при нарушении заданных условий.

2. В двоичный разряд 12 PSW вводится единица. Этот случай обрабатывается как связанная с PSW ранняя исключительная ситуация при нарушении заданных условий.

3. PSW является недействительным по одной из следующих причин: а. значением разряда 31 PSW является единица, а значением разряда 32 является ноль; б. значениями разрядов 31 и 32 PSW являются нули, что указывает на режим 24 - разрядной адресации, при этом значениями не всех разрядов 64-103 PSW являются нули; в. значением разряда 31 PSW является ноль, а значением разряда 32 является единица, что указывает на режим 31-разрядной адресации, при этом значениями не всех разрядов 64-96 PSW являются нули. Этот случай обрабатывается как связанная с PSW ранняя исключительная ситуация при нарушении заданных условий.

4. В PSW содержится нечетный адрес команды.

5. В адресе операнда не указана целочисленная граница в команде, для которой требуется такое указание целочисленной границы.

6. В поле R команды, для которой требуется указание четного регистра, указан общий нечетный регистр.

7. Для расширенного операнда указан регистр с плавающей точкой помимо 0, 1, 4, 5, 8, 9, 12 или 13.

8. Множитель или делитель в десятеричной системе счисления содержит более 15 цифр и знак.

9. Длина поля первого операнда является меньшей или равной длине поля второго операнда при умножении или делении в десятичной системе.

10. Происходит попытка выполнения команд шифрования сообщения, шифрования сообщения со сцеплением (CIPHER MESSAGE WITH CHAINING), вычисления профиля промежуточного сообщения (COMPUTE INTERMEDIATE MESSAGE DIGEST), вычисления профиля последнего сообщения (COMPUTE LAST MESSAGE DIGEST) или вычисления кода аутентификации сообщения (COMPUTE MESSAGE AUTHENTICATION CODE), при этом код режима работы в разрядах 57-63 общего регистра 0 содержит не присвоенный или не установленный код режима работы.

11. Происходит попытка выполнения команд шифрования сообщения (CIPHER MESSAGE) или шифрования сообщения со сцеплением, при этом в поле R1 или R2 указан нечетный регистр или общий регистр 0.

12. Происходит попытка выполнения команд шифрования сообщения, шифрования сообщения со сцеплением, вычисления профиля промежуточного сообщения или вычисления кода аутентификации сообщения, при этом длина второго операнда не является кратной размеру блока данных указанной функции. Это условие возникновения исключительной ситуации при нарушении заданных условий не относится к функциям формулирования запросов.

13. Происходит попытка выполнения команды сравнения и формирования кодового слова (COMPARE AND FORM CODEWORD), при этом в общих регистрах 1, 2 и 3 изначально не содержатся четные величины.

32. Происходит попытка выполнения команды сравнения и свопинга с сохранением (COMPARE AND SWAP AND STORE), при этом выполняется одно из следующих условий:

в коде режима работы указано не присвоенное значение, в характеристике памяти указано не присвоенное значение, код режима работы равен 0, а на границе слова не указан первый операнд, код режима работы равен 1, а на границе двойного слова не указан первый операнд,

не указан второй операнд на целочисленной границе, соответствующей размеру хранящегося значения.

33. Происходит попытка выполнения команд логического сравнения длительного UNICODE (COMPARE LOGICAL LONG UNICODE) или перемещения длительного UNICODE (MOVE LONG UNICODE), при этом в содержимом общего регистра RI+1 или R3+1 не указано четное число байтов.

34. Происходит попытка выполнения команд логического сравнения строки (COMPARE LOGICAL STRING), перемещения строки (MOVE STRING) или поиска строки (SEARCH STRING), при этом значениями не всех разрядов 32-55 общего регистра 0 являются нули.

35. Происходит попытка выполнения команды вызова сжатия (COMPRESSION CALL), при этом разряды 48-51 общего регистра 0 имеют любое из двоичных значений 0000 и 0110-1111.

36. Происходит попытка выполнения команд вычисления профиля промежуточного сообщения, вычисления профиля последнего сообщения или вычисления кода аутентификации сообщения, при этом справедливо любое из следующего:

в поле R2 указан нечетный регистр или общий регистр 0, разряд 56 общего регистра 0 не равен нулю.

37. Происходит попытка выполнения команд преобразования шестнадцатеричного числа с плавающей точкой в двоичное число с плавающей точкой (CONVERT HFP ТО BFP), преобразования в постоянное число (шестнадцатеричное число с плавающей точкой или двоичное число с плавающей точкой) (CONVERT ТО FIXED (BFP or HFP)) или загрузки целого числа с плавающей точкой (двоичного числа с плавающей точкой) (LOAD FP INTEGER (BFP)), при этом в поле МЗ не указан действительный модификатор.

38. Происходит попытка выполнения команды деления на целое число (DIVIDE ТО INTEGER), при этом в поле М4 не указан действительный модификатор.

39. Происходит попытка выполнения команды выполнения, при этом целевой адрес является нечетным.

40. Происходит попытка выполнения команды извлечения пакетированного состояния (EXTRACT STACKED STATE), при этом код в двоичных разрядах 56-63 общего регистра R2 превышает 4, когда не установлено средство повторного использования ASN и LX (ASN-and-LX-reuse facility), или превышает 5, когда оно установлено.

41. Происходит попытка выполнения команды поиска крайней левой единицы (FIND LEFTMOST ONE), при этом в поле R1 указан нечетный регистр.

42. Происходит попытка выполнения команды аннулирования записи в таблице DAT (INVALIDATE DAT TABLE ENTRY), при этом значениями не всех разрядов 44-51 общего регистра R2 являются нули.

43. Происходит попытка выполнения команды загрузки FPC (LOAD FPC), при этом один или несколько разрядов второго операнда, соответствующие неподдерживаемым разрядам в регистре FPC, равны единице.

44. Происходит попытка выполнения команды загрузки адреса записи в таблице страниц (LOAD PAGE-TABLE-ENTRY ADDRESS), при этом в поле М4 команды содержится любое значение помимо двоичного числа 0000-0100.

45. Происходит попытка выполнения команды загрузки PSW (LOAD PSW), при этом значением разряда 12 двойного слова в адресе второго операнда является ноль. Распознавание этой исключительной ситуации зависит от модели.

46. Происходит попытка выполнения команды вызова монитора (MONITOR CALL), при этом в двоичных разрядах 8-11 команды не содержатся нули.

47. Происходит попытка выполнения команды перемещения страницы (MOVE PAGE), при этом в двоичных разрядах 48-51 общего регистра 0 не содержатся нули, или значениями обоих разрядов 52 и 53 регистра являются единицы.

48. Происходит попытка выполнения команды уплотнения согласно стандарту ASCII (PACK ASCII), при этом значение поля L2 превышает 31.

49. Происходит попытка выполнения команды уплотнения согласно стандарту UNICODE (PACK UNICODE), при этом значение поля L2 превышает 63 или является четной величиной.

50. Происходит попытка выполнения команды осуществления операции с плавающей точкой (PERFORM FLOATING POINT OPERATION), при этом значением разряда 32 общего регистра 0 является ноль, а одно или несколько полей в разрядах 33-63 недействительны или указывают на не установленную функцию.

51. Происходит попытка выполнения команды выполнения заблокированной операции (PERFORM LOCKED OPERATION), при этом справедливо любое из следующего:

значением разряда Т, т.е. разряда 55 общего регистра 0 является ноль, при этом код режима работы в разрядах 56-63 регистра недействителен,

значениями не всех разрядов 32-54 общего регистра 0 являются нули, в регистровом режиме доступа значение поля R3 для кодов режима работы, которые приводя к использованию списка параметров, содержащего ALET, равно нулю.

52. Происходит попытка выполнения команды осуществления функции средства синхронизации (PERFORM TIMING FACILITY FUNCTION), этом справедливо любое из следующего:

значение разряда 56 общего регистра 0 не равно нулю, в разрядах 57-63 общего регистра 0 указан не назначенный или не установленный код режима работы.

53. Происходит попытка выполнения команды передачи программы (PROGRAM TRANSFER) или передачи программы с копией (PROGRAM TRANSFER WITH INSTANCE), при этом справедливо все из следующего:

значением разряда режима расширенной адресации в PSW является ноль,

значением разряда режима базовой адресации, т.е. разряда 32 в общем регистре, указанным в поле R2 команды, является ноль,

не всеми значениями разрядов 33-39 адреса команды в том же регистре являются нули.

54. Происходит попытка выполнения команды возобновления программы (RESUME PROGRAM), при этом справедливо любое из следующего:

разряды 31, 32, и 64-127 поля PSW во втором операнде недействительны для помещения в текущее PSW. Исключительная ситуация распознается, если справедливо любое из следующего: значениями обоих разрядов 31 и 32 являются нули, при этом не всеми значениями разрядов 64-103 являются нули, значениями разрядов 31 и 32 являются ноль и единица, соответственно, при этом не всеми значениями разрядов 64-96 являются нули, значениями разрядов 31 и 32 являются единица и ноль, соответственно, значением разряда 127 является единица, не всеми значениями разрядов 0-12 в списке параметров являются нули.

55. Происходит попытка выполнения команды поиска строки согласно стандарту UNICODE (SEARCH STRING UNICODE), при этом не всеми значениями разрядов 32-47 общего регистра 0 являются нули.

56. Происходит попытка выполнения команды настройки управления адресным пространством (SET ADDRESS SPACE CONTROL) или быстрой настройки управления адресным пространством (SET ADDRESS SPACE CONTROL FAST), при этом значениями обоих разрядов 52 и 53 адреса второго операнда не являются нули.

57. Происходит попытка выполнения команды установки режима адресации (SET ADDRESSING MODE) (SAM24), при этом не всеми значениями разрядов 0-39 обновленного адреса команды в PSW, разрядов 64-103 PSW являются нули.

58. Происходит попытка выполнения команды установки режима адресации (SAM31), при этом не всеми значениями разрядов 0-32 обновленного адреса команды в PSW, разрядов 64-96 PSW являются нули.

59. Происходит попытка выполнения команды установки программируемого часами поля (SET CLOCK PROGRAMMABLE FIELD), при этом не всеми значениями разрядов 32-47 общего регистра 0 являются нули.

60. Происходит попытка выполнения команды установки FPC (SET FPC), при этом значением одного или нескольких разрядов первого операнда, соответствующих не поддерживаемым разрядам в регистре FPC, является единица.

61. Происходит попытка выполнения команды сохранения системной информации (STORE SYSTEM INFORMATION), при этом код режима работы в общем регистре 0 является действительным, и справедливо любое из следующего:

при этом не всеми значениями разрядов 36-55 общего регистра 0 и разрядов 32-47 общего регистра 1 являются нули,

адрес второго операнда не находится на 4-килобайтовой границе.

62. Происходит попытка выполнения команды преобразования два к одному (TRANSLATE TWO ТО ONE) или преобразования два к двум (TRANSLATE TWO ТО TWO), при в общем регистре длиной RI+1 не указано четное число байтов.

63. Происходит попытка выполнения команды разуплотнения согласно стандарту ASCII (UNPACK ASCII), при этом значение поля L1 превышает 31.

64. Происходит попытка выполнения команды разуплотнения согласно стандарту UNICODE (UNPACK UNICODE), при этом значение поля L1 превышает 63 или является четной величиной.

65. Происходит попытка выполнения команды обновления дерева (UPDATE TREE), при этом исходное содержание общих регистров 4 и 5 некратно 8 в режиме 24-разрядной или 31-разрядной адресации или некратно 16 в режиме 64-разрядной адресации. Выполнение команды, определенной старым PSW, блокируется. Тем не менее, в случае связанных с PSW ранних исключительных ситуаций при нарушении заданных условий (причины 1-3) операция, в ходе которой вводится новое PSW, выполняется, но немедленно после этого происходит прерывание. Код длины команды (ILC) предпочтительно равен 1, 2 или 3 и указывает длину команды, вызывающей исключительную ситуацию. Когда адрес команды является нечетным (причина 4), невозможно предсказать, равен ли ILC 1, 2 или 3. После распознавания связанной с PSW ранней исключительной ситуация при нарушении заданных условий (причины 1-3), и допущения исключительной ситуация командами загрузки PSW, загрузки расширенного PSW (LOAD PSW EXTENDED), возврата к программе (PROGRAM RETURN) или после прерывания ILC равен 0. После допущения исключительной ситуация командой установки режима адресации (SAM24, SAM31) ILC равен 1, или равен 2, если целевым объектом команды выполнения являлась команда установки режима адресации. После допущения исключительной ситуация командой установки системной маски (SET SYSTEM MASK) или командой последующего сохранения или установки системной маски (STORE THEN OR SYSTEM MASK) ILC равен 2.

Программные прерывания используются для сообщения об исключительных ситуациях, которые возникают во время выполнения программы. Программное прерывание приводит к сохранению старого PSW в ячейках 336-351 реальной памяти и выборке нового PSW из ячеек 464-479 реальной памяти. Причина прерывания указывается кодом прерывания. Код прерывания хранятся в ячейках 142-143 реальной памяти, код длины команды хранятся в двоичных разрядах 5 и 6 байта в ячейке 141 реальной памяти, при этом остальные разряды приравнены к нулям, которые хранятся в ячейке 140 реальной памяти. В некоторых случаях дополнительная информация с указанием причины прерывания хранится в ячейках 144-183 реальной памяти. Если установлено средство PER-3, в ходе программного прерывания содержимое адресного регистра прерывающих событий помещается в ячейки 272-279 реальной памяти. За исключением событий PER и исключительной ситуация в процессе выполнения криптографической операции условие, являющееся причиной прерывания, указывается кодовым обозначением, которое содержится в семи крайних правых двоичных разрядах кода прерывания. За один раз может быть указано только одно условие. Разряды 0-7 кода прерывания приравнены к нулю. Для указания событий PER значение разряда 8 кода прерывания приравнивается к единице. Когда это является единственным условием, разряды 0-7 и 9-15 также приравниваются к нулю. Когда событие PER регистрируется с другим условием программного прерывания, значением разряда 8 является единица, а значения разрядов 0-7 и 9-15 устанавливаются как для другого условия. Исключительная ситуация в процессе выполнения криптографической операции обозначается шестнадцатеричным кодом 0119 прерывания или 0199, если также зарегистрировано событие PER.

При наличии соответствующего бита маски программное прерывание может происходить только, когда значением бита маски является единица. Программная маска в PSW управляет четырьмя исключительными ситуациями, маски IEEE в регистре FPC управляют исключительными ситуациями согласно стандарту IEEE, разряд 33 в управляющем регистре 0 контролирует, не вызывает ли команда установки системной маски исключительную ситуацию в процессе выполнения особой операции, разряды 48-63 в управляющем регистре 8 управляют прерываниями вследствие событий мониторинга, иерархия масок управляет прерываниями вследствие событий PER. Если какой-либо управляющий бит маски равен нулю, ситуация не учитывается, при этом ситуация не остается ожидающей решения.

Когда новое PSW программного прерывания содержит ошибку формата PSW или приводит к распознаванию исключительной ситуации в процессе выборки команды, может иметь место последовательность программных прерываний.

Некоторые из ситуаций, регистрируемых как исключительные ситуации в процессе выполнения программы, также могут распознаваться канальной подсистемой, и в этом случае исключительная ситуация указывается в слове состояния подканала или в расширенном слове состояния.

Когда исключительная ситуация при обработке данных вызывает программное прерывание, в ячейке 147 сохраняется код исключительной ситуации при обработке данных (DXC), а в ячейках 144-146 сохраняются нули. DXC проводит различие между различными типами условий возникновения исключительной ситуации. Когда значением управляющего разряда регистра AFP (дополнительного регистра с плавающей точкой), т.е. разряда 45 управляющего регистра 0 является единица, DXC также сохраняется в поле DXC управляющего регистра с плавающей точкой (FPC). Поле DXC в регистре FPC остается без изменений при регистрации любой другой исключительной ситуации в процессе выполнения программы. DXC представляет собой 8 разрядный код, указывающий конкретную причину исключительной ситуации при обработке данных.

DXC 2 и 3 являются взаимоисключающими и имеют более высокий приоритет, чем любой другой DXC. Так, например, DXC 2 (команда BFP) превосходит по важности любую исключительную ситуацию согласно стандарту IEEE; a DXC 3 (команда DFP) превосходит по важности любую исключительную ситуацию согласно стандарту IEEE или имитированную исключительную ситуацию согласно стандарту IEEE. В качестве другого примера, если существуют условия как для DXC 3 (команды DFP), так и для DXC 1 (регистра AFP), регистрируется DXC 3. Когда применима как исключительная ситуация при нарушении заданных условий, так и исключительная ситуация при обработке данных регистра AFP, невозможно предсказать, какая из них будет зарегистрирована.

Исключительная ситуация при адресации распознается при попытке обращения ЦП к ячейке основного запоминающего устройства, которая недоступна в конфигурации. Ячейка основного запоминающего устройства недоступна в конфигурации, когда ячейка не установлена, когда запоминающее устройство не находится в конфигурации или, когда отключено питание запоминающего устройства Адрес, указывающий ячейку запоминающего устройства, которая недоступна в конфигурации, называется недействительным. Когда адрес команды является недействительным, операция блокируется. Операция также блокируется, когда адрес целевого объекта команды выполнения является недействительным. Кроме того, единица действия блокируется, когда при доступе к таблице или к записи в таблице возникает исключительная ситуация при адресации. Таблицами и записями в таблицах, к которым относится правило, являются координируемая таблица управления устройствами, запись во второй таблицы основного ASN и записи в списке доступа, первая таблица региона, вторая таблица региона, третья таблица региона, таблица сегментов, таблица страниц, таблица связей, первая таблица связей, вторая таблица связей, таблица входов, первая таблица ASN, вторая таблица ASN, таблица полномочий, стек связей и трассировочная таблица. Исключительные ситуации при адресации приводят к блокировке, когда они возникают при обращении к первой таблице региона, второй таблице региона, третьей таблице региона, таблице сегментов и таблице страниц в случае подразумеваемых обращений к динамическому преобразованию адреса и обращений, связанных с выполнением команд загрузки адреса записи в таблицы страниц, загрузки действительного адреса (LOAD REAL ADDRESS), сохранения действительного адреса (STORE REAL ADDRESS) и проверки защиты (TEST PROTECTION). Аналогичным образом, исключительные ситуации при адресации в случае обращения к координируемой таблице управления устройствами, записи во второй таблицы основного ASN, списку доступа, второй таблице ASN или таблице полномочий приводят к подавлению, когда они возникают в случае преобразовании регистра доступа, осуществляемого в подразумеваемой форме или в составе команд загрузки адреса записи в таблицы страниц, загрузки действительного адреса, сохранения действительного адреса, проверки адреса (TEST ADDRESS) или проверки защиты. За исключением некоторых конкретных команд, выполнение которых блокируется, операция прекращается, когда адрес операнда может быть преобразован, но в нем указано недоступное местоположение. В случае прекращения изменения могут касаться только полей результатов. В данном контексте термин "поле результата" включает код условия, регистры и любые ячейки запоминающего устройства, которые имеются и, как указано в команде, должны быть изменены. Выбираемое обращение к хранимому операнду

Когда байты хранимого операнда участвуют в выполнении команды только в качестве источника, операнд называется операндом выбираемого типа, а обращение к местоположению называется выбираемым обращением к хранимому операнду. Операнд выбираемого типа задается в определениях отдельных команд путем указания того, что исключительная ситуация при доступе является выбираемой.

Доступ ко всем разрядам в одном байте операнда выбираемого типа осуществляется одновременно. Когда операнд состоит из нескольких байтов, байты могут выбираться из памяти постепенно, по одному байту за один раз. Если не оговорено иное, байты не обязательно выбираются в какой-либо конкретной последовательности.

Выбираемые обращения к хранимому операнду одной команды происходят после обращений к операндам всех предыдущих команды и до обращений к операндам последующих команд с точки зрения других ЦП и канальных программ. Операнды любой одной команды выбираются в последовательности, заданной для этой команды. ЦП может выбирать операнды команд до выполнения команд. Не существует определенного ограничения промежутка времени между выборкой операнда и его использованием. Тем не менее, с точки зрения самого ЦП выбираемые обращения к его хранимым операндам ЦП осуществляются согласно концептуальной последовательности.

В случае некоторых особых команд выбираемые обращения к множеству операндов могут оказаться заблокированными для некоторых случаев доступа со стороны других ЦП и канальных программ. Такое выбираемое обращение называется заблокированным выбираемым обращением. Случаи выбираемого доступа, связанные с заблокированным выбираемым обращением, необязательно происходят непосредственно друг за другом, но все случаи обращения к запоминающему устройству со стороны других ЦП не могут происходить в тех же местоположениях, что и заблокированное выбираемое обращение в промежутке между случаями выбираемого доступа, связанными с заблокированным выбираемым обращением.

Выбираемое обращение к хранимому операнду команды разделенной загрузки пары может оказаться заблокированным выбираемым обращением. В коде условия указывается, способна ли команда разделенной загрузки пары выбирать оба операнда посредством заблокированного выбираемого обращения.

Хранимое обращение к операнду хранимого типа

Когда байты хранимого операнда участвуют в выполнении команды только в качестве адреса назначения вплоть до замены результатом, операнд называется операндом хранимого типа, а обращение к местоположению называется хранимым обращением к операнду хранимого типа. Операнд хранимого типа задается в определениях отдельных команд путем указания того, что исключительная ситуация при доступе является хранимой.

Доступ ко всем разрядам в одном байте операнда хранимого типа осуществляется одновременно. Когда операнд состоит из нескольких байтов, байты могут выбираться из памяти постепенно, по одному байту за один раз. Если не оговорено иное, байты не обязательно выбираются в какой-либо конкретной последовательности.

ЦП может задерживать сохранение результатов в запоминающем устройстве. Не существует определенного ограничения промежутка времени, в течение которого результаты могут ожидать охранения. Эта задержка не влияет на последовательность, в которой результаты сохраняются в запоминающем устройстве.

Результаты выполнения одной команды сохраняются в запоминающем устройстве после сохранения результатов выполнения всех предыдущих команд и до сохранения результатов выполнения последующих команд с точки зрения других ЦП и канальных программ. Результаты выполнения любой одной команды сохраняются в последовательности, указанной для этой команды.

ЦП не вызывает операнды, записи в таблицах ART или записи в таблицах DAT из ячейки запоминающего устройства, пока в этой ячейке не будет сохранена вся информация, которую ЦП предназначил для нее. Предварительно выбранные команды могут оказываться обновленными до того, как информация оказывается в запоминающем устройстве.

Операция сохранения заведомо выполняются только в результате операции последовательного упорядочения и до перехода ЦП в состояние останова.

Блочно-параллельные обращения

В случае некоторых обращений определено, что случаи доступа ко всем байтам полуслова, слова, двойного слова или учетверенного слова имеют вид блочно-параллельных обращений с точки зрения других ЦП и канальных программ. Блоком в данном контексте называется полуслово, слово, двойное слово или учетверенное слово. Когда определено, что обращение выбираемого типа имеет вид параллельного в блоке, выборка блока из памяти другим ЦП или канальной программой не разрешается в то время, когда происходит выборка байтов, содержащихся в блоке. Кода определено, что обращение хранимого типа имеет вид параллельного в блоке, доступ к блоку в целях выборки или сохранения другим ЦП или канальной программой не разрешается в то время, когда происходит сохранение байтов в блоке.

Последовательное упорядочение ЦП

Используемый далее термин команда последовательного упорядочения означает команду, инициирующую выполнение одной или нескольких функций последовательного упорядочения. Термин операция последовательного упорядочения означает единицу действия в рамках команды или машинную операцию, такую как прерывание, которая инициирует выполнение функции последовательного упорядочения.

Существует следующая последовательность событий, связанных с операцией последовательного упорядочения.

1. С точки зрения других ЦП и канальных программ завершаются все концептуально предшествующие обращения к запоминающему устройству со стороны ЦП. В их число входят все концептуально предшествующие операции сохранения и изменения ключей хранения.

2. Выполняется нормальная функция, связанная с операцией последовательного упорядочения. В случае выполнение команды происходит выборка операндов, и завершается сохранение результатов. Исключительными ситуациями являются команды загрузки PSW, загрузки расширенного PSW и установки префикса (SET PREFIX), когда операнд может выбираться до завершения предыдущих операций сохранения, и прерывания, когда код прерывания и сопутствующие поля могут сохраняться до последовательного упорядочения. Выборка команды последовательного упорядочения происходит до выполнения команды и может предшествовать выполнению предыдущих команд, но не может предшествовать выполнению какой-либо предыдущей операции последовательного упорядочения. В случае прерывания происходит сохранение старого PSW, кода прерывания и другой информации, если она имеется, и выборка нового PSW, но необязательно в этой последовательности.

3. Наконец, может начинаться выборка команд и доступ к операндам концептуально последующих операций.

Функция последовательного упорядочения влияет на последовательность обращений к памяти под управлением ЦП, в котором выполняется функция последовательного упорядочения. Она не влияет на последовательность обращений к памяти под управлением других ЦП и канальных программ. Последовательное упорядочение конкретного операнда Некоторые команды инициируют операцию последовательного упорядочения конкретного операнда команды. С точки зрения других ЦП и канальных подсистем операция последовательного упорядочения конкретного операнда состоит в завершении всех концептуально предшествующих обращений к памяти со стороны ЦП до того, как могут произойти концептуально последующие обращения к конкретному хранимому операнду команды. По завершении команды, инициирующей операцию последовательного упорядочения конкретного операнда, завершается сохранение команды с точки зрения других ЦП и канальных программ. Выполнение команды блокировки

При выполнении команды, в частности, в мультипроцессорной системе, в которой команда может осуществлять доступ к ресурсам, которые используются совместно с другими процессорами, программе требуется заблокировать доступность ресурсов для других процессоров с целью предотвращения доступа других процессоров к ресурсу во время выполнения команды. В противном случае могут быть получены непредсказуемые результаты. В некоторых архитектурах для команд предусмотрены функциональные возможности блокировки ресурсов во время ответственной части выполнения команды. Ресурсы, подверженные возмущающему воздействию со стороны совместно используемых процессоров, включают память и кэш-памяти в большинстве мультипроцессоров. Другие ресурсы процессоров, которые могут совместно использоваться, являются известными и указываются в соответствующих описаниях архитектур. Некоторыми функциональными возможностями выполнения команды, которые подвержены воздействию ресурсов без блокировки, являются, например, уже описанные выбираемые обращения к хранимым операндам, хранимые обращения к хранимым операндам, блочно-параллельные обращения, последовательные упорядочения ЦП и последовательные упорядочения конкретного операнда.

В настоящем изобретение предложена архитектура, в которой для некоторых команд не требуется блокировка за счет обеспечения зависящей от реализации проверки того, подверглась ли команда возможному влиянию со стороны ресурса, и установки индикатора для указания того, что команда завершена без какой-либо возможности воздействия со стороны вмешивающегося ресурса, который мог повлиять на структурированное действие команды, или подверглась воздействию со стороны вмешивающегося ресурса. Таким образом, команда может быть записана таким образом, чтобы после выполнения такой команды осуществлялась проверка индикатора, чтобы определять, повлияло ли на результат вмешательство со стороны другого процессора. Если проверка не пройдена, вызывается программа восстановления. В одном из вариантов осуществления индикатором может являться код условия, а проверкой может являться проверка кода условия и обратный переход к повторному выполнению команды, подвергшейся вмешательству. Средство разделенной загрузки пары

В многопоточных языках программирования, таких как Java требуется синхронизация структур данных и объектов с целью обеспечения правильности и согласованности состояния в потоках приложений. Один из типичных механизмов обеспечения такой согласованности состоит во внедрении блокировочного слова в структуры данных или объекты, которые совместно используются потоками. В таком случае потоки могут использовать команды неделимого обновления, такие как сравнения и свопинга с целью синхронизации принадлежности структуры данных. Например, если рассмотреть в данном случае объект О:

Object О {

intptr_t lock_id;

field а;

field b;

field с;

};

lock_id имеет пустое значение NULL в незаблокированном состоянии. Если какому-либо потоку желательно осуществить чтение или запись в объект О, он должен успешно выполнить команду сравнения и свопинга (CAS) своего thread_id в lock_id и тем самым заявить о принадлежности объекта. Например:

Rtid=thread_id;

Rnull=0;

// попытка неделимого обновления lock_id в случае пустого значения NULL при Rtid

//

если (CAS Rtid, Rnull, (0.1ock_id))

{

// команда сравнения и свопинга выполнена успешно: объект успешно заблокирован

//

чтение О.а;

O.lock_id=NULL;

}

или

{

// команда сравнения и свопинга не выполнена:

// объект не заблокирован, выполнить другое действие

// или короткое ожидание и новая попытка

//

}

В некоторых архитектурах вычислительных машин для использования команды сравнения и свопинга требуется исключительное владение базовой строкой кэша, в которой хранится lock_id. Получение исключительного владения строкой кэша может являться очень дорогостоящим, поскольку требует аннулирования строки кэша в других процессорах и(или) повторной выборки строки КЭШа в процессоре-владельце. Результатом этого может становиться увеличение окон конкуренции, что по существу способно усиливать конкуренцию за блокировку, которая не имела бы место, если бы операция блокировки была своевременной. Следует отметить, что для разблокирования объекта путем присвоения lock_id пустого значения NULL обычно требуется второе сохранение lock_id. Для этого фактически может требоваться повторное получение исключительного доступа к содержащей lock_id строке кэша.

Следовательно, в ситуациях, в которых синхронизация используется для считывания поля из синхронизированной структуры данных, необходимость записи в содержащую lock_id строку кэша, когда для фактического синхронизированного считывание поля объекта не требуется какая-либо форма исключительного доступа, является особо дорогостоящей. В настоящем изобретении предложено новое аппаратное средство неделимой загрузки пары разделенных ячеек памяти (команда разделенной загрузки пары). Операция разделенной загрузки пары

В настоящем изобретении предложено новое аппаратное средство, называемое разделенной загрузкой пары (LPD). Это средство используется для неделимого считывания пары разделенных элементов запоминающего устройства. Оно обеспечивает механизм, гарантирующий, что согласованность обоих элементов или, более точно, отсутствие промежуточных обновлений двух разделенных ячеек памяти при их загрузке. Например:

// Попытка согласованной загрузки O.lock_id и О.а

//

LPD lock=(0.1ock id), f=(0.a);

если (lock==0)

{

// Объект не заблокирован, поле успешно загружено }

или

{

// Объект заблокирован, выполнить другое действие или повторить попытку

}

Следует отметить, что lock_id не будет сохранен при синхронизированной загрузке поля из объекта О, следовательно, не требуется исключительное владение строками кэша. В альтернативных реализациях LPD могут быть предусмотрены менее жесткие требования к неделимости. Например, в LPD может быть предусмотрена обратная связь с пользователем, чтобы определять, была ли загрузка пары согласована путем использования кода условия. В других дополнительных реализациях могут быть предусмотрены установки код условия, указывающие, имел ли один из операндов пустое значение NULL при загрузке. Например:

// Попытка согласованной загрузки O.lock_id и О.а

//

cond_code=lock=(0.lock_id), f=(0.a); если ((cond_code&LPD_SUCCESSFUL_FLAG)=0 && (cond_code&LPD_NULLOP)=1) {

// LPD выполнена успешно, a O.lock_id имел пустое значение NULL

//

}

или

{

// LPD не выполнена, или объект заблокирован, выполнить другое действие или повторить попытку

}

Программное использование команда разделенной загрузки/сохранения (разделенной загрузки пары)

Как показано на фиг.9, выполнение на шаге 901 программы предпочтительно может включать одну или несколько команд разделенной загрузки/сохранения (LSD), при выполнении на шаге 903 которых на основании кода операции команд LSD осуществляется попытка неделимой загрузки или сохранения данных в память/из памяти и задается код условия, указывающий, имела ли операция вид неделимой. Если процессор определяет, что данные, загружаемые из памяти (или сохраняемые в памяти) могли быть повреждены в результате промежуточной операции обращения к запоминающему устройству из другого процессора или устройства ввода-вывода, коду условия присваивается определенное значение (например, сс=3). Программа проверяет, это значение на шаге 904 (например, с помощью команды условного перехода) и принимает меры, если операция не имела вид неделимой (сс=3), такие как осуществление заданного числа попыток повторения команды LSD (например, 10 попыток) до ее успешного выполнения. Если в одном из вариантов осуществления на шаге 906 определено, что заданное показание отсчета не равно 0, оно будет уменьшено, а команда LPD выполнена повторно. Если команда не будет успешно выполнена после определенного числа попыток, вызывается особая программа 909, в которой используется другое блокировочное средство для выполнения неделимых операций LSD обращения к запоминающему устройству. В различных вариантах осуществления поддерживаются операции загрузки или операции обращения к запоминающему устройству, неделимый доступ к одному или нескольким разделенным операндам и индикаторы помимо кодов условий.

Эта команда предпочтительно используется в программе для вызова хранимых в памяти разделенных операндов, при этом программа выполняет первую подпрограмму 901, содержащую команды вызова хранимых в памяти разделенных операндов, а команды содержат команду 902 разделенной загрузки пары, при выполнении которой на шаге 903 из памяти загружаются два разделенных операнда и устанавливается значение кода условия. После выполнения LPD на шаге 904 осуществляется проверка предпочтительно с помощью команды условного перехода. Если в результате проверки значения кода условия на шаге 905 определено (сс=3), что два разделенных операнда могли быть загружены в любой из двух разделенных операндов с промежуточной операцией обращения к запоминающему устройству, выполняется вторая подпрограмма 909, содержащая команды вызова из памяти хранимых разделенных операндов. Если значение кода условия (сс=0) указывает, что два разделенных операндов были загружены в любой из двух разделенных операндов без промежуточной операции обращения к запоминающему устройству, выполняется вторая подпрограмма для использования загруженных двух разделенных операндов, и выполнение программы 901 продолжается.

В одном из вариантов осуществления выполнение второй программы повторяется, пока значение кода условия (сс=0) не будет указывать, что два разделенных операнда были загружены в любой из двух разделенных операндов без промежуточной операции обращения к запоминающему устройству.

В одном из вариантов осуществления устанавливается предельное значение (значение отсчета) 901 для повторного выполнения. Если значение кода условия (сс=3), указывает, что два разделенных операнда могли быть загружены в любой из двух разделенных операндов с промежуточной операцией обращения к запоминающему устройству, выполнение второй программы повторяется до наступления одного из следующего: на шаге 906, определено, что вторая программа повторно выполнена то число раз, которое задано предельным значением, или значение кода условия (сс=0), указывает, что два разделенных операнда были загружены в любой из двух разделенных операндов без промежуточной операции обращения к запоминающему устройству.

В одном из вариантов осуществления команда разделенной загрузки пары инициирует загрузку двух разделенных операндов в соответствующие положения общего регистра.

Команда разделенной загрузки/сохранения (разделенной загрузки пары)

В одном из вариантов осуществления в процессоре мультипроцессорной системы, показанной на фиг.10, выполняется команда разделенной загрузки/сохранения (LSD). Как показано на фиг.7, команда разделенной загрузки/сохранения используется на шаге 701 для выполнения с целью загрузки данных памяти 708 в общие регистры 707 процессора, при этом команда разделенной загрузки/сохранения содержит код операции, выполнение предусматривает выполнение заданной LSD операции 702 на основании полученного кода операции, а операция 702 предусматривает осуществление доступа к одному или нескольким операндам в памяти. Если на шаге 703 определено, что в результате события обращения к запоминающему устройству из другого процессора мультипроцессорной системы во время доступа к одному или нескольким операндам в памяти мог быть изменен один из одного или нескольких операндов, устанавливается первое значение индикатора 705, 706, указывающее, что в результате события обращения к запоминающему устройству из другого процессора мультипроцессорной системы во время доступа к одному или нескольким операндам в памяти мог быть изменен один из одного или нескольких операндов.

В одном из вариантов осуществления первое значением индикатора является любое из следующего: первое значение кода условия или второе значение кода условия. Если на шаге 703 определено, что в результате события обращения к запоминающему устройству во время упомянутого доступа мог быть изменен первый операнд в памяти или второй операнд в памяти из одного или нескольких операндов, устанавливается первое значение кода условия 705, указывающее любое из следующего: во время упомянутого доступа мог быть изменен первый операнд в памяти или второй операнд в памяти. Если на шаге 703 определено, что в результате сохранения во время упомянутого доступа не был изменен первый операнд в памяти или второй операнд в памяти, устанавливается второе значение кода условия 706, указывающее, что во время упомянутого доступа не был изменен ни первый операнд в памяти, ни второй операнд в памяти.

В варианте осуществления, проиллюстрированном на фиг.8, командой LSD является команда разделенной загрузки пары (LPD), при этом осуществление доступа к одному или нескольким операндам в памяти включает шаг 805 выборки из памяти первого операнда и второго операнда, и дополнительные шаги 806, 807 сохранения выбранного первого операнда в первом регистре, указанном в команде LPD, и сохранения выбранного второго операнда во втором регистре, указанном в команде LPD.

В одном из вариантов осуществления команда разделенной загрузки пары содержит поле первого общего регистра (В1), указывающее первый общий регистр, поле второго общего регистра (В2), указывающее второй общий регистр, и поле третьего общего регистра (R3), указывающее первый регистр и второй регистр, при этом из первого общего регистра, указанного в поле первого общего регистра, на шаге 801 извлекают первый адрес, который используется для выборки первого операнда в памяти. Из второго общего регистра, указанного в поле второго общего регистра, на шаге 802 извлекают второй адрес второго операнда в памяти, который используется для выборки второго операнда в памяти. Операция разделенной загрузки пары включает сохранение первого операнда в первом регистре 806, который является старшей частью общего регистра, указанного в поле третьего общего регистра, и сохранение второго операнда во втором регистре 807, который является младшей частью общего регистра, указанного в поле третьего общего регистра.

В одном из вариантов осуществления, в котором команда разделенной загрузки пары дополнительно содержит первое поле смещения и второе поле смещения, на шаге 803 арифметически складывается первое поле смещения с полученным первым адресом с целью формирования первого адреса памяти для выборки первого операнда в памяти. На шаге 804 арифметически складывается второе поле смещения с полученным вторым адресом с целью формирования второго адреса памяти для выборки второго операнда в памяти.

В одном из вариантов осуществления от множества процессоров мультипроцессорной системы принимаются события обращения к запоминающему устройству, и в памяти сохраняются данные принятых операций обращения к запоминающему устройству.

В одном из вариантов осуществления, в котором команда разделенной загрузки пары, заданная для определенной архитектуры, выбирается и выполняется центральным процессором с другой архитектурой, при этом команда разделенной загрузки пары интерпретируется с целью определения заданной программы системы программного обеспечения для эмуляции команды разделенной загрузки пары и выполняется путем выполнения заданной программы системы программного обеспечения с целью осуществления шагов способа выполнения машинной команды.

Как показано на фиг.6, на которой проиллюстрировано два примера форм разделенной загрузки пары машинных команд (LPD и LPDG) с определенной архитектурой. 48 разрядов команды включают код операции (разряды 0-8: 12-15), поля B1, В2 и R3 для обозначения, соответственно, первого (В1), второго (В2) и третьего (R3) регистров общего назначения и поля D1 и D2 смещения для использования в сочетании с содержимым соответствующих регистров В1 и В2 общего назначения с целью определения адресов памяти двух операндов для неделимой (блочно-параллельной) выборки без промежуточной операции обращения к запоминающему устройству из другого процессора, пока осуществляется выборка обоих операндов.

В общем регистре R3 указан четный регистр из четной/нечетной регистровой пары (в четном регистре содержатся старшие разряды, а в нечетном регистре содержатся младшие разряды).

При выполнении команды первый операнд без изменений помещается в четный регистр третьего операнда, а второй операнд без изменений помещается в нечетный регистр третьего операнда, а в регистре кода условия устанавливается значение кода условия. Значение кода условия указывает, осуществлена ли выборка первого и второго операндов посредством блочно-параллельного заблокированного выбираемого обращения. Иными словами, была ли осуществлена неделимая операция без какой-либо промежуточной операции обращения к запоминающему устройству со стороны какого-либо другого процессора.

В случае LPD первым и вторым операндом являются хранимые 32-разрядные "слова", а третий операнд содержится в разрядах 32-63 общих регистров R3 и R3+1; разряды 0-31 регистров остаются без изменений. В случае LPDG первым и вторым операндом являются хранимые 64-разрядные "двойные слова", а третий операнд содержится в разрядах 0-63 общих регистре R3 и R3+1.

Когда с точки зрения других ЦП выборка первого и второго операнда был; осуществлена путем блочно-параллельного заблокированного выбираемого обращения, устанавливается код условия 0. Когда выборка первого и второго операнда не была осуществлена путем блочно-параллельного заблокированного выбираемого обращения (неделимой операции), устанавливается код условия 3. Загрузка третьего операнда происходит независимо от кода условия.

Смещение первого и второго операндов обрабатывается как 12-разрядное двоичное целое число без знака.

Первый и второй операнды LPD должны быть указаны на границе слова. Первый и второй операнды LPDG должны быть указаны на границе двойного слова. В качестве общего регистра R3 должен быть указан четный регистр. В противном случае распознается исключительная ситуация при нарушении заданных условий.

Результирующий код условия

0 Регистровая пара, загруженная путем заблокированного выбираемого обращения

1 -

2 -

3 Регистровая пара, не загруженная путем заблокированного выбираемого обращения

Исключительные ситуации в процессе выполнения программы Доступ (выборка, операнды 1 и 2)

Операция (если не установлено средство блокировки доступа) Спецификация Комментарии к программированию

1. Установка кода условия зависит от обращений к запоминающему устройству со стороны других ЦП в конфигурации.

2. Когда значением результирующего кода условия является 3, программа может осуществить обратный переход с целью повторного выполнения команды разделенной загрузки пары. Тем не менее, после многократных неудачных попыток осуществить заблокированное выбираемое обращение, в программе должно использоваться альтернативное средство последовательного упорядочения доступа к хранящимся операндам. Рекомендуется, чтобы программа повторно выполняла команду разделенной загрузки пары не более 10 раз до перехода к альтернативной ветви.

3. Программа должна быть рассчитана на ситуацию, в которой никогда не устанавливается код условия 0.

Как показано на фиг.10, в одном из вариантов осуществления предусмотрено множество из п процессоров (Р1-Рп) 1001, 1002, 1003, 1004, совместно использующих память 1005, при этом каждый процессор 1001 может иметь кэши для кэширования хранимых в памяти операндов, блоки загрузки/сохранения для доступа к данным в памяти, блоки выполнения команд для выполнения функции команд на основании кода операции команды и динамическое преобразование адреса (DAT) для преобразования виртуальных (логических) адресов в действительные (абсолютные) адреса памяти, включая TLB для кэширования DAT-преобразований с целью повышения эффективности. Процессоры могут совместно использовать периферийные устройства 1006 (ЗУПД/ЗУ на магнитной ленте) посредством системной шины или могут иметь локальные периферийные устройства.

Изложенное выше описание может использоваться для обеспечения понимания терминологии и структуры одного из вариантов осуществления компьютерной системы. Настоящее изобретение не ограничено системой z/Architecture или ее описанием. Настоящее изобретение и его идеи, изложенные в описании, могут выгодно применяться в других архитектурах производителей других вычислительных машин.

Хотя в описании проиллюстрирован и рассмотрен предпочтительный вариант осуществления изобретения, подразумевается, что изобретение не ограничено точной раскрытой в нем конструкцией, и охватывает все изменения и модификации, входящие в его объем, ограниченный прилагаемой формулой изобретения.

1. Компьютерно-реализуемый способ выполнения команды разделенной загрузки/сохранения (LSD) в процессоре мультипроцессорной системы, включающий:
получение команды разделенной загрузки/сохранения, содержащей код операции для выполнения, включающего:
выполнение указанной в команде LSD операции на основании полученного кода операции, при этом операция представляет собой осуществление доступа к одному или нескольким операндам в памяти,
в зависимости от того, мог ли один из одного или нескольких операндов быть изменен во время доступа к одному или нескольким операндам в памяти в результате события обращения к запоминающему устройству из другого процессора мультипроцессорной системы, установку первого значения индикатора, содержащего любое из следующего: первое значение кода условия или второе значение кода условия, при этом способ дополнительно включает:
если определено, что любой из следующего: первый операнд в памяти или второй операнд в памяти из одного или нескольких операндов, мог быть изменен во время упомянутого доступа в результате события обращения к запоминающему устройству, установку первого значения кода условия, указывающего, что во время упомянутого доступа мог быть изменен первый операнд в памяти или второй операнд в памяти, и
если определено, что в результате события обращения к запоминающему устройству во время упомянутого доступа не был изменен ни первый операнд в памяти, ни второй операнд в памяти, установку второго значения кода условия, указывающего, что во время упомянутого доступа не был изменен ни первый операнд в памяти, ни второй операнд в памяти.

2. Способ по п.1, в котором командой LSD является команда разделенной загрузки пары (LPD), доступ к одному или нескольким операндам в памяти представляет собой выборку первого операнда и второго операнда из памяти, при этом способ дополнительно включает:
сохранение выбранного первого операнда и выбранного второго операнда в одном или нескольких регистрах, указанных в команде LPD.

3. Способ по п.2, в котором команда разделенной загрузки пары содержит поле первого общего регистра, указывающее первый общий регистр, поле второго общего регистра, указывающее второй общий регистр, и поле третьего общего регистра, указывающее первый регистр первый регистр и второй регистр, при этом способ дополнительно включает:
извлечение первого адреса из первого общего регистра, указанного в поле первого общего регистра,
использование извлеченного первого адреса для вызова первого операнда в памяти,
извлечение второго адреса второго операнда из второго общего регистра, указанного в поле второго общего регистра, и
использование извлеченного второго адреса для вызова второго операнда в памяти,
при этом указанной в команде LSD операцией является операция разделенной загрузки пары, одним или несколькими регистрами является пара регистров, состоящая из первого регистра и второго регистра, первый регистр имеет четный адрес, указанный в поле третьего регистра (R3), второй регистр имеет нечетный адрес, указанный в поле третьего регистра с приращением (R3+1), и первый операнд хранится в первом регистре, а второй операнд хранится во втором регистре.

4. Способ по п.3, в котором полученная команда разделенной загрузки пары дополнительно содержит первое поле смещения и второе поле смещения, при этом способ дополнительно включает:
арифметическое сложение первого поля смещения и извлеченного первого адреса с целью формирования первого адреса памяти для выборки первого операнда в памяти, и
арифметическое сложение второго поля смещения и извлеченного второго адреса с целью формирования второго адреса памяти для выборки второго операнда в памяти.

5. Способ по п.1, дополнительно включающий:
прием от множества процессоров мультипроцессорной системы событий обращения к запоминающему устройству, и
сохранение в памяти данных принятых операций обращения к запоминающему устройству.

6. Способ по п.4, в котором команда разделенной загрузки пары, заданная для определенной архитектуры вычислительной машины, выбирается и выполняется центральным процессором с альтернативной архитектурой, при этом способ дополнительно включает:
интерпретацию команды разделенной загрузки пары с целью определения заданной программы системы программного обеспечения для эмуляции команды разделенной загрузки пары, и
выполнение команды разделенной загрузки пары путем выполнения заданной программы системы программного обеспечения с целью осуществления шагов способа выполнения машинной команды.

7. Компьютерная система для выполнения команды разделенной загрузки/сохранения (LSD) в процессоре мультипроцессорной системы, содержащая:
память,
устройство обработки, связанное с памятью и содержащее блок выборки команд для выборки команд из памяти и один или несколько блоков выполнения команд для выполнения выбранных команд,
при этом компьютерная система способна осуществлять способ, включающий:
получение команды разделенной загрузки/сохранения, содержащей код операции для выполнения, включающего:
выполнение указанной в команде LSD операции на основании полученного кода операции, при этом операция представляет собой осуществление доступа к одному или нескольким операндам в памяти,
в зависимости от того, мог ли один из одного или нескольких операндов быть изменен во время доступа к одному или нескольким операндам в памяти в результате события обращения к запоминающему устройству из другого процессора мультипроцессорной системы, установку первого значения индикатора, содержащего любое из следующего: первое значение кода условия или второе значение кода условия, при этом способ дополнительно включает:
если определено, что любой из следующего: первый операнд в памяти или второй операнд в памяти из одного или нескольких операндов, мог быть изменен во время упомянутого доступа в результате события обращения к запоминающему устройству, установку первого значения кода условия, указывающего, что во время упомянутого доступа мог быть изменен первый операнд в памяти или второй операнд в памяти, и
если определено, что в результате события обращения к запоминающему устройству во время упомянутого доступа не был изменен ни первый операнд в памяти, ни второй операнд в памяти, установку второго значения кода условия, указывающего, что во время упомянутого доступа не был изменен ни первый операнд в памяти, ни второй операнд в памяти.

8. Компьютерная система по п.7, в которой командой LSD является команда разделенной загрузки пары (LPD), доступ к одному или нескольким операндам в памяти представляет собой выборку первого операнда и второго операнда из памяти, и при этом дополнительно обеспечивается:
сохранение выбранного первого операнда и выбранного второго операнда в одном или нескольких регистрах, указанных в команде LPD.

9. Компьютерная система по п.8, в которой команда разделенной загрузки пары содержит поле первого общего регистра, указывающее первый общий регистр, поле второго общего регистра, указывающее второй общий регистр, и поле третьего общего регистра, указывающее первый регистр и второй регистр, и при этом дополнительно обеспечивается:
извлечение первого адреса из первого общего регистра, указанного в поле первого общего регистра,
использование извлеченного первого адреса для вызова первого операнда в памяти,
извлечение второго адреса второго операнда из второго общего регистра, указанного в поле второго общего регистра, и
использование извлеченного второго адреса для вызова второго операнда в памяти,
при этом указанной в команде LSD операцией является операция разделенной загрузки пары, одним или несколькими регистрами является пара регистров, состоящая из первого регистра и второго регистра, первый регистр имеет четный адрес, указанный в поле третьего регистра (R3), второй регистр имеет нечетный адрес, указанный в поле третьего регистра с приращением (R3+1), первый операнд хранится в первом регистре, а второй операнд хранится во втором регистре.

10. Компьютерная система по п.9, в которой полученная команда разделенной загрузки пары дополнительно содержит первое поле смещения и второе поле смещения, и при этом дополнительно обеспечивается:
арифметическое сложение первого поля смещения и извлеченного первого адреса с целью формирования первого адреса памяти для выборки первого операнда в памяти, и
арифметическое сложение второго поля смещения и извлеченного второго адреса с целью формирования второго адреса памяти для выборки второго операнда в памяти.

11. Компьютерная система по п.7, в которой дополнительно обеспечивается:
прием от множества процессоров мультипроцессорной системы событий обращения к запоминающему устройству, и
сохранение в памяти данных принятых операций обращения к запоминающему устройству.

12. Компьютерная система по п.10, в которой команда разделенной загрузки пары, заданная для определенной архитектуры вычислительной машины, выбирается и выполняется центральным процессором с альтернативной архитектурой, при этом дополнительно обеспечивается:
интерпретация команды разделенной загрузки пары с целью определения заданной программы системы программного обеспечения для эмуляции команды разделенной загрузки пары, и
выполнение команды разделенной загрузки пары путем выполнения заданной программы системы программного обеспечения с целью осуществления шагов способа выполнения машинной команды.

13. Компьютерно-реализуемый способ вызова хранимых в памяти разделенных операндов, включающий:
выполнение процессором первой подпрограммы, содержащей одну или несколько команд вызова хранимых в памяти разделенных операндов, включающих команду разделенной загрузки пары для загрузки двух разделенных операндов из памяти и установки значения кода условия,
если значение кода условия указывает, что два разделенных операнда могли быть загружены с использованием промежуточной операции обращения к запоминающему устройству в любой из двух разделенных операндов из другого процессора, инициирование выполнения второй подпрограммы, содержащей команды вызова из памяти хранимых разделенных операндов,
если значение кода условия указывает, что два разделенных операнда были загружены в любой из двух разделенных операндов без промежуточной операции обращения к запоминающему устройству, переход к третьей подпрограмме использования загруженных двух разделенных операндов.

14. Способ по п.13, дополнительно включающий:
инициирование повторного выполнения второй программы, пока значение кода условия не будет указывать, что два разделенных операнда были загружены в любой из двух разделенных операндов без промежуточной операции обращения к запоминающему устройству.

15. Способ по п.13, дополнительно включающий:
установку предельного значения для повторного выполнения,
если значение кода условия указывает, что два разделенных операнда могли быть загружены в любой из двух разделенных операндов с использованием промежуточной операции обращения к запоминающему устройству, инициирование повторного выполнения второй подпрограммы, пока не произойдет одно из следующего: вторая подпрограмма будет повторно выполнена то число раз, которое установлено предельным значением, или значение кода условия будет указывать, что два разделенных операнда были загружены в любой из двух разделенных операндов без промежуточной операции обращения к запоминающему устройству.

16. Способ по п.13, дополнительно включающий загрузку двух разделенных операндов в соответствующие положения общего регистра.



 

Похожие патенты:

Изобретение относится к области обработки операций ввода-вывода в вычислительной среде. Техническим результатом является повышение эффективности связи с адаптерами вычислительной среды.

Изобретение относится к области систем обработки данных, имеющих множество аппаратных режимов работы, а также к управлению доступом к памяти в зависимости от текущего аппаратного режима.

Изобретение относится к вычислительной технике, а конкретнее к механизмам для защищенной начальной загрузки операционной системы, которая препятствует мошенническим компонентам быть загруженным операционной системой и таким образом предотвращает разглашение системного ключа при несоответствующих обстоятельствах.

Изобретение относится к планированию доступа к устройству хранения и более конкретно к предотвращению работы программы, которая выполняется, от монополизации доступа к запоминающему устройству.

Изобретение относится к доставке контента, в частности к его загрузке. .

Изобретение относится к системам обработки данных. .
Изобретение относится к вычислительной технике. .

Изобретение относится к системам обработки данных. .

Изобретение относится к области обработки данных. Техническим результатом является повышение эффективности загрузки данных в регистры. Способ выполнения машинной команды в центральном процессорном устройстве содержит получение процессором машинной команды для выполнения, причем машинная команда определена для выполнения компьютером согласно архитектуре компьютера и включает: по меньшей мере одно поле кода операции для предоставления кода операции, причем код операции идентифицирует операцию загрузки до границы блока; поле регистра, используемое для обозначения регистра, причем регистр включает первый операнд; по меньшей мере одно поле для обнаружения второго операнда в основной памяти; и указатель размера границы блока для указания заданной границы блока второго операнда; и выполнение машинной команды, включающее: загрузку переменного количества данных из блока второго операнда в первый операнд с обеспечением загрузки в первый операнд только данных, которые находятся внутри блока, причем загрузка из блока начинается с предоставляемого машинной командой начального адреса в блоке второго операнда и заканчивается на заданной границе блока второго операнда или до нее. 3 н. и 20 з.п. ф-лы, 16 ил.

Изобретение относится к области телекоммуникации, связи и передачи данных. Технический результат заключается в увеличении скорости в обработке сетевых заголовков, что повышает скорость и достигается за счет применения устройства приема и передачи данных с возможностью осуществления взаимодействия с OpenFlow контроллером. Указанное устройство содержит один или более сетевых интерфейсов, блок приема информации, блок первоначальной идентификации потока, блок обработки инструкций, блок реализации действий, блок обработки групповых действий, блок межмодульного взаимодействия, блок взаимодействия с контроллером, средство обмена информацией между блоками; причем один или более сетевых интерфейсов соединены с блоком приема информации, выход блока приема информации подключен к входу блока первоначальной идентификации потока, а вход блока приема информации подключен к выходу блока междумодульного взаимодействия, вход которого подключен к выходу блока обработки инструкций, при этом блок обработки инструкций соединен с блоком первоначальной идентификацией потока, а блок идентификации потока, в свою очередь, соединен с блоком междумодульного взаимодействия. Все перечисленные элементы находятся в едином конструктивном исполнении. 5 з.п. ф-лы, 3 ил.
Наверх