[pso] sincronizarea cu kernel thread-ul

iana ionel cristian pso@cursuri.cs.pub.ro
Wed, 28 Apr 2004 03:22:53 -0700 (PDT)


--- Octavian Purdila <tavi@cs.pub.ro> wrote:
> On Tuesday 27 April 2004 23:24, iana ionel cristian
> wrote:
> > Pe undeva in enunt, apare :
> >
> > pentru o implementare corecta, va trebui sa pasati
> > cereri kernel thread-ului asociat device-ului, si
> de
> > asemenea sa va sincronizati cu acesta (sa
> asteptati
> > terminarea anumitor cereri);
> >
> > Este ok daca astept terminarea TUTUROR cererilor ?
> > Daca nu, care sunt cererile pe care nu este nevoie
> sa
> > le astept.
> >
> 
> Nu. Nu poti sa astepti terminarea unei cereri de IO
> de exemplu din rutina  
> request (chiar daca tii io_request_lock sau nu;
> rutina request este apelata 
> dintr-o functie defferable, deci intr-un context
> arbitrar, si nu ai voie sa 
> faci sleep).
> 
> Practic, nu trebuie sa asteptati decat la conectarea
> si deconectarea unui 
> disc. Aceste operatii trebuie sa se faca tot in
> kernel thread, pentru ca 
> trebuie sa deschideti si sa inchideti fd/handle-ul
> fisierului. Deci va trebui 
> sa pasati cumva kernel thread-ului aceste cereri, si
> va trebui sa asteptati 
> un raspuns de la kernel thread (codul de eroare) ca
> sa stiti ce sa comunicati 
> utilizatorului.
> 

Pai asta si fac, vine cererea, o dau kernel
thread-ului
acesta deschide fd-ul, face operatia io si intoarce
rezultatul. Problema era, ce fac din momentul in care
am pasat cererea pana cand am primit inapoi
rezultatul.

Usor ar fi sa astept pana cand kernel threadul a
terminat cererea respectiva, primesc rezultatul si
merg mai departe.

Daca functia de request nu are voie sa astepte
rezultatul operatiei, ce face cand tb sa dea
end_request si sa treaca la cererea urmatoare ?



	
		
__________________________________
Do you Yahoo!?
Win a $20,000 Career Makeover at Yahoo! HotJobs  
http://hotjobs.sweepstakes.yahoo.com/careermakeover