| Zeile 1: | Zeile 1: | ||
| − | + | {| {{prettytable}} style='float:right; text-align:center' | |
| − | + | |+ Aufbau - Task State Segment | |
| − | |||
| − | |||
| − | |||
| − | |||
! Offset || 31-16 || 0-15 | ! Offset || 31-16 || 0-15 | ||
|- | |- | ||
| − | | 0x00 | + | | 0x00 |{{Csr}} || Previous Task Link |
|- | |- | ||
| 0x04 || colspan="2"| ESP0 | | 0x04 || colspan="2"| ESP0 | ||
|- | |- | ||
| − | | 0x08 | | + | | 0x08 |{{Csr}} || SS0 |
|- | |- | ||
| 0x0C || colspan="2"| ESP1 | | 0x0C || colspan="2"| ESP1 | ||
|- | |- | ||
| − | | 0x10 | | + | | 0x10 |{{Csr}} || SS1 |
|- | |- | ||
| 0x14 || colspan="2"| ESP2 | | 0x14 || colspan="2"| ESP2 | ||
|- | |- | ||
| − | | 0x18 | | + | | 0x18 |{{Csr}} || SS2 |
|- | |- | ||
| 0x1C || colspan="2"| CR3 | | 0x1C || colspan="2"| CR3 | ||
| Zeile 43: | Zeile 39: | ||
| 0x44 || colspan="2"| EDI | | 0x44 || colspan="2"| EDI | ||
|- | |- | ||
| − | | 0x48 | | + | | 0x48 |{{Csr}} || ES |
|- | |- | ||
| − | | 0x4C | | + | | 0x4C |{{Csr}} || CS |
|- | |- | ||
| − | | 0x50 | | + | | 0x50 |{{Csr}} || SS |
|- | |- | ||
| − | | 0x54 | | + | | 0x54 |{{Csr}} || DS |
|- | |- | ||
| − | | 0x58 | | + | | 0x58 |{{Csr}} || FS |
|- | |- | ||
| − | | 0x5C | | + | | 0x5C |{{Csr}} || GS |
|- | |- | ||
| − | | 0x60 | | + | | 0x60 |{{Csr}} || LDT Segment Selektor |
|- | |- | ||
| − | | 0x64 || I/O Map Base Address || | + | | 0x64 || I/O Map Base Address |{{Csr|1}} |
|} | |} | ||
| − | |||
| − | == 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 === | ||
| − | + | {| style='text-align:center' align='center' | |
| − | {| {{prettytable}} | + | |+ Task State Segment Deskriptor |
| − | + | | | |
| + | {| {{prettytable}} width='100%' | ||
|- | |- | ||
| − | ! | + | ! 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 | ||
| − | | | + | |Limit 19-16 |
|P | |P | ||
|DPL | |DPL | ||
| Zeile 80: | Zeile 79: | ||
|Basisadresse 16-23 | |Basisadresse 16-23 | ||
|} | |} | ||
| − | |||
| − | |||
| − | |||
|- | |- | ||
| − | + | | | |
| + | {| {{prettytable}} width='100%' | ||
| + | ! 31-16 || 15-0 | ||
|- | |- | ||
| − | |Basisadresse 15 - 0 | + | | width='50%' | Basisadresse 15-0 |
| − | | | + | | width='50%' | Limit 15-0 |
| + | |} | ||
|} | |} | ||
| − | |||
| − | + | * ''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]] | ||