Neviem, čo presne chcete vedieť?
Ale v pri chybách tohto typu úplne všeobecne ide o:
1. Zblbnúť prediktor tak, aby v inom programe vykonal v špekulatívnom režime tú svoju čast, ktorú chceme, lebo tá spracúva dáta, ktoré nemáme a chceme ich získať.
2. Ak sa zistí, že v špekulatívnom režime sa vykonalo, čo sa nemalo(lebo sa predikovala nesprávna vetva), trak sa majú zahodiť všetky spracovávané dáta a iné dôsledky. Všetky priame dôkazy sa zahodia, ale ostanú k dispozícii nepriame dôkazy o tom, aké boli tie spracované dáta. A na základe tých nepriamych dôkazov sa dajú spracovávané dáta(napr. heslá) zistiť
A teraz
Prediktor sa dá zblbnúť
A) Pre program, ktorý bude bežať po nás , tu OS vie pri prepínaní zblbnúť to inak, ako chceme, a tým zabrániť.
B) pre inú časť samého seba (ak sa líši tá časť v bitoch, ktoré prediktor ignoruje -počíta len s najnižšími 20-imi bitmi)
C) Pre program , ktorý beží na tom isto jadra súčasne s nami tzv.- SMT/HT a máme spoločný prediktor.
(Intel má jeden prediktor pre dva thready, AMD dva prediktory pre dva thready-jeden pre každý thread a teda tu to nefunguje)
A ako riešiť prípad C, ak je tam jedn prediktor?
každý proces/task/úloha má aspoň jeden thread - V C začínam vo funkcii main, ale môže ich mať viac, ak ich má viac, tak majú prístup (skoro) ku všetkému (okrem lokálnych premenných na zásobníku), ako oattné vlákna toho istého procesu a teda nemá zmysel získavať dáta z iného vlákna toho istého procesu, lebo ich má aj tak. Teda vlákna toho istého procesu môžu bežať na tom istom jadre bez bezpečnostného rizika. Vlákna z iných procesov to ale nemôžu robit, lebo by mohli získať dáta, ku ktorým by sa nedoatali. To vie zariadiť plánovač OS, a ak to urobí, tak je dopad na výkon taký ako v týchto záplatách, lebo presne to robia...