[pso] [SO2][TEMA 5] Prioritate

Octavian Voicu octavian.voicu at gmail.com
Fri May 14 21:56:10 EEST 2010


2010/5/14 Drutu Bogdan <bogdandrutu at gmail.com>:
> NET_TX_SOFIRQ și NET_RX_SOFTIRQ - au aceeasi prioritate.

Nu au aceeasi prioritate, vezi [1] sau laboratorul 7. Constantele sunt
intr-un enum si au valori consecutive. TX are prioritate mai mare
decat RX.

> Nu sunt foarte sigur si de aceea intreb, pentru a preemta un softirq
> trebuie ca cel care vrea sa faca asta trebuie sa aiba prioritatea
> strict mai mare ">" (sau mai mare sau egala ">=")?

Softirq-urile ruleaza cu preemptivitatea dezactivata, la fel ca toate
intreruperile. Asta poti vedea studiand functia ksoftirqd [2]. Ea
apeleaza do_shiftirq() cu preemptivitatea dezactivata. Aceasta functie
[3] este responsabila de efectuarea de treceri prin lista de
softirq-uri si rularea, in ordinea prioritatilor, a celor care sunt in
statusul pending.

Functia local_softirq_pending() returneaza o valoare cu bitii
corespunzatori softirq-urilor in starea pending setati, biti care sunt
verificati incepand cu cel mai putin semnificativ -- adica cu
prioritatea 0.

Dupa o trecere prin toata lista, se va efectua o noua trecere daca
alte softirq-uri au trecut in starea pending. Se efectueaza maxim 10
treceri, asa cum indica constanta MAX_SOFTIRQ_RESTART.

Astfel, prioritatea indica numai in ce ordine sunt executate
softirq-urile, daca sunt mai multe care asteapta. Nu e vorba de
preemptare.

Octavian

[1] http://lxr.linux.no/linux+v2.6.31/include/linux/interrupt.h#L334
[2] http://lxr.linux.no/linux+v2.6.31/kernel/softirq.c#L700
[3] http://lxr.linux.no/linux+v2.6.31/kernel/softirq.c#L180


More information about the pso mailing list