Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-01-2018, 18:33   #1
MrSwat360
Junior Member
 
Iscritto dal: May 2012
Messaggi: 8
Processi di 2 tipi diversi [C]

Ciao a tutti ragazzi, sto facendo il progetto per l'esame di S.O. e riporto quanto scritto sulla traccia:

Si intende realizzare la simulazione di una “società” di individui. In questa simulazione `e presente
una “popolazione” di processi di due tipi. Sulla base di certe regole, illustrate di seguito nel dettaglio, i processi
generano dei figli che entrano a far parte della popolazione.
Processi Sono presenti processi di tre tipi:
1. “Gestore”, che gestisce la simulazione e i vari eventi, e genera gli individui;
2. processi di tipo “A”;
3. processi di tipo “B”.
Ogni processo individuo `e caratterizzato da:
• un tipo (“A” o “B”);
• un nome codificato da una stringa di caratteri;
• un genoma codificato da un unsigned long.
All’inizio, il gestore crea un numero init_people≥ 2 (per esempio 20) di individui.
Per ogni individuo creato, vengono determinati casualmente:
• il suo tipo: “A” o “B”;
• il suo nome: un carattere maiuscolo (da “A” a “Z”);
• il suo genoma: un unsigned long casuale da 2 a 2+genes.
La creazione degli individui avviene con fork e poi una execve del figlio


Non riesco a capire cosa intende per tipo A e B, e come conferire quelle caratteristiche, devo creare una struttura???

Grazie a tutti.
Sergio
MrSwat360 è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2018, 11:39   #2
MrSwat360
Junior Member
 
Iscritto dal: May 2012
Messaggi: 8
-

Ultima modifica di MrSwat360 : 20-01-2018 alle 11:44.
MrSwat360 è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2018, 11:42   #3
MrSwat360
Junior Member
 
Iscritto dal: May 2012
Messaggi: 8
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
crei una struttura con i parametri in elenco, inizializzata in maniera randomica come dice nelle specifiche, e la passi di volta in volta come parametro al thread che viene creato dal gestore.
Grazie mille per la risposta innanzitutto.
Se creo una struttura e le do il nome process, non posso inizializzarla una sola volta?

typedef structure {
char tipo;
*char nome;
unsigned int genoma;
} process;

int main()
for(int i=0; i < init_people ; i++)
process = { rand() % 67 + 65 , rand() % 91 + 65 , rand() % 100 + 2 }


Cosi facendo process non viene ogni volta sostituito con valori nuovi?
MrSwat360 è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2018, 15:14   #4
MrSwat360
Junior Member
 
Iscritto dal: May 2012
Messaggi: 8
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
il gestore passera' un puntatore a process ad ogni thread che viene generato, per cui se aggiorni la stessa struttura, modificherai i parametri degli altri thread che hai gia' generato. devi percio' fare una cosa del genere:

Codice:
 structure {
       char tipo;
     *char nome;
       unsigned int genoma;
} process[init_people]; 

int main() {
         for(int i=0; i < init_people ; i++) {
             process[i] = initit_process_struct( rand() % 67 + 65 , rand() % 91 + 65 , rand() % 100 + 2 );
            crea_thread( ..., &process[i] ... );
         }
}
Le 2 funzioni in grassetto che hai aggiunto cosa dovrebbero fare??
In crea_thread devo inserire la fork?
MrSwat360 è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2018, 13:59   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Attenzione - per quanto sembri assurdo, la traccia parla di processi, non di thread (riporta espressamente che e' necessario usare fork + exec).

Comunque l'approccio suggerito da Antonio e' corretto. Fai solo attenzione a creare processi e non thread per evitare di andare off topic
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2018, 16:27   #6
MrSwat360
Junior Member
 
Iscritto dal: May 2012
Messaggi: 8
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
giusto, non avevo notato. comunque la soluzione che ho delineato, come dici tu, e' adattabile anche a quest'altro caso. anzi, probabilmente si puo' fare in maniera piu' semplice poiche' i processi non condividono lo stesso spazio di indirizzi.
Ragazzi ho risolto così :

int init_people = 0;
int *ip;
pid_t my_pid;
typedef struct process
{
char tipo;
char nome[100];
unsigned int genoma;
} t_process;
t_process informations[20];

void initialize(t_process c1){
int l=0;
c1.tipo = '\0';
c1.nome[l] = '\0';
c1.genoma = 0;
}
void stampainfo(t_process c1)
{
printf("Tipo: %c, Nome: %s, Genoma : %u\n", c1.tipo, c1.nome, c1.genoma);
}

int i,j,z, k = 0, genes = 0;
int main(int argc, char *argv[])
{
char *newargv[] = { "A", "B", NULL };
char *newenviron[] = { NULL };
my_pid = getpid();
char* buf = (char*) malloc(sizeof(long));
printf("Inserisci un numero di processi iniziali: ");
scanf("%d", &init_people);
printf("Inserisci un numero di genoma: ");
scanf("%d", &genes);
ip= (int*) malloc(init_people*sizeof(t_process*));
srand(time(NULL));
for(i=0; i< init_people; i++)
{
informations[i].tipo = 65 + rand() % 2;
informations[i].nome[k]=(char)65 +rand() % 26;
informations[i].nome[k+1]= '\0';
informations[i].genoma = 2 + rand() % (genes+2);
}
for(j=0; j< init_people; j++)
stampainfo(informations[j]);
switch(fork())
{
case -1:
error("Errore nella creazione del processo ", my_pid);
case 0:
sprintf(buf, "%d", my_pid);
switch(fork())
{
case -1:
error("Errore nella creazione dei processi", my_pid);
case 0:
printf("\n---> Comincio a creare i processi!\n");
execve("./Processo", newargv, newenviron);
error("Errore eseguendo un processo A", my_pid);
default:
sleep(1);
execve("./Processo", (newargv +1), newenviron);
error("Error eseguendo un processo B", my_pid);
}
}
return 0;
}


Adesso dovrei utilizzare la execve ma non capisco come..
MrSwat360 è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2018, 14:20   #7
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ciao
fai conto di scrivere 3 programmi diversi = 3 applicazioni eseguibili diverse (una e' la tua master application, una e' il programma A, una e' il programma B). Concettualmente e' piu' semplice se pensi a 3 programmi distinti.
La traccia non dice nulla riguardo ai programmi A e B, quindi probabilmente te la puoi cavare semplicemente con una stampa dei parametri. In questo caso, A e B sono uguali ma considerali concettualmente distinti.

Sei arrivato correttamente alla fork(). L'ultimo passo e' quindi quello di chiamare la exec() (nella versione che preferisci) lanciando A o B invece di Processo. Tutto qui.

Fai pero' attenzione che dovrai passare la serie di argomenti che hai calcolato, cosi' che i programmi A/B li possano usare. Per ora li hai calcolati ma non li passi a nessuno, quindi non saranno disponibili al chiamato.

Una raccomandazione molto importante: ho visto che hai fatto il controllo sul fatto che la fork() possa fallire ed hai fatto benissimo.
Analogamente pero' dovresti fare il controllo sul fatto che la malloc() vada a buon fine. E' piu' importante di quanto pensi perche' nel caso la malloc() fallisca andrai in crash e passerai parecchio tempo a dire parolacce prima di trovare l'errore (specialmente nel caso di programmi voluminosi) ed io ci tengo che tu vada in paradiso

Infine, una pignoleria: informations non esiste in inglese, rimuovi la s finale. Certo non cambia il programma ma si presenta molto meglio
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2018, 06:03   #8
MrSwat360
Junior Member
 
Iscritto dal: May 2012
Messaggi: 8
PRESUPPOSTO che si deve parlare obbligatoriamente di processi(NON thread), nello specifico n processi figlio generati da un padre, mi serve solo capire come realizzare questa frase:
Dopo la creazione dei processi “A” vengono pubblicate le loro informazioni (genoma,
PID e/o altre informazioni ritenute utili). Tale pubblicazione avviene su apposita struttura dati accessibile anche
ai processi “B”. Dopo la pubblicazione delle proprie informazioni, i processi “A” rimangono in attesa di essere
contattati da processi “B”

Ho la consegna entro le 24:00 di oggi, sono disperato
MrSwat360 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Il telescopio spaziale James Webb ha cat...
Amazon scatenata nel weekend: sconti sug...
Pulizia per 45 giorni senza pensieri: il...
Apple taglia il prezzo degli AirPods Pro...
Tutti i MacBook Air M4 2025 da 13 pollic...
Roborock QV 35A a 429€ o Dreame L40 Ultr...
SpaceX Starship: Ship 37 ha eseguito due...
Sharkoon punta sui case a basso costo, m...
La tua rete Wi-Fi fa pena? Questi FRITZ!...
Amazon, un weekend di fuoco per gli scon...
Ancora 3 smartwatch Amazfit in forte sco...
Sharkoon A60 RGB: dissipatore ad aria du...
HONOR 400 Pro a prezzo bomba su Amazon: ...
Offerte da non perdere: robot aspirapolv...
Apple Watch e Galaxy Watch ai minimi sto...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:22.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v