URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7700
[ Назад ]

Исходное сообщение
"Общая память для процессов"

Отправлено Serega.M , 15-Ноя-08 17:49 
Необходимо создать несколько дочерних провессов, и выводить на экран в каждом процессе (дочерних + родительском) какую-нибудь информацию, при этом в самом начале необходимо указывать порядковый номер записи и pid процесса. Как организовать общую память (переменную) для всех процессов? При этом дочернии процессы могут также создавать новые процессы.

На пример: pid родителя - 0001, pid дочерних - 0002, 0003, 0004.
Вывод на экран:
1 0001
2 0002
3 0003
4 0004
5 0002
6 0004

Помогите пожалуйста. :)


Содержание

Сообщения в этом обсуждении
"Общая память для процессов"
Отправлено Ivanoff , 15-Ноя-08 19:58 
Есть несколько способов, сейчас в голову приходят:
- неименованные каналы (скорее всего для вашего случая самое лучшее)
- именованные каналы
- разделяемая память (Если вы решите пойти по этому пути то придется еще задуматься о синхронизации чтения/записи из разделяемой переменной. )

Подробную информацию можно найти на этом сайте с примерами кода.


"Общая память для процессов"
Отправлено Serega.M , 15-Ноя-08 20:32 
>Есть несколько способов, сейчас в голову приходят:
>- неименованные каналы (скорее всего для вашего случая самое лучшее)
>- именованные каналы
>- разделяемая память (Если вы решите пойти по этому пути то придется
>еще задуматься о синхронизации чтения/записи из разделяемой переменной. )
>
>Подробную информацию можно найти на этом сайте с примерами кода.

Можете предложить структуру по какой при помощи именованных каналов все процессы будут получать доступ на изменение одной переменной?


"Общая память для процессов"
Отправлено NuINu , 15-Ноя-08 20:51 
>>Есть несколько способов, сейчас в голову приходят:
>>- неименованные каналы (скорее всего для вашего случая самое лучшее)
>>- именованные каналы
>>- разделяемая память (Если вы решите пойти по этому пути то придется
>>еще задуматься о синхронизации чтения/записи из разделяемой переменной. )
>>
>>Подробную информацию можно найти на этом сайте с примерами кода.
>
>Можете предложить структуру по какой при помощи именованных каналов все процессы будут
>получать доступ на изменение одной переменной?

можно через пайпы, тока не структуру а протокол, все взаимодействия через родительский процесс...
потомок запрашивает у родительского процесса(или у дедушкина или прадедушкина) следующий номер. можно конечно специальный процесс енумератор организовать..

только неудобно это.
проще всего через разделяемую память сделать и не париться. а синхронизацией заморачиваться не надо, достаточно просто сделать :)


"Общая память для процессов"
Отправлено Serega.M , 15-Ноя-08 21:21 
>можно через пайпы, тока не структуру а протокол, все взаимодействия через родительский
>процесс...
>потомок запрашивает у родительского процесса(или у дедушкина или прадедушкина) следующий номер. можно
>конечно специальный процесс енумератор организовать..
>
>только неудобно это.
>проще всего через разделяемую память сделать и не париться. а синхронизацией заморачиваться
>не надо, достаточно просто сделать :)

Я бы хотел сделать через разделяемую память, но единственный пример, который я смог найти и его описание, обсалютно не понятен и не работает у меня.. :(
Счас пробую организовать работу через каналы..

Вот задание полностью:
Создать дерево процессов следующего вида:
*ну тут рисунок*
Каждый процесс делает следующие:
каждое dt = номер процесса по дереву умноженному на 16 мск следующего вида:
номер по дереву _ порядковый номер записи _ pid _ pid родительского процесса _ текущее время (ч.м.с.мс)
(например 1 1 1123 1121 10.30.45.785). Сделать tab по дереву
Каждый процесс работает в течении времени = номер процесса по дереву делённому на 4 (t=(9-n)/4) в секундах. Перед завершением род. процессов завершать все дочерние.


"Общая память для процессов"
Отправлено angra , 16-Ноя-08 02:01 
Очередной студент-недоучка?

"Общая память для процессов"
Отправлено Serega.M , 17-Ноя-08 00:12 
>Очередной студент-недоучка?

Очередной студент-переучка?


"Общая память для процессов"
Отправлено Serega.M , 15-Ноя-08 23:34 
Вот на эту часть кода постоянно выдаёт ошибку " *** [ex] Bad system call"

int segment_id;
int segment_size = getpagesize();
key_t key;
key = ftok (".",getpid());
segment_id = shmget(key,segment_size,IPC_CREAT|IPC_EXCL);

Что не так я делаю???


"Общая память для процессов"
Отправлено NuINu , 16-Ноя-08 15:27 
>Вот на эту часть кода постоянно выдаёт ошибку " *** [ex] Bad
>system call"
>
>int segment_id;
>int segment_size = getpagesize();
>key_t key;
>key = ftok (".",getpid());
>segment_id = shmget(key,segment_size,IPC_CREAT|IPC_EXCL);
>
>Что не так я делаю???

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

вот часть кода которая получает разделяемую память и в случае неудачи переходит на конец функции где освобождается семафор(полученный ранее)
    //Создадим разделяемую область памяти
    shm_buf_id = shmget(IPC_PRIVATE, sizeof(buf_change), IPC_CREAT|IPC_EXCL|0660);
    if(shm_buf_id == -1) {
        printf("Can't initialize share memmory: %s\n", strerror(errno));
        goto end_sem;
    }

да и поскольку вы генерируете все свои процессы из одного совершенно нет необходимости использовать ftok для генерации кей.


"Общая память для процессов"
Отправлено Serega.M , 17-Ноя-08 00:16 
>[оверквотинг удален]
>    //Создадим разделяемую область памяти
>    shm_buf_id = shmget(IPC_PRIVATE, sizeof(buf_change), IPC_CREAT|IPC_EXCL|0660);
>    if(shm_buf_id == -1) {
>        printf("Can't initialize share memmory:
>%s\n", strerror(errno));
>        goto end_sem;
>    }
>
>да и поскольку вы генерируете все свои процессы из одного совершенно нет
>необходимости использовать ftok для генерации кей.

Попробовал сделать как у вас - та же ошибка :(


"Общая память для процессов"
Отправлено NuINu , 17-Ноя-08 11:17 
>[оверквотинг удален]
>>    if(shm_buf_id == -1) {
>>        printf("Can't initialize share memmory:
>>%s\n", strerror(errno));
>>        goto end_sem;
>>    }
>>
>>да и поскольку вы генерируете все свои процессы из одного совершенно нет
>>необходимости использовать ftok для генерации кей.
>
>Попробовал сделать как у вас - та же ошибка :(

ошибка на этапе компиляции или выполнения? мне кажеться что ошибка в чем то другом.


"Общая память для процессов"
Отправлено Serega.M , 20-Ноя-08 12:03 
>ошибка на этапе компиляции или выполнения? мне кажеться что ошибка в чем то другом.

Ошибка в среде.. Теперь использую OpenSuse 10.3 всё ок. Вопрос пока снят ;)


"Общая память для процессов"
Отправлено Vladyslav Lazarenko , 16-Ноя-08 22:00 
http://www.boost.org/doc/libs/1_37_0/doc/html/interprocess/s...


"Общая память для процессов"
Отправлено vertur , 17-Ноя-08 03:09 
>http://www.boost.org/doc/libs/1_37_0/doc/html/interprocess/s...

Товарисчи! Вы чего со всем с дуба рухнули с этим бустом ?


"Общая память для процессов"
Отправлено vertur , 17-Ноя-08 03:11 
>[оверквотинг удален]
>
>Вывод на экран:
>1 0001
>2 0002
>3 0003
>4 0004
>5 0002
>6 0004
>
>Помогите пожалуйста. :)

А вам на хоботе вроде уже ответили про mmap ?
Или весь инет надо опросить ?


"Общая память для процессов"
Отправлено Serega.M , 17-Ноя-08 10:39 
>А вам на хоботе вроде уже ответили про mmap ?
>Или весь инет надо опросить ?

На ixbt? Да ответили и намного оперативней и понятней, чем здесь....


"Общая память для процессов"
Отправлено angra , 17-Ноя-08 13:18 
Здесь не любят студентов, удивительно что вам вообще хоть что-то ответили.

"Общая память для процессов"
Отправлено Serega.M , 17-Ноя-08 16:28 
>Здесь не любят студентов, удивительно что вам вообще хоть что-то ответили.

Ммдяя.. от чего же такая не любовь к нам?


"ударим автопробегом поколено"
Отправлено Andrey Mitrofanov , 17-Ноя-08 23:23 
>>Здесь не любят студентов, удивительно что вам вообще хоть что-то ответили.
>Ммдяя.. от чего же такая не любовь к нам?

Потому что сначала ленивые тупые неучи побираются по форумам, а потом получают ДипломСамостийногоОбразца и приходят куда-ни-то _работать_, где и продолжают побираться вместо того, чтобы ..., где их приходится кому-то учить по-новой, чему они всеми четырьмями ногами упираются, и делать за них их работу, пока они втупляют в элементарные вещи, начиная с букваря имени первого класса и орфографии, но их все должны холить и лелеять (начиная с "форумов толковых и халявных", конечно в первую голову) -- они Жо дипломированные Специалисты.

Но да, природа этой нелюбви ещё мало изучена современной наукой. Отдельные исследователи полагают, что в ограниченных популяциях доминирующие самцы для поддержания собственного статуса обязаны чморить молодёжь просто в силу жестокости эволюции и необходимости выживания в конкурентной среде: кто больше распушил хвост - того и... тапки. Другие склоняются к мнению, что написание скриптов на шеле и форков с IPC на Си угрожает самому существованию невладеющих этими премудростями старых павианов, вожаков стаи -- они вынуждены жестоко подавлять наклёвывающуюся угрозу их статусу со стороны мол.поколения, практически применяя силу. Третьи выдвигали версию, что вербальная передача знаний и умений в социуме невозможна, в чём многократно убеждались "седые старцы", познавшие МудростьДзен, и им глубоко симпатичны зелёные птенцы ищущие в их мудрости решения задачи и упускающие возможность Просветления, но Дзен учит их быть Справедливыми и мокать жаждущих знаний - раз за разом. Ни одна из этих гипотез, как и другие, менее известные, не нашла до сих пор фактического подтверждения...

Нау-у-ука!.. ...по-прежнему в неоплатном долгу перед НароднымХазяйсвом. :-/


"ударим автопробегом поколено"
Отправлено Serega.M , 18-Ноя-08 00:54 
>[оверквотинг удален]
>павианов, вожаков стаи - они вынуждены жестоко подавлять наклёвывающуюся угрозу их
>статусу со стороны мол.поколения, практически применяя силу. Третьи выдвигали версию, что
>вербальная передача знаний и умений в социуме невозможна, в чём многократно
>убеждались "седые старцы", познавшие МудростьДзен, и им глубоко симпатичны зелёные птенцы
>ищущие в их мудрости решения задачи и упускающие возможность Просветления, но
>Дзен учит их быть Справедливыми и мокать жаждущих знаний - раз
>за разом. Ни одна из этих гипотез, как и другие, менее
>известные, не нашла до сих пор фактического подтверждения...
>
>Нау-у-ука!.. ...по-прежнему в неоплатном долгу перед НароднымХазяйсвом. :-/

Что тут можно сказать? От части правда, отчасти нет..
Науку здорово познавать, когда реально у тебя есть время для этого - на очном обучении.. А если ты работаешь и работаешь много и хорошо, то тебе тяжело находить силы и время для изучения всего материала в семестре.. как в моём случаи.. Я бы с большой радостью взял и прочитал полтора килограммовую книгу по программированию в *nix.. но нет этой возможности.. а хватает время только для прочтения метод, статей, man и всё.. увы конечно.. да и при этом я не собираюсь идти работать в данном направлении, так как выбрал немного другое.. Так что, вам не стоит волноваться по этому поводу, а быть намного проще и снисходительней к людям.. ;)


"ударим автопробегом поколено"
Отправлено angra , 18-Ноя-08 01:30 
Лично мне достаточно факта существования врачей-недоучек и возможности с ними столкнутся, чтобы не желать помогать студентам без уважительных причин. И россказни про тяготы студенческой жизни и желание работать не по специальности в уважительных причинах для меня не числятся.

"ударим автопробегом поколено"
Отправлено Serega.M , 18-Ноя-08 02:42 
>Лично мне достаточно факта существования врачей-недоучек и возможности с ними столкнутся, чтобы
>не желать помогать студентам без уважительных причин. И россказни про тяготы
>студенческой жизни и желание работать не по специальности в уважительных причинах
>для меня не числятся.

Я работаю и хочу работать по специальности (ПОИТ), просто не в окружении Unix.. ну, а то, что недоучка, так эт точно.. ещё три года впереди ;)


"ударим автопробегом поколено"
Отправлено Square , 21-Ноя-08 16:42 
>>Лично мне достаточно факта существования врачей-недоучек и возможности с ними столкнутся, чтобы
>>не желать помогать студентам без уважительных причин. И россказни про тяготы
>>студенческой жизни и желание работать не по специальности в уважительных причинах
>>для меня не числятся.
>
>Я работаю и хочу работать по специальности (ПОИТ), просто не в окружении
>Unix.. ну, а то, что недоучка, так эт точно.. ещё три
>года впереди ;)

Ну так учите матчасть ептыть...


"ударим автопробегом поколено"
Отправлено Serega.M , 23-Ноя-08 00:42 
>Ну так учите матчасть ептыть...

Учим, учим.. три самолёта на моём счету ;)



"ударим автопробегом поколено"
Отправлено Square , 21-Ноя-08 16:41 
>Лично мне достаточно факта существования врачей-недоучек и возможности с ними столкнутся,

Это вааще пипеец... После того как ввели заочную форму обучения для хирургов и стоматологов - страшно подумать какой вопрос на форуме такие "спецы" могут задать...