Обработка одновременных событий

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

В некоторых случаях одновременное наступление нескольких событий, или так называемый 1временной узел0, может су- щественно нарушить логику модели. Рассмотрим, например, еще раз модель на рис. 14. Здесь может образоваться временной узел между событиями поступление транзакта на вход модели и завершение обслуживания в МКУ . Если не- посредственно перед завершением обслуживания были заняты оба канала МКУ, то обработка временного узла зависит от последовательности транзактов, соответствующих событиям, в списке текущих событий.

Предположим, что первым в списке расположен транзакт, освобож- дающий канал МКУ. Тогда вначале будет обработан этот транзакт, т.е. событие завершение обслуживания в МКУ , причем условие МКУ STO2 не заполнено, проверяемое в блоке GATE, станет истинным.

Затем бу- дет обработан транзакт, поступивший на вход модели, в блок GATE с именем ENT1, из блока GENERATE или из блока TRANSFER в безусловном режиме. При этом транзакт будет впущен в блок ENTER, и МКУ в тот же момент модельного времени снова окажется заполненным. Такая ситуа- ция при обработке временного узла представляется естественной. Предположим теперь, что первым в списке текущих событий распо- ложен транзакт, поступающий на вход модели.

Так как условие МКУ STO2 не заполнено ложно, то блок GATE направит этот транзакт в блок с именем REFUS. Таким образом, в модели будет зафиксирован от- каз в обслуживании, хотя в этот же момент модельного времени, после обработки транзакта, освобождающего канал, МКУ станет доступным. Порядок расположения транзактов, соответствующих рассматривае- мым событиям, в списке текущих событий случаен, и в среднем в поло- вине случаев временной узел будет обрабатываться не так, как нужно.

В результате статистика, связанная с отказами, окажется искаженной. Для правильной обработки временного узла надо обеспечить такой порядок расположения транзактов в списке текущих событий, чтобы транзакт, освобождающий МКУ, всегда располагался первым. Этого мож- но добиться, управляя приоритетами транзактов рис. 22 . Ш1 STO2 STORAGE 2 EXP FUNCTION RN1,C24 0,0 .1 104 .2 222 .3 355 .4 509 .5 69 .6 915 .7,1.2 .75,1.38 .8,1.6 .84,1.85 .88,2.12 .9,2.3 .92,2.52 .94,2.81 .95,2.99 .96,3.2 .97,3.5 .98,3.9 .99,4.6 .995,5.3 .998,6.2 .999,7 .9998,8 GENERATE 100,FN EXP ENT1 GATE SNF STO2,REFUS ENTER STO2 PRIORITY 1 ADVANCE 160,FN EXP LEAVE STO2 TERMINATE 1 REFUS TRANSFER .1 OUT ADVANCE 250,FN EXP TRANSFER ,ENT1 OUT TERMINATE 1 Ш1.5 Рис. 22 Транзакты, поступающие в модель через блок GENERATE, имеют ну- левой приоритет.

Такой же приоритет имеют транзакты, получившие от- каз в обслуживании, направленные в блок с именем REFUS и затем пов- торно поступающие в блок с именем ENT1. Те же транзакты, что посту- пают на обслуживание, повышают приоритет до 1 в блоке PRIORITY, и после выхода из блока ADVANCE возвращаются из списка будущих в список текущих событий, располагаясь в начале списка.

Таким обра- зом, нужный порядок транзактов обеспечивается, и временной узел бу- дет обработан правильно. Опасность неверной обработки временных узлов характерна для моделей со списками пользователя. Рассмотрим, например, еще раз мо- дель на рис. 18. Здесь также возможен временной узел между события- ми приход транзакта и завершение обслуживания транзакта. Пусть первым в списке текущих событий располагается вновь при- шедший транзакт.

Так как устройство с именем SYSTEM занято, то блок GATE направит этот транзакт в блок LINK, и он будет введен в список пользователя с именем LINE. Затем будет обработан транзакт, осво- бождающий устройство. Проходя через блок UNLINK, он выведет тран- закт с начала списка пользователя и направит его в список текущих событий, где тот продвинется в блок SEIZE, занимая устройство SYSTEM. Если же первым в списке текущих событий располагается тран- закт, освобождающий устройство, то он выведет первый из ожидающих транзактов из списка пользователя в список текущих событий, где тот расположится после вновь пришедшего транзакта.

Поэтому первым будет обработан вновь пришедший транзакт, который пройдет через блок GATE и займет устройство без очереди. Транзакт-очередник, который был выведен из списка пользователя, застрянет перед блоком SEIZE и после очередного освобождения устройства займет его, нарушая, в свою очередь, логику работы модели.

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

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

Ш1 EXP FUNCTION RN1,C24 0,0 .1 104 .2 222 .3 355 .4 509 .5 69 .6 915 .7,1.2 .75,1.38 .8,1.6 .84,1.85 .88,2.12 .9,2.3 .92,2.52 .94,2.81 .95,2.99 .96,3.2 .97,3.5 .98,3.9 .99,4.6 .995,5.3 .998,6.2 .999,7 .9998,8 GENERATE 100,FN EXP ASSIGN TSRV,80,EXP GATE NU SYSTEM,WAIT SFAC SEIZE SYSTEM ADVANCE P TSRV PRIORITY PR,BU RELEASE SYSTEM UNLINK LINE,SFAC,1 TERMINATE 1 WAIT LINK LINE,P TSRV Ш1.5 Рис. 23 5.