Urcite si spominate na rozdiel medzi HW a Neumannovou architekturou. Pamat v Neumannovej architekture bola spolocna a unifikovana pre data aj instrukcie. To zabranilo sucasnemu pristupu k datam a instrukciam. Na duhej strane, manipulacia s programami bola trosku jednoduchsia a bolo mozne pisat sedamodifikujuce programy.
Na obrazku je znazornena hierarchia pamati od najrychlejsej po najpomalsiu a najmensej po najvatsiu (zlava doprava). My sa budeme venovat organizacii pamate, teda, ako je mozne ze tam niekde uchovavame data.
Pamat je rozdelena na bunky, ktore budeme nazyvat pamatove miesta. Tymto miestam su priradene adresy, na ktore zapisujeme. Kolko toho do pamatoveho priestoru dokazeme ulozit zalezi na velkosti pamate a aj na sposobe, akym oragnizujeme data.
- 1 bit
- 1 slabika == 1 byte == 8 bitov
- 1 slovo = 2x slabika = 2 byty == 16bitov
Bacha na "slovo" a "slabiku", pretoze tato terminologia sa moze lisit, co do velkosti. Najmensia adresovatelna jednotka v pamati je byte alebo slabika. Toto je dnes standardom v univerzalnych pocitacoch. V Harwardskej arch. to je instrukcne slovo.
Kazda bunka ma nejaku kapacitu a teda pojme len nejake mnozstvo dat.Ale, co mame robit, ak chceme zapisat viac dat, ako je jedna pamatova bunka? Mame vlastne dva pristupy, ako vyriesit takuto zapeklitost
- Big Endian
Big bit goes first. Na nizsiu adresu sa ulozi najvyznamnejsi byte slova (MSB). Vezmeme to teda zprava - Little Endian
Little bit goes first. Na nizsiu adresu sa ulozi najmenej vyznamny byte slova (LSB). Vezmeme to zlava :)
Big a Little Endian su teda pojmy, ktore oznacuju sequenciu ulozenia dat v pamati. Takyto sposob ulozenia sa pouziva aj v pripade instrukcii (pretoze aj to su data!). Problemy, ktore v pripade instrukcii riesime su, napr. ako adresovat dlhe operandy v slabikovo organizovanej pamati.
Napriklad zapis hodnoty 1234ABCD. Jedna sa double word, teda 2 slova. Prve slovo tvoria slabiky 12 a 34, druhe slovo tvoria slabiky AB a CD. Nasa pamat ale pojme maximalne jednu slabiku na jednu bunku.
1. sposob naznacuje zapis pomocou Big Endian.
2. sposob naznacuje zapis pomocou Little Endian.
Vsetky informacie v pamati su ulozene v binarnom kode. Su to teda cisla. Text je samozrejme tiez ulozeny ako binarne cislo, ale zakodovany napr. pomocou ASCII (7bit/znak) alebo Extended ASCII (8bit/znak). Dalsim problemom je, ako uchovat zapornu/kladnu hodnotu cisel. K tomu pouzivame bud
- priamy kod
- doplnkovy kod
- aditivny kod
a samozrejme, este mame cisla s pohyblivou radovou ciarkou (floating point) a to je zase story sama o sebe.
Ked data ulozime do pamate, tak vravime, ze su zarovnane, ak su ulozene na adrese, ktora je delitelna ich velkostou. To znamena, ze napriklad v 32b procesore, su 4B zarovnane, ak je adresa delitelna 4-ma. 2B su zarovnane, ak je adresa delitelna 2-ma a 1B je zarovnany vzdy.
Otazka je, ze ci sa vlastne mame vobec obtazovat so zarovnavanim dat. Ak by sme data nezarovnavali, tak setrime pamat, pretoze element moze byt na akejkolveke adrese, ale nezarovnane data vyzaduju viac pristupu do pamate na realizaciu citania/zapisu.
V 32b CPU, teda s 32b pamatou, je pamat adresovana bitmi AB(31:2). Bity BE(3:0) su signalmi pre zapis dat kratsich ako 32b.
Data citame pomocou multiplexorou, ktore umoznuju citat 1B alebo zarovnane 2B. Na obrazku je naznacene rozhranie, pre citanie len zarovnanych dat. Vsetky pristupy vyzaduju len jedno citanie.
Vsimnite si registrov IBUF pri citani nezarovnanych dat. Pristup k nezarovnanym datam vyzaduje 2 citacie cykly. Multiplexory implementuju uplnu permutacnu siet.
V architekture x86 HW plne podporuje nezarovnane data. Prekladace data zarovnavaju aj napriek tomu (vacsinou) z dovodu rychlosti. RISC architektury nezarovanene data nepodporuju a pristup k takto usporadanym datam nedie na vynimku.
Ked data ulozime do pamate, tak vravime, ze su zarovnane, ak su ulozene na adrese, ktora je delitelna ich velkostou. To znamena, ze napriklad v 32b procesore, su 4B zarovnane, ak je adresa delitelna 4-ma. 2B su zarovnane, ak je adresa delitelna 2-ma a 1B je zarovnany vzdy.
Otazka je, ze ci sa vlastne mame vobec obtazovat so zarovnavanim dat. Ak by sme data nezarovnavali, tak setrime pamat, pretoze element moze byt na akejkolveke adrese, ale nezarovnane data vyzaduju viac pristupu do pamate na realizaciu citania/zapisu.
V 32b CPU, teda s 32b pamatou, je pamat adresovana bitmi AB(31:2). Bity BE(3:0) su signalmi pre zapis dat kratsich ako 32b.
Data citame pomocou multiplexorou, ktore umoznuju citat 1B alebo zarovnane 2B. Na obrazku je naznacene rozhranie, pre citanie len zarovnanych dat. Vsetky pristupy vyzaduju len jedno citanie.
Vsimnite si registrov IBUF pri citani nezarovnanych dat. Pristup k nezarovnanym datam vyzaduje 2 citacie cykly. Multiplexory implementuju uplnu permutacnu siet.
V architekture x86 HW plne podporuje nezarovnane data. Prekladace data zarovnavaju aj napriek tomu (vacsinou) z dovodu rychlosti. RISC architektury nezarovanene data nepodporuju a pristup k takto usporadanym datam nedie na vynimku.