Первый транзакт из СП с именем LIST помещается в блок с меткой FORW. Он заносится в СТС после транзактов с таким же приоритетом. Транзакт, вошедший в блок UNLINK, переходит в следующий блок.
Рассмотрим последовательность операций, выполняемых при входе транзакта в блок UNLINK. В зависимости от того, какие из операндов A-F блока UNLINK заполнены, можно выделить восемь основных вариантов.
Вариант 1. Операнды А, В, С заданы, операнды D, E, F не заданы. Вычисляются значения операнда А для определения номера (имени) СП. Проверяется, есть ли в списке транзакты. Если их нет, соответствующий этому списку индикатор устанавливается в «0», а транзакт, вошедший в блок, переходит к следующему по номеру блоку.
Если список не пуст, вычисляется значение операнда С (счетчика удалений), определяющего число транзактов, удаляемых из списка. Транзакты удаляются, начиная с первого в списке до тех пор, пока значение счетчика удалений не станет равным нулю или пока не будут исчерпаны все транзакты из списка. Удаленные из СП транзакты будут помещены в СТС и направлены к блоку, номер которого указан в операнде В. Транзакт, вошедший в блок UNLINK, перемещается к следующему по номеру блоку.
|
|
Вариант 2. Операнды А, В, С и F заполнены, операнды D и Е не заданы. Этот вариант аналогичен варианту 1, за исключением случая, когда указанный СП пуст. При этом индикатор списка устанавливается в «0», а транзакт, вошедший в блок UNLINK, перемещается к блоку, указанному в операнде F, а не к следующему по номеру блоку.
Вариант 3. Операнды А, В, С и D заполнены, операнды Е и F не заполнены, в операнде D задано значение параметра Pj. Этот вариант также аналогичен варианту 1. Однако из списка удаляются только те транзакты, у которых значение параметра P j равно значению этого же параметра P j транзакта, вошедшего в блок UNLINK. Транзакты из списка удаляются до тех пор, пока значение счетчика удалений (определяемого операндом С) не станет равно нулю или пока не будут просмотрены все транзакты из списка. Все удаленные из СП транзакты перемещаются к блоку, указанному в операнде В блока UNLINK. Транзакт, вошедший в блок UNLINK, перемещается к следующему по номеру блоку.
Вариант 4. Операнды А, В, С и D заполнены, операнды Е и F не заданы, а в операнде D записано слово «BACK». Этот вариант аналогичен варианту 1, за исключением того, что транзакты удаляются, начиная с конца списка.
Вариант 5. Операнды А, В, С и D - заполнены, операнды Е и F - пусты, в операнде D задана булева переменная BVj. Этот вариант аналогичен варианту 3, за исключением того, что BV j вычисляется отдельно для каждого транзакта СП. Из СП удаляются только транзакты, для которых BV j=l.
|
|
1. Если BV j имеет ссылки на какой-либо параметр, то эти ссылки относятся к параметрам, связанным с транзактами из СП, а не с вошедшим транзактом.
2. В случаях, когда в операнде D блока UNLINK записана переменная BV j или «BACK», операнд Е должен быть не заполненным, иначе - ошибка.
Вариант 6. Операнды А, В, С, D и F заполнены, операнд Е не заполнен. Этот вариант аналогичен варианту 3, за исключением тех случаев, когда или заданный СП пуст (CH j=0), или заданное отношение не выполняется ни для одного транзакта списка, или BV j=0 для всех транзактов СП. В таких случаях транзакт, вошедший в блок UNLINK, перемещается к блоку, номер которого задан в операнде F, а не к следующему по номеру блоку. Индикатор списка устанавливается в «О» только в том случае, если список пуст.
Вариант 7. Операнды А, В, С, D и Е заполнены, операнд F не заполнен.
Число удаляемых транзактов определяется значением операнда С. Номер блока, к которому направляются удаленные транзакты, определяется операндом В. Транзакты, для которых значение P j (операнд D) равно СЧА из операнда Е, удаляются из списка. Транзакты просматриваются и удаляются (если это возможно), начиная с начала списка. Удаление продолжается до тех пор, пока значение счетчика удалений (операнд С) не станет равным нулю или пока из СП не будут удалены все транзакты. Транзакт, вошедший в б ток UNLINK, перемещается к следующему по номеру блоку.
Вариант 8. Операнды А, В, С, D и F заполнены. Это (вариант аналогичен варианту 5, за исключением тех случаев, когда СП пуст (то есть CH j=0) или заданное отношение не выполняется ки для одного из транзактов списка. Транзакт, вошедший в блок UNLINK, переходит к блоку, заданному в операнде F, а не к следующему по номеру блоку. Если заданное отношение выполняется для какого-нибудь транзакта из списка, транзакт, вошедший в блок, перемещается к следующему по номеру блоку. Если СП пустой, индикатор списка устанавливается в «0».
Пример 4.55 [13]
Рассмотрим модель обслуживания с алгоритмом FIFO выбора из очереди: