AMD en Intel zijn onlangs begonnen met het veranderen van de manier waarop de x86-chiparchitectuur omgaat met uitzonderingen. Linus Torvalds, op zijn beurt, gaf zijn kijk op hun nieuwe benadering voor toekomstige generaties CPU’s.

Door Steven J. Vaughan-Nichols | ZDNet

Zowel AMD als Intel hebben besloten dat het tijd is om eindelijk een aantal echt oude en funky CPU-ontwerpkeuzes op te ruimen, die helemaal teruggaan tot de 80286-architectuur van de vroege jaren 80. Ze gaan uit elkaar en Linus Torvalds, de oprichter van Linux, deelde onlangs zijn mening over hun keuzes voor het ontwerp van de CPU.

AMD kwam als eerste met de voorgestelde wijzigingen in februari 2021: AMD Supervisor Entry Extensions. Intel volgde in maart met zijn ontwerp voor flexibele retour- en evenementbezorging (flexible return and event delivery: FRED). Wat de interesse van Torvald wekte, was toen iemand op het Deep Technology-gespreksforum van Real World Technologies het onderwerp introduceerde met de opmerking: “x86 – waarom verenigen als je kunt fragmenteren?”

Torvalds ziet het echter niet zo. Hij schreef:
De AMD-versie is in wezen “Bekende bugs verhelpen in de definitie van uitzonderingsafhandeling”.
De Intel-versie is eigenlijk “Ja, de afhandeling van uitzonderingen in de beschermde modus 80286 was slecht, daarna maakte 386 het vreemder met de 32-bits extensies, en toen maakte syscall / sysenter alles erger, en toen introduceerden de x86-64-extensies nog meer problemen. Dus laten we een mode-bit toevoegen waar alle rotzooi verdwijnt. “
De AMD-versie daarentegen is in feite een minimale inspanning om feitelijke fundamentele problemen op te lossen met al die legacy-geïnduceerde rotzooi die vervelend is om mee te werken en die problemen heeft veroorzaakt.

Dus, wat zijn deze problemen? Ze zijn verborgen met de Interrupt Descriptor Table (IDT) van de x86-architectuur. Dit is een datastructuur die een interruptvectortabel implementeert. Het komt helaas met tal van uitzonderingsproblemen.
Deze omvatten volgens Torvalds:
• IDT zelf is een vreselijk smerig formaat en je zou het geheugen niet op vreemde manieren moeten ontleden om uitzonderingen te verwerken. Het was fundamenteel slecht vanaf het begin van 80286, het werd een klein beetje moeilijker te ontleden voor 32-bits, en het werd aantoonbaar veel erger in x86-64.
• Het% rsp register voor algemene doeleinden wordt niet correct hersteld in de modus Return-to-user.
• Vertraagde debug-traps in supervisormodus.
• Verschillende slechte nesting-problemen voor uitzonderingen: niet-maskeerbare onderbrekingen (NMI), machinecontroles en op zijn minst STI-schaduwafhandeling).
• Diverse atomiciteitsproblemen met gsbase (swapgs) en stack pointer switching
• Verschillende indelingen voor uitzonderingsstapels, en letterlijk honderden verschillende toegangspunten voor uitzonderingen, interrupts en systeemoproepen (en dan nog niet eens de oproeppoorten meegerekend die niemand in de eerste plaats zou moeten gebruiken).

Torvalds concludeerde: “Maar ik vermoed dat ik er een paar ben vergeten.” Kortom, het is een puinhoop en het wordt al een tijdje rommeliger.

 

Lees verder op ZDNet.com