[pso] [tema1][win] IRQL_NOT_LESS_OR_EQUAL

Adriana Draghici adriana008 at gmail.com
Sun Apr 5 14:22:13 EEST 2009


Am avut aceeasi prbl ca alexandra, 10x gabi.
Eu aveam ceva de genul:

acquire
for ..iterare pe lista
[other stuff]
release

am mutat release-ul imediat dupa for si a mers :D.


2009/4/4 Bercea Gabriel <gamitech at gmail.com>

>  >
>
> >Any ideas de ce apare?
> >
>
>
>
> Da.
>
>
>
> Cand ai spinlockul acquired tot codul din interioul spinlockului trebuie sa
> fie NON PAGED.  Nu se poate rezolva nici un page fault, nici macar functiile
> pe care le apelezi nu au voie sa fie pageable. Vezi documentatia in MSDN la
> functiile pe care le apelezi ti se va da IRQLul la care sunt apelabile. De
> asemenea nu poti face un wait decat cu wait interval 0.
>
> Ratiunile sunt urmatoarele: pentru a rezolva un page fault, trebuie sa se
> genereze o intrerupere software pentru ca Memory Managerul sa genereze un
> PagingRead, cu care I/O managerul sa citeasca din page file memoria
> solicitata sa o puna in RAM. Pentru asta codul tau trebuie preemptat in tot
> acest timp. Dispatcherul din NT ruleaza la IRQL 2 (DISPATCH LEVEL). Tocmai
> pentru acest motiv intreruperea nu se va fi executat, si deci dispatcherul
> nu poate chema MM pentru a rezolva PageFaultul, ceea ce duce intr-o
> recurenta infinita si eventual vezi BLUE. Deci codul care ruleaza la DPC
> level (2) nu trebuie sa page faulteze, pentru ca dispatcherul nu poate intra
> in actiune. Exact aceleasi sunt si ratiunile pentru care nu poti face un
> wait pe un dispatcher object. Dispatcherul nu poate intrerupe threadul tau.
> Poti face starvation la systemul de operare lejer tinand doar un spinlock
> J. Un thread indiferent de prioritatea lui nu poate fi intrerupt de alt
> thread daca are IRQL 2 = DISPATCH_LEVEL.
>
>
>
> Inca o chestie, sper ca nu faci ceva de genul:
>
>
>
> Acquire()
>
>
>
> Work_with_list();
>
> Status = Call_Nt_Read_File();
>
>
>
> Release()
>
>
>
> Daca da, scoate Call_Nt_Read_File()  de acolo. Pentru a face un read,
> sistemul de operare fiind asincron, trebuie sa poata pune un APC in coada
> threadului curent si din nou nu este posibil. De fapt functia nu poate fi
> apelata decat la PASSIVE_LEVEL. Functia ZwReadFile ca si NtReadFile este
> pageable, deci functia insasi poate fi in pagefile cand o apelezi.
>
>
>
> *NTSTATUS *
>   *ZwReadFile(*
>     *IN HANDLE*  *FileHandle**,*
>     *IN HANDLE*  *Event*  *OPTIONAL,*
>     *IN PIO_APC_ROUTINE**  ApcRoutine*  *OPTIONAL,*
>     *IN PVOID*  *ApcContext*  *OPTIONAL,*
>     *OUT PIO_STATUS_BLOCK*  *IoStatusBlock**,*
>     *OUT PVOID*  *Buffer**,*
>     *IN ULONG*  *Length**,*
>     *IN PLARGE_INTEGER*  *ByteOffset*  *OPTIONAL,*
>     *IN PULONG*  *Key*  *OPTIONAL*
>     *);*
>
>
>
> Vezi APC context si APC routine.
>
>
>
> Callers of *ZwReadFile* must be running at IRQL = PASSIVE_LEVEL and with
> APCs enabled.
>
>
>
>
>
> Poti da disable la normal kernel  apc intrand intr-un guraded region, sau
> intr-un critical section, insa nu vei da disable special kernel APC. Pentru
> asta tre sa ai IRQL 1 (APC_LEVEL). De ce ai vrea sa faci asta ? Din diverse
> motive, si ratiuni in care iti gandesti codul. Btw singurul special kernel
> APC din windows este cel generat de functia IoCompleteRequest care pune un
> APC in coada threadului ce a generat Irpul pentru I/O manager
> Irp->Tail->Overlay.Thread parca, care este un PETHREAD, cel caruia i se va
> genera APCul. Daca threadul e la IRQL = APC_LEVEL, adios generare de APC.
>
>
>
>
>
> Sper ca iti este mai clar acum. Daca tot nu reusesti sa vezi care e pbema,
> da-mi te rog dumpul de la !analyze –v si codul din interiorul spinlockului.
>
> Succes in continuare Alexandra.
>
>
>
>
>
> Ce pacat ca se face cursul asta in cateva saptamani pentru DOUA sisteme de
> operare si se vrea atata de la el, absurditate toatala din punctul meu de
> vedere. Eventually din cauza asta nu o sa se poate ramane cu mare lucru. O
> spun din experienta personala, nu trebuie neeaparat sa fie cazul.
>
> Eu unul nu pot pricepe arhitectura a doua sisteme de operare sa scriu si
> device drivere, cod kernel, si sa scriu si corect. De ex nici un sample de
> laborator nu respecta Windows Driver Model (WDM) plus, ca se apeleaza la
> chestii undocumented la greu, (vezi prima tema), in loc sa se puna accent pe
> partea practica, si care este ceruta in joburile de acest fel.
>
> Scopul didactic dupa parerea mea nu este scuza aprofundarii si executarii
> de cod nedocumentat in kernel in special hookare de apeluri de system si pot
> da zeci de motive de ce nu. As fi preferat sa ramana un subiect teoretic.
> Decat sa fie asa mai bine s-ar renunta la predarea pentru Windows, pentru ca
> se pare, ca la fel ca la orice materie din facultate este tratata net
> inferior de cum este tratata dezvoltarea pe linux, unix, stiti despre ce
> vbesc, situatie total paradoxala din punctul meu de vedere.
>
> Intelegerea unei arhitecturi, felul cum codul tau face parte din sistemul
> de operare, cum interactioneaza cu el, conventiile fiecarui sistem de
> operare pentru executare de cod, implementarea intreruperilor, si un intreg
> executive, necesita timp, si acel timp, care nu este, si care mai este si
> umplut de chestii absolut inutile (KeServiceDescriptorTable stuff). As
> prefera sa invat sa scriu un minifilter driver, legacy file system, legacy
> file system filter, sau drivere care interactioneaza cu perifericele, gen
> cel tema 2, orice practic de care as putea sa ma folosesc mai departe, dar
> doar atat tot semestrul.  Cele mai populare drivere sunt cele de FileSystem
> lately (over internet, over lan, in the cloud) in industrie, si tema 4 este
> evitata pe windows J de ce nu ma mira.
>
> Teme complexe intr-un timp scurt  + licenta + lucruri care nu se invata de
> la o saptamana la alta, transforma materia dintr-una in care ai putea sa *iesi
> *un* *technology expert intr-o cursa, gen: hai sa fac cumva sa trec si de
> PSO si sa uit cat mai rpd de el. Plain old sad...
>
> Nu mi-o luati in nume de rau, doar vreau sa spun care e parerea mea.
>
>
>
> Cu respect,
>
> Bercea Gabriel 342 C2
>
> Mobile contact:  (+40)0740049634
>
> eMail: gamitech at gmail.com
>
>
>
>
>
>
>
> *From:* pso-bounces at cursuri.cs.pub.ro [mailto:
> pso-bounces at cursuri.cs.pub.ro] *On Behalf Of *alexandra gherghina
> *Sent:* Friday, April 03, 2009 11:39 PM
> *To:* Proiectarea Sistemelor de Operare
> *Subject:* [pso] [tema1][win] IRQL_NOT_LESS_OR_EQUAL
>
>
>
> Salut!
> Am un BSOD cu IRQL_NOT_LESS_OR_EQUAL, cu read. Intre spinlock acq si
> release am doar o cautare intr-o lista. Any ideas de ce apare?
> Multumesc!
> Alexandra
>
> _______________________________________________
> 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/20090405/a3ad8fe6/attachment.htm>


More information about the pso mailing list