fpc linux и мультипроцессность.

Интересные алгоритмы, олимпиадные задачи, эффектные и эффективные решения. freepascal, delphi, c, c++, c#, java, javascript, perl, ruby, python, php, bash, wsh и т.д. Компиляторы, интерпретаторы, линкеры, отладчики, системы контроля версий и многое другое.

Модератор: xdsl

fpc linux и мультипроцессность.

Сообщение [DD] 12 ноя 2010, 14:37

Недавно решил взяться за разработку многопроцессного приложения. С самими процессами более или менее разобрался.
Начал появляться вопрос про передачу данных между процессами. Почитав литературу нашел подходящий для меня способ. Этим способом оказалась очередь сообщений. скопипастил пример из статьи откомпилировался он даже с первой попытки, но вот загвоздка сообщения не отправляются и соответственно не читаются... взял пример из пакета fpc-build(использую Gentoo так что там исходники) откомпилировал, запускаю и вижу что отправка опять не проходит. Возвращался код ошибки 14 - ESysEFAULT - неверный адрес.

Собственно вопрос. В чем тут может быть ошибка: в настройке системы или параметрах компиляции или может еще в чем-то?
Вложения
simple.tar.gz
оба примера
(2.32 Кб) Скачиваний: 455
мы рождены чтоб сказку сделать кодом
[DD]
Elite
 
Сообщения: 163
Зарегистрирован: 18 мар 2009, 22:18
Откуда: from HELL
Полное имя: Зыков Д.А.

Re: fpc linux и мультипроцессность.

Сообщение Vladislav_133 14 ноя 2010, 22:16

1. Все таки многопроцессное или многопотокое приложение.
2. Причем здесь freepascal. Читайте просто о том, как многозадачность реализуется в Unix-системах.
3. Если речь идет все-таки о потоках, то все потоки реализуются в одном адресном пространстве. Таким образом, у всех один доступ к данным. Проблема заключается в их синхронном действии. Здесь имеется стандартный набор средств типа светофора или критической секции.

Есть хорошая и не толстая книжка Марк Митчел. Программирование под Linux. Профессиональнй подход. Почитайте.

ps
принципиальных отличий в реализации многозадачности в Unix и Windows нет.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: fpc linux и мультипроцессность.

Сообщение xdsl 15 ноя 2010, 08:22

Насколько понимаю, [DD] хочет конретики, общие положения ему известны, все-таки отучился уже на инженерной специальности ;)
По поводу кода. С первым примером я не стал разбираться - много кода без комментариев. Второй пример попроще, там все прозрачно.
Посылаем два сообщения одного типа и одно - другого:
Код: Выделить всё
[slinkin@sda2 2]$ ./msgtool s 1 qwerty
Sending message.
[slinkin@sda2 2]$ ./msgtool s 2 asdfgh
Sending message.
[slinkin@sda2 2]$ ./msgtool s 1 12345
Sending message.

Теперь - принимаем сообщения обоих типов.
Код: Выделить всё
[slinkin@sda2 2]$ ./msgtool r 1
Reading message.
Type : 1 Text : qwerty
[slinkin@sda2 2]$ ./msgtool r 1
Reading message.
Type : 1 Text : 12345
[slinkin@sda2 2]$ ./msgtool r 2
Reading message.
Type : 2 Text : asdfgh

OS - Altlinux 5.0 Ark desktop
fpc - 2.2.4

P.S. На altlinux 4.0 Server - тоже работает.
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: fpc linux и мультипроцессность.

Сообщение [DD] 15 ноя 2010, 10:52

очень интересно...
ОС: gentoo
ядро: 2.6.36
fpc: 2.2.0 и 2.4.0
Код: Выделить всё
gate bin# ./msgtool s 1 qwe
Sending message.
msgsnd returned an error: 14


ОС: alt linux 5.0 ark desktop
ядро: 2.6.32-std-def-alt20.M50P.1
fpc: 2.2.4
Код: Выделить всё
demon@localhost ~/src $ ./msgtool s 1 qwe
Sending message.
msgsnd returned an error: 14


при этом пример написанный на си нормально отсылает и получает данные...
мы рождены чтоб сказку сделать кодом
[DD]
Elite
 
Сообщения: 163
Зарегистрирован: 18 мар 2009, 22:18
Откуда: from HELL
Полное имя: Зыков Д.А.

Re: fpc linux и мультипроцессность.

Сообщение xdsl 15 ноя 2010, 16:19

Вот мой бинарник, попробуйте его. Если заработает, посмотрим опции компилятора.
Вложения
msgtool.gz
(51.34 Кб) Скачиваний: 459
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: fpc linux и мультипроцессность.

Сообщение [DD] 15 ноя 2010, 17:03

Ваш бинарник работает нормально...
мы рождены чтоб сказку сделать кодом
[DD]
Elite
 
Сообщения: 163
Зарегистрирован: 18 мар 2009, 22:18
Откуда: from HELL
Полное имя: Зыков Д.А.

Re: fpc linux и мультипроцессность.

Сообщение xdsl 15 ноя 2010, 21:42

Значит дело в Вашей версии (опциях) компилятора. Результат fpc -va msqtool.pp в студию.
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: fpc linux и мультипроцессность.

Сообщение [DD] 16 ноя 2010, 14:15

вот.
Вложения
msgtool.tar.gz
(18.13 Кб) Скачиваний: 440
мы рождены чтоб сказку сделать кодом
[DD]
Elite
 
Сообщения: 163
Зарегистрирован: 18 мар 2009, 22:18
Откуда: from HELL
Полное имя: Зыков Д.А.

Re: fpc linux и мультипроцессность.

Сообщение xdsl 17 ноя 2010, 16:01

Пока первое, что заметил - у Вас сборка под 64-битную систему. Мой вариант собирался по 32-битную. К сожалению, под рукой 64-битной системы нет, попробовать не могу.
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: fpc linux и мультипроцессность.

Сообщение xdsl 19 ноя 2010, 09:07

Может совсем не в тему, но сишный тип long в 64-битной системе 32-битный или нет? Ведь структура сообщения выглядит так:
Код: Выделить всё
struct msgbuf {
               long mtype;       /* message type, must be > 0 */
               char mtext[1];    /* message data */
           };
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: fpc linux и мультипроцессность.

Сообщение [DD] 19 ноя 2010, 09:31

Код: Выделить всё
main()
{
printf("size: %u\n",sizeof(long));
}

в результате:
Код: Выделить всё
gate long # ./a.out
size: 8


следовательно он не 32 а 64 бита.

а вот в fpc longint как был 32 так и остался.

P.S. после замены в примере longint на int64 все заработало...
PSS спасибо за помощь
мы рождены чтоб сказку сделать кодом
[DD]
Elite
 
Сообщения: 163
Зарегистрирован: 18 мар 2009, 22:18
Откуда: from HELL
Полное имя: Зыков Д.А.

Re: fpc linux и мультипроцессность.

Сообщение xdsl 19 ноя 2010, 14:38

В fpc longint и должен остаться 32-битовым. С плавающим размером там integer. Попробуйте writeln(sizeof(integer)). Должен выдать 8, имхо.
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: fpc linux и мультипроцессность.

Сообщение [DD] 19 ноя 2010, 15:55

проверил... выдало 2
с {$mode delphi|objfpc} выдает 4

для проверки еще подключил модуль ctypes там есть тип clong вот он выдает 8, но
Код: Выделить всё
cint64   =   int64;
clong    =   cint64;


так что опять приходим к int64
мы рождены чтоб сказку сделать кодом
[DD]
Elite
 
Сообщения: 163
Зарегистрирован: 18 мар 2009, 22:18
Откуда: from HELL
Полное имя: Зыков Д.А.

Re: fpc linux и мультипроцессность.

Сообщение xdsl 20 ноя 2010, 10:57

Н-да, называется - читайте документацию:
Код: Выделить всё
Table 3.2: Predefined integer types
Type       Range                                         Size in bytes
Byte       0 .. 255                                      1
Shortint   -128 .. 127                                   1
Smallint   -32768 .. 32767                               2
Word       0 .. 65535                                    2
Integer    either smallint or longint size               2 or 4
Cardinal   longword                                      4
Longint    -2147483648 .. 2147483647                     4
Longword   0..4294967295                                 4
Int64      -9223372036854775808 .. 9223372036854775807   8
Word       0 .. 18446744073709551615                     8

На самом деле эта ошибка в примере, а не в FPC. В модуле ipc все определено корректно:
Код: Выделить всё
...
PMSGbuf = ^TMSGbuf;
  TMSGbuf = record              // called mymsg on freebsd and SVID manual
    mtype : clong;
    mtext : array[0..0] of char;
  end;
...
Function msgsnd(msqid:cint; msgp: PMSGBuf; msgsz: size_t; msgflg:cint): cint;
...

Зачем примерописатели продублировали определение структуры сообщения, да еще, как казалось - некорректно, выше моего понимания.
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: fpc linux и мультипроцессность.

Сообщение [DD] 20 ноя 2010, 17:41

я предполагаю, что они его написали уже давно и просто забыли исправить... а то, что структуру переписали дак это обычное дело... я так понял, что эта структура переписывается для каждого конкретного случая отдельно...
мы рождены чтоб сказку сделать кодом
[DD]
Elite
 
Сообщения: 163
Зарегистрирован: 18 мар 2009, 22:18
Откуда: from HELL
Полное имя: Зыков Д.А.


Вернуться в Алгоритмизация и программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2