Пример выполнения лабораторной работы |
В своих поисках Слоны находят источник воды. Это пересыхающий родник, вода из которого вытекает медленно и неравномерно. Приходится ждать, пока наберется порция воды, достаточная для того, чтобы забрать ее хоботом. Набрав порцию воды, Слон медленно ее выпивает, тем временем его место у источника занимает другой Слон, ожидающий следующей порции.
В реализации этой модели порции воды играют роль единиц ресурса, которые подсчитываются семафором. Ганеша создает семафор, получает его идентификатор и передает его всем процессам-Слонам вместе с другими параметрами запуска программы-Слона.
Потребность каждого Слона в воде (выраженная в количестве порций) пропорциональна квадрату веса Слона. (Таким образом мы попытались скомпенсировать наблюдавшуюся в предыдущих примерах тенденцию более вероятной гибели молодых животных.) Мы заранее подсчитали, что общий объем в 145 порций должен с запасом удовлетворить потребность всего стада (хотя этот подсчет можно сделать и в ходе выполнения программы).
Далее Ганеша организует цикл в каждой итерации которого "выдает" Слонам одну порцию воды. "Выдача" состоит в выполнении V-операции на семафоре, которая увеличивает счетчик доступных порций на 1 и в задержке на случайный интервал времени для выработки следующей порции. Параметры задержки подобраны таким образом, чтобы общее время выполнения всех итераций цикла составило примерно те же 30 сек, что и в предыдущих моделях.
Каждый Слон после запуска определяет свою потребность в воде и выполняет цикл, который повторяется до тех пор, пока потребность не будет удовлетворена. Каждая итерация цикла начинается с выполнения P-операции на семафоре. Если значение семафора не 0 (то есть, имеется доступная порция воды), Слон получает порцию (при этом значение семафора уменьшается на 1) и потребляет ее. Если значение семафора 0 (доступных порций нет) Слон переходит в ожидание до появления порции (изменения значения семафора). Время потребления обратно пропорционально возрасту Слона.
Программный модуль, реализующий деятельность Ганеши (ganesha5.c ) и программный модуль, реализующий деятельность одного Слона (elephant5.c) .
В программах используються следующие вызовы:
Ниже приводится пример выполнения этой модели
08:28:37.370 - Начало работы 08:28:37.386 Tandy - 2 08:28:37.396 Aun - 4 08:28:37.401 Maya - 18 08:28:37.412 Hao - 10 08:28:37.417 Assam - 33 08:28:37.427 BakZap - 20 08:28:37.434 Hathy - 47 08:28:37.443 Kitty - 9 08:28:39.440 Maya - 17 08:28:39.846 Hao - 9 08:28:39.877 Assam - 32 08:28:39.945 Hathy - 46 08:28:39.961 BakZap - 19 08:28:41.105 Hathy - 45 08:28:41.435 BakZap - 18 08:28:41.526 Hao - 8 08:28:41.590 Assam - 31 08:28:41.741 Maya - 16 08:28:42.161 Hathy - 44 08:28:42.398 Kitty - 8 08:28:42.493 BakZap - 17 08:28:42.701 Assam - 30 08:28:42.911 Hathy - 43 08:28:43.003 Hao - 7 08:28:43.235 BakZap - 16 08:28:43.560 Maya - 15 08:28:43.657 Hathy - 42 08:28:43.981 BakZap - 15 08:28:44.153 Assam - 29 08:28:44.403 Hathy - 41 08:28:44.500 Hao - 6 08:28:44.727 BakZap - 14 08:28:44.995 Tandy - 1 08:28:45.052 Maya - 14 08:28:45.149 Hathy - 40 08:28:45.294 Assam - 28 08:28:45.483 BakZap - 13 08:28:45.716 Kitty - 7 08:28:45.895 Hathy - 39 08:28:45.913 Aun - 3 08:28:46.007 Hao - 5 08:28:46.229 BakZap - 12 08:28:46.426 Assam - 27 08:28:46.554 Maya - 13 08:28:46.642 Hathy - 38 08:28:46.975 BakZap - 11 08:28:47.388 Hathy - 37 08:28:47.815 Hao - 4 08:28:47.877 Assam - 26 08:28:48.045 Maya - 12 08:28:48.051 BakZap - 10 08:28:48.464 Hathy - 36 08:28:48.798 BakZap - 9 08:28:49.009 Assam - 25 08:28:49.029 Kitty - 6 08:28:49.210 Hathy - 35 08:28:49.312 Hao - 3 08:28:49.544 BakZap - 8 08:28:49.866 Maya - 11 08:28:49.956 Hathy - 34 08:28:50.290 BakZap - 7 08:28:50.461 Assam - 24 08:28:50.702 Hathy - 33 08:28:50.809 Hao - 2 08:28:51.037 BakZap - 6 08:28:51.358 Maya - 10 08:28:51.448 Hathy - 32 08:28:51.592 Assam - 23 08:28:51.783 BakZap - 5 08:28:52.017 Kitty - 5 08:28:52.194 Hathy - 31 08:28:52.529 BakZap - 4 08:28:52.616 Hao - 1 08:28:52.849 Maya - 9 08:28:53.044 Assam - 22 08:28:53.270 Hathy - 30 08:28:53.605 BakZap - 3 08:28:53.883 - Слон Tandy нормально завершился 08:28:53.966 Hathy - 29 08:28:54.063 - Слон Hao нормально завершился 08:28:54.091 Assam - 21 08:28:54.211 BakZap - 2 08:28:54.304 Aun - 2 08:28:54.425 Maya - 8 08:28:54.513 Hathy - 28 08:28:54.737 BakZap - 1 08:28:54.905 Kitty - 4 08:28:55.039 Hathy - 27 08:28:55.103 Assam - 20 08:28:55.263 - Слон BakZap нормально завершился 08:28:55.457 Maya - 7 08:28:55.510 Hathy - 26 08:28:55.805 Assam - 19 08:28:55.955 Hathy - 25 08:28:56.348 Maya - 6 08:28:56.486 Assam - 18 08:28:56.581 Hathy - 24 08:28:56.753 Kitty - 3 08:28:57.027 Hathy - 23 08:28:57.338 Assam - 17 08:28:57.420 Maya - 5 08:28:57.474 Hathy - 22 08:28:57.920 Hathy - 21 08:28:58.019 Assam - 16 08:28:58.312 Maya - 4 08:28:58.366 Hathy - 20 08:28:58.712 Kitty - 2 08:28:58.812 Hathy - 19 08:28:58.872 Assam - 15 08:28:59.203 Maya - 3 08:28:59.257 Hathy - 18 08:28:59.553 Assam - 14 08:28:59.712 Aun - 1 08:28:59.883 Hathy - 17 08:29:00.095 Maya - 2 08:29:00.344 Hathy - 16 08:29:00.435 Assam - 13 08:29:00.690 Kitty - 1 08:29:00.790 Hathy - 15 08:29:01.117 Assam - 12 08:29:01.186 Maya - 1 08:29:01.237 Hathy - 14 08:29:01.693 Hathy - 13 08:29:01.975 Assam - 11 08:29:02.087 - Слон Maya нормально завершился 08:29:02.261 Hathy - 12 08:29:02.419 - Слон Kitty нормально завершился 08:29:02.527 Assam - 10 08:29:02.562 Hathy - 11 08:29:02.828 Hathy - 10 08:29:02.939 Assam - 9 08:29:03.094 Hathy - 9 08:29:03.110 - Слон Aun погиб 08:29:03.111 - Слон Assam погиб 08:29:03.111 - Слон Hathy погиб |
© life-prog.ru |
|