Quando viene creato un thread, come viene determinato il contesto iniziale? [chiuso]


1

Come viene determinato il contesto iniziale di un thread (stato dei registri) sulla creazione del thread?

Ad esempio: Contesto del thread corrente eax = 0x4, ebx = 0x9000, ecx = 0xfff, ecc ... Crea un thread chiamato per iniziare l'esecuzione a 0xbfbfbf. Sembra ovvio che l'eip del thread sarà impostato su 0xbfbfbf, ma che ne dici degli altri registri. Vengono copiati dal thread corrente? Sono impostati su 0x00000000? Il puntatore dello stack è lo stesso? Voglio sapere cosa succede al contesto iniziale del thread durante la creazione del thread. Ho controllato i libri interni di Google e OS e non ho trovato quello che cercavo.

Inoltre, è lo stesso processo su altri sistemi operativi, in particolare Linux e Windows?

Risposte:


0

Quando un nuovo thread inizia l'esecuzione, i suoi registri vengono caricati dal suo contesto memorizzato proprio come un thread già in esecuzione. Il thread che crea il thread può riempire la struttura di contesto del nuovo thread come preferisce prima di aggiungerlo alla tabella dei thread in esecuzione del sistema operativo.

Fondamentalmente funziona così:

  1. Viene assegnata una nuova struttura di attività.

  2. I campi in quella nuova struttura di attività sono compilati comunque desiderati. Ciò include i registri, il puntatore dello stack e così via.

  3. La struttura delle attività è contrassegnata come pronta per essere eseguita e aggiunta all'elenco di attività dello scheduler.

  4. Lo scheduler decide di pianificare il nuovo thread, carica il suo contesto dalla struttura delle attività e passa ad esso.

  5. Il thread ora ha qualunque puntatore di registri, stack e istruzioni riempito dal thread di creazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.