Kuinka monta muistiosoitetta tietokoneeni RAM-muistiin mahtuu?

Jun 18, 2025
Laitteisto

Joskus on hauskaa tarkastella laskentakokemuksen pintatasoa, ja muina päivinä on hauskaa kaivaa suoraan sisäiseen toimintaan. Tänään tarkastelemme tietokoneen muistin rakennetta ja kuinka paljon tavaroita voit pakata RAM-muistitikulle.

Tämän päivän Kysymys- ja vastausistunto tulee meille SuperUser-yhteisöstään, joka on Stack Exchangen osasto.

Kysymys

SuperUser-lukija Johan Smohan kamppailee siitä, kuinka prosessorin tyyppi ja muistikoko toimivat yhdessä saadakseen kokonaismäärän osoitteita. Hän kirjoittaa:

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

Luulen, että se on jotain tällaista:

1 Gt RAM-muistia jaettuna joko 32 bitillä 4 bitillä (?), Jotta saadaan muistiosoitteiden määrä?

Luin Wikipediasta, että yksi 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ä tai 8 oktettia. Mutta en tiedä ymmärsinkö sen oikein.

Nämä ovat sellaisia ​​kysymyksiä, jotka pitävät utelias nörtti yöllä. Kuinka monta osoitetta on käytettävissä Johanin hypoteettisissa järjestelmissä?

Vastaus

SuperUser-avustaja Gronostaj tarjoaa jonkin verran tietoa RAM-muistin jakamisesta ja käytöstä:

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

  • Muistin koko tavuina
  • Suurin allekirjoittamaton kokonaisluku, joka voidaan tallentaa CPU: n konesanaan

Pitkä vastaus ja selitys yllä olevasta:

Muisti koostuu tavuista (B). Jokainen tavu koostuu 8 bitistä (b).

1 B = 8 b

1 Gt RAM-muistia on itse asiassa 1 Gt (gigatavua, ei gigatavua). Ero on:

1 Gt = 10 ^ 9 B = 10000000000 B
1 GiB = 2 ^ 30 B = 1037417824 B

Jokaisella muistitavulla on oma osoite riippumatta siitä, kuinka suuri CPU-konesana on. Esimerkiksi. Intel 8086 -prosessori oli 16-bittinen ja se osoitti muistia tavuilla, niin tekevät myös modernit 32- ja 64-bittiset suorittimet. Tämä on syy ensimmäiseen rajoitukseen - et voi olla enemmän osoitteita kuin muistitavu.

Muistiosoite on vain useita tavuja, jotka suorittimen on ohitettava muistin alusta päästäkseen etsimäänsä.

  • Ensimmäisen tavun käyttämiseksi sen on ohitettava 0 tavua, joten ensimmäisen tavun osoite on 0.
  • Toisen tavun käyttämiseksi sen on ohitettava yksi tavu, joten sen osoite on 1.
  • (ja niin edelleen…)
  • Viimeisen tavun käyttämiseksi CPU ohittaa 1073741823 tavua, joten sen osoite on 1073741823.

Nyt sinun on tiedettävä, mitä 32-bittinen todella tarkoittaa. Kuten aiemmin mainitsin, se on konesan kokoinen.

Konesana on muistin määrä, jonka keskusyksikkö käyttää numeroiden pitämiseen (RAM-muistissa, välimuistissa tai sisäisissä rekistereissä). 32-bittinen CPU käyttää 32 bittiä (4 tavua) numeroiden pitämiseen. Myös muistiosoitteet ovat numeroita, joten 32-bittisessä prosessorissa muistiosoite koostuu 32 bitistä.

Ajattele nyt: jos sinulla on yksi bitti, voit tallentaa siihen kaksi arvoa: 0 tai 1. Lisää yksi bitti lisää ja sinulla on neljä arvoa: 0, 1, 2, 3. Kolmella bitillä voit tallentaa kahdeksan arvoa : 0, 1, 2… 6, 7. Tämä on itse asiassa binaarijärjestelmä ja se toimii näin:

Binaarinen desimaali
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 täsmälleen kuten tavallinen lisäys, mutta suurin numero on 1, ei 9. Desimaali 0 on 0000 , sitten lisäät 1 ja saat 0001 , lisää yksi vielä kerran ja sinulla on 0010 . Mitä täällä tapahtui, on kuin desimaalin saaminen 09 ja lisäämällä yksi: muutat 9 arvoksi 0 ja lisäät seuraavaa numeroa.

Yllä olevasta esimerkistä näet, että aina on maksimiarvo, jonka voit pitää lukumäärässä vakiona bittimäärä - koska kun kaikki bitit ovat 1 ja yrität kasvattaa arvoa yhdellä, kaikista bitteistä tulee 0, mikä rikkoo määrä. Sitä kutsutaan kokonaisluvun ylivuodoksi ja aiheuttaa monia epämiellyttäviä ongelmia sekä käyttäjille että kehittäjille.

11111111 = 255
+ 1
-----------
  100000000 = 0 (9 bittiä täällä, joten yksi 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, missä N on bittien lukumäärä. Kuten sanoin aiemmin, muistiosoite on luku ja sillä on myös suurin arvo. Siksi konesanan koko on myös raja käytettävissä olevien muistiosoitteiden määrälle - joskus suorittimesi ei vain pysty käsittelemään tarpeeksi suuria numeroita osoittaakseen enemmän muistia.

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

32-bittisen keskusyksikön RAM-raja on teoreettisesti 4 Gt (2 ^ 32) ja 64-bittisen suorittimen 16 EB (eksatavua, 1 EB = 2 ^ 30 Gt). Toisin sanoen 64-bittinen CPU voisi käsitellä koko Internetiä… 200 kertaa;) (arvioitu WolframAlpha ).

Tosielämän käyttöjärjestelmissä 32-bittiset suorittimet voivat kuitenkin kohdistaa 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 GB barrier on Wikipedia . Voit nostaa tätä rajaa Fyysisen osoitteen laajennus .

Puhuessani muistin osoittamisesta, on mainittava muutama asia: virtuaalimuisti , segmentointi ja henkilöhaku .

Virtuaalimuisti

Kuten @Daniel R Hicks huomautti toisessa vastauksessa, käyttöjärjestelmät käyttävät virtuaalimuistia. Se tarkoittaa, että sovellukset eivät todellakaan toimi todellisilla, mutta käyttöjärjestelmän tarjoamilla muistiosoitteilla.

Tämän tekniikan avulla käyttöjärjestelmä voi siirtää tietoja RAM-muistista ns. Pagefile (Windows) tai Swap (* NIX). Kiintolevy on muutama suuruus hitaampi kuin RAM, mutta se ei ole vakava ongelma harvoin käytetyille tiedoille, ja se antaa käyttöjärjestelmän tarjota sovelluksille enemmän RAM-muistia kuin olet itse asentanut.

Henkilöhaku

Sitä mitä puhumme toistaiseksi, kutsutaan tasaiseksi osoitetuksi järjestelmäksi.

Sivutus on vaihtoehtoinen osoitemalli, jonka avulla voidaan kohdistaa enemmän muistia kuin tavallisesti yhdellä konesanalla tasaisessa mallissa.

Kuvittele kirja, joka on täynnä 4 kirjainta. Oletetaan, että jokaisella sivulla on 1024 numeroa. Numeron osoittamiseksi sinun on tiedettävä kaksi asiaa:

  • Sivun numero, jolle kyseinen sana tulostetaan.
  • Mikä kyseisellä sivulla oleva sana on etsimäsi.

Nyt modernit x86-suorittimet käsittelevät tarkasti muistia. Se on jaettu 4 KiB-sivuun (kussakin 1024 konesanaa), ja näillä sivuilla on numeroita. (itse asiassa sivut voivat olla myös 4 MiB isoja tai 2 MiB kanssa PAE ). Kun haluat osoittaa muistisolun, tarvitset sivunumeron ja osoitteen. Huomaa, että jokaiseen muistisoluun viitataan tarkalleen yhdellä numeroparilla, mikä ei ole segmentoitumisen tapaus.

Segmentointi

No, tämä on melko samanlainen kuin henkilöhaku. Sitä käytettiin Intel 8086: ssa, vain yhden esimerkin mainitsemiseksi. Osoiteryhmiä kutsutaan nyt muistisegmenteiksi, ei sivuiksi. Ero on siinä, että segmentit voivat olla päällekkäisiä, ja ne ovat päällekkäisiä. Esimerkiksi 8086: lla useimmat muistisolut olivat käytettävissä 4096 eri segmentistä.

Esimerkki:

Oletetaan, että meillä on 8 tavua muistia, joilla kaikilla on nollia lukuun ottamatta 4. tavua, joka on yhtä suuri kuin 255.

Kuva litteän muistin mallista:

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

Kuva sivutetulle muistille 4 tavun sivuilla:

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

Kuva segmentoidulle muistille 4-tavuiset segmentit siirretty 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 | _____ 7.SEG
                 ----- | 0 | | 0 | | 0 | | 0 | _____
                         ----- | 0 | | 0 | | 0 | | 0 |
                                 ----- ----- ----- -----

Kuten näette, neljään tavuun voidaan osoittaa neljä tapaa: (osoite 0: sta)

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

Se on aina sama muistisolu.

Todellisessa toteutuksessa segmenttejä siirretään enemmän kuin 1 tavu (8086: lle se oli 16 tavua).

Segmentoinnissa on huono, että se on monimutkaista (mutta luulen, että tiedät sen jo;) Mikä on hyvä, on se, että voit käyttää joitain fiksuja tekniikoita modulaaristen ohjelmien luomiseen.

Voit esimerkiksi ladata osan moduulista segmenttiin, sitten teeskennellä, että segmentti on pienempi kuin se todellisuudessa on (vain tarpeeksi pieni moduulin pitämiseen), valitse sitten ensimmäinen segmentti, joka ei ole päällekkäinen kyseisen näennäis-pienemmän kanssa, ja lataa seuraava moduuli ja niin edelleen. Pohjimmiltaan, mitä saat tällä tavalla, ovat erikokoisia sivuja.


Onko sinulla jotain lisättävää selitykseen? Ääni pois kommenteista. Haluatko lukea lisää vastauksia muilta teknisesti taitavilta Stack Exchangen käyttäjiltä? Katso koko keskusteluketju täältä .

.entry-sisältö .entry-alatunniste

How Many Memory Addresses Can We Get With A 32-bit Processor And 1gb Ram? (5 Solutions!!)

Memory Addresses, Computer Science Lecture | Sabaq.pk |

Q. 7.8: (a) How Many 32K * 8 RAM Chips Are Needed To Provide A Memory Capacity Of 256Kbytes? (b) How

How Computer Memory Works - Kanawat Senanan

Assembly Program - Obtaining Memory Addresses

What Is Virtual Memory? – Gary Explains

The Fetch-Execute Cycle: What's Your Computer Actually Doing?

256KB Memory Design Using 64KB Ram Blocks-Microprocessors Example

How Much RAM Do You ACTUALLY Need? (2020)

Registers And RAM: Crash Course Computer Science #6

Lesson 9.3 : Pointers Containing Memory Addresses Of Multi Byte Variables


Laitteisto - Suosituimmat artikkelit

Halvimmat tapat suoratoistaa baseballia (vaikka sinulla ei olisi kaapelia)

Laitteisto Mar 12, 2025

SÄHKÖISETTÖTÖN SISÄLTÖ Se, että olet päässyt eroon kaapelista, ei tarkoita, että sinun ei tarvitse mennä ilman baseballia koko kauden. Tässä on joitain tapoja, joilla..


Mikä on Adobe Lightroom, ja tarvitsenko sitä?

Laitteisto Jan 17, 2025

Adobe Photoshop Lightroom hämmentää monia uusia valokuvaajia. Sen nimessä on Photoshop, mutta se ei ole Photoshop? Mikä antaa? Lightroom on todella tärkeä ohjelmisto..


Kuinka päivittää Kindle manuaalisesti

Laitteisto Jul 14, 2025

Jos haluat viimeisimmät Kindle-ominaisuudet juuri tässä sekunnissa (tai menetit aikaisemman päivityksen), paras tapa saada välitön päivitys Kindle-laitteellesi on tehdä se m..


Pitäisikö minun irrottaa Chromecastini verkkovirrasta, kun en käytä sitä?

Laitteisto Sep 29, 2025

Uudet laitteet tuovat esiin uusia kysymyksiä, ja Chromecastin (ja muiden suoratoistettavien HDMI-tikkujen) nousu on usealla ihmisellä utelias, jos heidän pitäisi irrottaa virtaj..


Mikä on höyrykone tarkalleen, ja haluanko sellaisen?

Laitteisto Sep 22, 2025

Steam Machines, joka tunnetaan myös nimellä Steamboxes, on Valven yritys tuoda PC-pelaamista olohuoneeseen. Tavallaan he kilpailevat pelikonsoleiden kanssa, kuten Xbox One, PlaySt..


HDR-muotoiset sodat: Mikä on ero HDR10: n ja Dolby Visionin välillä?

Laitteisto Jun 20, 2025

SÄHKÖISETTÖTÖN SISÄLTÖ Valmistaudu toiseen muotosotaan! Seuraava iso asia televisiossa on HDR. Mutta "HDR" ei ole vain yksi yksinkertainen ominaisuus - on olemassa kaksi eri..


Voinko käyttää kahta DDR3-muistityyppiä samalla emolevyllä?

Laitteisto May 28, 2025

Mahdollisuus päivittää tietokoneesi laitteisto on aina hyvä asia, mutta voisitko käyttää kahden tyyppistä DDR3-muistia samalla emolevyllä, jos sinulla on rajalliset resurss..


Pitäisikö minun säätää äänenvoimakkuutta ohjelmiston tai laitteiston mukaan optimaalisen äänen saamiseksi?

Laitteisto Dec 4, 2024

Voit säätää kaiuttimesi äänenvoimakkuutta sovelluksessa, käyttöjärjestelmän laajuisesti tai kaiuttimen asetusten fyysisten säätimien avulla. Mikä menetelmä on paras optimaal..


Luokat