[pso] spin lock vs paged pool
Cibu Cristian
pso@cursuri.cs.pub.ro
Sat, 27 Mar 2004 21:27:00 +0200
This is a multi-part message in MIME format.
------=_NextPart_000_0034_01C41442.3DABC1C0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
In enunt suntem incurajati pe buna dreptate sa ne protejam de race-uri =
folosind spin-lock-uri.
Pe de alta parte, driverul trebuie sa aloce dinamic memorie, pentru ca =
stiva e mica. La fel memoria nonpaged e si ea resursa scumpa, deci nu =
prea merge sa punem in ea vectorii cu informatiile despre piduri si =
rutinele apelurilor de sistem. deci ramane paged pool.
pai atunci ce ne facem ca in helpul ddk spune:
"
Never implement routines that do any of the following while holding a =
spin lock:=20
a.. Cause hardware exceptions or raise software exceptions=20
b.. Attempt to access pageable memory=20
c.. Make a recursive call that would cause a deadlock or could cause a =
spin lock to be held for longer than 25 microseconds=20
d.. .... [mai sunt cateva]
"
De aici cam reiese ca nu prea avem voie sa folosim spin-lockuri.
Functiile Interlocked care ne sunt sugerate imi sunt cam nefolositoare. =
Daca trebuie sa adaug ceva intr-o lista nu pot folosi nimic cu prefixul =
Interlocked. Ar exista ExInterlockedInsertHeadList dar care cere si ea =
un spin_lock deci nici asta nu e buna.
Ar mai ramane sa incercam sa implementam noi un lock din functii =
interlocked dar asta inseamna busy waiting si iar nu e bine...
Asta e ce am descoperit eu dupa ce toata ziua am cautat buguri prin tema =
de vad numai ecrane albastre cand inchid ochii. asa ca daca cine este in =
masura sa ma contrazica, chiar il rog!
------=_NextPart_000_0034_01C41442.3DABC1C0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>In enunt suntem incurajati pe buna =
dreptate sa ne=20
protejam de race-uri folosind spin-lock-uri.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Pe de alta parte, driverul trebuie sa =
aloce dinamic=20
memorie, pentru ca stiva e mica. La fel memoria nonpaged e si ea resursa =
scumpa,=20
deci nu prea merge sa punem in ea vectorii cu informatiile despre piduri =
si=20
rutinele apelurilor de sistem. deci ramane paged pool.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>pai atunci ce ne facem ca in helpul ddk =
spune:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>"</FONT></DIV>
<DIV><EM>Never</EM> implement routines that do any of the following =
while=20
holding a spin lock: </DIV>
<UL>
<LI>Cause hardware exceptions or raise software exceptions=20
<LI>Attempt to access pageable memory=20
<LI>Make a recursive call that would cause a deadlock or could cause a =
spin=20
lock to be held for longer than 25 microseconds </LI>
<LI>.... [mai sunt cateva]</LI></UL>
<DIV>"</DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>De aici cam reiese ca nu prea avem voie =
sa folosim=20
spin-lockuri.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Functiile <STRONG>Interlocked =
</STRONG>care ne sunt=20
sugerate imi sunt cam nefolositoare. Daca trebuie sa adaug ceva intr-o =
lista nu=20
pot folosi nimic cu prefixul Interlocked. Ar exista <FONT=20
size=3D3><STRONG>ExInterlockedInsertHeadList </STRONG></FONT><FONT =
size=3D2>dar care=20
cere si ea un spin_lock deci nici asta nu e buna.</FONT></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Ar mai ramane sa incercam sa =
implementam noi un=20
lock din functii interlocked dar asta inseamna busy waiting si iar nu e=20
bine...</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Asta e ce am descoperit eu dupa ce =
toata ziua am=20
cautat buguri prin tema de vad numai ecrane albastre cand inchid ochii. =
asa ca=20
daca cine este in masura sa ma contrazica, chiar il rog!=20
</FONT></DIV></BODY></HTML>
------=_NextPart_000_0034_01C41442.3DABC1C0--