20Aug

Kolik adres paměti může paměť RAM v počítači držet?

click fraud protection

Někdy je zábavné podívat se na povrchovou úroveň výpočetního zážitku a v dalších dnech je zábavné se dostat přímo do vnitřních činností.Dnes se podíváme na strukturu paměti počítače a kolik věcí můžete zabalit do paměti RAM.

dnešní otázka &Odpověď na zasedání se k nám dostala s laskavým svolením SuperUser - podřízenou výměnou Stack Exchange, skupině webů Q & A založených na komunitě.

Otázka Otázka

Čtečka snímků SuperUser Johan Smohan se potýká s tím, jak typ procesoru a velikost paměti spolupracují, aby se získal celkový počet adres. Píše:

Kolik paměťových adres se můžeme dostat s 32bitovým procesorem a 1GB pamětí a kolik je s 64bitovým procesorem?

Myslím, že je to něco takového:

1GB ram obdržíte buď 32 bitů 4 bitů( ?) Pro získání počtu adres paměti?

jsem četl na Wikipedii, že 1 adresy paměti jsou 32 bity široké nebo 4 oktety( 1 oktet = 8 bitů), ve srovnání s 64 bitovým procesorem, kde 1 adresy paměti nebo 1 celé číslo je 64 bitů široké nebo 8 oktetů.Ale nevím, jestli to správně chápu.

instagram viewer

Jedná se o druhy otázek, které mohou v noci udržet zvědavý geek. Kolik adres je k dispozici v rámci každého Johanova hypotetického systému?

Asistent odpovědi

SuperUser Gronostaj nabízí nějaký pohled na to, jak je RAM rozdělena a využívána:

Krátká odpověď: Počet dostupných adres je stejný jako menší z nich:

  • Velikost paměti v bajtech
  • Největší nepodepsané celé číslo, které lze uložitve stroji CPU

Dlouhá odpověď a vysvětlení výše:

Paměť se skládá z bajtů( B).Každý byte se skládá z 8 bitů( b).

1 B = 8 b

1 GB paměti RAM je ve skutečnosti 1 GiB( gibibyte, ne gigabyte).Rozdíl je:

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

Každý bajt paměti má svou vlastní adresu, bez ohledu na to,.Např.Procesor Intel 8086 byl 16bitový a byl zaměřen na paměť bajtů, takže moderní 32bitové a 64bitové CPU.To je příčina prvního limitu - nemusíte mít více adres než paměťové bajty.

Paměťová adresa je jen několik bajtů, které procesor musí přeskočit od začátku paměti, aby se dostal na požadovaný.

  • Pro přístup k prvnímu bytu musí přeskočit 0 bajtů, takže adresa prvního bajtu je 0.
  • Pro přístup k druhému bytu musí přeskočit 1 bajt, takže jeho adresa je 1.
  • ( a tak dále. ..)
  • Pro přístup kposlední byte, CPU přeskočí 1073741823 bajtů, takže jeho adresa je 1073741823.

Nyní musíte vědět, co 32-bit skutečně znamená.Jak jsem již zmínil, je to velikost strojního slova.

Strojové slovo je množství paměti, které CPU používá k zadávání čísel( v paměti RAM, mezipaměti nebo interních registrech).32bitový procesor používá 32 bitů( 4 bajty) k držení čísel. Adresy paměti jsou také číslice, takže na 32bitovém procesoru je paměťová adresa 32 bitů.

Teď přemýšlejte o tom: pokud máte jeden bit, můžete na něm uložit dvě hodnoty: 0 nebo 1. Přidejte ještě jeden bit a máte čtyři hodnoty: 0, 1, 2, 3. U tří bitů můžete ušetřit osmHodnoty: 0, 1, 2. .. 6, 7. Toto je vlastně binární systém a funguje to takto:

Binární desetinný 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 10 1010 111011 12 1100 13 1101 14 1110 15 1111

Funguje přesně jako obvyklé sčítání, ale maximální číslice je 1, nikoliv 9. Desítková 0 je 0000, pak přidáte 1 a dostanete 0001, přidáte ještě jednou a máte 0010. Cohappend zde je jako mít s desetinnou 09 a přidáním jednoho: změníte 9 na 0 a zvyšujete další číslici.

Z výše uvedeného příkladu vidíte, že vždy existuje maximální hodnota, kterou můžete udržet v čísle s konstantním počtem bitů - protože když jsou všechny bity 1 a pokusíte se zvýšit hodnotu o 1, všechny bity se stanou 0, čímž se rozbíjíčíslo. Nazývá se celočíselný přetečení a způsobuje mnoho nepříjemných problémů jak pro uživatele, tak pro vývojáře.

11111111 = 255 + 1 ----------- 100000000 = 0( 9 bitů zde, takže 1 je oříznuto)
  • Pro 1 bit je největší hodnota 1,
  • 2 bity - 3,
  • 3 bity -7,
  • 4 bitů - 15

Největší možný počet je vždy 2 ^ N-1, kde N je počet bitů.Jak jsem již řekl, paměťová adresa je číslo a má také maximální hodnotu. Proto velikost stroje je také limit pro počet dostupných adres paměti - někdy CPU prostě nemůže zpracovávat čísla dostatečně velká pro adresování větší paměti.

Takže na 32 bitů můžete držet čísla od 0 do 2 ^ 32-1, a to je 4 294 967 295. Je to víc než největší adresa v 1 GB RAM, takže ve vašem konkrétním případě bude velikost paměti RAM omezujícím faktorem.

Limit RAM pro 32bitový CPU je teoreticky 4 GB( 2 ^ 32) a u 64bitového CPU je to 16 EB( exabytes, 1 EB = 2 ^ 30 GB).Jinými slovy, 64bitový procesor by se mohl zaměřit na celý internet. .. 200krát;)( odhaduje se WolframAlpha).

V operačních systémech v reálném životě však mohou 32bitové procesory řešit přibližně 3 GB paměti RAM.To je způsobeno interní architekturou operačního systému - některé adresy jsou vyhrazeny pro jiné účely. Více informací o této tzv. 3 GB bariéře naleznete na Wikipedii. Tento limit můžete zvětšit pomocí rozšíření o fyzickou adresu.

Když mluvíme o adresování paměti, je několik věcí, které bych měl zmínit: virtuální paměť a stránkování .

Virtuální paměť

Jak uvedl @Daniel R Hicks v jiné odpovědi, operační systémy používají virtuální paměť.Co to znamená, že aplikace skutečně nefungují na skutečných adresách paměti, ale ty, které poskytuje OS.

Tato technika umožňuje operačnímu systému přesunout data z paměti RAM na takzvaný soubor Pagefile( Windows) nebo Swap( * NIX).HDD je málo magnitudes pomalejší než RAM, ale není to vážný problém pro zřídka přístupná data a umožňuje OS poskytovat aplikacím více RAM, než jste skutečně nainstalovali.

Paging

To, o čem jsme dosud mluvili, se nazývá schéma plochého adresování.

Paging je alternativní schéma adresování, které umožňuje řešit více paměti, které byste normálně mohli s jedním slovem stroje v plochém modelu.

Představte si knihu plnou čtyřpísmenných slov.Řekněme, že na každé stránce je 1024 čísel. Chcete-li vypsat číslo, musíte znát dvě věci:

  • Počet stránek, na kterých je toto slovo vytištěno.
  • Které slovo na stránce je ta, kterou hledáte.

To je přesně to, jak moderní procesory x86 zpracovávají paměť.Je rozdělen na 4 KiB stránky( 1024 strojních slov) a tyto stránky mají čísla.(stránky mohou být také 4 MiB velké nebo 2 MiB s PAE).Chcete-li adresovat buňku paměti, potřebujete číslo stránky a adresu na této stránce. Všimněte si, že každá paměťová buňka je odkazována přesně jeden pár čísel, to nebude případ pro segmentaci.

Segmentace

No, toto je velmi podobné stránkování.Byl použit v technologii Intel 8086, jen aby mi dal příklad. Skupiny adres jsou nyní nazývány segmenty paměti, nikoli stránky. Rozdíl je, že se segmenty mohou překrývat a hodně se překrývají.Například na 8086 byly většiny paměťových buněk dostupné z 4096 různých segmentů.

Příklad:

Řekněme, že máme 8 bajtů paměti, všechny jsou nuly s výjimkou 4. bajtu, který se rovná 255.

Ilustrace pro model s plochou pamětí:

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

Ilustrace pro stránkovou paměť se 4 bajtovými stránkami:

PAGE0 _____ |0 ||0 ||0 |PAGE1 |255 |_____ ----- |0 ||0 ||0 ||0 |-----

Ilustrace segmentované paměti s segmenty 4 bajtů posunutými o 1:

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 |----- ----- ----- -----

Jak je vidět, 4. byt může být řešen čtyřmi způsoby:( adresování od 0)

  • Segment 0, offset 3
  • Segment 1,offset 2
  • Segment 2, offset 1
  • Segment 3, offset 0

Je vždy stejná paměťová buňka.

V implementacích v reálném životě jsou segmenty posunuty o více než 1 bajt( pro 8086 to bylo 16 bajtů).

Co je špatné v segmentaci, je to, že je to složité( ale myslím, že už to víte;) Co je dobré, je, že můžete použít některé chytré techniky pro vytváření modulárních programů.

Například můžete načíst nějaký modul do segmentu a pak předstírat, že segment je menší, než je skutečně( je dostatečně malý na to, aby držel modul), pak zvolte první segment, který se nepřesahuje s tímto pseudo-menším, a načtětedalší modul a tak dále. V podstatě to, co získáte tímto způsobem, jsou stránky s proměnnou velikostí.

Musíte něco přidat k vysvětlení?Vypadněte v komentářích. Chcete se dozvědět více odpovědí od ostatních uživatelů technologie Stack Exchange? Podívejte se na celý diskusní příspěvek zde.