Newsgroup: it.comp.lang.c
Titolo: cerco produttore/consumatore et similia

Salve a tutti,
sto preparando l'esame di Sistemi Operativi e mi servirebbero i
listati, completi di tutte le funzioni ed il main, per i casi di:
 - N produttori / M consumatori su buffer limitato (o coda circolare)
ma in rete non ne riesco a trovare di ben fatti, completi, e -magari-
anche commentati.
Qualcuno ha una qualche risorsa (codice, link o altro) da potermi qui
postare/segnalare ?
Grazie


1- di cosa?!
2- che c'entra con "Sistemi Operativi"?

fmas...@gmail.com
 ha scritto:

un qualche listato funzionante che mostri N produttori (o scrittori di
qualunque cosa, anche un intero random, o un long, non fa differenza)
ed M consumatori (detti anche lettori) che operano in multi-threading
su un coda circolare o un buffer limitato (praticamente un array di
interi o long ove il produttore scrive e dal quale il consumatore
legge i valori inseriti)
A noi l'esame ce lo fanno fare così: ti siedi al calcolatore e devi
scrivere questo esercizio (esercizio mai, ma dico mai, mostrato a
lezione!! Mah... 'sti professori??)

 2- che c'entra con "Sistemi Operativi"?
Del problema del produttore e del consumatore che si presenta in varie 
salse e serve per la cooperazione dei processi, io l'ho studiato con 
pseudocodice ma magari a lui chiedono una implementazione in un 
linguaggio specifico.

 linguaggio specifico.
l'implementazione me la chiedono in linguaggio C con utilizzo della
libreria pthread.h, programmazione in ambiente Linux


Ah ok - allora coi sistemi operativi c'entra ben poco (giusto l'idea
che da qualche parte in un sistema operativo ci sarà del codice che
idealmente si comporta in quella maniera (che odio queste cose)).
Beh, il codice per creare threads su linux è abbastanza facile, ed è
pieno di esempi - già "man 3 pthread_create" ti riporta un esempio
interessante.
Per l'algoritmo non so che dirti, ce ne sono vari - nella mia scarsa
memoria di studio accademico dei SO mi ricordo solo quei due/tre di
cui parlava Tanenbaum (e di cui mi sono letto il codice su Minix).

'sta meteria è difficile solo perchè, appunto, non si trova materiale
completo sul quale esercitarsi

 
Allora perché vuoi fartelo fare dal NG?
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 lezione!! Mah... 'sti professori??)
perche' sei all'universita', e ci si aspetta che ti fai un culo cosi
per imparare.
mettiti davanti ad un pc e scrivitelo tu il programma. E' il modo
migliore per imparare (a programmare).
Ciao Jack

 migliore per imparare (a programmare).
Nell'ipotesi che gli interessi imparare invece che farsi mettere una
firma sul libretto...
/me che all'epoca di sta roba se ne scrisse in tutte le varianti che gli
saltavano per la testa
-- 
-riko

On 3 Feb, 08:33, 
r...@despammed.com
 (Enrico Franchi) wrote:

anch'io :)
multithread, multi processo, asincorna, con socket, pipe, shared
memory.
Ciao Jack

 lezione!! Mah... 'sti professori??)
Pensa te! Bastardi!
Invece qui
http://www.scs.stanford.edu/09wi-cs140/
l'esame funziona cosi': in 10 settimane, devi studiare (da zero) come 
funziona un sistema operativo, e scriverne uno UNIX-like (beh, non tutto, 
solo qualche pezzo interessante come creare l'ambiente per caricare e far 
girare i programmi utente, gestire e sincronizzare 
multiprocessi/multithread, creare e gestire la memoria virtuale, creare un 
file system, implementare il supporto per le macchine virtuali...).
Mi dicono che in totale sia richiesto di scrivere qualche migliaio di righe 
di codice (tra le 5 e le 7 mila). Mi dicono che il carico di lavoro sia 
circa 40 ore la settimana (solo questo corso: di solito ne prendi anche 
altri 2).
Ah gia', il prof era Mendel Rosenblum (il creatore di VMWare...)
Pleg 


Ovvero scrivere i pezzi che in teoria sono buoni per "ogni" sistema
operativo, su "ogni" macchina (*ogni* non intende *tutti*,
ovviamente). Scrivere un sistema operativo a questo livello non è
affatto difficile, anzi è (secondo me) interessante e soddisfacente. I
pezzi "difficili" sono tutte le interfacce con l'hardware (a partire
da codice specifico per ogni processore a finire con chissà quale
periferica) e la conformità ad uno standard specifico (come posix, ad
esempio) - lo dico per esperienza personale, non si finisce mai...

 affatto difficile, anzi è (secondo me) interessante e soddisfacente.
Che sia interessante e' sicuro... che non sia difficile non lo so :))
di sicuro prende una valanga di tempo :)
Pleg

 affatto difficile, anzi è (secondo me) interessante e soddisfacente.
Che sia interessante e' sicuro... che non sia difficile non lo so :))


 completo sul quale esercitarsi
Come ti è già stato detto, leggiti il codice di Minix, lì troverai 
un'implementazione fatta bene
-- 
"Le opinioni dei fanatici prescindono dai fatti"
python -c "print 'bG9ybWF5bmFAZ21haWwuY29t'.decode('base64')"
Linux Registered User: 461615

  che non sia difficile non lo so :))
Dipende dal concetto di "difficile". Posso farti esempi simili da campi
diversi della computer science.
Quando fai una cosa che si sa come va fatta perche' e' stata trattata in
letteratura fino alla morte, non devi gestire casi d'angolo troppo
spinosi, etc, etc, etc, e' solo questione di scrivere il codice. Ah, e
non devi nemmeno spremere il millisecondo, altrimenti ci sono
complicazioni aggiuntive.
-- 
-riko


Io separerei il concetto di "difficoltà di concetto" e "difficoltà di
implementazione". Ci sono idee facili difficili da implementare e
viceversa:
La ricerca del cammino minimo in un grafo è banale da capire ma
abbastanza complessa da implementare, al contrario una rete neurale
mpl è ostica da capire ma facilissima da implementare. Del resto
uomini e macchine pensano e parlano in maniera diversa, quindi non c'è
da stupirsi.
Per quanto riguarda gli OS penso che la maggior parte dei concetti e
degli algoritmi siano abbastanza semplici sia da implementare, e credo
che sia questo il principale motivo del perchè si cerca di spingere
sempre più sulla teoria che sulla pratica.