Kotisivu » miten » Kuinka monta muistiosoitetta voi tallentaa tietokoneeseen?

    Kuinka monta muistiosoitetta voi tallentaa tietokoneeseen?

    Joskus on hauskaa katsoa tietojenkäsittelykokemuksen pintatasoa, ja muina päivinä on hauskaa kaivaa suoraan sisäkäyttöön. Tänään tarkastelemme tietokoneen muistin rakennetta ja kuinka paljon tavaraa voi pakata RAM-muistiin.

    Nykypäivän Kysymys- ja vastaus -istunto tulee meille suotuisasti SuperUserin - Stack Exchange -alueen, yhteisöpohjaisen Q & A-sivustojen ryhmittymän - kautta..

    Kysymys

    SuperUser-lukija Johan Smohan tarttuu siihen, miten prosessorin tyyppi ja muistikoko toimivat yhdessä saamaan aikaan kokonaisosoitteiden lukumäärän. Hän kirjoittaa:

    Kuinka monta muistiosoitetta saamme 32-bittisellä prosessorilla ja 1 Gt: n RAM-muistilla ja kuinka monella 64-bittisellä prosessorilla?

    Mielestäni se on jotain tällaista:

    1 Gt RAM: ia jaettuna joko 32 bitillä 4 bittiä (?) Saadaksesi muistipaikkojen määrän?

    Luin Wikipediassa, että 1 muistiosoite on 32 bittiä leveä tai 4 oktettia (1 oktetti = 8 bittiä) verrattuna 64-bittiseen prosessoriin, jossa 1 muistiosoite tai 1 kokonaisluku on 64 bittiä leveä tai 8 oktettia. Mutta en tiedä onko ymmärsin sen oikein.

    Nämä ovat sellaisia ​​kysymyksiä, jotka voivat pitää utelias geekiä yöllä. Kuinka monta osoitetta on saatavilla jokaisessa Johanin hypoteettisessa järjestelmässä?

    Vastaus

    SuperUserin avustaja Gronostaj tarjoaa jonkin verran tietoa siitä, miten RAM on jaettu ja hyödynnetty:

    Lyhyt vastaus: Käytettävissä olevien osoitteiden määrä on yhtä suuri kuin pienempi:

    • Muistin koko tavuina
    • Suurin allekirjoitettu kokonaisluku, joka voidaan tallentaa CPU: n koneen sanaan

    Pitkä vastaus ja selitys edellä esitetystä:

    Muisti koostuu tavuista (B). Jokainen tavu sisältää 8 bittiä (b).

    1 B = 8 b 

    1 Gt RAM-muistia on 1 GiB (gibibyytti, ei gigatavua). Ero on:

    1 GB = 10 ^ 9 B = 1 000 000 000 B 1 GiB = 2 ^ 30 B = 1 073 741 824 B 

    Jokaisella muistin tavulla on oma osoite, riippumatta siitä, kuinka suuri CPU-koneen sana on. Esimerkiksi. Intel 8086 CPU oli 16-bittinen ja se käsitteli muistia tavuilla, joten myös nykyaikaiset 32-bittiset ja 64-bittiset CPU: t. Se on syy ensimmäiseen rajaan - et voi olla enemmän osoitteita kuin muistin tavuja.

    Muistiosoite on vain muutama tavu, jonka CPU: n on ohitettava muistin alusta päästäksesi siihen, jota se etsii.

    • Pääsy ensimmäiseen tavuun on ohitettava 0 tavua, joten ensimmäisen tavun osoite on 0.
    • Pääsy toiseen tavuun sen on ohitettava yksi tavu, joten sen osoite on 1.
    • (ja niin edelleen… )
    • Jos haluat käyttää viimeistä tavua, CPU ohittaa 1073741823 tavua, joten sen osoite on 1073741823.

    Nyt sinun on tiedettävä, mitä 32-bittinen tarkoittaa. Kuten aiemmin mainitsin, se on koneen sanan koko.

    Koneen sana on muistin CPU: n määrä, jota käytetään numeroiden pitämiseen (RAM-muistissa, välimuistissa tai sisäisissä rekistereissä). 32-bittinen CPU käyttää 32 bittiä (4 tavua) numeroiden pitämiseen. Muistin osoitteet ovat myös numeroita, joten 32-bittisessä CPU: ssa muistiosoite koostuu 32 bitistä.

    Ajattele nyt: jos sinulla on yksi bitti, voit tallentaa kaksi arvoa: 0 tai 1. Lisää vielä yksi bitti ja sinulla on neljä arvoa: 0, 1, 2, 3. Kolme bittiä, voit tallentaa kahdeksan arvoa : 0, 1, 2… 6, 7. Tämä on itse asiassa binäärinen järjestelmä ja se toimii näin:

    Binary Decimal 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 10 1010 11 1011 12 1100 13 1101 14 1110 15 1111 

    Se toimii aivan kuten tavallinen lisäys, mutta maksimiluku on 1, ei 9. desimaali 0 on 0000, lisää sitten 1 ja saat 0001, lisää vielä kerran ja sinulla on 0010. Mitä täällä tapahtuu, on kuin desimaali 09 ja lisäämällä yksi: voit vaihtaa 9: stä 0: een ja lisäys seuraavaan numeroon.

    Yllä olevasta esimerkistä näet, että aina on maksimiarvo, jota voit pitää numerossa, jossa on vakio bittien määrä - koska kun kaikki bitit ovat 1 ja yrität lisätä arvoa 1, kaikki bitit tulevat 0: ksi, mikä rikkoo määrä. Sitä kutsutaan kokonaisluvun ylivuotoksi ja se aiheuttaa monia epämiellyttäviä ongelmia sekä käyttäjille että kehittäjille.

     11111111 = 255 + 1 ----------- 100000000 = 0 (9 bittiä täällä, joten 1 on leikattu) 
    • 1 bitin suurin arvo on 1,
    • 2 bittiä - 3,
    • 3 bittiä - 7,
    • 4 bittiä - 15

    Suurin mahdollinen luku on aina 2 ^ N-1, jossa N on bittien lukumäärä. Kuten aiemmin sanoin, muistiosoite on numero ja sillä on myös maksimiarvo. Siksi koneen sanan koko on myös rajoitettu käytettävissä olevien muistipaikkojen määrälle - joskus keskusyksikkö ei voi käsitellä tarpeeksi suuria numeroita käsittelemään enemmän muistia.

    Joten 32 bitillä voit pitää numerot 0: sta 2 ^ 32-1: een, ja se on 4 294 967 295. Se on enemmän kuin suurin osoite 1 Gt: n RAM-muistissa, joten tietyssä tapauksessa RAM-muistin määrä on rajoittava tekijä.

    RAM-raja 32-bittiselle CPU: lle on teoriassa 4 Gt (2 ^ 32) ja 64-bittiselle CPU: lle 16 EB (exabytes, 1 EB = 2 ^ 30 Gt). Toisin sanoen 64-bittinen CPU voisi käsitellä koko Internetiä… 200 kertaa;) (arvioituWolframAlpha).

    Todellisissa käyttöjärjestelmissä 32-bittiset CPU: t voivat kuitenkin käsitellä noin 3 Gt RAM-muistia. Tämä johtuu käyttöjärjestelmän sisäisestä arkkitehtuurista - jotkut osoitteet on varattu muihin tarkoituksiin. Voit lukea lisää tästä ns. 3 Gt: n esteestä Wikipediassa. Voit poistaa tämän rajan Fyysisen osoitteen laajennuksen avulla.

    Puhuessasi muistin osoituksesta, minun pitäisi mainita muutamia asioita: virtuaalimuistijakautuminen ja henkilöhaku.

    Virtuaalimuisti

    Kuten @Daniel R Hicks huomautti toisessa vastauksessa, käyttöjärjestelmä käyttää virtuaalimuistia. Se tarkoittaa sitä, että sovellukset eivät tosiasiallisesti toimi todellisissa muistiosoitteissa, vaan käyttöjärjestelmien tarjoamissa.

    Tämä tekniikka sallii käyttöjärjestelmän siirtää joitakin tietoja RAM: sta ns. Pagefileen (Windows) tai Swap (* NIX). Kiintolevy on vain vähän RAM-muistia hitaampaa, mutta se ei ole vakava ongelma harvoin käytetyillä tiedoilla, ja sen avulla käyttöjärjestelmä voi tarjota sovelluksille enemmän RAM-muistia kuin mitä olet asentanut.

    Hakulaite

    Tähän saakka puhumme nimeltään litteää osoitusta.

    Hakeminen on vaihtoehtoinen osoitejärjestelmä, jonka avulla voidaan käsitellä enemmän muistia, joita normaalisti voi käyttää yhdellä koneen sanalla litteässä mallissa.

    Kuvittele kirja, joka on täynnä 4-kirjaimia. Oletetaan, että kussakin sivulla on 1024 numeroa. Jos haluat käsitellä numeroa, sinun on tiedettävä kaksi asiaa:

    • Sivun tulostusnumero.
    • Mitkä sivun sanat ovat etsimäsi.

    Juuri nyt moderni x86-prosessori käsittelee muistia. Se on jaettu neljään KiB-sivuun (kukin 1024 konekielistä) ja niillä on numeroita. (itse asiassa sivut voivat olla myös 4 MiB suuria tai 2 MiB PAE: lla). Kun haluat käsitellä muistisolua, tarvitset sivunumeron ja osoitteen kyseisellä sivulla. Huomaa, että kullekin muistisolulle viitataan täsmälleen yhdellä numeroparilla, mikä ei ole segmentoinnin tapauksessa.

    jakautuminen

    No, tämä on aivan samanlainen kuin sivunvaihto. Sitä käytettiin Intel 8086: ssa vain yhden esimerkin nimeämiseksi. Osoiteryhmiä kutsutaan nyt muistisegmenteiksi, ei sivuiksi. Ero on segmenttien päällekkäisyys, ja ne ovat päällekkäisiä. Esimerkiksi 8086: ssa useimmat muistisolut olivat saatavilla 4096 eri segmentistä.

    Esimerkki:

    Oletetaan, että meillä on 8 tavua muistia, kaikki nollat, lukuun ottamatta neljää tavua, joka on 255.

    Kuva litteän muistin mallista:

     _____ | 0 | | 0 | | 0 | | 255 | | 0 | | 0 | | 0 | | 0 | ----- 

    Kuvaa sivun muistista 4 tavun sivuilla:

     SIVU0 _____ | 0 | | 0 | | 0 | SIVU 1 | 255 | _____ ----- | 0 | | 0 | | 0 | | 0 | ----- 

    Kuva segmentoitua muistia varten 4-tavuiset segmentit siirtyivät yhdellä:

     SEG 0 _____ SEG 1 | 0 | _____ SEG 2 | 0 | | 0 | _____ SEG 3 | 0 | | 0 | | 0 | _____ SEG 4 | 255 | | 255 | | 255 | | 255 | _____ SEG 5 ----- | 0 | | 0 | | 0 | | 0 | _____ SEG 6 ----- | 0 | | 0 | | 0 | | 0 | _____ SEG 7 ----- | 0 | | 0 | | 0 | | 0 | _____ ----- | 0 | | 0 | | 0 | | 0 | ----- ----- ----- ----- 

    Kuten näette, 4. tavua voidaan käsitellä neljällä tavalla: (osoitteesta 0)

    • Segmentti 0, offset 3
    • Segmentti 1, siirtymä 2
    • Segmentti 2, siirtymä 1
    • Segmentti 3, siirtymä 0

    Se on aina sama muistisolu.

    Reaaliaikaisessa toteutuksessa segmentit siirretään yli 1 tavulla (8086: lle se oli 16 tavua).

    Heikosti segmentoituminen on se, että se on monimutkaista (mutta luulen, että tiedät jo sen;) Mikä on hyvä, on se, että voit käyttää joitakin älykkäitä tekniikoita modulaaristen ohjelmien luomiseen.

    Voit esimerkiksi ladata jonkin moduulin segmenttiin, ja sitten teeskennellä, että segmentti on pienempi kuin se on (vain tarpeeksi pieni, jotta moduuli pidetään), ja valitse sitten ensimmäinen segmentti, joka ei ole päällekkäinen kyseisen pseudo-pienemmän kanssa ja lataa seuraava moduuli, ja niin edelleen. Pohjimmiltaan tämä on sivut, joiden koko on vaihteleva.


    Onko jotain lisättävää selitykseen? Ääni pois kommenteista. Haluatko lukea lisää vastauksia muilta tech-savvy Stack Exchange -käyttäjiltä? Tutustu koko keskusteluketjuun täällä.