Salta al contenuto
Note per Studenti Esercizio 11 · dall'impegno percentuale della CPU alle durate delle ISR (temi d'esame febbraio 2025 e febbraio 2026)

Esercizio 11dall'impegno percentuale della CPU alle durate delle ISR (temi d'esame febbraio 2025 e febbraio 2026)

Esame
In questa pagina 3

Testo (tema d'esame febbraio 2025, problema P7; febbraio 2026, problema P2).

(i) Un microcontrollore gestisce 2 sorgenti di interruzione. La prima, di priorità 1, attiva una routine di servizio (ISR1) ogni 100 µs; la seconda, di priorità 2, ogni 250 µs (ISR2). Il microcontrollore, complessivamente, risulta impegnato per l'80% del suo tempo di calcolo nella gestione delle richieste. Sapendo che ISR2 ha una durata inferiore del 30% a quella di ISR1 e trascurando i tempi di latenza e ogni altro ritardo: (a) determinare le durate delle due routine; (b) dire se il sistema può funzionare senza nesting; (c) dire se può funzionare con il nesting.

(ii) Tre sorgenti IRQ1, IRQ2, IRQ3 hanno durate Td1T_{d1}, 2Td12T_{d1}, 3Td13T_{d1} e periodi Tp1T_{p1}, 2Tp12T_{p1}, 12Tp112T_{p1}, con priorità 1, 2, 3. La CPU è impegnata per il 75% del tempo. Sapendo che Tp1=18T_{p1}=18 µs: (a) le durate delle ISR; (b) la sostenibilità con e senza nesting; (c) la massima durata compatibile per ISR1 con Tp1=18T_{p1}=18 µs (mantenendo le proporzioni); (d) la massima frequenza compatibile per IRQ1 con Td1=6T_{d1}=6 µs (mantenendo le proporzioni tra i periodi).


Teoria usata: Sistemi di interruzioni - latenza, nesting e sostenibilitàCon $N$ sorgenti, ciascuna ISR $i$ ha durata $T_{d,i}$ (spesso già comprensiva della latenza intrinseca $T_{LI}$ e dell'istruzione in corso) e periodo minimo $T_{p,i}$. Condizione necessaria: $\sum_iT_{d,i}/T_{p,i}<1$ (la percentuale di impegno della CPU è la somma). Condizione di intervallo per ogni $i$ (priorità 1 = massima): $T_{d,i}+\sum_{k<i}n_k,T_{d,k};[+\max(T_{RC},\max_{j>i}T_{d,j})\text{ senza nesting}]\le T_{p,i}$, con $n_k=\lceil T_{p,i}/T_{p,k}\rceil$. Latenza massima della priorità $n$: con nesting $T_{LI}+\sum_{i<n}T_{ex,i}$; senza nesting si aggiunge $\max_{j>n}T_{ex,j}$.Sistemi di interruzioni - latenza, nesting e sostenibilità →.

(i) Febbraio 2025

(a) Durate. Poniamo Td2=0,7 Td1T_{d2}=0{,}7\,T_{d1}. L'impegno complessivo è Td1100+Td2250=0,8\frac{T_{d1}}{100}+\frac{T_{d2}}{250}=0{,}8, cioè Td1(0,01+0,7250)=Td1⋅0,0128=0,8T_{d1}\big(0{,}01+\frac{0{,}7}{250}\big)=T_{d1}\cdot0{,}0128=0{,}8, quindi Td1=0,80,0128=62,5 μs,Td2=0,7⋅62,5=43,75 μs.T_{d1}=\frac{0{,}8}{0{,}0128}=\mathbf{62{,}5\ \mu s},\qquad T_{d2}=0{,}7\cdot62{,}5=\mathbf{43{,}75\ \mu s}. (b) Senza nesting. Condizione per IRQ1: Td1+Td2=62,5+43,75=106,25>Tp1=100T_{d1}+T_{d2}=62{,}5+43{,}75=106{,}25>T_{p1}=100 ✗. Non può funzionare: se ISR2 è appena iniziata quando arriva IRQ1, la ISR1 parte dopo 43,75 µs e termina oltre il suo periodo. (c) Con nesting. IRQ1: 62,5≤10062{,}5\le100 ✓. IRQ2: Td2+n1Td1T_{d2}+n_1T_{d1} con n1=⌈250/100⌉=3n_1=\lceil250/100\rceil=3: 43,75+3⋅62,5=231,25≤25043{,}75+3\cdot62{,}5=231{,}25\le250 ✓. Può funzionare (con margine di soli 18,75 µs).

(ii) Febbraio 2026

(a) Durate. Td1Tp1+2Td12Tp1+3Td112Tp1=Td1Tp1(1+1+0,25)=0,75⇒Td1Tp1=0,752,25=13\frac{T_{d1}}{T_{p1}}+\frac{2T_{d1}}{2T_{p1}}+\frac{3T_{d1}}{12T_{p1}}=\frac{T_{d1}}{T_{p1}}(1+1+0{,}25)=0{,}75\Rightarrow\frac{T_{d1}}{T_{p1}}=\frac{0{,}75}{2{,}25}=\frac13. Con Tp1=18T_{p1}=18 µs: Td1=6T_{d1}=\mathbf6, Td2=12T_{d2}=\mathbf{12}, Td3=18T_{d3}=\mathbf{18} µs; periodi 18, 36, 216 µs.

(b) Sostenibilità.

  • Senza nesting: IRQ1: Td1+max⁡(Td2,Td3)=6+18=24>18T_{d1}+\max(T_{d2},T_{d3})=6+18=24>18 ✗ non sostenibile (in generale Td3+Td1=4Td1>3Td1=Tp1T_{d3}+T_{d1}=4T_{d1}>3T_{d1}=T_{p1} per ogni Td1T_{d1}).
  • Con nesting: IRQ1: 6≤186\le18 ✓; IRQ2: Td2+2Td1=12+12=24≤36T_{d2}+2T_{d1}=12+12=24\le36 ✓; IRQ3: Td3+12Td1+6Td2=18+72+72=162≤216T_{d3}+12T_{d1}+6T_{d2}=18+72+72=162\le216 ✓. Sostenibile.

(c) Massima durata di ISR1 con Tp1=18T_{p1}=18 µs, a parità di rapporti (Td2=2Td1T_{d2}=2T_{d1}, Td3=3Td1T_{d3}=3T_{d1}):

  • IRQ1: Td1≤18T_{d1}\le18;
  • IRQ2: 2Td1+2Td1≤36⇒Td1≤92T_{d1}+2T_{d1}\le36\Rightarrow T_{d1}\le9;
  • IRQ3: 3Td1+12Td1+6⋅2Td1=27 Td1≤216⇒Td1≤83T_{d1}+12T_{d1}+6\cdot2T_{d1}=27\,T_{d1}\le216\Rightarrow T_{d1}\le8. La più restrittiva è la terza: 8 µs.

(d) Massima frequenza di IRQ1 con Td1=6T_{d1}=6 µs (con Tp2=2Tp1T_{p2}=2T_{p1}, Tp3=12Tp1T_{p3}=12T_{p1}): IRQ1: Tp1≥6T_{p1}\ge6; IRQ2: 4Td1≤2Tp1⇒Tp1≥124T_{d1}\le2T_{p1}\Rightarrow T_{p1}\ge12; IRQ3: 27Td1≤12Tp1⇒Tp1≥27⋅612=13,527T_{d1}\le12T_{p1}\Rightarrow T_{p1}\ge\frac{27\cdot6}{12}=13{,}5 µs. Quindi f1,max=113,5 μs=74,07 kHzf_{1,max}=\frac1{13{,}5\ \mu s}=\mathbf{74{,}07\ kHz}.

Errori comuni

  • Dividere la percentuale in parti uguali: le durate sono determinate dai rapporti dati (qui 0,70{,}7 e 1:2:31:2:3).
  • Per il "senza nesting" dimenticare il termine con la ISR più lunga di priorità inferiore (in (i): ISR2 su IRQ1).
  • Usare il rapporto dei periodi sbagliato: n1=Tp,2/Tp,1n_1=T_{p,2}/T_{p,1} per IRQ2 e Tp,3/Tp,1T_{p,3}/T_{p,1} per IRQ3.
  • Cercare la durata massima con la prima condizione soltanto: la più restrittiva è quella della sorgente a priorità più bassa.

Versione ripasso

Testo. Dall'impegno della CPU alle durate: 80% con Tp=100,250T_p=100,250 µs e Td2=0,7Td1T_{d2}=0{,}7T_{d1}; 75% con (Td)=(1,2,3)Td1(T_d)=(1,2,3)T_{d1} e (Tp)=(1,2,12)Tp1(T_p)=(1,2,12)T_{p1} (febbraio 2025, febbraio 2026).

Teoria collegata