[pso] Tema 5 - Alocare memoriei o ia razna

Andrei Dumitrache pso@cursuri.cs.pub.ro
Tue, 31 May 2005 10:33:03 +0300


Nu fac sleep nici wait in DPC. Iar din teste empirice am gasit 2 
comportamente:
1) ori crapa in rutina DPC, desi cum spuneam mai sus nu astept. In rutina 
DPC tot ce fac este sa primesc un pointer la regula care trebuie stearsa, 
iar apoi dau un InterlockedRemoveHead, pentru ca pot sa scot din cap, 
consider capul fiind tocmai regula a carui pointer l-am primit. Suna ok, nu 
inteleg de ce crapa daca motivul nu e memoria paginabila.

sau
2) driverul crapa in rutina MATCH care ia un pointer la o regula (structura 
de-a mea) si cele 4 componente de baza (scrAddr, destAddr, srcPort, 
destPort) si verifica daca se potrivesc. Iarasi nu inteleg de ce ar putea 
crapa aici pentru ca tot ce fac sunt niste comparatii si returnez o valoare 
logica. Singurul motiv care-l vad eu este din nou memoria paginabila.

Mai mult, codul de erorare cu care crapa este :
DRIVER_IRQL_NOT_LESS_OR_EQUAL (0x000000D1 ) iar documentatia spune:
The Stop 0xD1 message indicates that the system attempted to access pageable 
memory using a kernel process IRQL that was too high. Drivers that have used 
improper addresses typically cause this error.
WinDbg arata clar ca IRQL a fost 2.

Tind sa cred ca stiva este pagable by default si revin la intrebarea mea 
initiala: exista vreun mod de a forta alocare in memoria nonpaged? Daca 
stiva nu este pagable, atunci chiar ca lucrurile au luat-o razna...

Andrei

>From: Octavian Purdila <tavi@cs.pub.ro>
>Reply-To: pso@cursuri.cs.pub.ro
>To: pso@cursuri.cs.pub.ro
>Subject: Re: [pso] Tema 5 - Alocare memoriei o ia razna
>Date: Tue, 31 May 2005 10:05:27 +0300
>
>On Tuesday 31 May 2005 08:56, Andrei Dumitrache wrote:
> > Am un comportament ciudat in aceasta tema (5). Singura constanta in
> > acest comportament ciudat este eroarea cu care ajung la BSOD (si
> > anume ca IRQL este prea mare). Cum nu prea astept dupa nimic,
> > singurul lucru de la care ar putea fi este adresarea de memorie
> > paginabila.
>
>O alta cauza posibila este ca faci sleep/wait in DPC.
>
> > In conditiile in care nu am pus structura mea care reprezinta o
> > regula in extensia device-ului, care este garantat ca se aloca in
> > memorie nepaginabila (asta pentru a nu avea structura in structura
> > ...), exista vreun mod de forta alocarea in memorie nepaginabila? Da,
> > stiu, .... use a pointer si paseaza NonPaged ca param la functia de
> > alocare. Dar am plecat de la ideea simplitatii in tema asta si anume
> > sa am structura si listele pe stiva. Daca ar fi acum sa ma apuc sa
> > fac refactoring cred ca trec pe LookAsideLists cu totul ... ar fi mai
> > eficiente.
> >
> > Deci cum ziceam, exista vreun mod de a forta alocarea pe stiva, dar
> > in memoria nepaginabila?
> >
>
>By default, din cate stiu eu, stiva nu e swapabila in kernel, asa ca nu
>asta e cauza.
>
>tavi
>_______________________________________________
>pso mailing list
>pso@cursuri.cs.pub.ro
>http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso

_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar - get it now! 
http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/