![]() |
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)
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?
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!!!
![]()
Ho risolto.
Il problema era che non ricompilavo il file test.c che
utilizzavo per richiamare le syscall dopo aver fatto modifiche
alle librerie.
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
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...
ma il prof ha detto per caso se rispondeva alle mail o che non avrebbe avuto tempo rispondere??
__________________
by Ð@rk§h@ÐØw
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!!)
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
Originally posted by darkshadow
ma il prof ha detto per caso se rispondeva alle mail o che non avrebbe avuto tempo rispondere??
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
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!!)
__________________
by Ð@rk§h@ÐØw
Originally posted by darkshadow
Quello che ho pensato anch'io.
quindi quando viene chiamata sem_init(sem, val)
.
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?
__________________
by Ð@rk§h@ÐØw
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
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.