Язык GPSS. Синхронизация транзактов. Работа с потоками данных.
Синхронизация транзактов
Размножение транзактов
Сбор транзактов
Примеры сбора транзактов
Синхронизация транзактов
Пример 1 (постановка задачи)
Пример 1 (описание функций)
Пример 1 (модель)
Пример 1 (отчет)
Пример 2 (постановка задачи)
Пример 2 (организация очередей)
Пример 2 (описание объектов)
Пример 2 (модель)
Пример 2 (отчет)
Работа с потоками данных
Создание потока данных (открытие/создание файла)
Уничтожение потока данных (закрытие файла)
Чтение из файла
Запись в файл
Перемещение указателя
Возможные коды ошибок
Пример 3 (постановка задачи)
Пример 3 (модель)
Пример 3 (полученный файл)
204.50K
Category: programmingprogramming

Язык GPSS. Синхронизация транзактов. Работа с потоками данных. Лекция 4

1. Язык GPSS. Синхронизация транзактов. Работа с потоками данных.

Преподаватель:
доцент каф. АОИ
Салмина Нина Юрьевна

2. Синхронизация транзактов

Размножение
транзактов
Сбор транзактов
Синхронизация процессов
Синхронизация процессов возможна
только с транзактами одного семейства!!!

3. Размножение транзактов

SPLIT A,B,C
Одно
семейство!!
А – количество создаваемых копий
В – имя блока, куда направляются копии
(по умолчанию – к следующему блоку)
С – имя/номер атрибута транзакта:
ASSIGN 2,5
SPLIT 3,,2
исходный транзакт
копия 1
копия 2
копия 3
Р2=5+1
Р2=5+2
Р2=5+3
Р2=5+4

4. Сбор транзактов

ASSEMBLE A
GATHER A
A – количество собираемых транзактов
(транзакты задерживаются в блоке, пока не
соберутся А транзактов одного семейства)
ASSEMBLE – проходит 1 транзакт (остальные
уничтожаются)
GATHER – проходят ВСЕ транзакты

5. Примеры сбора транзактов

Правильный сбор
Неправильный сбор
SPLIT 3
SPLIT 4
...
ASSEMBLE 4
...
ASSEMBLE 4
здесь в каждом семействе
SPLIT 5
один транзакт задержится в
...
блоке ASSEMBLE
GATHER 2
навсегда!!!

6. Синхронизация транзактов

MATCH A
A – имя парного блока MATCH
Пример использования:
MET1 MATCH MET2
...
MET2 MATCH MET1

7. Пример 1 (постановка задачи)

Проводятся соревнования по решению головоломок.
В соревнованиях участвуют два человека. Им обоим одновременно
выдается по пакету одинаковых заданий.
Соревнование проходит в 7 этапов ( в пакете 7 задач). На каждом
этапе тот участник, который решит задачу быстрее, получает очко.
К очередному этапу участники приступают всегда одновременно.
Время решения задачи на каждом этапе определяется (мин):
Зад1 Зад2 Зад3 Зад4 Зад5 Зад6 Зад7
Участник 1 3±2 6±3 6±2.5 3±1 7±2 5±1 4±2
Участник 2 4±1.5 5±2 5.5±2 5±2 8±4 6±2 3.5±1
Выигрывает тот участник, который в сумме набирает больше баллов.
Оценить вероятность выигрыша участника 1. Оценку получить на
выборке, равной 100.

8. Пример 1 (описание функций)

;время решения задачи 1-м участником на каждом этапе
(записано в обратном порядке!)
f1_t function P1,d7
1,4/2,5/3,7/4,3/5,6/6,6/7,3
;модификатор времени 1-го участника на каждом этапе
f1_m_t function P1,d7
1,2/2,1/3,2/4,1/5,2.5/6,3/7,2
;время решения задачи 2-м участником на каждом этапе
f2_t function P1,d7
1,3.5/2,6/3,8/4,5/5,5.5/6,5/7,4
;модификатор времени 2-го участника на каждом этапе
f2_m_t function P1,d7
1,1/2,2/3,4/4,2/5,2/6,2/7,1.5

9. Пример 1 (модель)

sorevn storage 1
generate ,,,100
enter sorevn
assign 1,7
split 1,second
;работа участника 1
first advance (fn$f1_t),(fn$f1_m_t)
test e w$met2,1,ball1
transfer ,met1
ball1 savevalue sum1+,1
met1 match met2
loop 1,first
transfer ,next
itog savevalue ver,(x$sum/100)
terminate 1
start 1
;работа участника 2
second advance (fn$f2_t),(fn$f2_m_t)
test e w$met1,1,ball2
transfer ,met2
ball2 savevalue sum2+,1
met2 match met1
loop 1,second
next assemble 2
test g x$sum1,x$sum2,next2
savevalue sum+,1
next2 savevalue sum1,0
savevalue sum2,0
leave sorevn
savevalue member+,1
test ne x$member,100,itog
terminate

10. Пример 1 (отчет)

SAVEVALUE
SUM1
SUM2
SUM
MEMBER
VER
RETRY
0
0
0
0
0
VALUE
0
0
64.000
100.000
0.640

11. Пример 2 (постановка задачи)

Машины прибывают на автозаправочную станцию в среднем каждые
3 минуты.
Время обслуживания в среднем составляет 5 минут.
(временные характеристики подчиняются экспоненциальному закону)
Доход от обслуживание каждой машины равен 3$
В конце рабочего дня 75$ забирает хозяин.
Стоимость содержания каждой колонки (с учетом зарплаты
работникам) составляет 30$.
Определить оптимальное количество колонок на станции (по
максимизации прибыли), если:
1)На станции можно поставить от 1 до 4 колонок;
2)Подъезд к колонкам организован таким образом, что очередь
машин, ожидающих заправки максимально может составлять
<количество колонок>+1.
3)Время работы станции равно 10 часам.

12. Пример 2 (организация очередей)

1
2
N
. . .

13. Пример 2 (описание объектов)

Store1
Store1
Store2
Store2
Store3
Store3
Store4
Store4
Net
EQU
STORAGE
EQU
STORAGE
EQU
STORAGE
EQU
STORAGE
VARIABLE
1
; присвоение значения имени
1
2
2
3
3
4
4
SC*1#3-75-30#R*1

14. Пример 2 (модель)

Net variable SC*1#3-75-30#R*1
;таймер
GENERATE 600
;через 10 часов закрываем
;станцию
LOGIC S Lock
;ждем дообслуживания
TEST E N$Goin,N$Done
SPLIT 3,,1
SAVEVALUE P1,V$Net
TERMINATE 1
START 4
;приезд машин
GENERATE (exponential(1,0,3))
;проверяем, открыта ли станция?
GATE LR Lock
SPLIT 3,,2
TEST LE Q*2,S*2,Bybye
Goin QUEUE P2
ENTER P2
DEPART P2
ADVANCE (exponential(1,0,5))
Done LEAVE P2
Bybye TERMINATE

15. Пример 2 (отчет)

SAVEVALUE
1
2
3
4
RETRY
0
0
0
0
VALUE
204.000
408.000
450.000
423.000

16. Работа с потоками данных

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

17. Создание потока данных (открытие/создание файла)

OPEN A,B,C
A – имя файла в виде текстовой строки
В – числовой идентификатор потока
С – имя блока, куда направляется транзакт, если не
удается создать поток
(если открывается существующий файл, то
указатель устанавливается на начало файла )

18. Уничтожение потока данных (закрытие файла)

CLOSE A,B,C
A – имя/номер атрибута транзакта, в который
записывается код ошибки
В – числовой идентификатор потока
С – имя блока, куда направляется транзакт, если
код ошибки не равен нулю
(проанализировать код ошибки работы с
потоком данных можно только после
использования блока CLOSE с полем А)

19. Чтение из файла

READ A,B,C
A – имя/номер атрибута транзакта, в который
записывается прочитанная строка
В – числовой идентификатор потока
С – имя блока, куда направляется транзакт, если
произошла ошибка чтения или дошли до конца
файла
(после чтения указатель перемещается на
следующую строку)

20. Запись в файл

WRITE A,B,C,D
A – текстовая строка, которая записывается в поток
данных
В – числовой идентификатор потока
С – имя блока, куда направляется транзакт, если
произошла ошибка записи
D – режим записи:
ON (режим вставки) (по умолчанию)
OFF (режим замены)

21. Перемещение указателя

SEEK A,B,C
(устанавливается новая текущая позиция)
A – номер новой текущей позиции
В – числовой идентификатор потока

22. Возможные коды ошибок

0 – нет ошибки;
10 – ошибка OPEN (слишком длинное имя файла – более 200
символов);
11 – ошибка OPEN (ошибка чтения внешнего файла – не
смогли загрузить в память);
12 – ошибка OPEN (не хватило памяти для файла);
21 – ошибка READ (не хватило памяти);
22 – ошибка READ (поток не открыт);
31 – ошибка WRITE (не хватило памяти);
32 – ошибка WRITE (поток не открыт);
41 – ошибка CLOSE (не смогли записать файл на диск);
43 – ошибка CLOSE (поток не открыт);
51 – ошибка SEEK (поток не открыт).

23. Пример 3 (постановка задачи)

Заявки поступают в систему в среднем каждые 4
минуты.
В системе один канал обслуживания.
Время обслуживания в среднем равно 3 минуты.
Все временные характеристики подчиняются
экспоненциальному закону.
Необходимо записать в файл время простоя
каждой заявки в очереди.
Промоделировать 8 часов работы системы.

24. Пример 3 (модель)

generate (exponential(1,0,4))
queue och
seize can
depart och
;М1 – СЧА транзакта, содержащий
;время его нахождения в системе
;с момента рождения
write M1,1,error
advance (exponential(1,0,3))
release can
terminate
;открытие файла
generate ,,,1
open “t_och.txt",1,error
terminate
;таймер
generate 480
error close osh,1
savevalue 1,p$osh
terminate 1
start 1

25. Пример 3 (полученный файл)

0
0
0
1.485746595692476
1.492655919108231
0
0
0
1.598724908218703
0
0
0
0
0
3.690382753499698
4.906943042287772
12.34318433103468
. . .

. . .
34.24601896397849
27.55709068901638
22.07568648416958
22.76852652422741
23.9755340366292
17.9977554507899
23.59354677423352
26.91804536475064
29.80701774389866
19.3055355647744
22.19126616339497
16.53713043015267
17.38753754781232
20.66772303902178
20.55788026559674
17.24561949764114
English     Русский Rules