Task State Segment — Änderungen 4831 → 5338

Zeile 1: Zeile 1:
−
Das '''Task State Segment''' (kurz TSS) wird von der CPU benötigt, um bei einen Ringwechsel den richtigen [[Stack]] zu laden. Man kann das TSS auch benutzen, um Hardware-[[Multitasking]] zu realisieren. Dafür wird der TSS-Deskriptor mit einem Longjump angesprungen. Dabei werden auch andere Register (wie EIP) geladen. Um ein TSS für den Ringwechsel benutzen zu können, muss es vorher mit ''ltr <Selektor>'' geladen werden.
+
{| {{prettytable}} style='float:right; text-align:center'
−
 
+
|+ Aufbau - Task State Segment
−
== Aufbau - Task State Segment ==
 
−
 
 
−
<center>
 
−
{| {{prettytable}}
 
 
! Offset || 31-16                || 0-15
 
! Offset || 31-16                || 0-15
 
|-
 
|-
−
| 0x00   ||                      || Previous Task Link
+
| 0x00 |{{Csr}} || Previous Task Link
 
|-
 
|-
 
| 0x04  || colspan="2"| ESP0
 
| 0x04  || colspan="2"| ESP0
 
|-
 
|-
−
| 0x08  ||                      || SS0
+
| 0x08  |{{Csr}} || SS0
 
|-
 
|-
 
| 0x0C  || colspan="2"| ESP1
 
| 0x0C  || colspan="2"| ESP1
 
|-
 
|-
−
| 0x10  ||                      || SS1
+
| 0x10  |{{Csr}} || SS1
 
|-
 
|-
 
| 0x14  || colspan="2"| ESP2
 
| 0x14  || colspan="2"| ESP2
 
|-
 
|-
−
| 0x18  ||                      || SS2
+
| 0x18  |{{Csr}} || SS2
 
|-
 
|-
 
| 0x1C  || colspan="2"| CR3
 
| 0x1C  || colspan="2"| CR3
Zeile 43: Zeile 39:
 
| 0x44  || colspan="2"| EDI
 
| 0x44  || colspan="2"| EDI
 
|-
 
|-
−
| 0x48  ||                      || ES
+
| 0x48  |{{Csr}} || ES
 
|-
 
|-
−
| 0x4C  ||                      || CS
+
| 0x4C  |{{Csr}} || CS
 
|-
 
|-
−
| 0x50  ||                      || SS
+
| 0x50  |{{Csr}} || SS
 
|-
 
|-
−
| 0x54  ||                      || DS
+
| 0x54  |{{Csr}} || DS
 
|-
 
|-
−
| 0x58  ||                      || FS
+
| 0x58  |{{Csr}} || FS
 
|-
 
|-
−
| 0x5C  ||                      || GS
+
| 0x5C  |{{Csr}} || GS
 
|-
 
|-
−
| 0x60  ||                      || LDT Segment Selektor
+
| 0x60  |{{Csr}} || LDT Segment Selektor
 
|-
 
|-
−
| 0x64  || I/O Map Base Address ||
+
| 0x64  || I/O Map Base Address |{{Csr|1}}
 
|}
 
|}
−
</center>
 
  
−
== Aufbau - TSS-Deskriptor ==
+
Das '''Task State Segment''' (kurz TSS) wird von der CPU benötigt, um bei einem Ringwechsel den richtigen [[Stack]] zu laden. Man kann das TSS auch benutzen, um [[Multitasking|Hardware-Multitasking]] zu realisieren. Dafür wird der TSS-Deskriptor mit einem Longjump angesprungen. Dabei werden auch andere Register (wie EIP) geladen. Um ein TSS für den Ringwechsel benutzen zu können, muss es vorher mit ''ltr <Selektor>'' geladen werden.
 +
 
 +
 
 +
=== Aufbau - TSS-Deskriptor ===
  
−
<center>
+
{| style='text-align:center' align='center'
−
{| {{prettytable}}
+
|+ Task State Segment Deskriptor
−
|+ Task State Segment Deskriptor (BITs) Teil 1
+
|
 +
{| {{prettytable}} width='100%'
 
|-
 
|-
−
! ''' 31 - 24''' || '''23''' || '''21 - 22''' || '''20''' || '''19 - 16''' || '''15''' || '''13 - 14''' || '''12''' || ''' 11 - 8''' || ''' 0 - 7 '''
+
! 31-24 || 23 || 21-22 || 20 || 19-16 || 15 || 14-13 || 12 || 11-8 || 7-0
 
|-
 
|-
 
|Basisadresse 31-24
 
|Basisadresse 31-24
Zeile 73: Zeile 72:
 
|0
 
|0
 
|AVL
 
|AVL
−
|Größe 19-16
+
|Limit 19-16
 
|P
 
|P
 
|DPL
 
|DPL
Zeile 80: Zeile 79:
 
|Basisadresse 16-23
 
|Basisadresse 16-23
 
|}
 
|}
−
 
−
{| {{prettytable}}
 
−
|+ Task State Segment Deskriptor (BITs) Teil 2
 
 
|-
 
|-
−
! '''31 - 24''' || '''16 - 0'''
+
|
 +
{| {{prettytable}} width='100%'
 +
! 31-16 || 15-0
 
|-
 
|-
−
|Basisadresse 15 - 0
+
| width='50%' | Basisadresse 15-0
−
|Größe 15 - 0
+
| width='50%' | Limit 15-0
 +
|}
 
|}
 
|}
−
</center>
 
  
−
===Type = Deskriptor Typ===
+
* ''Type'' - Deskriptor Typ - Hier muss als Wert 1001b eingetragen werden. Die hintere Null wird zusätzlich als Busy-Flag verwendet. Dies wird auf 1 gesetzt, sobald der Task in das System geladen ist und gestartet wurde. Tasks sind nicht redundant. Das heißt, sie dürfen sich nicht selbst aufrufen. Dies wird mit dem Busy-Flag verhindert.
−
Hier muss als Wert 1001b eingetragen werden. Die hintere Null wird zusätzlich als Busy-Flag verwendet. Dies wird auf 1 gesetzt, sobald der Task in das System geladen ist und gestartet wurde. Tasks sind nicht redundant. Das heißt, sie dürfen sich nicht selbst aufrufen. Dies wird mit dem Busy-Flag verhindert.
 
  
 
[[Kategorie:Glossar]]
 
[[Kategorie:Glossar]]
 
[[Kategorie:x86]]
 
[[Kategorie:x86]]