x86 segmentazione e threading

1

C'è qualche connessione tra l'uso della segmentazione x86 e una possibile implementazione di un pacchetto di thread? Mi è stato detto che di solito la segmentazione x86 è implementata nei sistemi operativi in questi giorni con una funzione di identità (0 offset, limite illimitato), ma la segmentazione può essere utile quando si ha a che fare con il multithreading?

    
posta Robz 20.03.2012 - 05:31
fonte

2 risposte

3

AFAIK, Windows sta usando un registro di segmento per puntare all'area variabile specifica del thread per il thread.

Si noti che ciò che è utile qui non è la segmentazione - penso che limite e protezione non siano realmente usati, e IIRC è l'unica cosa che ora è supportata in modalità a 64 bit -, ma il fatto che i registri dei segmenti avessero sono caduti in disuso e quindi erano disponibili per essere usati semplicemente come registro di base senza influenzare il codice esistente.

    
risposta data 20.03.2012 - 08:46
fonte
0

Quindi ho scoperto che un uso interessante della segmentazione nei pacchetti di thread (non dicendo che questo viene effettivamente fatto ovunque, ma è almeno un potenziale utilizzo) è manipolare il segmento dello stack in modo che i thread all'interno di un singolo processo possano condividere un indirizzo spazio, ma non si scontrano sullo stesso stack. Ogni thread ha il proprio stack, ma il codice in esecuzione nel thread non deve sapere dove si trova il suo stack - se non tenta di manipolare il proprio registro del segmento stack, il registro verrà impostato quando inizierà a puntare ad una voce nel LDT, che la conduce ad un pacco designato specificamente per esso nello spazio di indirizzamento del processo.

Questo è simile al modo in cui immagino che i kernel funzionino quando vengono eseguiti su un sistema con più core. Quando si verifica un'interruzione o un'eccezione su un core, roba viene spinto dallo stack del kernel dall'hardware, ma questo potrebbe rovinare lo stack se il kernel è in esecuzione anche su altri core nel momento in cui si verifica l'eccezione / l'interruzione. Invece, il kernel di ogni core potrebbe avere uno stack separato, designato da voci nell'IDT e GDT.

    
risposta data 21.03.2012 - 04:46
fonte

Leggi altre domande sui tag