Inter User Communication Vehicle (IUCV) — механизм передачи данных в линейке операционных систем IBM VM . Он был представлен в VM/SP Release 1 в 1980 году. [1]
Он позволяет устанавливать каналы связи точка-точка, либо между двумя виртуальными машинами, либо между виртуальной машиной и службами гипервизора. По сути, IUCV обеспечивает форму взаимодействия на основе сообщений между виртуальными машинами, которая предвосхищала взаимодействие клиент/сервер между сетевыми физическими машинами, которые появились позже в распределенных системах.
IUCV реализуется CP (гипервизором виртуальной машины) и контролирует все аспекты установления сеанса, передачи сообщений и управления потоком.
Прежде чем виртуальная машина сможет использовать службу IUCV, она должна сначала указать адрес области в своем адресном пространстве, где CP сможет хранить информацию об ожидающей информации или статусе. Поэтому DECLARE BUFFER
метод должен быть вызван первым.
В терминологии IUCV сеанс между двумя конечными точками называется PATH . Он идентифицируется на каждом конце идентификатором пути, который относится только к виртуальной машине, владеющей концом сеанса. Путь всегда является подключенным каналом, то есть не существует путей без подключения.
Чтобы установить путь, инициирующая виртуальная машина должна вызвать CONNECT
метод и указать целевой идентификатор пути, который представляет собой либо имя другой виртуальной машины, либо имя системной службы CP (все они начинаются с символа «*»), который не является допустимым символом в имени виртуальной машины.
При условии, что цель сама инициализировала IUCV, она будет уведомлена об ожидающем входящем соединении пути и затем может либо использовать ACCEPT
метод — для завершения установления пути — либо SEVER
метод — который фактически закрывает ожидающий путь.
После установления пути сообщения могут передаваться между двумя конечными точками пути.
Сообщения IUCV ограничены, то есть у них есть начало и конец. Если на пути к конечной точке ожидающих сообщений больше одного, IUCV не будет объединять сообщения.
Сообщения отправляются по пути с использованием SEND
метода. Другая конечная точка может затем получить сообщение с использованием RECEIVE
метода. Если исходное сообщение также запросило ответ, то принимающая конечная точка затем использует REPLY
метод для отправки этого ответа.
Несколько сообщений могут быть сделаны ожидающими на пути. Количество сообщений, разрешенных для пути в ожидании, указывается во время установления пути, но не может превышать 65535. Попытка отправить сообщение на пути, который достиг своего предела ожидающих сообщений, приведет к ошибке.
Передача данных может быть временно приостановлена с помощью QUIESCE
метода. Пока путь приостановлен, дальнейшие передачи сообщений по пути не допускаются, пока RESUME
метод не будет вызван виртуальной машиной, которая изначально приостановила путь.
Виртуальная машина может опрашивать уведомления IUCV с помощью методов TEST MESSAGE
и TEST COMPLETION
. Если ничего не ожидает, то виртуальная машина ждет, пока не появится дополнительная информация.
Когда любая из конечных точек выдает SEVER
метод, путь переходит в разорванное (закрывающееся) состояние, а другая конечная точка уведомляется. В этот момент на пути не допускаются новые сообщения, но другая конечная точка все еще может получать ожидающие сообщения. Когда другая конечная точка также выдает метод SEVER
, путь фактически демонтируется.
Путь может быть неявно закрыт, когда
RETRIEVE BUFFER
методВ любом из этих случаев для другого конца пути поведение идентично явному завершению пути.
Методы IUCV вызываются с помощью инструкции 'B2F0'x. Эта инструкция должна быть вызвана в состоянии виртуального супервизора (например, гостевого супервизора), иначе будет сгенерировано программное прерывание Operation Exception. Затем инструкция интерпретируется CP как запрос IUCV.
IPARML — это список Iucv PARaMeter. Это блок управления, который описывает вызываемый метод, а также параметры метода. После завершения инструкции B2F0 некоторые поля изменяются CP, чтобы указать статус завершения инструкции B2F0.
CP уведомляет виртуальную машину об ожидающем сообщении или статусной информации, делая внешний код прерывания X'4000' ожидающим виртуальной машины. Когда происходит прерывание, информация относительно ожидающего статуса становится доступной по адресу, указанному методом DECLARE BUFFER
.
В CP имеется специальный макрос (IUCV), который генерирует соответствующий код, включая инструкцию и заполнение IPARML, чтобы сведения о параметрах того или иного метода можно было установить по умолчанию или проверить на наличие конфликтов.
CMS можно настроить на обработку запросов приложений IUCV. CMS имеет собственный набор макросов IUCV (CMSIUCV), которые позволяют нескольким приложениям совместно использовать возможности IUCV в пределах виртуальной машины.
Доступ к некоторым функциям IUCV контролируется операторами в CP Directory (список виртуальных машин и их спецификации).
Виртуальной машине можно разрешить принимать сообщения от всех других виртуальных машин через IUCV ALLOW
оператор каталога или устанавливать путь связи с любой другой виртуальной машиной через IUCV ANY
оператор. Также можно разрешить виртуальной машине отправлять запросы на соединение по пути к другим определенным виртуальным машинам, указав имя виртуальной машины в операторе IUCV, например: IUCV TARGETVM
. По умолчанию пользователю всегда разрешено подключаться к самому себе.
Оператор IUCV контролирует контроль доступа, наложенный CP для подключений IUCV. Кроме того, виртуальная машина может наложить свой собственный контроль доступа, отклоняя попытку подключения.
Службы системы CP представляют собой конечные точки IUCV, которые сами по себе не являются виртуальными машинами, но позволяют виртуальной машине асинхронно выполнять функции гипервизора или получать доступ к определенным средствам гипервизора.
Вот некоторые примеры:
GCS (система управления группами) VM использует IUCV для обслуживания областей общей памяти между виртуальными машинами. Используя неявное завершение пути, виртуальная машина восстановления GCS может гарантировать, что любые блокировки, удерживаемые в общей области виртуальной машиной, которая вошла в группу, но неожиданно вышла, будут надлежащим образом сняты.
VM TCP/IP — стек TCP/IP для VM — использует IUCV, чтобы разрешить виртуальной машине выполнять операции сокета или разрешить виртуальной машине действовать как сетевой интерфейс для передачи целых кадров или датаграмм между собой и стеком TCP/IP. Реализация Linux S/390 и z/Architecture использует эту возможность для реализации сетевого интерфейса для стека VM TCP/IP.