Task State Segment
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 modifica
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 modifica
Linux modifica
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 modifica
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 modifica
- (EN) Intel Architecture Software Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes:1, 2A, 2B, 2C, 3A, 3B, and 3C (PDF), su download.intel.com.