PDA

View Full Version : esercizio sistemi operativi


processore
18-11-2009, 18:52
salve devo fare questo esercizio di sistemi operaitivi :

Progettate e implementate un sistema formato da tre processi master, slave1 e slave2 che viene
lanciato con: > master n
- Il processo master deve eseguire un loop di n iterazioni prima di terminare
- Ad ogni iterazione, master deve:
◦ attendere un numero casuale r di secondi compreso tra 1 e 10 (vedete man -s 3c rand)
◦ inviare un segnale custom a slave1 (slave2) se r ` dispari (pari)
e
- Al termine delle n iterazioni, master deve inviare un segnale di terminazione sia a slave1 che a
slave2
solo che non capisco che significa lanciato con master n

scusate ma come faccio a creare i 3 processi ???
forse instende che master e il padre e slave1 e 2 siano i figli e li devo creare con una fork ??

wingman87
18-11-2009, 19:19
Intende che da linea di comando tu digiterai ad esempio:
master 31
oppure
master 17
Nel primo caso master farà 31 iterazioni, nel secondo 17.
E sugli slave, sì, li devi creare con fork.

processore
18-11-2009, 19:29
quindi dofro fare una scanf dove devo decidere le iterazioni.
e master sara il padre e slave saranno i figli ?

scusa poi una cosa come faccio a fare il numero casuale di volte?
li dice di usare man ma da me non lo trova.
mi potersti scrivere un esempio che genera un numero casuale di volte ?
grazie

wingman87
18-11-2009, 19:50
Lo scanf non serve perché n lo ricevi da linea di comando, ad esempio se hai definito il main in questo modo:
int main(char** args, int argc){
...
}
troverai n in args[1] sottoforma di stringa. Userai atoi per convertirla in intero (atoi è in stdlib.h).

Per generare un numero casuale includi stdlib.h e poi usi:
int num=rand()%(MAX+1);
in questo modo ottieni un valore compreso tra 0 e MAX. Nel tuo caso invece di MAX avrai 10.
E' consigliabile inizializzare il seed della funzione random all'inizio del programma. Per far questo includi time.h e poi richiami
srand(time(NULL));

processore
18-11-2009, 21:05
scusa ma non capisco come fare per dare n da linea di comando

poi io faccio
int main (int argc, char *argv)

wingman87
18-11-2009, 21:31
Sì, ho sbagliato l'ordine dei parametri. Allora avrai:

#include <stdlib.h>

int main(int argc, char** argv){
int n=atoi(argv[1]);
...
}


Per dargli n da linea di comando, supponendo che hai chiamato l'eseguibile "prova" scriverai nella shell ad esempio:
prova 17

cionci
19-11-2009, 00:19
Thread chiuso
|
V
http://www.hwupgrade.it/forum/showthread.php?t=1649196