Kolik adres paměti může paměť RAM v počítači držet?
Někdy je zábavné podívat se na povrchovou úroveň výpočetní zkušenosti a další dny je zábavné se ponořit 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í zasedání Otázky a odpovědi nás přichází s laskavým svolením SuperUser - podřízené rozdělení Stack Exchange, které je založeno na komunitě prostřednictvím skupin webových stránek.
Otázka
Snímač SuperUser Johan Smohan se zabývá tím, jak typ procesoru a velikost paměti spolupracují, aby se získal celkový počet adres. Napsal:
Kolik paměťových adres získáme s 32bitovým procesorem a 1GB pamětí a kolik je s 64bitovým procesorem?
Myslím, že je to něco takového:
1 GB ram se dělí buď 32 bitů 4 bitům (?), Aby se dostal počet adres paměti?
Na Wikipedii jsem četl, ž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 má šířku 64 bitů nebo 8 oktetů. Ale nevím, jestli jsem to správně pochopil.
To jsou druhy otázek, které mohou v noci udržet zvědavý hajzl. Kolik adres je k dispozici v rámci každého Johanova hypotetického systému?
Odpověď
Příspěvek SuperUser Gronostaj nabízí nějaký pohled na to, jak je RAM rozdělena a využívána:
Stručná odpověď: Počet dostupných adres se rovná počtu dostupných adres:
- Velikost paměti v bajtech
- Největší celé znaménko bez znaménka, které lze uložit v slově stroje CPU
Dlouhá odpověď a vysvětlení výše:
Paměť se skládá z bajtů (B). Každý bajt se skládá z 8 bitů (b).
1 B = 8 b
1 GB paměti RAM je ve skutečnosti 1 GiB (gibibyte, nikoli 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, jak velké je slovo stroje CPU. Např. Intel 8086 CPU byl 16bitový a byl zaměřen na paměť bajtů, takže moderní 32bitové a 64bitové CPU. To je příčina první hranice - nemáte více adres než paměťové bajty.
Paměťová adresa je jen několik bajtů, které CPU musí vynechat od začátku paměti, aby se dostal k jednomu, který hledá.
- Pro přístup k prvnímu bytu musí přeskočit 0 bajtů, tak 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 k poslednímu bytu 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é procesor 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ů.
Nyní přemýšlejte o tom: pokud máte jeden bit, můžete na něj uložit dvě hodnoty: 0 nebo 1. Přidejte ještě jeden bit a máte čtyři hodnoty: 0, 1, 2, 3. Na třech bitích můžete uložit osm hodnot : 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 11 1011 12 1100 13 1101 14 1110 15 1111
Funguje přesně jako obvykle, ale maximální číslice je 1, nikoliv 9. Desítková je 0
0000
, pak přidáte 1 a dostanete0001
, přidat jeden znovu a máte0010
. Co se stalo, je to, jako kdybychom měli desetinnou čárku09
a přidáte jeden: změníte 9 na 0 a zvýšíte další číslici.Z výše uvedeného příkladu lze vidět, že v čísle s konstantním počtem bitů je stále vždy maximální hodnota - 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 poruší čí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 bity - 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 počítače 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íce paměti.
Takže na 32 bitů můžete mít čí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 pro 64bitový 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. Je to kvůli vnitřní architektuře 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ěť, segmentace 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.
Stránkování
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 se obrátit na číslo, musíte vědět dvě věci:
- Počet stránek, na kterých je toto slovo vytištěno.
- Které slovo na té stránce je ta, kterou hledáte.
Tak 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. (ve skutečnosti mohou být také 4 MiB velké nebo 2 MiB s PAE). Chcete-li se obrátit na paměťovou buňku, 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žíván v technologii Intel 8086, jen proto, abychom jmenovali jeden příklad. Skupiny adres jsou nyní nazývány segmenty paměti, nikoli stránky. Rozdíl je, že segmenty se mohou překrývat a hodně se překrývají. Například na 8086 byly většina paměťových buněk k dispozici ze 4096 různých segmentů.
Příklad:
Řekněme, že máme 8 bajtů paměti, přičemž všechny mají nuly, s výjimkou čtvrtého bytu, který se rovná 255.
Ilustrace pro model s plochou pamětí:
_____ | 0 | |. | 0 | |. | 0 | |. | 255 | |. | 0 | |. | 0 | |. | 0 | |. | 0 | -----
Ilustrace pro stránkovanou paměť se čtyřbajtovými stránkami:
PAGE0 _____ | 0 | |. | 0 | |. | 0 | PAGE1 | 255 | _____ ----- | 0 | |. | 0 | |. | 0 | |. | 0 | -----
Ilustrace segmentované paměti se segmenty 4 bajtů se posunuly 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, čtvrtý byte lze řešit č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 to vždy stejná paměťová buňka.
V reálných implementacích 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ž víte, že;) Co je dobré, je, že můžete použít nějaké chytré techniky pro vytváření modulárních programů.
Můžete například načíst nějaký modul do segmentu a 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ěte další modul a podobně. V podstatě to, co získáte tímto způsobem, jsou stránky s různou 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.