Автор Тема: Bash script  (Прочетена 10904 пъти)

petar787

  • Напреднали
  • *****
  • Публикации: 15
  • Window Manager: Davidaboth
    • Профил
Re: Bash script
« Отговор #60 -: Apr 05, 2018, 17:37 »
Той каза че за решение на задачата се използват getmem и семафори
Активен

sudo

  • Напреднали
  • *****
  • Публикации: 73
    • Профил
Re: Bash script
« Отговор #61 -: Apr 05, 2018, 18:27 »
Само че синхронизацията е доста по сложна концепция от обмяната на данни и въобще не се споменава в задачата, и както казах само с един флаг не става щото има два четящи процеса, ами ако имаме и числа дето никой не ги обработва кой ще им дигне флага
В множеството на целите числа от 1 до 100, аз лично не се сещам за някое число което да е нито четно, нито нечетно.

Айде да не разпъваме локуми, а ако можем да обясним на младежа какво се иска.
Активен

remotexx

  • Напреднали
  • *****
  • Публикации: 3211
    • Профил
Re: Bash script
« Отговор #62 -: Apr 05, 2018, 20:11 »
Той каза че за решение на задачата се използват getmem и семафори
- такааа това го нямаше в първоначалния въпрос...

Е те точно за това говорех (50+ % implied), не могат една задача да формулират като хората, е не можеа ли да го включи това условие в текста на задачата, ами човек (който ще ти пише задачата  :P) да трябва да пита какъв материал сте учили за да може да ти я напише  >:D
щото аз и със ZeroMQ мога да ти я напиша, ама ще ти пишат двойка (щото вероятно не сте го учили) ..и базирано на моя "скромен" опит - даже и да ги питаш тия дето искат някой да им реши задачата какво са учили и.. те не знаят
нищо лично, аз не хвърлям вината върхху питащите т.е. незнаещите, а върху даскалите т.е. знаещите, защото за тоя дето не знае - простено му е, ама за тоя дето знае.... (и въпреки всичко - по мързел или по некадърност - такива каквко да ги правиш, чакаш господ да слезе да си прибере вересиите)

И понеже заговорихме за синхронизация
http://blog.scottlogic.com/2015/03/20/ZeroMQ-Quick-Intro.html
https://stackoverflow.com/questions/32681838/difference-between-zeromq-and-ipc
тук давам ZeroMQ само за пример, а и защото авторите му го препоръчват дори и за локална обмяна на данни и не е по-бавно от викане на функция, но е много по скалируемо, напр. почваш от обмен м/у нишки в един и същи процес после го разделяш на два процеса на една и съща машина (IPC), после даже и на две различни (TCP/IP) и даже (ако си ползвал препоръчителните модели/patterns) скалирането идва "безплатно"- и всичко това без сериозни промени по кода (само сменяш малко настройки)

П.П. а за колегата дето излезе с частния случай че от 1..100 половината числа били четни - другата нечетни... пак твърдя че точно тази задача е много нескопосана, даже и със семафори - какво правим ако напр. суматора на нечетните числа крашне, а тоя на четните продължи да работи .. има да чааака щото пък генератора ще чака крашналия да си дигне семафора до безкрай, и всичко това като се има предвид че задачата "уж" не е за синхронизация м/у процеси а да научат как се работи със споделена памет... ама нагледал съм се на какво ли не: рекурсивни задачи да ги решават с итерация и обратно (щото такива примерни задачки е изкопирал даскала отнякъде)

П.П.П. и само за протокола, аз точно такова решение предложих (още преди да разберем, че ще трябват и други неспоменати , но надявам се учени екстри) "за решение на задачата да се използват getmem и семафори " - даже препоръчах два. Сега чакам(е) конкретни въпроси и отстраняване на проблеми с getmem и семафорите - щото па те са платформено зависими та сега ще чекаме и да ни кажат аджеба курса под Уиндоус ли е по линукс и special flavor(s)
« Последна редакция: Apr 05, 2018, 20:32 от remotexx »
Активен

remotexx

  • Напреднали
  • *****
  • Публикации: 3211
    • Профил
Re: Bash script
« Отговор #63 -: Apr 05, 2018, 20:42 »
Само че синхронизацията е доста по сложна концепция от обмяната на данни и въобще не се споменава в задачата, и както казах само с един флаг не става щото има два четящи процеса, ами ако имаме и числа дето никой не ги обработва кой ще им дигне флага
В множеството на целите числа от 1 до 100, аз лично не се сещам за някое число което да е нито четно, нито нечетно.

Айде да не разпъваме локуми, а ако можем да обясним на младежа какво се иска.

Натам накъдето отиват нещата, с така поставена задача и със споделена памет и 2 семафора .. младежа нито ще научи синхронизацията, нито работата със споделена памет. Единственото което ще понаучи е, че някой неща са платформено зависими (няма как, за да ги подкара въобще)

Според мен fizzbuzz  ще е къде по добър пример от дадената задача, ще има и числа които никой не обработва и други които няколко процеса обработват.
https://en.wikipedia.org/wiki/Fizz_buzz
http://wiki.c2.com/?FizzBuzzTest

« Последна редакция: Apr 05, 2018, 20:46 от remotexx »
Активен

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Re: Bash script
« Отговор #64 -: Apr 05, 2018, 20:50 »
Добре!
Питоня е на друго ниво от С, но...
Зная, че Threads могат да споделят ресурс, макар, че аз не го ползвам това. Нито пиша графични приложения, нито  ми е било нужно до този момент. Менажирането обаче може да е трудничко. Сигурно за такава задачка не толкова, но...
0MQ е вариант. Ма е със сокети. Може и да не го признаят този вариант дори без библиотеката.

Named pipe?

Може ли външна променлива, подавана като параметър на процес или функция, да се смята за споделен ресурс, ако е реализирана като нещо подобно на fifo array? Можеш от единия край да си наблъскаш числата, а от другия да изтичат за обработка.

Познанията ми по програмиране не са толкова добри, та може и някоя глупост да съм изтърсил  :D
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

remotexx

  • Напреднали
  • *****
  • Публикации: 3211
    • Профил
Re: Bash script
« Отговор #65 -: Apr 06, 2018, 01:44 »
Колега ако си погледнал препратките които съм дал то вероятно си се подвел понеже се говори за сокети, но това не са TCP/IP ами zmq socket като преносната среда отдолу може да е всякаква вкл. TCP,  IPC incl. shared mem, named pipes, etc.

The transport can be any of the following values:

inproc
thread to thread within a single process
ipc
inter-process communication (Linux only and not available in any of the native ports as yet)
tcp
box to box communication and inter-process when “ipc” isn’t available

Както и да е, целта на заданието явно беше да ги научи да ползват споделена памет, но не по най-добрия начин, за съжаление...
« Последна редакция: Apr 06, 2018, 01:48 от remotexx »
Активен

petar787

  • Напреднали
  • *****
  • Публикации: 15
  • Window Manager: Davidaboth
    • Профил
Re: Bash script
« Отговор #66 -: Apr 25, 2018, 21:28 »
Да се създадат три процеса, базирани на C програма комуникиращи през обща памет с размер едно цяло число. Първият процес генерира числа от 1 до 100 и ги записва в общата памет. Останалите процеси четат от общата памет като формират съответно сумите на четните и нечетните числа и ги визуализират.`

Почти е готова, но господина каза че трябва да използвам още един или два семафора който да използвам в PS() на процесите odd и even. Ако някой може да помогне. Аз се мъчих но не става

това е процеса Even

Код:
#include <stdio.h>
#include "shared.h"
#include <stdbool.h>
int main()
{
  int i,k,e,j;
  int *common;
  common=(int *)getmem(61560111);
  sem_t empty;
  empty = sem_init(61560111);
 
  sem_t full;
  full = sem_init(61560112);
  j=0;
  for(i=1;i<=100;i++)
  {
    *common=e;
    PS(full);
  if(e%2==0) {
   
 
 j+=e;

 VS(empty);
  }
  for(k=0;k<1000;k++);   
  }
  printf("\n");
  printf("The sum of even numbers is: %d \n",j);
  printf("Even numbers process ended. \n");
}

Процес odd
Код:
#include <stdio.h>
#include "shared.h"
#include <stdbool.h>
int main()
{
  int i,f,s,k,a;
  int sum;
  int *common;
  common=(int *)getmem(61560111);
  sem_t empty;
  empty = sem_init(61560111);
 
  sem_t full;
  full = sem_init(61560112);
  s=0;
  for(i=1;i<=100;i++)
  {
        a=*common;
    PS(full);
    if(a%2!=0) {

  s+=a;
   }
   //printf("decc %d \n", a);
   VS(empty);
   
   for(k=0;k<1000;k++);
    }
    printf("The sum of odd numbers is: %d \n",s);
    printf("Odd numbers process end. \n");
   

}
А това е процеса init където се инициализира семафорите.
Код:
#include <stdio.h>
#include "shared.h"
int main()
{
  int *common;
  common  = (int *)getmem(61560111);
  *common = 0;
 
  sem_t empty;
  empty = sem_init(61560111);
    sem_set(empty,1);
 
    sem_t full;
  full = sem_init(61560112);
    sem_set(full,0);
   
    printf("The initial %d \n", *common);
   
 
 
}
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
BASH - Script
Общ форум
blind_fish 3 3681 Последна публикация Nov 04, 2002, 20:20
от
bash script
Хардуерни и софтуерни проблеми
flame 6 3865 Последна публикация Sep 02, 2004, 12:28
от mimosh
bash script
Общ форум
anger 4 3429 Последна публикация Mar 06, 2005, 20:01
от anger
Помощ за bash script
Хардуерни и софтуерни проблеми
Ivan_storm 4 3364 Последна публикация May 30, 2005, 12:31
от rpetrov
bash script за праверяване на процес
Общ форум
sys7em 8 3904 Последна публикация Aug 09, 2005, 15:39
от