Unlink list,forw,1

Первый транзакт из СП с именем 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 выбора из очереди:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: