[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