vnitřní paměť procesoru - registry, registrové, zásobníky, fronty, tabulky, …
hlavní pamět (RAM) včetně rychlých vyrovnávacích pamětí
vnější paměti (disky) včetně vyrovnávacích pamětí
snažíme se mít co nejlepší parametr výkon/cena
chceme vykonat co nejvíce instrukcí za časovou jednotku
potřebujeme paměti, které udrží informace i po vypnutí počítače
procesor je rychlý → potřebujeme mít paměť, která mu dodá rychle data
chceme, aby paměť byla levná
je složité docílit všech podmínek najednou → vzniká více druhů pamětí, kde každý druh má nějaká specifika (výhody/nevýhody) → jednotlivé paměti nám pak tvoří hierarchii
Zkoumáním se zjistily tyto poznatky
časová lokalita
pokud procesor používá nějakou položku často, je vhodné ji mít uchovanou co nejblíže procesoru
proměnná i v cyklu for ⇒ budeme ji často používat
prostorová lokalita
položky, které jsou uloženy v paměti blízko zmiňované položky budou s vysokou pravděpodobností také často používány
procházíme položky v poli ⇒ používáme i sousední položky
Základní pojmy
stálost obsahu
volatilní - potřebuje k uchování informací napájecí napětí
nevolatilní - nepotřebuje k uchování informací napájecí napětí
destruktivní - po cyklu čtení se data vymažou - je třeba udělat cyklus zpětného zápisu
doba uchování informace
SRAM - statická - uchová si informace dlouho při dodržení jistých parametrů
DRAM - dynamická - rychle informace zapomene - třeba udělat refresh
rychlost
přístupová doba - doba od zahájení čtení po získání obashu paměťového místa
doba cyklu - doba od zahájění čtení/zápisu do skončení operace, kdy je možno spustit další operaci
přenosová rychlost - data/čas
kapacita - N x n bitů (16K x 1bit)
reprezentuje strukturu paměti
64 K x 1 B
šířka datové sběrnice ⇒ 1 Byte
máme 64 K položek, kde každá položka má 1 Byte šířku
výkonnost - souhrn kapacity, přístupové doby a rychlosti
chybovost - např. počet chyb/1000 hodin
poruchovost
střední doba mezi poruchami
např flashku s velkou kapacitou nelze vyrobit tak, aby všechny položky byly bezchybové ⇒ je tam více bloků, než je kapacita a poté co se otestují, tak se zapojí ty, co fungují (levnější)
přístup k datům
s libovolným přístupem - přístupová doba nezávisí na umístění položky, (RAM - random access memory)
se sériovým přístupem - závisí na umístění (přisunutí čtecí hlavy), (SAM - serial access memory)
se smíšeným přístupem - několik (RAM) záznamových povrchů (SAM)
výběr z paměti
adresový
adresový prostor je uspořádaný a souvislý
koncept RAM ⇒ adresový dekodér → 10b adresa → 2^10 vodičů z adresového dekodéru do datové části
asociativní
není tak častá
vyhledáváme podle obsahu (klíčů) (ve všech řádcích musí být komparátor adres - klíčů)
např. vyhledáváme podle příjmení lidí (nemusí být podle abecedy)
paměť v daný čas porovná (neg(XOR)) paralelně se všemi klíči každý bit (zabírá hodně místa na chipu - N * n XOR členů)
pamět dobře umí za krátkou dobu najít data podle dané informace (např. z interentu proudí data ⇒ vyextrahujeme určité části a porovnáváme, jestli nesou charakteristiku viru) ⇒ softwarově by se to řešilo složitým algoritmem a bylo by to pomalé
Další téma, které se zabývá pamětmi naleznete zde. Konkrétně se jedná o správu pamětí.
Jednotlivé typy pamětí
ROM
Read Only Memory
jako příklad je uvedený typ ROM 16 x 4b
máme 16 adres ⇒ pro adresování jsou třeba 4 vodiče (2^4)
dekodér vybere podle adresy právě jeden řádek (položka o velikosti 4 bity) ⇒ do datového registru se uloží dané aktivní 4 bity
paměť tedy tvoří matici 16 x 4
požívá unipolární MOS tranzistory (funguje jako rezistor - odpor) ⇒ tranzistor zabere menší místo na chipu ⇒ gate je připojeno na nějaké napětí (adresový vodič)
při zápisu se přepálí spojení mezi adresovým vodičem a gate u těch položek, kde má být log 1
při čtení se na daný adresový vodič přijde log 1 ⇒ tranzistor se otevře ⇒ uzemní se ⇒ přečte se log 0 (pokud je přepálený vodič, přečte se 1)
RWM
Read/Write Memory
podobná základní struktura jako u ROM
máme navíc i zápisové zesilovače
konkrétní paměťová buňka
pomocí bipolárních paměťových členů - SRAM
struktura, který umí držet log 1 nebo log 0 (dva stabilní stavy ⇒ bistabilní)
acces time - ta - říká nám, za jak dlouho můžeme vyzvednout data na datové sběrnici ⇒ nesmíme do paměti posílat data moc rychle
address setup time - čas, za jaký bude adresa na sběrnici stabilizovaná ⇒ až pak můžeme dát Write Enable (WE)
data setup time - čas, po který musí být dostupná platná data, aby se stihlo zapsat
data hold time - po zrušení čtení musí být data ještě nějakou dobu platná
address hold time - čas po ukončení zípisu, kdy musí být ještě dostupná adresa
tyto časy jsou uvedeny v katalogu ke konkrétní součástce a musíme je zásadně dodržovat (nesmíme posílat data příliš často)
Adresování dvou a více pamětí
musíme zajistit, aby se v daném okamžiku používala pouze jedna paměť
v počítači máme různé druhy pamětí (RWM/ROM)
všechny paměti musí být připojeny na datovou sběrnici
každá paměť musí mít připojeny příslušné řídící signály (v závislosti na typu)
všechny paměti musí být připojeny k adresovému dekodéru, který bude určovat, která paměť bude aktivní v daném čase (vytvoří nám adresový prostor)
pokud budeme mít např 16 bitové adresy, např:
nejvyšší tři bity použijeme pro adresový dekodér ⇒ určí nám paměť (bank ⇒ v tomto případě jich může být 8)
ostatní bity se použijí pro zvolenou paměť ⇒ pro adresování v ní
DRAM
levnější než SRAM ⇒ na jednotku plochy lze realizovat více paměťových buněk
technologie zavedena v 70. letech
realizace hlavní paměti počítače - RAM
princip
informace není uložena jako 0 nebo 1 v klopném obvodu, ale ve formě náboje na kondenzátoru ⇒ vyčtení informace z kondezátoru je zajištěno jedním tranzistorem ⇒ pokud je nabitý - log 1
data se dají vyčíst z určité doby, jelikož kondenzátor se vybíjí ⇒ zajímá nás hodnota kondenzátoru nad určitou úroveň napětí (1/2) ⇒ zajistíme rozdílovým zesilovačem (detekuje rozdíl mezi tím, co je na kondenzátoru a 1/2U)
poté, co se informace vyčte, je znova nahrána do kondenzátoru (nabijeme ho) ⇒ data se musí pravidelně obnovovat ⇒ vždy dřív, než klesne pod 1/2
opět maticová struktura - např 16K x 1bit ⇒ potřebuji 14 vodičů (2^16 = 16348)
oproti SRAM adresa se dává nadvakrát (adresujeme řádek a sloupec - multiplexní adresování ⇒ na průniku je zmiňovaný prvek ⇒ kondenzátor)
pokud bychom chteli mít N x 2bity ⇒ museli bychom mít celou matici 2x, atd… (více níže)
čtecí zesilovač
v každém sloupci jeden
obsahuje zmiňovaný rozdílový zesilovače ⇒ s referenčním kondenzátorem, který se nabíjí na 1/2U porovnává hodnotu napětí na kondenzátoru čtené buňky
z paměťové buňky umí vyčíst informaci, rozhodnout, jestli bude log 0 nebo log 1 a následně provést zápis (obnovit položku ⇒ zajistit refresh)
ne vždy je potřeba číst ⇒ musíme mít řízení obnovy dat ⇒ zajišťuje to řadič obnovy dat
rozložená obnova - RNNNNNNRN…. - refreshuju postupně po částech
v obou případech musí být načasováno tak, aby se refresh provedl všude
spomaluje nám to výpočet ⇒ musíme naplánovat co nejefektivněj
ve video paměti se čte všechno ⇒ obnoví se samo
je vidět, že čtení už není tak jednoduché jak u SRAM
bloková struktura
adresa bloku - zhora prvních n bitů (např. 3)
opět máme adresový dekodér (1 z n) ⇒ 8 bloků ⇒ 16K (14 vodičů)x 8bit (8 bloků)
v daném bloku můžeme mít více pamětí ⇒ to, kterou paměť vybereme, určujeme adresou RAS
adresa sloupce - zhora druhých n bitů (např. 7) - CAS
adresa řádku - zhora posledních n bitů (např. 7) - RAS
x x x | x x x x x x x | x x x x x x x
rozdělování do bloků (16 x 1M x 1b) je mnohem rychlejší než základní struktura bez bloků (16M x 1b) ⇒ nastavím RAS a CAS a pouze pak přepínám bloky, což stojí menší režii, jak kdybych musel znova nastavovat RAS a CAS ⇒ prokládání paměťových operací
myšlenka je taková, že prioriou je vytáhnout co nejvíce dat na dané adrese a přitom neměnit RAS a CAS
BEDO - obsahuje interní čítač ⇒ adresu řekneme jednou a paměť si už pak inkremetuje ⇒ procesor pak dostane např 4x víc dat ⇒ natáhne si blok
synchronní DRAM - zavedl se dávkový režim BURST - paměti se posílají kódy a sama se už stará o určení přesné adresy ⇒ můžeme přečíst různý počet položek, který stanovíme a zašleme příkazem do paměti
DDR SDRAM - náběžná i sestupná hrana (2x zrychlení)
DDR2, DDR3 - zvyšuje se frekvence (2x)
Flash
nevolatilní paměť
od roku 1980
vylepšení paměti EEPROM ⇒ pouze jeden tranzistor na uchování jednoho bitu místo dvou (někdy i méně)
vysoká kapacita
když do paměti chceme něco zapsat, tak ji musíme nejdřív smazat (nahrají se všude jedničky) a tam, kde chceme zapisovat se pak nahrají nuly (lze mazat pouze po blocích)
dva typy:
NOR
podobné jako RAM (adresové a datové vodiče)
používá se jako náhrada PROM, EEPROM
NAND
nemá specializované adresové vodiče
ovládá se pomocí příkazů
lze realizovat extrémně velké kapacity na malé ploše
používá se unipolární tranzistor s plovoucím hradlem
NAND a NOR Flash nesouvisí s NAND a NOR u polovodičů. Název je odvozen pouze od podobné struktury
Hierarchie
problém neúměrného růstu rychlosti procesoru oproti růstu rychlosti DRAM
rychlost procesorů se zvyšuje cca 2x za 1,5 roku ⇒ Moorův zákon („složitost součástek se každý rok zdvojnásobí při zachování stejné ceny.“ )
doba přístupu u DRAM se zkrátí na polovinu zhruba za 10 let
DRAM tedy nelze připojit přímo k procesoru ⇒ procesor by musel stále čekat na data ⇒ mezi procesor a hlavní paměť se staví paměť cache - RVP = rychlá vyrovnávací paměť
Cache
rychlá vyrovnávací paměť umístěná mezi procesorem a hlavní pamětí ⇒ vyrovnává velký rozdíl rychlostí těchto dvou komponent
může být více RVP ⇒ L1, L2, …
rychlost SRAM roste rychleji jak u DRAM ⇒ proto se u pamětí cache používají SRAM ⇒ kapacita ovšem u nich roste znatelně pomaleji, jak u DRAM, proto mají cache mnohem menší kapacitu jak hlavní paměti ⇒ problém rychlost/kapacita == cena
procesor tedy pracuje pouze s RVP, až když nenajde, hledá se dál v hierarchii
problém koherence ⇒ pokud se něco změní blízko procesoru, je třeba to pak pozměňovat i dál v hierarchii
přímý zápis ⇒ po změně okamžitě zapisuji do bloku v paměti (trvá dlouho)
zápis s mezipamětí ⇒ kapacita až deset opravných zápisů (také se moc nepoužívá)
zpětný zápis vždy ⇒ když přemazávám, vždy nahraji zpět původní ⇒ nepraktické (bloky pro čtení)
zpětný zápis podle příznaku změny ⇒ když přemazávám, kouknu na příznak změny (dirty bit/flag) a podle toho rozhodnu (používá se)
problém velikosti bloku
příliš malý ⇒ je jich tam hodně
příliš velký ⇒ často se musí vyměňovat (narůstá pravděpodobnost výpadku)
je rozdělena do bloků stanovené velikosti ⇒ ideálně velikost, kterou můžeme z DRAM načíst jedním načtením (v jedné dávce ⇒ zvýší rychlost)
základní parametr je pravděpodobnost úspěchu (hit rate) ⇒ v praxi 95-99% ⇒ 95-99% instrukcí se najde v paměti cache, ve zbytku (neúspěch - miss rate / miss penalty) je třeba hledat dál v hierarchii
existují programy, pro které bude hit rate vysoký a programy, pro který bude hit rate nízký ⇒ záleží tedy na programátorovi, jak efektivně program napíše
aby nedocházelo ke strukturním konfliktům, máme:
datovou cache
instrukční cache
RVP s přímým mapováním
v tomto případě nemůžou být v paměti cache položky, které jsou od sebe v hlavní paměti vzdáleny o 8 bitů
vyřeší se stupněm asociativity cache (asociativita 2 ⇒ můžu mít dvě položky, které končí stejně ⇒ dvoucestná cache)
aby byla plně asociativní, potřeboval bych osmicestnou cache
informace uložené v RVP:
data
adresový příznak - tag - aby se rozpoznalo, jaká data jsou v RVP (pokud procesor žádá data na adrese 10110, tak tag je 10)
příznak platnosti - zda jsou data platná
příklad
máme cache o velikosti 1024 položek
máme paměť 32 bit kde každá položka má 4 Byty (berme, že se budou chtít adresovat jednotlivé Byty)
máme 32-bit adresování
Jakou kapacitu je třeba vyhradit pro paměť cache?
na adresování v položce budeme potřebovat 2 bity, protože položka má 4 Byty (pro každý Byte)
na adresování v RVP budeme potřebovat 10 bitů (adresujeme 1024 položek)
zbylých 20 bitů bude vymezeno pro tag
paměť tedy bude muset mít 20 bitů pro tag mít 20 bitů pro tag
⇒ 1024 položek * (20 + 32 + 1 bit platnosti)
práce procesoru, když hledá data:
vezme 10 bitů a naadresuje se příslušná položka
porovná 20 bit tag s horními 20 bity adresy
pokud OK, zkontroluje se bit platnosti, zda je nastaven na log 1
pokud je nastaven do log 1 ⇒ generuje se hit
pokud je nastaven na log 0 ⇒ musí se nahrát do paměti nový blok a starý blok se musí nahrát zpět, pokud byl měněn
celkový počet bloků o velikosti 32 bit je 230 ⇒ do RVP se vejde takových bloků 210 ⇒ dolní odhad pravděpodobnosti úspěchu je phit = 210/230 = 2-20 ⇒ díky lokalitě odkazů se v praxi dosahuje hodnot phit0,9 až 0,98
Vícecestné RVP
pokud máme plno ve všech čtyřech položkách a potřebujeme nahrát novou položku ⇒ musíme vybrat oběť
LRU - Last recently used
MFU - Most frequently used
FIFO - First IN First OUT
RAND - Random
⇒ je třeba přidat další HW ⇒ dá se optimalizovat, pokud budeme používat jeden specifický program
Virtuální paměť
podobná problematika ja u pamětí cache
dalo by se říci je to něco jako cache pro disk
proč chceme virtuální paměť?(otázka na státnice)
chceme udělat efektivní sdílení paměti M pro mnoho programů
odstranit omezení fyzikální velikosti paměti M
vychází z poznatku, že pouze malá část programů je současně aktivních
Toto bylo poslední téma, co si nikdo nechtěl označit, tak jsem zatím udělal takový přehled na úvod. Dále by chtělo ještě rozepsat do podrobna principy těch jednotlivých pamětí. Kdo chce, může to udělat. Ze slajdů si to moc nerisknu, spíš bych pak kouknul na záznam, protože si dobře pamatuju, že tam říkal mnohem víc informací a podrobně to popisoval…
george, 2011/03/02 16:36
Tak jsem to dodělal. Bylo toho fakt hodně, ale myslím, že cílem tématu je hlavně hierarchie a ty struktury pamětí už tolik podstatné nejsou. Každopádně, jak jsem koukal na záznamy, tak hodně zdůraznil Virtuální paměti. Prý se na to všichni s radostí ptají u státnic. To už dost zasahovalo do téma IOSu Ofeiga (Fyzická, logická adresa, stránkování, segmentace, TLB, …). Co jsem koukal, tak je to tam popsaný a i si to pamatuji, jak jsme to probírali…
test2001:67c:1220:809::93e5:90e, 2018/05/21 13:06
Least recently used*
temata/04-hierarchie_pameti/main.txt · Poslední úprava: 2012/01/26 14:25 autor: conyx
Diskuze
Toto bylo poslední téma, co si nikdo nechtěl označit, tak jsem zatím udělal takový přehled na úvod. Dále by chtělo ještě rozepsat do podrobna principy těch jednotlivých pamětí. Kdo chce, může to udělat. Ze slajdů si to moc nerisknu, spíš bych pak kouknul na záznam, protože si dobře pamatuju, že tam říkal mnohem víc informací a podrobně to popisoval…
Tak jsem to dodělal. Bylo toho fakt hodně, ale myslím, že cílem tématu je hlavně hierarchie a ty struktury pamětí už tolik podstatné nejsou. Každopádně, jak jsem koukal na záznamy, tak hodně zdůraznil Virtuální paměti. Prý se na to všichni s radostí ptají u státnic. To už dost zasahovalo do téma IOSu Ofeiga (Fyzická, logická adresa, stránkování, segmentace, TLB, …). Co jsem koukal, tak je to tam popsaný a i si to pamatuji, jak jsme to probírali…
Least recently used*