[pso] INTERRUPT HANDLERS
Octavian Purdila
pso@cursuri.cs.pub.ro
Tue, 23 Mar 2004 16:44:28 +0200
On Monday 22 March 2004 23:10, Cibu Cristian wrote:
> Poate scrie pe undeva si mi-a scapat mie, dar:
> Rutinele de tratare a apelurilor de sistem in ce parte a tratarii unei
> intreruperi se incadreaza?
>
in partea de actiuni ne-critice (asta inseamna ca rutina poate sa ruleze
cu intreruperile nemascate)
> Ce ma intereseaza de fapt este: ce flag ar trebui sa folosesc la un apel
> kmalloc? Descrierea din laborator e cam succinta....
Singurul loc in care aveti voie sa faceti o schimbare de context in kernel
este atunci cand rulati intr-un context bine determinat:
- atunci cand un thread user se executa in kernel-mode, pentru a trata
apelul de sistem
- atunci cand rulati un kernel thread
In toate celelalte cazuri (handlere de intreruperi, functii "amanabile") nu
aveti voie sa schimbati contextul, adica nu aveti voie sa:
- cititi din user-space
- faceti sleep
- sa accesati memorie swapabila
- sa alocati memorie
In Linux, daca vreti sa alocati memorie din handlerul de intrerupere sau
dintr-o functie deferrable trebuie sa folositi flagul GFP_ATOMIC.
tavi