PDA

View Full Version : Linux, operazioni atomiche


71104
30-05-2007, 19:56
esiste su Linux qualche funzione analoga alle varie InterlockedXxx di Win32? in particolare mi servirebbero la InterlockedIncrement e la InterlockedDecrement (devo gestire un reference count in concorrenza), ma sarebbe gradita anche una InterlockedCompareExchange :p

^TiGeRShArK^
30-05-2007, 20:25
Linux, operazioni atomiche
rm -rf /* :O
una vera BOMBA ATOMICA :O

:asd:

P.S. notare quanto siano vicini sul tastierino numerico / e * e quanto è facile fare danni irreparabili quando si vuole fare rm -rf * e invece si fa rm -rf /* :asd:

X fortuna io al max ho fatto crontab -r al posto di crontab -e :muro:

cionci
30-05-2007, 20:55
P.S. notare quanto siano vicini sul tastierino numerico / e * e quanto è facile fare danni irreparabili quando si vuole fare rm -rf * e invece si fa rm -rf /* :asd:
Basta usare una distribuzione che non ti fa loggare come root e non avrai problemi...

cionci
30-05-2007, 20:58
Cosa ti vieta di usare una semplice mutex ?

^TiGeRShArK^
30-05-2007, 21:18
Basta usare una distribuzione che non ti fa loggare come root e non avrai problemi...

mmm..
ovviamente non ho mai provato..
ma se lanci rm -rf /* da utente non ti cancella lo stesso tutti i tuoi file? (dato che sono quelli su cui hai i permessi)
Non pensavo che se non hai i permessi adatti nella directory di partenza ti fallisce proprio l'esecuzione del comando..
solo che cmq non ci tengo a provare :asd:
ne faccio già abbastanza di casini con linux..
soprattutto con VI e con la mia tastiera mista italiano/inglese (nel senso di tastiera inglese col layout in italiano :p)

cionci
30-05-2007, 21:22
In effetti...il fatto che ricorra l'albero potrebbe creare un problemi alla home directory, ma questo non ti impedirebbe di ricreare nuovamente l'utente.

^TiGeRShArK^
30-05-2007, 23:55
In effetti...il fatto che ricorra l'albero potrebbe creare un problemi alla home directory, ma questo non ti impedirebbe di ricreare nuovamente l'utente.

si... questo lo so ke l'utente lo puoi ricreare..
ma tutti i tuoi dati, ovvero tutti i files su cui hai il permesso di scrittura, li perdi o no se lanci rm -rf /* anke se non sei root? :D

Prova e fammi sapere per sicurezza :asd:

cdimauro
31-05-2007, 07:40
ne faccio già abbastanza di casini con linux..
soprattutto con VI e con la mia tastiera mista italiano/inglese (nel senso di tastiera inglese col layout in italiano :p)
Prova un editor umano, joe, che ha i comandi del vecchio e amatissimo WordStar (in buona parte poi adottati dalla Borland coi suoi Turbo*). :cool:

^TiGeRShArK^
31-05-2007, 08:16
fiko il wordstar :asd:
cmq ho appena provato e non c'è installato 'sto joe..
e non se me lo fanno installare qui al lavoro mi sa :p

cmq ancora non ho capito che succede se lancio rm -rf /* da utente....
braso tutti i dati su cui ho accesso in scrittura o no? :p

ilsensine
31-05-2007, 08:52
esiste su Linux qualche funzione analoga alle varie InterlockedXxx di Win32? in particolare mi servirebbero la InterlockedIncrement e la InterlockedDecrement (devo gestire un reference count in concorrenza), ma sarebbe gradita anche una InterlockedCompareExchange :p
Rub..ehm prendi spunto da atomic_t nei sorgenti del kernel linux e le rispettive funzioni.

cionci
31-05-2007, 09:08
Ma siamo sicuri che in user space funzioni ugualmente ?

cdimauro
31-05-2007, 10:06
fiko il wordstar :asd:
cmq ho appena provato e non c'è installato 'sto joe..
e non se me lo fanno installare qui al lavoro mi sa :p
Anche da me non c'era, ma l'ho fatto installare (in tutte le macchine: una trentina :asd: ): con joe sono DI GRAN LUNGA più produttivo che col VI. ;)

ilsensine
31-05-2007, 10:09
Ma siamo sicuri che in user space funzioni ugualmente ?
Sì sono dei semplici inline assembler con il prefisso "lock".

Ad es. mi è capitato di dover realizzare una classe tipo questa:

#ifdef __SMP_SUPPORT__
#define LOCK "lock "
#else
#define LOCK
#endif

class Atomic
{
private:
volatile int m_val;
public:
...
void Inc();
int AddAndReturn(int val);
...
};

inline void Atomic::Inc()
{
asm volatile(
LOCK "incl %0"
:"=m" (m_val)
:"m" (m_val)
);
}

inline int Atomic::AddAndReturn(int val)
{
int old = val;
asm volatile(
LOCK "xaddl %0, %1;"
:"=r"(val)
:"m"(m_val), "0"(val)
);
return val+old;
}

71104
01-06-2007, 00:01
Cosa ti vieta di usare una semplice mutex ? si tratta del solito programma che sto facendo per l'università, quello col sorgente portabile per Windows e per Linux (l'ho quasi finito :p)

non so quanto "pesino" i semafori su Linux, ma certo è che su Win32 le InterlockedXxx sono molto più spedite di un mutex (cioè di un kernel object a tutti gli effetti).

71104
01-06-2007, 00:08
Rub..ehm prendi spunto da atomic_t nei sorgenti del kernel linux e le rispettive funzioni. e ti pareva che non ci stavano le funzioni già pronte :cry:
scrivere del codice assembly mi lega alla piattaforma: sicuramente non sarà richiesto che il programma giri su piattaforme diverse dagli x86 (penso che neanche lo farà andare su un processore a 64 bit), ma non so quanto piaccia al professore. per tenere il programma "leggero" potrei usare su Linux un pthread mutex al posto di un semaforo e su Win32 una sezione critica al posto di un mutex, ma in realtà non posso perché il reference count in questione deve essere condiviso tra processi.
conclusivamente alla mia prima esperienza di sorgente portabile non posso che dire la seguente cosa: GNU/Linux sarà anche na meraviglia, sarà l'emblema della prima utopia realizzata della storia, sarà rulez, sarà FOSS, sarà powa, sarà winzozz sucksz e tutto quello che vi pare; ma che sia "un sistema fatto dai programmatori per i programmatori" * non credo proprio -.-
a me Windows pare tecnologicamente molto più avanzato :read:

* frase ricorrente che tra l'altro ripeteva spesso il mio prof di laboratorio di sistemi 1

71104
01-06-2007, 00:12
Anche da me non c'era, ma l'ho fatto installare (in tutte le macchine: una trentina :asd: ): con joe sono DI GRAN LUNGA più produttivo che col VI. ;) non pensavo che qualcuno sulla faccia della Terra lo usasse veramente il VI... :|

una volta c'ho provato... sono stato costretto per l'esame di laboratorio di sistemi 1... ma credevo che fosse soltanto na roba didattica :asd:

cionci
01-06-2007, 00:14
Early Optimization is the root of all evil

Perché non usi le mutex su entrambi e festa finita ? Prima scrivi tutto e poi cerca di migliorarlo...

71104
01-06-2007, 00:17
Perché non usi le mutex su entrambi e festa finita ? Prima scrivi tutto e poi cerca di migliorarlo... ah mbe' se è per questo sono comunque costretto :D

come ho riassunto al post #15, credo che mi convenga usare il semaforo/mutex.

^TiGeRShArK^
01-06-2007, 08:31
non pensavo che qualcuno sulla faccia della Terra lo usasse veramente il VI... :|

una volta c'ho provato... sono stato costretto per l'esame di laboratorio di sistemi 1... ma credevo che fosse soltanto na roba didattica :asd:
magari! :D
io ogni volta che edito un file sotto ssh sono costretto ad usare quello schifo...
e i primi tempi facevo tanti di quei danni che ci mettevano 10 minuti a riuscire a chiuderlo i miei colleghi che in teoria l'avrebbero dovuto sapere usare ... lo mandavo in LOOP :asd:

ilsensine
01-06-2007, 09:06
scrivere del codice assembly mi lega alla piattaforma
Più al "compilatore" che alla "piattaforma", a meno che non devi scrivere anche per Sparc :D (nel qual caso basta che dai una occhiata nella directory asm-<processore> del kernel linux per avere la soluzione).

sicuramente non sarà richiesto che il programma giri su piattaforme diverse dagli x86 (penso che neanche lo farà andare su un processore a 64 bit), ma non so quanto piaccia al professore.
Quel codice gira perfettamente anche su x86-64.
Ok che l'asm è da evitare se possibile, ma hai trovato un ottimo esempio di utilizzo consigliato, che lo giustifica. Usando dei lock aggiungeresti un overhead assolutamente inutile.
Inoltre, leggendo la documentazione di "InterlockedIncrement":
http://msdn2.microsoft.com/en-us/library/ms683614.aspx
trovi scritto:

This function is implemented as an inline function using a compiler intrinsic where possible.

qundi forse anche queste sono implementate con inline asm.
Nota inoltre che

This function generates a full memory barrier (or fence) to ensure that memory operations are completed in order.
lo sfence non è necessario, a meno che non ti serva effettivamente. posso che dire la seguente cosa: GNU/Linux sarà anche na meraviglia, sarà l'emblema della prima utopia realizzata della storia, sarà rulez, sarà FOSS, sarà powa, sarà winzozz sucksz e tutto quello che vi pare; ma che sia "un sistema fatto dai programmatori per i programmatori" * non credo proprio -.-
Non capisco questa tua affermazione, sono sistemi profondamente diversi, e anzi è incredibile che tutto sommato presentino molte similitudini.
Forse che portare del codice tra Windows e MacOS sarebbe più semplice? ;)

cionci
01-06-2007, 09:10
magari! :D
io ogni volta che edito un file sotto ssh sono costretto ad usare quello schifo...
e i primi tempi facevo tanti di quei danni che ci mettevano 10 minuti a riuscire a chiuderlo i miei colleghi che in teoria l'avrebbero dovuto sapere usare ... lo mandavo in LOOP :asd:
nano ti fa schifo :D

^TiGeRShArK^
01-06-2007, 11:29
nano ti fa schifo :D
e chi l'ha mai sentito? :D
lo inizio a provare e poi ti facco sapere :p
tnx cmq :D

thebol
01-06-2007, 11:43
vi lo usavo all'epoca dell'uni. E non mi ci ritrovavo male. (apparte le ore passate a capire come si salvava :asd: )

a pensarci adesso però, mi vien male

RaouL_BennetH
01-06-2007, 11:53
ue :mbe:

io di certo non ho la vostra preparazione ma... `vi` ormai è stato abbondantemente superato da `vim` che ha anche tutte le versioni X per il DE che si usa: gvim, kvim etc... e quello che si può fare con questo editor, è solo limitato dalla fantasia di chi lo usa ...

voglio dire: non toccatemi vim!! :ncomment:

ilsensine
01-06-2007, 12:07
voglio dire: non toccatemi vim!! :ncomment:
giancarlo@ilsensine:~$ touch /usr/bin/vim
touch: cannot touch `/usr/bin/vim': Permission denied

:asd:

^TiGeRShArK^
01-06-2007, 13:03
ue :mbe:

io di certo non ho la vostra preparazione ma... `vi` ormai è stato abbondantemente superato da `vim` che ha anche tutte le versioni X per il DE che si usa: gvim, kvim etc... e quello che si può fare con questo editor, è solo limitato dalla fantasia di chi lo usa ...

voglio dire: non toccatemi vim!! :ncomment:

vabbè..
ovviamente usavo vim solo ke x comodità lo chiamo sempre vi (anche perchè VIM mi sa tanto di detersivo :asd: ).. ma tanto fa schifo cmq :p
e cmq mi pare un pò difficile usare un DE via SSH.. :stordita:

cdimauro
01-06-2007, 13:09
non pensavo che qualcuno sulla faccia della Terra lo usasse veramente il VI... :|

una volta c'ho provato... sono stato costretto per l'esame di laboratorio di sistemi 1... ma credevo che fosse soltanto na roba didattica :asd:
Magari! Qui i miei colleghi linuxiani incalliti usano soltanto vi/vim. :eek:

Al solito, la pecora rossa sono io, che preferisco un editor più a misura di essere umano. :D

cdimauro
01-06-2007, 13:11
magari! :D
io ogni volta che edito un file sotto ssh sono costretto ad usare quello schifo...
e i primi tempi facevo tanti di quei danni che ci mettevano 10 minuti a riuscire a chiuderlo i miei colleghi che in teoria l'avrebbero dovuto sapere usare ... lo mandavo in LOOP :asd:
ROTFL. :p :p :p

P.S. Se ti capita spesso di lavorare con ssh, usa WinSCP: hai due finestre, una locale e una remota, stile Norton Commander o Total Commander. ;)

^TiGeRShArK^
01-06-2007, 13:35
ROTFL. :p :p :p

P.S. Se ti capita spesso di lavorare con ssh, usa WinSCP: hai due finestre, una locale e una remota, stile Norton Commander o Total Commander. ;)

si tranquillo almeno quella la uso :D
non sono tanto masochista come i miei colleghi da usare scp :asd:

RaouL_BennetH
01-06-2007, 14:02
vabbè..
ovviamente usavo vim solo ke x comodità lo chiamo sempre vi (anche perchè VIM mi sa tanto di detersivo :asd: ).. ma tanto fa schifo cmq :p
e cmq mi pare un pò difficile usare un DE via SSH.. :stordita:

ssh -X indirizzo e ti passa la paura :)

Poi... de gustibus..

^TiGeRShArK^
01-06-2007, 14:09
ehhm..
io mi collego da una macchina WIN :D

dovrei avere vncserver per accedervi in modalità grafica installate sulle macchine linux :p

RaouL_BennetH
01-06-2007, 14:25
ehhm..
io mi collego da una macchina WIN :D

dovrei avere vncserver per accedervi in modalità grafica installate sulle macchine linux :p

no :)

Ti basta putty su windows ;)

Giusto per dare il colpo di grazia al 3d di 71104 :D ti dirò:

sul portatile con windows ho solo putty, mi collego con ssh -X blabla, e quando sono collegato lancio tutte le applicazioni X che desidero senza necessitare di vnc o altre diavolerie (non ci sono sulla macchina linux ;) )

ilsensine
01-06-2007, 14:40
sul portatile con windows ho solo putty, mi collego con ssh -X blabla
Devi avere anche un X server sul portatile con windows...

^TiGeRShArK^
01-06-2007, 14:50
Devi avere anche un X server sul portatile con windows...

e mi sa di si :p

EDIT: e tra l'altro non sono nemmeno sicurissimo che sia caricato l'X-Server sulla macchina linux a cui mi collego dato che è usata esclusivamente come server :fagiano:

RaouL_BennetH
01-06-2007, 14:59
Devi avere anche un X server sul portatile con windows...

Io non ho installato nessun x server su windows :mbe:

Ah!! no aspè..

cygwin.. .. ... :doh:

ilsensine
01-06-2007, 15:03
EDIT: e tra l'altro non sono nemmeno sicurissimo che sia caricato l'X-Server sulla macchina linux a cui mi collego dato che è usata esclusivamente come server :fagiano:
Non è necessario, l'X server deve stare dove visualizzi i programmi. Ovviamente devono però essere presenti sul server le Xlib.

^TiGeRShArK^
01-06-2007, 18:08
Non è necessario, l'X server deve stare dove visualizzi i programmi. Ovviamente devono però essere presenti sul server le Xlib.

quasi quasi lunedì provo :p
così almeno sulle macchine linux posso lavorare un pò + decentemente...
ehmmm... x quelle hp-ux funziona pure ssh -X o no? :stordita:

ilsensine
04-06-2007, 09:31
...ammesso che il tuo hp-ux abbia un ssh server con X forward abilitato...