Domanda

vorrei sapere come lo scheduler viene chiamato in modo che possa passare le attività. Come in anche se la sua schedulazione preemptive o scheduling rotondo robin - il pianificatore dovrebbe venire a foto per fare qualsiasi tipo di task switching. Supponendo un compito bassa priorità ha un ciclo infinito -? Quando non lo scheduler interviene e interruttore a un'attività priorità superiore

query è: 1. Chi chiama lo scheduler? [In VxWorks] 2. Se viene chiamato a intervalli regolari - come è che il meccanismo implementato

Grazie in anticipo.

- Ashwin

È stato utile?

Soluzione

La risposta semplice è che VxWorks prende attraverso un interrupt del timer di sistema che si verifica continuamente ad intervalli fissi mentre il sistema è in funzione.

Ecco più in dettaglio:

Quando si avvia VxWorks, si configura l'hardware per generare un timer interrupt ogni n millisecondi, dove n è spesso 10 ma del tutto dipende dal vostro hardware. L'intervallo del timer è generalmente costituita da VxWorks nella tua Board Support Package (BSP) quando viene avviato.

Ogni volta che il timer spara un interrupt, il sistema inizia l'esecuzione del timer interrupt handler . Il timer interrupt gestore è parte di VxWorks, così ora VxWorks ha controllo. La prima cosa che fa è salvare lo stato della CPU (come ad esempio i registri) nel Task Control Block (TCB) del compito attualmente in esecuzione.

poi alla fine VxWorks corre lo scheduler per determinare chi corre accanto. Per eseguire un'operazione, VxWorks copia lo stato del compito dalla sua TCB nei registri della macchina, e dopo lo fa che il compito ha il controllo della CPU.

Informazioni Bonus:

VxWorks fornisce ganci in la logica di commutazione compito in modo da poter avere una funzione get chiamato ogni volta che il compito viene prevaricata.

Altri suggerimenti

indiv fornisce una risposta molto buona, ma è solo parzialmente accurata.
Il funzionamento effettivo del sistema è leggermente più complesso.

Lo scheduler può essere eseguito come risultato di operazioni sia sincroni o asincroni.

sincrono riferisce ad operazioni che sono causati come risultato del codice nel compito attualmente in esecuzione. Un primo esempio di questo sarebbe di prendere un semaforo (semTake).
Se il semaforo non è disponibile, l'attività attualmente in esecuzione verrà Pend e non saranno più disponibili per l'esecuzione. A questo punto, lo scheduler verrà invocato e determinare il prossimo compito che deve eseguire e si esibirà in un cambio di contesto.

Operazioni asincrone riferiscono essenzialmente alle interruzioni. interrupt del timer erano molto ben descritti da indiv. Tuttavia, un certo numero di elementi diversi potrebbe causare un interrupt per eseguire: il traffico di rete, sensori, dati seriali, ecc ...

E 'anche bene ricordare che l'interrupt timer non è necessariamente causa un cambio di contesto! Sì, l'interrupt si verificherà, e il compito ritardata ei contatori fetta di tempo verrà decrementato. Tuttavia, se l'intervallo di tempo non è scaduto, o nessuna più alti transizioni compito prioritario dal pended allo stato pronto, allora lo scheduler in realtà non essere invocata, e si tornerà di nuovo al compito originale, nel punto esatto in cui è stata interrotta l'esecuzione.

Si noti che l'utilità di pianificazione non ha un proprio contesto; non è un compito. E 'semplicemente il codice che viene eseguito in qualsiasi contesto, viene richiamato da. Sia dal contesto interrupt (asincrono) o dal contesto compito invocando (sincrona).

A meno che non si dispone di un accumulo di destinazione majorily-personalizzato, lo scheduler è invocata dal interrupt timer. I dettagli sono specifiche della piattaforma, però.

Lo scheduler anche viene invocata se l'attività corrente si completa o blocchi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top