Teoria in tempo reale: come viene implementata la trasformazione del periodo con le richieste di ritardo?

0

Per far fronte ai sovraccarichi temporanei con un sistema in tempo reale pianificato con pianificazione monotona della velocità , si può usare trasformazione del periodo per ridurre il periodo dei processi importanti in modo che abbiano una priorità maggiore. In Pianificazione di sistemi rigidi in tempo reale: una revisione , dice A. Burns (pagine 4 a 5 del PDF) che questo può essere fatto da:

  1. o aggiungendo due richieste di ritardo nel corpo del codice.
  2. o istruire il sistema runtime per programmarlo come tre processi più brevi.

Capisco come può essere suddiviso in parti più piccole, ma come funzionano le richieste di ritardo aggiunte? Lo scheduler guarda il processo e usa le richieste di delay come punti di divisione per dividerlo in tre parti, il che significa che per il numero 1 sopra il programmatore sta dicendo esplicitamente al programmatore come dividerlo in pezzi, mentre per il # 2 lo scheduler sta indovinando su come dividerlo?

NOTA : sto cercando di capire la teoria della trasformazione del periodo; Non sto chiedendo lo scopo di implementare nulla.

    
posta Matthew Cline 25.10.2014 - 09:24
fonte

1 risposta

0

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à.

    
risposta data 26.10.2014 - 09:33
fonte

Leggi altre domande sui tag