2009-03-01 13 views
5

Ecco cosa so della concorrenza nel sistema operativo.Domande relative alla concorrenza sul programma in esecuzione nel sistema operativo

Per eseguire più task in un sistema operativo, la CPU assegnerà un intervallo di tempo a ciascuna attività. Quando si esegue l'attività A, l'altra attività "si addormenta" e così via.

Ecco la mia domanda:

Ho un programma del timer che contano per inattività di tastiera/mouse. Se l'inattività continua entro 15 minuti, verrà visualizzato un programma per lo screen saver.

Se la teoria della concorrenza è come ho detto sopra, il timer sarà impreciso? Poiché ogni programma in esecuzione nel sistema operativo avrà un po 'di tempo in "sospensione", quindi il programma del timer avrà anche la possibilità di "dormire", ma nel mondo reale il tempo non si ferma.

risposta

1

Utilizzerai servizi dal sistema operativo per fornire un timer che non proverai a implementare. Se il codice dovesse funzionare in modo semplice per contare il tempo, saremmo ancora nell'età oscura per quanto riguarda l'informatica.

0

Questo potrebbe dipendere dalla lingua. In Java, non è un problema. Sospetto che tutte le lingue "faranno la cosa giusta" qui. Ciò significa che tali timer non sono comunque estremamente accurati, e che di solito si può solo aspettare che il timer si addormenti almeno per il tempo specificato, ma potrebbe dormire più a lungo. Cioè, potrebbe non essere il thread attivo quando scade il tempo, e quindi riprendere l'elaborazione un po 'più tardi.

1

Nella maggior parte dei sistemi operativi, il tuo compito non sarà messo in stop solo quando è stato usato il suo time slice ma anche mentre è in attesa di I/O (che è molto più comune per la maggior parte dei programmi).

Come detto AnthonyWJones, utilizzare il concetto del sistema operativo dell'ora corrente.

Le fasce orarie del kernel del sistema operativo sono troppo brevi per introdurre un'eventuale inaccuratezza per uno screen saver.

1

Penso che il tuo processo di attesa può essere molto semplice:

  1. activityTime = momento del dall'ultima pressione dei tasti o movimento del mouse [da OS]
  2. ora = ora attuale [da OS]
  3. Se ora > = 15 minuti dopo activityTime, avviare screensaver
  4. sonno per alcuni secondi e tornare al punto 1

Perché passaggi 1 e 2 utilizzare il sistema operativo e non un qualche tipo di contatore di corsa, non ti interessa se ti interrompe in qualsiasi momento durante questa attività.

0

L'ora specificata in sleep() è in tempo reale, non nella CPU utilizzata dal processo. (Poiché la CPU impiega circa 0 mentre il tuo programma è inattivo.)

Problemi correlati