.dsy:it. Pages (8): « 1 2 [3] 4 5 6 7 » ... Last »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Sistemi operativi I (http://www.dsy.it/forum/forumdisplay.php?forumid=269)
-- progettino (http://www.dsy.it/forum/showthread.php?threadid=34948)


Posted by Alex86mi on 14-05-2008 00:27:

Per il passaggio di parametri alle funzioni ho usato la struttura
dei messaggi numero 1 e nella funzione 'do_up' (/src/lib/other/semaforo.c) ho utilizzato:

int do_up() {
message m;
m.m1_i1 = 88; /* inserisco un numero a caso come esempio */
/* se stampo qui m.m1_i1 stampa corretto */
_syscall(SS_PROC_NR, SS_UP, &m); /* spedisco al server il msg */
return 0;
}

a questo punto vado nel server (/src/servers/ss/ss.c) a leggere
e cerco di vedere se è arrivato il msg giusto:

......
message m_in; /* riceve i msg in input */
/* stampo m.m_source e m.m_type...la stampa è corretta
* quindi il messaggio che spedisco arriva!
*/
/* ora stampo m.m1_i1 e stampa un numero diverso da 88! */
......

Non riesco a ricevere il numero corretto (in questo caso l'88 che
ho settato come esempio) e non capisco xchè..qualcuno
sa dov'è l'errore?


Posted by QeSaRNeRON on 14-05-2008 10:05:

ciao... io ho iniziato facendo quello de 7 maggio ...
penso di aver seguito tutto per filo e per segno solo che quando provo a compilare questo...

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

#define S 0

int main(void){
int f;

/*sema_init(S, 1);*/
down();
f = fork();
if (f == 0){
down();
printf("Sono il figlio...\n");
printf("Fine del figlio.\n");
up();
} else {
sleep(1);
printf("Sono il padre...\n");
sleep(3);
printf("Fine del padre.\n");
up();
waitpid(f, NULL, 0);
}


return 0;
}

#cc sema_test.c -o sema_test
Undefined:
_down
_up

qualcuno sa spiegarmi questo errore da cosa puo essere dato??? grazie!!!
:D


Posted by Alex86mi on 14-05-2008 12:37:

Ho risolto.
Il problema era che non ricompilavo il file test.c che
utilizzavo per richiamare le syscall dopo aver fatto modifiche
alle librerie.


Posted by darkshadow on 14-05-2008 12:55:

Scusate raga ma non riesco a capire una cosa. come faccio a gestire semafori di cui non so il numero a proiri (cosi dice nel progetto, il numero di semafori è variabile) con degli array come mi è stato detto qui??

Non si dovrebbero usare delle liste??

perchè un conto è sapere che devo gestire che ne so 10 semafori ed un'altro gestire un numero arbitrario di semafori.

Non so se mi sono spiegato.

__________________
by Ð@rk§h@ÐØw


Posted by Larios on 14-05-2008 13:07:

bisognerebbe chiedere al prof visto che non ha specificato nulla, quello che credo io comunque è che il progetto abbia lo scopo di capire dove mettere le mani nel codice, comunque meglio sentirlo. Fra le altre cose i sorgenti non ci stanno in un disco da 20M (nemmeno quelli originali del disco di istallazione...) come ha indicato ma ci vuole minimo 21M...


Posted by darkshadow on 14-05-2008 13:29:

ma il prof ha detto per caso se rispondeva alle mail o che non avrebbe avuto tempo rispondere??

__________________
by Ð@rk§h@ÐØw


Posted by pamarcan on 14-05-2008 13:55:

di sicuro non vanno usati gli array, perchè i nuovi semafori devono essere dinamicamente aggiunti. partendo da quello fatto a laboratorio bisogna aggiungere quindi una struttura nel server (ad esempio una lista) che mantenga i semafori aperti, una procedura che inizializzi un semaforo (nel caso caso non sia presente nella struttura va creato e messo in coda). vanno quindi aggiunti tutti i prototipi e il nuovo wrapper nelle librerie, modificate le vecchie funzioni ad ogni livello (kernel, system,utente). in modo che (es do_up e do_down che son chiamate da up e down nelle librerie) prendano i parametri dal messaggio che ovviamente andrà in qualche modo creato con gli opportuni campi.
(dal dirlo al farlo però, è una parola!!)


Posted by darkshadow on 14-05-2008 13:57:

sto cercanco di fare quello sul wiki ma quando eseguo il comando make mi da il seguente errore:

make: Can't open .depend: No such file or directory

ho inserito il file Makefile nella directory del server (/usr/src/servers/ss/) e provo ad eseguire il comando ma non va.

Qualcuno che ci è riuscito me lo pò spiegare come ha fatto.

Grazie.


PS: il codice del Makefile è quello che ho messo in qualke post + sopra.

__________________
by Ð@rk§h@ÐØw


Posted by Larios on 14-05-2008 14:02:

Originally posted by darkshadow
ma il prof ha detto per caso se rispondeva alle mail o che non avrebbe avuto tempo rispondere??


ho mandato una mail ieri ma non ha ancora risposto...


Posted by fabi0 on 14-05-2008 14:03:

Ciao, qualcuno mi sa dire se la funzione main del server è giusta come l'ho fatta? qualcuno l'ha fatta in altro modo?

int main (int s, int init)
{
....
init_server(s, init){...}
}

GRAZIE


Posted by darkshadow on 14-05-2008 14:08:

Originally posted by pamarcan
di sicuro non vanno usati gli array, perchè i nuovi semafori devono essere dinamicamente aggiunti. partendo da quello fatto a laboratorio bisogna aggiungere quindi una struttura nel server (ad esempio una lista) che mantenga i semafori aperti, una procedura che inizializzi un semaforo (nel caso caso non sia presente nella struttura va creato e messo in coda). vanno quindi aggiunti tutti i prototipi e il nuovo wrapper nelle librerie, modificate le vecchie funzioni ad ogni livello (kernel, system,utente). in modo che (es do_up e do_down che son chiamate da up e down nelle librerie) prendano i parametri dal messaggio che ovviamente andrà in qualche modo creato con gli opportuni campi.
(dal dirlo al farlo però, è una parola!!)



Quello che ho pensato anch'io.

Quind si avrà per ciascun semaforo una struttura del tipo.

struct semaforo{

int value;
struct semaforo *next;
puntatore_alla_coda_dei_processi_bloccati;
}

quindi quando viene chiamata sem_init(sem, val)

dovrò prima controllare se il semaforo è già presente nella lista. Se si faccio:
punt_semaforo->value = val;

Altrimenti dovrò aggiungere il semaforo nella lsita e poi fare l'assegnamento.

__________________
by Ð@rk§h@ÐØw


Posted by fabi0 on 14-05-2008 14:10:

Originally posted by darkshadow
Quello che ho pensato anch'io.

quindi quando viene chiamata sem_init(sem, val)

.



e sem e val?
Dove li prendi? Li passi al main che a sua volta chiama la funzione sem_init passandogli i due parametri?


Posted by darkshadow on 14-05-2008 15:08:

Originally posted by fabi0
e sem e val?
Dove li prendi? Li passi al main che a sua volta chiama la funzione sem_init passandogli i due parametri?


sem e val sono appunto i valori che tu gli passi a sem_init dal main.

nel main avrai un insieme di semafori il cui numero non è noto ma varia ad ogni esecuzione.

quindi dal main chiami sem_init con parametri: il semaforo e il valore di inizializzazione; e come detto prima visto che li gestiamo con delle liste si deve prima controllare se il semaforo è gia presente nella lista se basta fare un assegnamento altrimenti devi allocare lo spazio per il semaforo, inserirlo nella lista ed assegnare il valore di inizializzazione.

__________________
by Ð@rk§h@ÐØw


Posted by fabi0 on 14-05-2008 15:10:

fino a qui tutto chiaro, ma noi dobiamo passare al main i parametri da passare alla init_server, no?

int main (int s, int init)

O sbaglio?
GRAZIE


Posted by darkshadow on 14-05-2008 15:18:

dici a quella del server??

__________________
by Ð@rk§h@ÐØw


All times are GMT. The time now is 20:02. Pages (8): « 1 2 [3] 4 5 6 7 » ... Last »
Show all 109 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.