[pso] [tema2][windows]nelamuriri
Catalin Ionita
io.catalin at gmail.com
Fri Apr 13 11:52:38 EEST 2007
Salut,
Teoretic, ar trebui sa inchid irp de read din dpc, dar cum eu folosesc
StartIo care imi pune irp in coada asociata driverului de catre sistem este
mai dificil pentru ca odata scos irp din stiva sistem trebuie obligatoriu
terminat ( daca il pun din nou in coada apeland StartIo practic modific
ordinea de prelucrare a irp de read). In cazul testului ar merge hardcordat;
adica ceva de genul daca ai primit 256 de caractere inchide un irp din stiva
sistem dar este o abordare foarte
Am studiat codul la KeSetEvent din WRK si ce este interesant este ca practic
nu se asteapta nicaieri (in cazul wait = false) . Singura problema ar fi cu
lockul pe dispatcherdatabase dar oricum el poate fi preluat doar de cineva
care are un irql mare (>= dispatch level) si cum in driver se seteaza
eventul doar odata nu o sa fie probleme de asteptarea unui lock. Ce este si
mai interesant este ca merge si KeReleaseSemaphore (pt ca practic nu face
altceva decat sa puna si un lock pe dispatcherdatabase si sa incrementeze
atomic o variabila - adica nu asteapta pe nicaieri). Se pare ca cei de la
WRK s-au "inspirat" prea mult dupa DDK (si au pus si ei un assert :) generic
- practic assertul trebuie pus cand se face schimbarea de context si se
asteapta la wait = true) fara sa testeze daca functiile lor chiar se
comporta ca cele implementate de Microsoft(e greu de crezut ca cei de la
Microsoft nu si-au asertizat codul daca era nevoie, pentru ca in caz "ops"
sa nu se corupa datele ).
In ceea ce priveste enuntul temei : "o să aveţi nevoie de un buffer intern
în care să puneţi datele; ca să nu vă complicaţi cu sincronizări între ISR
şi rutina de read folosiţi funcţiile Interlocked...;" ,parca s-a mai scos
ceva din el :) , nu prea scrie nimic ca rutina de read ar trebui terminata
de dpc. Oricum asta este, daca m-am complicat practic am facut-o pe timpul
meu si personal nu-mi pare rau pt ca am inteles, cred eu, destul de bine
arhitectura Windows in ceea ce priveste I/O.
Am testat tema si pe windows xp si totul e ok. Numai am timp sa mai lucrez
la ea asa ca o sa o las asa cum este pt ca are de toate (intreruperi, dpc,
cozi sistem and so on ) si merge.
Numai bine,
Catalin Ionita
On 4/12/07, Mihai Florian <my_mihai_florian at yahoo.com> wrote:
>
> Buna,
>
> Foarte probabil ca din motive de performanta in implementarea obisnuita
> a lui KeSetEvent nu se mai testeaza IRQL-ul curent. Dar cel putin in
> implementarea din WRK
> http://cs.pub.ro/~pso/lxr/source/base/ntos/ke/eventobj.c?v=wrk-1.2#341
> IRQL-ul curent este testat printr-un assert:
> ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
> asa ca folosind aceasta implementare KeSetEvent ar trebui sa se
> opreasca la ASSERT daca este folosit la un IRQL necorespunzator.
> Recomandarea mea este in continuare sa folositi ceea ce este garantat
> in documentatie ca merge, nu ce ati observat pe sistemul vostru ca
> merge. Cel mai safe este sa termini din DPC asa cum este exprimat clar
> in enuntul temei.
>
> Mihai
>
>
>
>
> ____________________________________________________________________________________
> Sucker-punch spam with award-winning protection.
> Try the free Yahoo! Mail Beta.
> http://advision.webevents.yahoo.com/mailbeta/features_spam.html
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20070413/9167874f/attachment.html
More information about the pso
mailing list