[pso] Tema 3 Linux - Probleme sincronizare rutina request/kernel thread

Adrian - Razvan Deaconescu pso@cursuri.cs.pub.ro
Sat, 16 Apr 2005 01:18:49 +0300


Salut,

pentru a realiza sincronizarea intre rutina de tratare a cererilor si
kernel thread-ul care va trebui sa le definitiveze am folosit o lista
(coada) in care scriu cererile din rutina de request. De aici citesc
in kernel thread pentru a realiza, eventual, scrierea in fisier.
Sincronizarea efectiva se realizeaza cu un semafor (rutina de request
mai pune un element in coada si apeleaza up pe semafor, kernel
thread-ul apeleaza down pe semafor si apoi scoate elementul din coada.
Totusi se intampla ceva destul de dubios. Kernel thread-ul nu se
trezeste (ca si cum nu s-ar simti ca rutina de request a apelat up pe
semafor). Totusi cand cer terminarea lui, il trezesc si apoi (ca sa
vad ce s-a intamplat) verific semaforul folosind trylock. Surpriza
este ca semaforul este asa cum ar trebui (adica as putea sa apelez
linistit down pe el de numarul de ori cat a fost apelat up in rutina
de request). Totusi kernel thread-ul nu se trezeste NICIODATA pe
parcursul depunerii de cereri de catre rutina de tratare a
request-urilor (care implicit apeleaza de fiecare data si up pe
semafor).

Stie cineva care ar putea fi problema?

Multumesc mult,
Razvan