Il documento di Burns (essendo una recensione) lascia fuori gli effetti dell'inserimento dei ritardi, quindi dovremo rivolgerci altrove per ottenere una risposta. La sezione particolare fa riferimento a "Pianificazione dei compiti in sistemi distribuiti in tempo reale" di L. Sha, J.P. Lehoczky e R. Rajkumar. Se si riesce a procurarsi quel documento, dovrebbe chiarire in che modo l'inserimento del ritardo riduce i periodi di attività. Purtroppo, non posso, quindi devo ricorrere a supposizione.
Ciò che accade è quasi ciò che si suppone, ma lo scheduler non ha bisogno di ispezionare gli interni del processo (cioè non ha bisogno di controllare il ritardo) o prendere decisioni; gli effetti naturali del ritardo eseguono il lavoro di programmazione necessario. Per "ritardo", presumo una chiamata a sleep()
(o simile), che consente il multitasking cooperativo. Considerando quanto segue, tieni presente come lo scheduler determina il periodo: tenendo traccia di quanto tempo è trascorso dal momento che il processo è stato programmabile l'ultima volta (forse usando media esponenziale ).
Ci sono due influenze rilevanti di sleep()
: il processo sarà sospeso (cioè rimosso dalla pianificazione) e verrà ripianificato dopo la fine del ritardo. Quando il processo si riattiva, il periodo più recente è iniziato quando il processo era programmabile l'ultima volta, ovvero il periodo di ritardo più il tempo di esecuzione precedente. Di conseguenza, le sottoattività possono essere considerate come attività con un periodo uguale al ritardo più il tempo di esecuzione del sottoprogramma precedente (si noti che il periodo di attività secondaria potrebbe essere considerato come consistente in altri tempi di ritardo o tempi di esecuzione di sottotask; per semplificare le questioni, i ritardi richiesti dovrebbero essere uguali e i tempi di esecuzione della sottotabella sono il più vicino possibile). In altre parole, un'attività del periodo p
e tempo medio di esecuzione e
è trasformata in n
sottoattività con periodo p/n
e tempo di esecuzione e/n
.
Ad esempio, la carta di Burns menziona un processo P 2 che viene eseguito ogni 30 secondi per 3 secondi. L'inserimento di due chiamate su sleep(9)
attorno a 1 e 2 secondi trasforma l'attività in tre sottoattività del periodo 10 e tempo medio di esecuzione di 1 secondo. Credo che il ritardo debba essere di 9 secondi, poiché accorciare i ritardi aumenterebbe il periodo tra le 3 sottocapitoli e st (quando si ripresenta), aumentando il periodo per la sottotabella 1 st , che ridurrebbe la sua priorità.