Uno Task state segment (TSS) è una struttura specifica dei processori della famiglia x86 dove si trova memorizzato il contesto di un processo. Il suo descrittore si trova nella Global Descriptor Table (GDT).
In quanto segmenti, i segmenti di stato sono referenziati da descrittori di stato di processo (task state segment descriptor) (TSSD) situati nella GDT.
Struttura di un TSS
Il TSS contiene vari tipi di informazioni:
- I registri generali EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI
- I registri di segmento CS, ES, SS, DS, FS, GS
- Il registro EFLAGS
- Il registro EIP
- Il registro CR3
- Il registro LDTR
- I selettori del TSS del processo che era precedentemente eseguito
- L'I/O map base address e l'I/O map
- I puntatori agli stack dei livelli di privilegio 0,1,2
offset
|
31-16
|
15-0
|
0x64
|
IOPB offset
|
riservato
|
0x60
|
riservato
|
LDTR
|
0x5C
|
riservato
|
GS
|
0x58
|
riservato
|
FS
|
0x54
|
riservato
|
DS
|
0x50
|
riservato
|
SS
|
0x4C
|
riservato
|
CS
|
0x48
|
riservato
|
ES
|
0x44
|
EDI
|
0x40
|
ESI
|
0x3C
|
EBP
|
0x38
|
ESP
|
0x34
|
EBX
|
0x30
|
EDX
|
0x2C
|
ECX
|
0x28
|
EAX
|
0x24
|
EFLAGS
|
0x20
|
EIP
|
0x1C
|
CR3
|
0x18
|
riservato
|
SS2
|
0x14
|
ESP2
|
0x0C
|
riservato
|
SS1
|
0x10
|
ESP1
|
0x08
|
riservato
|
SS0
|
0x04
|
ESP0
|
0x00
|
riservato
|
LINK
|
Utilizzo
Linux
Sotto Linux, a ogni commutazione di contesto, il kernel (grazie alla macro "SWITCH_TO") aggiorna il TSS con le informazioni (registri generali, EIP, EFLAGS, ecc) del nuovo processo.
Il TSS è utilizzato tra l'altro dal kernel per ritornare da una chiamata di sistema o per la gestione dell'eccezione "errore doppio" (il processore, non potendo fare affidamento sui suoi registri, usa il TSS).
TSS nell'architettura x86-64
L'architettura x86-64 non supporta il cambio di contesto hardware, tuttavia il TSS può essere ancora utilizzato in una macchina utilizzante la modalità a 64 bit. In questa modalita il TSS viene utilizzato per memorizzare:
- Lo stack pointer per ogni livello di privilegio.
- L'indirizzo del puntatore all' Interrupt Stack Table
- Offset della bitmap dei permessi IO
Il task register viene espanso per contenere indirizzi a 64 bit.
Collegamenti esterni