Kun ymmärrät enemmän siitä, miten käyttöjärjestelmät ja laitteistot toimivat ja ovat vuorovaikutuksessa toistensa kanssa, saatat yllättyä nähdäkseen, mitä näyttävät kummallisilta tai "resurssien" käyttämättä. Miksi niin? Tänään SuperUser Q & A -postilla on vastaus utelias lukijan kysymykseen.
Tämän päivän kysymys- ja vastausistunto tulee meihin SuperUserin hyväksi - Stack Exchangein alaosasto, joka on yhteisöllinen Q & A-sivustojen ryhmittely.
Kuva ystävällisesti Lemsipmatt (Flickr).
SuperUser-lukija AdHominem haluaa tietää, miksi x86-keskusyksiköt käyttävät vain kahta neljästä renkaasta:
Linux- ja Windows-pohjaiset x86-järjestelmät käyttävät vain niitä Soi 0 ytimen tilassa ja Ring 3 käyttäjän tilaan. Miksi jalostajat erottavat jopa neljä erilaista rengasta, jos kaikki päätyvät vain käyttämään kahta niistä joka tapauksessa? Onko tämä muuttunut AMD64-arkkitehtuurilla?
Miksi x86-suorittimet käyttävät vain kahta neljästä renkaasta?
SuperUser-avustaja Jamie Hanrahan on meille vastaus:
On kaksi pääasiallista syytä.
Ensimmäinen on se, että vaikka x86-keskusyksiköt tarjoavat neljä muistia suojaavaa rengasta, sen tarjoaman suojan rakeisuus on vain segmentin tasolla. Toisin sanoen kukin segmentti voidaan asettaa tiettyyn rengasasemaan (etuoikeustaso) ja muita suojauksia, kuten kirjoituksen poistoa. Mutta ei ole olemassa monia segmentin kuvaajia. Useimmat käyttöjärjestelmät haluavat olla paljon hienompaa muisti suojaa, kuten ... yksittäisille sivuille.
Syötä siis sivupohjapohjainen suoja. Suurin osa, jos ei kaikki, nykyaikaiset x86-käyttöjärjestelmät jättävät enemmän tai vähemmän huomiotta segmentointimekanismin (niin paljon kuin ne voivat joka tapauksessa) ja luottaa suojaustilanteeseen, joka on saatavissa pienen tilausbittien avulla. Yksi näistä on nimeltään "etuoikeutettu" bitti. Tämä bitti ohjaa, onko prosessorin jouduttava jollakin "etuoikeutetuista" tasoista sivulle pääsemiseksi. "Etuoikeutetut" tasot ovat PL 0, 1 ja 2. Mutta se on vain yksi bitti, joten sivuttain sivusuojaustasolla käytettävissä olevien "tilaa" koskevien muistien määrä on vain kaksi: Sivulle päästään vain etuoikeutetusta tilasta tai ei. Siksi vain kaksi rengasta. Jokaisen sivun neljällä mahdollisella renkaalla on oltava kaksi suojausbittiä kussakin sivutaulukko-merkinnässä koodaamaan yhtä neljästä mahdollisesta rengasluvusta (samoin kuin segmentin kuvaajat). He eivät kuitenkaan.
Toinen syy on käyttöjärjestelmän siirrettävyyden halu. Se ei ole vain x86; Unix opetti meille, että käyttöjärjestelmä voisi olla suhteellisen kannettava useille prosessorijärjestelmille, ja se oli hyvä asia. Ja jotkut prosessorit tukevat vain kahta sormusta. Koska käyttämättömät järjestelmät eivät ole riippuvaisia arkkitehtuurin useista rengistä, käyttöjärjestelmät ovat siirrettävämpiä.
On kolmas syy, joka on erityistä Windows NT: n kehitystä varten. NT: n suunnittelijat (David Cutler ja hänen tiiminsä, jonka Microsoft palkkasi DEC Western Region Labsilta) oli laaja kokemus VMS: stä; Itse asiassa Cutler ja muutamat muut olivat VMS: n alkuperäisten suunnittelijoiden joukossa. Ja VAX-prosessori, jolle VMS on suunniteltu, on neljä rengasta (VMS käyttää neljää rengasta).
Mutta komponentit, jotka juoksivat VMS: ssä Sormukset 1 ja 2 (Record Management Services ja CLI) jätettiin NT-suunnittelusta. Ring 2 VMS: ssä ei todellisuudessa ollut kyse käyttöjärjestelmien turvallisuudesta vaan pikemminkin käyttäjän CLI-ympäristön säilyttämisestä ohjelmasta toiseen, eikä Windowsissa ollut kyseistä konseptia; CLI toimii tavallisena prosessina. Mitä tulee VMS: iin Sormus 1, RMS-koodi sisään Sormus 1 oli kutsuttava Soi 0 melko usein, ja rengas siirtymät ovat kalliita. Se osoittautui paljon tehokkaammaksi vain mennä Soi 0 ja se tehdään sen sijaan, että sillä on paljon Soi 0 siirtymät Sormus 1 koodi (taas, ei, että NT: llä ei ole mitään RMS: ää).
Mitä tulee miksi x86 toteutti neljä rengasta, kun käyttöjärjestelmät eivät käyttäneet niitä, puhutaan paljon uudempaa suunnittelua käyttävistä käyttöjärjestelmistä kuin x86. Suuri osa x86-järjestelmän ohjelmointiominaisuuksista on suunniteltu kauan ennen NT: n tai totta Unix-ish-ytimiä, ja ne eivät oikein tiedä, mitä käyttöjärjestelmä käyttäisi. Vasta sitten, kun saimme hakuja x86: lle, voimme toteuttaa todelliset Unix-ish- tai VMS-kaltaiset ytimet.
Modernit x86-käyttöjärjestelmät eivät vain jätä huomiotta segmentoitumista (ne muodostavat vain C-, D- ja S-segmentit, joiden perusosoite on 0 ja koko 4 Gt; F- ja G-segmenttejä käytetään joskus osoittamaan keskeisiä käyttöjärjestelmän tietorakenteita ), he myös suurelta osin jättävät huomiotta asioita, kuten "tehtävä valtion segmentit". TSS-mekanismi oli selkeästi suunniteltu lankojen kontekstikytkentäksi, mutta sillä on liian monia haittavaikutuksia, joten nykyaikaiset x86-käyttöjärjestelmät tekevät sen "käsin". Ainoa aika, jolla x86 NT muuttaa laitteisto-tehtäviä, on joissakin todella poikkeuksellisissa olosuhteissa, kuten kaksinkertaisen vian poikkeuksena.
X64-arkkitehtuurin suhteen monet näistä käytöstä poistetuista ominaisuuksista jätettiin pois. Heidän luottotunnilleen AMD puhui todella käyttöjärjestelmän ytimen tiimeistä ja kysyi, mitä he tarvitsivat x86: sta, mitä he eivät tarvitsineet tai eivät halunneet ja mitä he haluaisivat lisätä. X64-segmenttejä esiintyy vain siinä, mitä voidaan kutsua jäljitysmuodoksi, tehtävän tilakytkintä ei ole olemassa jne. Ja käyttöjärjestelmät käyttävät edelleen vain kahta sormusta.
Onko jokin asia lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä? Katso koko keskusteluketju täältä.