Pagrindinis » kaip » Kodėl x86 CPU naudoja tik du iš keturių „žiedų“?

    Kodėl x86 CPU naudoja tik du iš keturių „žiedų“?

    Sužinokite daugiau apie tai, kaip operacinės sistemos ir techninė įranga veikia darbe ir sąveikauja tarpusavyje, todėl gali būti nustebinti, kad atrodo, kad yra keistai arba nepakankamai panaudojami „ištekliai“. Kodėl taip? Šiandienos „SuperUser“ Q&A pranešimas turi atsakymą į įdomų skaitytojo klausimą.

    Šiandienos „Klausimų ir atsakymų“ sesija mums suteikiama pagal „SuperUser“ - „Stack Exchange“ padalinį, bendruomenės sukurtą „Q&A“ svetainių grupavimą.

    Nuotraukų sutikimas su „Lemsipmatt“ („Flickr“).

    Klausimas

    „SuperUser“ skaitytuvas „AdHominem“ nori sužinoti, kodėl x86 CPU naudoja tik du iš keturių žiedų:

    Naudoja tik „Linux“ ir „Windows“ pagrįstas x86 sistemas Žiedas 0 branduolio režimui ir 3 žiedas vartotojo režimui. Kodėl procesoriai netgi išskiria keturis skirtingus žiedus, jei jie vis dėlto tiesiog naudoja du iš jų? Ar tai pasikeitė su AMD64 architektūra?

    Kodėl x86 CPU naudoja tik du iš keturių žiedų?

    Atsakymas

    „SuperUser“ autorius Jamie Hanrahan turi atsakymą:

    Yra dvi pagrindinės priežastys.

    Pirmasis yra tas, kad nors x86 CPU siūlo keturis atminties apsaugos žiedus, siūlomo apsaugos granuliacija yra tik viename segmente. Tai reiškia, kad kiekvienas segmentas gali būti nustatytas kaip tam tikras žiedas (privilegijų lygis) kartu su kitomis apsaugomis, pvz. Tačiau nėra daug segmentų aprašų. Dauguma operacinių sistemų norėtų turėti daug smulkesnį atminties apsaugą, pavyzdžiui,… atskiriems puslapiams.

    Taigi, įveskite puslapio lentelės apsaugą. Dauguma, jei ne visos, modernios x86 operacinės sistemos daugiau ar mažiau ignoruoja segmentavimo mechanizmą (tiek, kiek jie vis tiek gali) ir pasikliauti apsauga, gauta iš mažo užsakymo bitų puslapio lentelės įrašuose. Vienas iš jų vadinamas „privilegijuotu“ bitu. Šis bitas valdo, ar procesorius turi būti viename iš „privilegijuotų“ lygių, kad galėtų pasiekti puslapį. „Privilegijuoti“ lygiai PL 0, 1 ir 2. Bet tai yra tik vienas bitas, taigi, naudojant apsaugos nuo puslapio lygį, „režimų“ skaičius, kiek tai susiję su atminties apsauga, yra tik du: puslapis gali būti prieinamas ne privilegijuotu režimu, ar ne. Taigi, tik du žiedai. Kad kiekviename puslapyje būtų keturi galimi žiedai, kiekviename puslapio lentelės įraše jie turėtų turėti du apsaugos bitus, kad koduotų vieną iš keturių galimų skambučių numerių (lygiai taip pat kaip ir segmento deskriptorius). Tačiau jie to nedaro.

    Kita priežastis yra operacinės sistemos perkėlimo noras. Tai ne tik apie x86; „Unix“ mums išmokė, kad operacinė sistema gali būti gana nešiojama daugelio procesorių architektūroms ir kad tai buvo geras dalykas. Kai kurie procesoriai palaiko tik du žiedus. Nepriklausomai nuo architektūros daugelio žiedų, operacinės sistemos diegėjai padarė operacines sistemas nešiojamomis.

    Yra trečioji priežastis, susijusi su „Windows NT“ plėtra. NT dizaineriai (Davidas Cutleris ir jo komanda, kurią „Microsoft“ pasamdė „DEC Western Region Labs“), turėjo didelę ankstesnę patirtį VMS srityje; iš tiesų, „Cutler“ ir keletas iš kitų buvo tarp originalių VMS dizainerių. VAX procesorius, kuriam buvo sukurta VMS, turi keturis žiedus (VMS naudoja keturis žiedus).

    Tačiau komponentai, kurie vyko VMS sistemoje Žiedai 1 ir 2 („Record Management Services“ ir „CLI“) nebuvo įtraukti į NT projektą. Žiedas 2 VMS sistemoje iš tikrųjų nebuvo kalbama apie operacinės sistemos saugumą, o nuo vartotojo CLI aplinkos išsaugojimo iš vienos programos į kitą, o „Windows“ neturėjo tokios sąvokos; CLI veikia kaip įprastas procesas. Kaip VMS Žiedas 1, RMS kodas Žiedas 1 turėjo įeiti Žiedas 0 gana dažnai, o žiedo perėjimai yra brangūs. Paaiškėjo, kad tai yra daug efektyviau tiesiog eiti Žiedas 0 ir padarykite su juo, o ne daug Žiedas 0 perėjimai Žiedas 1 kodas (vėlgi, ne tai, kad NT vis tiek turi panašų RMS).

    Kodėl x86 įdiegė keturis žiedus, o operacinės sistemos jų nenaudojo, kalbate apie operatyvines sistemas, kurių dizainas yra daug naujesnis nei x86. Daugelis x86 sistemos programavimo funkcijų buvo sukurtos ilgai prieš tai, kai buvo įdiegtos NT arba tikrosios „Unix-ish“ branduolys, ir jie tikrai nežinojo, kokia operacinė sistema bus naudojama. Iki tol, kol gausime iešką x86, galėjome įgyvendinti tikruosius „Unix-ish“ arba VMS tipo branduolius.

    Šiuolaikinės x86 operacinės sistemos ne tik ignoruoja segmentavimą (jie tiesiog nustato C, D, ir S segmentus, kurių bazinis adresas yra 0, o 4 GB dydžio; kartais F ir G segmentai naudojami nurodant pagrindines operacinės sistemos duomenų struktūras ), jie taip pat labai ignoruoja tokius dalykus kaip „užduočių būsenos segmentai“. TSS mechanizmas buvo aiškiai suprojektuotas sriegio konteksto perjungimui, tačiau paaiškėja, kad turi per daug šalutinių poveikių, todėl modernios x86 operacinės sistemos tai daro „rankomis“. Vienintelis x86 NT keitimo aparatūros uždavinys yra kai kurioms tikrai išskirtinėms sąlygoms, pvz., Dvigubai išimčiai.

    Kalbant apie x64 architektūrą, daugelis šių nebenaudojamų funkcijų buvo paliktos. Jų kreditui AMD iš tikrųjų kalbėjo apie operacinės sistemos branduolių komandas ir paklausė, ko jiems reikia iš x86, ko jiems nereikėjo ar nenorėjo, ir ką jie norėtų pridėti. „X64“ segmentai egzistuoja tik tuo, kas gali būti vadinama vestigine forma, užduoties būsenos perjungimas neegzistuoja ir tt, ir operacinės sistemos toliau naudoja tik du žiedus.


    Ar ką nors papildyti paaiškinimu? Garsas išjungtas komentaruose. Norite perskaityti daugiau atsakymų iš kitų „tech-savvy Stack Exchange“ vartotojų? Čia rasite visą diskusijų temą.