[so] Tema 4 - accesari simultane

cosminratiu at gmail.com cosminratiu at gmail.com
Fri Dec 14 15:28:24 EET 2007


Salut, Andrei.

O sa incerc sa iti raspund la intrebari.

1) Daca vrei sa sincronizezi accesul la acelasi fisier studiaza sectiunea de
advisory locking de la fcntl(2) sau alternativ, functia flock(2). Doar cu
open fara O_CREAT nu cred ca se poate obtine acces exclusiv.

2) In generic_file_write se face asta:
    down(&inode->i_sem);
    err = generic_file_write_nolock(file, &local_iov, 1, ppos);
    up(&inode->i_sem);

Deci aici apare locking-ul. Nu o sa apara datele intretesute in fisier, ci
in functie de ordinea operatiilor, o sa fie ori una ori alta cea care are
ultimul cuvant pe portiunea comuna :). In exemplul din intrebare, daca 2
clienti incearca sa scrie la acelasi offset "abc" si "xyz" o sa ai ori "abc"
ori "xyz" in final.

Oricum, nu trebuie sa va preocupe prea mult chestiunea asta in contextul
temei. Testele nu verifica asa ceva, deci puteti ignora cu succes aspectele
astea :).

Cosmin.


On Dec 14, 2007 2:01 PM, Andrei Homescu <ahomescu at gmail.com> wrote:

> Salut!
>
> Am niste intrebari legate de accesele la fisiere care se rezuma asa:
> ce se intampla daca mai multi clienti incearca sa scrie in acelasi
> timp in acelasi fisier.
> Intrebarile mele de fapt sunt:
> 1) Se poate deschide cu open() acelasi fisier de mai multe ori, chiar
> si pentru scriere. Cum se poate impiedica a doua deschidere a unui
> fisier?
> 2) Am urmarit apelurile de functii si arata cam asa:
>
> aio_write->pwrite->do_pwrite->pwrite64=>sys_pwrite64->vfs_write->generic_file_write.
> Nicaieri in acest lant nu apare vreun lock, deci nu mi-e clar daca
> operatia de scriere e atomica. Ce se intampla daca 2 clienti incearca
> sa scrie niste date la acelasi offset din fisier? De exemplu, sirurile
> "abc" si "xyz" vor fi scrise intotdeauna "abcxyz" sau pot aparea
> intretesute?
>
> A doua intrebare a venit de la Alex Suhan si acum stam amandoi cu
> sufletul la gura dupa raspuns :D
>
> Andrei Homescu
> _______________________________________________
> so mailing list
> so at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/so/attachments/20071214/499a9da0/attachment.html


More information about the so mailing list