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
modificaIl 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
modificaLinux
modificaSotto 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
modificaL'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.