Newsgroup: it.fan.tv.mai-dire-gol
Titolo: [Serio][Importante] Linguaggio C

Allora, mi serve l'aiuto di chi di voi sa programmare in 
linguaggio C, e che lo sappia fare bene.
Devo sviluppare per l'esame di Sistemi Operativi il seguente 
progetto in linguaggio C per ambiente Windows (NT/2000/XP) e 
spero che qualcuno di voi sappia aiutarmi.
----------
Bacheca Elettronica Volatile
Realizzazione di una bacheca elettronica residente su memoria
condivisa. Una bacheca elettronica e' un servizio che permette ad 
ogni utente del sistema di inviare messaggi che possono essere 
letti da ogni utente del sistema interessato a consultare la 
bacheca stessa. In questo caso la bacheca viene attivata da uno 
specifico programma il cui compito e' creare la memoria 
condivisa, le necessarie strutture di sincronizzazione e poi 
termina.
Un programma per accedere alla bacheca deve fornire ad un utente 
le seguenti funzioni:
 
1. Leggere tutti i messaggi sulla bacheca elettronica. 
2. Spedire un nuovo messaggio sulla bacheca elettronica. 
3. Rimuovere un messaggio dalla bacheca elettronica. 
 
Un messaggio deve contenere almeno i campi Oggetto e Testo. Si
raccomanda di usare i semafori per evitare che due o piu' istanze 
del programma di accesso generino inconsistenza dei dati sulla 
memoria condivisa. Lo studente e' tenuto a realizzare sia il 
programma di attivazione che il programma per la lettura/invio 
dei messaggi, ovvero il programma di accesso vero e proprio.
----------
Vi prego, aiutatemi.
-- 
Lord Gas, the Waxen - Blasfemo di IFTMDG - Penguin's Enemy #1 
[ICQ: 57483751][the Waxen Pith: 
http://www.snipp.org/gas
]
... "Goddamn, there's always such a big temptation to be good"
... (Tom Waits - God's Away on Business)

Vi prego, aiutatemi.
Mi sembri leggermente disperato. :-)
Un consiglio, cerca di impostare per grosse linee il programma e di 
individuare i punti in cui puoi avere problemi. A questo punto puoi 
cercare di fare domande mirate su it.comp.lang.c, c'è gente mooolto 
preparata li ma che ti aiuteranno difficilmente se ti presenti li con la
traccia dell'esercizio.
-- 
            ||HomePage: 
http://digilander.libero.it/nemesis2001/
 |\ |       ||XPN:      
http://digilander.libero.it/nemesis2001/Xpn.html
 | \|emesis ||Cit:     "Non ci sono percorsi più brevi da cercare,
            ||Cit:      c'è la strada che credi e il coraggio di andare"

 Mi sembri leggermente disperato. :-)
Oggi lo sono un po' meno, ieri notte ho fatto lavorare un po' 
l'omino del cervello è qualche idea interessante sembra esermi 
venuta
Dunque servono due programmi, uno che setta la bacheca e gli 
elementi di sincronizzazione (lo chiameremo Generator) e uno che 
fa da client alla bacheca (lo chiameremo, con eccessiva fantasia, 
Client).
Il generator si avvia e crea un file (chiamiamolo board.brd) 
sulla memoria. Visto che poi quella momoria sarà accessibile da 
tutti i Client, diventerà memoria condivisa. Assieme al file crea 
immagino ci siano da creare anche i semafori (ma è un argomento 
che ancora non abbiamo trattato ai corsi, quindi lo tengo per 
dopo). Il programma a questo punto termina lasciando le sue 
variazioni in memoria.
Il client parte, e va alla ricerca del file board.brd, se non lo 
trova da errore, se lo trova appare un menu dove ti chiede se 
vuoi leggere, scrivere o cancellare.
Poi suppongo basti trattare il file come una vector di stringhe.
Ha senso? alla fine i semafori servono solo a fare in modo che 
anche se ci sono tanti utenti a scrivere sulla bacheca 
contemporaneamente i messaggi arrivano per un utente alla volta.


contemporaneamente i messaggi arrivano per un utente alla volta.
Hai detto niente, quella probabilmente è la parte più complicata :-)


 Hai detto niente, quella probabilmente è la parte più complicata :-)
Ed è nche l'unica parte che non ha spiegato ancora a lezione. 
Quindi aspetto lo faccia.


  
La parte critica è ovviamente quella che scrive fisicamente i nuovi 
messaggi nella memoria condivisa o rimuove i vecchi. 
In lettura non ci sono problemi di accesso, in quanto non fai azioni 
che si diffondono sul altri clienti del sistema.
Supponendo che:
1) Un semaforo lo sai scrivere, e sai come funziona.
2) Sai cos'è una memoria condivisa.
Ti dico che la struttura in memoria condivisa è un semplice 
blocco del tipo:
Numero del messaggio 
Lunghezza dell'oggetto del messaggio
Oggetto del messaggio
Lunghezza del corpo del messaggio (in linee)
Linee del corpo del messaggio (puoi fissarle a una dimensione x)
[altri campi a piacere]
Per il resto, non è nulla di più difficile di un gestore di memoria condivisa,
in cui al posto di una locazione, scrivi blocchi di N locazioni.
Puoi complicare la cosa mettendo un indice/vocabolario in un'altra zona di 
memoria condivisa per accellerare l'accesso a uno specifico messaggio, volendo.
La divisione che io farei è:
1 - Un gestore di accesso alla memoria condivisa
2 - Un "server" che accetti le richieste di lettura/scrittura dai processi 
    client e li smisti al gestore sottostante, dopo aver ricevuto i dati. 
    Questo puoi suddividerlo in vari thread paralleri, aprendo un nuovo thread
    per ogni client nuovo che chiede la connessione.
3 - I vari client che fanno da pura interfaccia verso l'utente e spediscono
    le richieste via RPC al processo "server".
Ovviamente non aspettarti che faccia il progetto per te, ti posso solo dare delle
indicazioni più o meno generiche (anche perchè il progetto di SO 2 lo devo ancora
fare io... ^__^).
-- 
Un uomo in saldo - la mail lì sopra è valida
"per legge matematica "il volume di un cerchio é pari ai 2/3 del cilindro che
la contiene" prova che ti viene (non la polmonite :) )" 
(Pasquake e la geometria)

Greetings, you horrible lot. Here is the last warp from Un uomo 
in saldo
[cut]
ma l'idea che era venuta a me non va bene? 



Magari. I veri problemi sono di sincronizzazione fra le scritture, 
che si risolve solo creando un terzo programma (o strutturando in 
client-server, con i client che *non* accedono al file, ma mandano
solo chiamate a Generator) che "regoli" l'accesso al file.
Progetto interessante, se mi dai 3 o 4 giorni ti potrei arrivare
a scrivere il macrocodice.
-- 
"> Potresti spiegarci cosa intendi per base di un sistema operativo?
intendo dire che ha lo stesso tipo di gestione dati; infatti in win 2000,
win xp e win NT i dati passano tutti o quasi per il file SYSTEM c'era anke
un'altra cosa ma nn mi viene in mente." - Pasquake e le basi di SO. 

Quindi aspetto lo faccia.
Secondo le leggi univirsali dell'università quello sarà l'argomento 
dell'ultimo giorno di lezione al quale il docente arriverà con mezz'ora 
di ritardo e dicendo che ha da fare e che deve andare via un'ora prima 
;-)
Ti consiglio di iniziare a spulciare comp.programming.threads :-PP


ma l'idea che era venuta a me non va bene? 
direi che Renato "t'ha mis a figur i 'mmerd" :-P


 a scrivere il macrocodice.
Ti ringrazio per la proposta e per i consigli, ma resta il fatto 
che io devo seguire una specifica, non posso fare quanti 
programmi pare a me solo perché mi sembra che venga meglio.. mi 
devo attenere. 



Come detto, un progetto simile lo fai solo se sai cos'è un semaforo e 
un critical-path (o parte critica).
-- 
Un uomo in saldo - la mail lì sopra è valida
"> Ma bi-ROTFL! Hai mai usato l'Arj, tu?
il mio primo passatempo é stato il primissimo videogioco: Pong (che ho
remakato per giunta)" - Pasquake dimostra di conoscere il DOS. 

 un critical-path (o parte critica).
Fatto oggi.
A quanto pare il semaforo ti para il culo perfettamente



Più o meno: non ti salva mica dalle stalling condiction, o da
una serie di chiamate che ti portano in un loop infinito, ad 
esempio :)
Però sicuramente risolve un sacco di problemi, e con un'idea 
del tutto stupida, fondamentalmente.
-- 
** Se sei interessato a un pbem basato su FATE, contattami! **
"in win 2000 non c'é la cartella windows??? questa volta mi piscio sotto dal
ridere davvero (poi pulisci tu perché é colpa tua) non lo sai che win 2000 e
win xp hanno la stessa base?" - Pasquake e i sistemi operativi Microsoft


Se sono solo due, il generator allora si accolla la parte 
di gestione delle chiamate da parte dei client, usando 
adeguatamente thread & semafori, ad esempio.
O puoi spostare le wait sui semafori nei vari client, ma 
mi pare una soluzione meno elegante... ma probabilmente 
più efficente.
-- 
** Se sei interessato a un pbem basato su FATE, contattami! **
"li ho usati; non avuti, smanetttavo a 200 km/h nella cartella di windows e
al terzo crush di sistema i miei mi hanno tolto il pc dalle mani..." 
(Pasquake l'informatico ci illustra le sue origini)

 questione di stile.
Si, ma te, come diversi altri, vi state ponendo con la filosofia 
da smanettone. Io volevo qualcuno che concretamente avesse una 
soluzione funzionante, evitando l'assurda serie di giri da 
programmatore frustrato.


 programmatore frustrato.
..
..tuto ciò mi ricorda una conversazione su icq, riguardante
l'andazzo informaticizzato del ng....
Della serie "se non li puoi combattere, unisciti a loro".
-- 
Stiv®
Capocomico© et uork!

 bravo, così spengo il pc e se ne a puttane.
Non è questo il senso di «bacheca volatile»? :)
G
-- 
   Farewell!    |  In the courts of Minas Anor the White Tree
gandalf*
ithn.net
|  flowered again, for a seedling was found by
  ICQ#16553733  |  Mithrandir in the snows of Mindolluin that
snurl.com/dialog|
  rose tall and white above the City of Gondor.

 Non è questo il senso di «bacheca volatile»? :)
No, tant'è vero che va fatta su memoria condivisa e i dati che 
metti in memoria condivisa restano in memoria fin quando non si 
da lo specifico comando di cancellazione del file mapping.


Ci pensano i semafori.
Si e mettici pure il vigile, guarda che li devi implementare tu! :-)


 Si e mettici pure il vigile, guarda che li devi implementare tu! :-)
Ma va?
E io che pensavo che venisse Tux a implementarmeli.
-_-


 E io che pensavo che venisse Tux a implementarmeli.
Eh, ma come fa a battere, con quelle alucce?
E poi non credo gli converrebbe avvicinarsi al Pinguin's Enemy #1 <g>
G
-- 
   Farewell!    |  The two highest of this order (of whom it is said
gandalf*
ithn.net
|  there were five) were called by the Eldar Curunír,
  ICQ#16553733  | 'the Man of Skill', and Mithrandir, 'the Grey Pilgrim'
snurl.com/dialog|
  but by Men in the North Saruman and Gandalf.

-_-
Da come ne parlavi sembrava che fosse gia tutto fatto senza nessuno 
sforzo per te. :-P



Guarda che sia questa, che l'altra soluzione che avevo delineato *sono
funzionanti* così come le altre possibili. 
Se poi ti aspettavi il codice C, è contro la mia etica: l'esercizio
te lo devi fare tu, e al limite ti posso delineare il macrocodice.
-- 
** Se sei interessato a un pbem basato su FATE, contattami! **
