View Single Post
Old 18-01-2006, 09:31   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da shodan
Dato per scontato che ho presente abbastanza bene com'è implementato lo scheduler di linux, vorrei capire come fa quest'ultimo a far eseguire un processo solo per un certo tempo e come può, di conseguenza, accorgersi che questo tempo (quanto) è terminato.
Tramite un timer di sistema

Quote:
E' una funzionalità integrata direttamente nell'hardware 386 e superiori, cioè lo scheduler dice al processore di eseguire un certo task solo per un certo quanto di tempo direttamente quando sta per lanciare il task in questione? Oppure lo scheduler si limita a controllare periodicamente il tempo di esecuzione di un certo task e confrontarlo con il quanto di tempo teoricamente assegnatoli?
Se fosse vera quest'ultima ipotesi, come potrebbe lo scheduler svolgere i suoi compiti? Per far questo dovrebbe essere eseguito, ma la CPU allo stesso tempo sta eseguendo il task assegnatole; come potrebbe eseguire contemporaneamente anche lo scheduler?
Il timer genera un irq, durante la gestione del quale il kernel controlla lo stato del quanto temporale del processo. Se necessario, il task viene spostato sulla runqueue dei processi "expired" e un nuovo task viene preparato per il ripristino dell'esecuzione. Molti processori, come gli x86, hanno uno specifico supporto hw per aiutare questa fase. Se chiedi in Programmazione possono fornirti i dettagli, se ti interessa.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso