Управление светофором (семафоры, C, unix)
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Управление светофором (семафоры, C, unix) - 2009-05-06 15:52:50.190000
|
|
|
AchtungPartizanen
Сообщений: 38
Оценки: 0
Присоединился: 2007-10-25 20:54:58.030000
|
Задача следующая: написать систему моделирования управления движением на перекрестке (Т-образный перекресток, соответственно должно быть 3 процесса) Все движения моделируются отдельными процессами. Процесс моделирует подъезжающие к перекрестку автомобили случайным образом, интенсивности различны. В начале светофор переключается с равными интервалами, по мере накопления статистики по интенсивности время переключения светофора следует изменять. Передача информации процессу светофора выполняется через семафор. Прежде всего непонятно, с какой стороны вообще нужно подойти к этой задаче. Каким образом сделать так, чтобы процесс постоянно генерил подъезжающие машины, отправляя их в путь только при открытом семафоре, и это в одном процессе? Есть мысль организовать связь через сообщения - процесс генерит их постоянно, а вот другой процесс их забирает только при открытом семафоре - но, кажется, это не совсем то (процесс при этом не один). И непонятно, как вообще собирать и подсчитывать статистику: то ли процессы будут писать все в общий файл, а светофор этот файл анализировать и считать число проехавших с каждой стороны машин, то ли опять через сообщения, то ли что. В общем, прошу совета. Это курсовая, сроки поджимают
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-07 08:57:27.473333
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Я никогда не ковырялся с semctl, но… Скажем семафоры из PosixThreads имеют счётчик, который можно увеличивать. Один процесс увеличивает, когда прибывает машина, другой уменьшает, когда она проходит через перекрёсток. Я думаю *nix'овые семафоры примерно тоже самое, и использовать их, наверное, предполагается именно так.
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-07 12:50:17.640000
|
|
|
AchtungPartizanen
Сообщений: 38
Оценки: 0
Присоединился: 2007-10-25 20:54:58.030000
|
quote:
ORIGINAL: rgo Я никогда не ковырялся с semctl, но… Скажем семафоры из PosixThreads имеют счётчик, который можно увеличивать. Один процесс увеличивает, когда прибывает машина, другой уменьшает, когда она проходит через перекрёсток. Я думаю *nix'овые семафоры примерно тоже самое, и использовать их, наверное, предполагается именно так. Да нет, тут не то: семафор организовывает сам светофор: какому направлению давать движение, какому нет. Использовать семафор еще и для прохода самих машин - имхо чересчур
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-07 16:01:31.590000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: AchtungPartizanen Каким образом сделать так, чтобы процесс постоянно генерил подъезжающие машины, отправляя их в путь только при открытом семафоре, и это в одном процессе? ну пусть процесс-светофор будет родителем, создателем семафора и сборщиком статистики, а потомки (fork или exec - неважно, лишь бы связь была) пусть отправляют сообщения о сгенерированном автомобиле в stdout. итого четыре процесса, связанных через FIFO как 3->1, да плюс семафор в ядре связь можно осуществить и красивей - через именованные каналы, или сокеты и select/poll quote:
ORIGINAL: AchtungPartizanen И непонятно, как вообще собирать и подсчитывать статистику да как угодно, в чём проблема-то? quote:
ORIGINAL: AchtungPartizanen Это курсовая, сроки поджимают а вот это уже твои личные половые трудности. значит раньше думать надо было quote:
ORIGINAL: rgo Я думаю *nix'овые семафоры примерно тоже самое, и использовать их, наверное, предполагается именно так. большинство *NIX-систем соответствуют стандарту IEEE 1003.1c - даже BSD'шные потомки считаются mostly complient, так что различия между POSIX и UNIX в данном случае можно не делать
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-08 10:02:37.773333
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: Denaturat quote:
ORIGINAL: rgo Я думаю *nix'овые семафоры примерно тоже самое, и использовать их, наверное, предполагается именно так. большинство *NIX-систем соответствуют стандарту IEEE 1003.1c - даже BSD'шные потомки считаются mostly complient, так что различия между POSIX и UNIX в данном случае можно не делать Не, это понятно. Но семафоры из PosixThreads – это семафоры которые актуальны в адресном пространстве одного процесса. А semctl и пр. – это IPC, взаимодействие между процессами. Они разные по определению. Но раз название одинаково, должно быть что-то общее… )) quote:
ORIGINAL: AchtungPartizanen Да нет, тут не то: семафор организовывает сам светофор: какому направлению давать движение, какому нет. Использовать семафор еще и для прохода самих машин - имхо чересчур А нафига тогда вообще семафоры заводить? Как было сказано: процесс-сфетофор fork'ает три процесса-дороги. Дочерные процессы генерят тачки и отправляют записи о них в stdout. Родительский процесс по таймеру выбирает pipe нужного child'а и читает машины из него. И при чём тут семафоры? Я думаю, что реально семафор должен хранить количество машин в очереди. А процесс-светофор уменьшать это количество, если им зелёный.
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-08 12:23:20.436666
|
|
|
Jasmin
Сообщений: 2320
Оценки: 0
Присоединился: 2007-05-03 23:08:53.390000
|
А зачем вообще на C мучаться?? Есть же специальные системы моделирования, GPSS, AnyLogic, Arena… С анимацией и прочим. Сильно надо - стукни в личку, о цене договоримся.
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-08 15:02:07.183333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: rgo семафоры из PosixThreads – это семафоры которые актуальны в адресном пространстве одного процесса man PTHREAD_PROCESS_SHARED. семафоры из POSIX реализуются как объекты ядра, к адресному пространству одного процесса они никоим образом не привязаны quote:
ORIGINAL: rgo А нафига тогда вообще семафоры заводить? Как было сказано: процесс-сфетофор fork'ает три процесса-дороги. Дочерные процессы генерят тачки и отправляют записи о них в stdout. Родительский процесс по таймеру выбирает pipe нужного child'а и читает машины из него. И при чём тут семафоры? записи отправляются при "зелёном" состоянии семафора для данного процесса. обратная связь процесса-светофора с дочерними процессами - состояние изменяемого им семафора, другой обратной связи нет
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-17 12:53:34.276666
|
|
|
AchtungPartizanen
Сообщений: 38
Оценки: 0
Присоединился: 2007-10-25 20:54:58.030000
|
quote:
ORIGINAL: Jasmin А зачем вообще на C мучаться?? Есть же специальные системы моделирования, GPSS, AnyLogic, Arena… С анимацией и прочим. Сильно надо - стукни в личку, о цене договоримся. Хорошая шутка. Смешная! Ладно, всем спасибо за помощь, сам уже почти со всем разобрался…
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-18 10:16:22.310000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
упс. пропустил развитие темы. Исправляюсь. quote:
ORBGINAL: Jasmin А зачем вообще на C мучаться?? Есть же специальные системы моделирования, GPSS, AnyLogic, Arena… С анимацией и прочим. Сильно надо - стукни в личку, о цене договоримся. Ты что не видишь? Это студент. Он ограничен рамками задания. В задании речь о семафорах unix… quote:
ORIGINAL: Denaturat quote:
ORIGINAL: rgo семафоры из PosixThreads – это семафоры которые актуальны в адресном пространстве одного процесса man PTHREAD_PROCESS_SHARED. семафоры из POSIX реализуются как объекты ядра, к адресному пространству одного процесса они никоим образом не привязаны Ты что пытаешся доказать? Что классические семафоры unix и семафоры pthread – это одно и то же? Это не так. Это разные api. Или просто хочешь указать на то, что семафоры pthread – это ядерные объекты? А это уже зависит от реализации. Глянь, например, на библиотечку pth. Насколько я знаю, стандарт POSIX Thread составлялся таким образом, чтобы ядрёность/юзермодность реализации оставить на усмотрение разработчиков. В тех же манах на pthread регулярно натыкаешься на фразы о том, что наша реализация поддерживает такую фичу, но вообще фича может и не поддерживаться. quote:
ORIGINAL: AchtungPartizanen Ладно, всем спасибо за помощь, сам уже почти со всем разобрался… Это хорошо. Всегда надо разбираться самостоятельно. Можно с помощью общественности, но самостоятельно.
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-18 14:26:31.986666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: rgo quote:
ORIGINAL: Denaturat quote:
ORIGINAL: rgo семафоры из PosixThreads – это семафоры которые актуальны в адресном пространстве одного процесса man PTHREAD_PROCESS_SHARED. семафоры из POSIX реализуются как объекты ядра, к адресному пространству одного процесса они никоим образом не привязаны Ты что пытаешся доказать? Что классические семафоры unix и семафоры pthread – это одно и то же? Это не так. Это разные api. с чего ты взял что я это пытаюсь доказать? где я хоть слово сказать про "классические семафоры UNIX" (что бы там ни имелось в виду под этим названием)? quote:
ORIGINAL: rgo Или просто хочешь указать на то, что семафоры pthread – это ядерные объекты? А это уже зависит от реализации я просто хочу сказать, что по стандарту они обязаны быть объектами, разделяемыми между различными процессами. этого стандарт всё же требует - в противном случае реализация должна указывать неполное соответаствие стандарту. реализуешь их иным образом, не объектами ядра - пожалуйста - но PTHREAD_PROCESS_SHARED будь добр поддержать
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-20 09:23:05.710000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: Denaturat записи отправляются при "зелёном" состоянии семафора для данного процесса. обратная связь процесса-светофора с дочерними процессами - состояние изменяемого им семафора, другой обратной связи нет Не знаю как это выглядит с точки зрения препода. Но с точки зрения программиста – это глупость. Зачем нужна обратная связь? Даже если подумать тупо о моделируемом процессе: какая обратная связь? Как связана интенсивность потока машин подъезжающих к светофору с состоянием этого светофора? Согласно условию задачи состояние светофора как-то зависит от интенсивности. Но обратной зависимости нет. А если тупо подумать о наипростейшем решении задачи на пайпах, то зачем нужен семафор? Пайп будет буферизировать всё что в него пишется, а процесс-светофора будет забирать из буфера по мере возможности. Проблема может возникнуть, с блокированием процесса-дороги из-за наполнения внутриядерного буфера пайпа, но эти проблемы решаются, и не сильно-то сложно. И семафоры при таком подходе выглядят лишней сущностью. ps. Денатурат доказал мне что фраза "семафоры из PosixThreads – это семафоры которые актуальны в адресном пространстве одного процесса" не верна в корне. Да. Это так. Более того, он вынудил меня отказаться от моей фразы "я изрекаю лишь истину".
|
|
|
RE: Управление светофором (семафоры, C, unix) - 2009-05-20 15:02:52.206666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
ну, теперь у нас есть два выхода - либо дуэль на мясорубках, либо написать по программе :)
|
|
|
|
|