# Zkouška 30.1.

<{ForumPost(poster="Šeby", timestamp=2008-01-30 14:21:41)}>
Jenom kopíruji e-mail od účastníka této zkoušky (doufám, že nebude vadit), aby se tady informace objevily co nejdřív:  

 > Hej Borci, takze sem byl na zkousce z PPOS a muzu rict ze to je jeste horsi nez se zda :-D. Ale da se to naucit, kouknete hlavne na metodu CLOCK a pak doporucuju nastudovat cache a pipeline a pak se to da dat v poho.   
 > Test vypada tak ze ma 2 casti ta prvni sou 4 otazky za kazdou je bod jakmile nemate 3 body vubec vam nebude opravovat tu druhou textovou cast.  
 > Ta prvni je na zaskrtavani spravny odpovedi.  
 > Druha je textova tam uz musite neco napsat. napisu vam moje zadani cca necekejte nic presnyho :-).  
 > 1) nakreslit strukturu cache a popsat princip cinosti.  
 > 2) datovy hazard pri pouziti pipeline  
 > 3) prenos bloku. pouziti HW (co kde kam kdy jak proc)  
 > 4) bylo tam schema a mel se napsat miniprogram. nezoufejte ten tam mit nemusite ale hlavni je znat metodu ADDPR.

<{/ForumPost}>

<{ForumPost(poster="Anonymous", timestamp=2008-01-30 14:23:21)}>
Dneska je 30 ;-)
<{/ForumPost}>

<{ForumPost(poster="Šeby", timestamp=2008-01-30 14:24:17)}>
Jj, taky už jsem si to uvědomil.
<{/ForumPost}>

<{ForumPost(poster="hippies", timestamp=2008-01-30 15:04:49)}>
opraveno
<{/ForumPost}>

<{ForumPost(poster="Jan Kokoška", timestamp=2008-01-30 15:13:44)}>
A jaké byly dnes otázky v první části? A dotaz k druhé části: Jak nakreslit strukturu cache?
<{/ForumPost}>

<{ForumPost(poster="DH", timestamp=2008-01-30 15:14:13)}>
hele, kolik melo vyjit tech PF u toho CLOCKu? a nevysvetlil by tu nekdo jak se to resi? dik
<{/ForumPost}>

<{ForumPost(poster="karls", timestamp=2008-01-30 15:20:44)}>
jo a co je to metoda ADDPR?
<{/ForumPost}>

<{ForumPost(poster="JiriD", timestamp=2008-01-30 15:24:14)}>

 > DH wrote:hele, kolik melo vyjit tech PF u toho CLOCKu? a nevysvetlil by tu nekdo jak se to resi? dik

Je to tu vysvetlene. [Zk 29.1.](http://forum.matfyz.info/viewtopic.php?f=337&p=19810#p19810)
<{/ForumPost}>

<{ForumPost(poster="Šeby", timestamp=2008-01-30 15:26:56)}>

 > Jan Kokoška wrote:A jaké byly dnes otázky v první části? A dotaz k druhé části: Jak nakreslit strukturu cache?

Řekl bych, že ta cache mělo být něco takového jako je v prezentaci od Buleje číslo 11(paměť) na snímcích 32 - 34.
<{/ForumPost}>

<{ForumPost(poster="Him", timestamp=2008-01-30 16:41:27)}>
ten mikrokod mel vypadat takto: (doufam)  

    Fetch:
    T0: PC_out, MAR_in
    T1: read
    T2: MDR_out, IR_in
    Decode:
    T3: decode opcode in IR
    Execute:
    T4: IR_out, MDR_in
    T5: PC_out, aluadd
    T6: Temp_out, MAR_in
    T7: read
    T8: ACC_out, aluadd
    T9: Temp_out, ACC_in, pcincr, reset to T0

kdyztak me nekdo opravte :)
<{/ForumPost}>

<{ForumPost(poster="Šeby", timestamp=2008-01-30 17:13:11)}>

 > Him wrote:ten mikrokod mel vypadat takto: (doufam)  
 > kdyztak me nekdo opravte :)

Pokud ta zkratka instrukce měla znamenat něco jako ADD (current) position relative, tak bych s tím souhlasil.
<{/ForumPost}>

<{ForumPost(poster="Anoxym", timestamp=2008-01-30 17:15:09)}>

 > Him wrote:ten mikrokod mel vypadat takto: (doufam)  
 >   
 > Fetch:  
 > T0: PC_out, MAR_in  
 > T1: read  
 > T2: MDR_out, IR_in  
 > Decode:  
 > T3: decode opcode in IR  
 > Execute:  
 > T4: IR_out, MDR_in  
 > T5: PC_out, aluadd  
 > T6: Temp_out, MAR_in  
 > T7: read  
 > T8: ACC_out, aluadd  
 > T9: Temp_out, ACC_in, pcincr, reset to T0  
 >   
 > kdyztak me nekdo opravte :)

Hele nejsem si moc jistej tim koncem...mužeš prosim napsat, co si pochopil pod tou inmstrukcí ADDPR .. je Google odolná  :|   
  
Já si myslim, že to znamená přičíst k PC adresu uloženou v tý instrukci.. z týhle složený adresy pak načíst data (např do akomulátoru)...  
  
co vy na to....
<{/ForumPost}>

<{ForumPost(poster="Him", timestamp=2008-01-30 17:26:18)}>
nu, pochopil jsem, ze: ADDPR adresa je instrukce add s tim, ze adresa, kterou dostanes jako operand je relativni vzhledem k program counteru  
  
vygooglit jsi ji nemohl, protoze Bulej naznacil, ze si tu instrukci vymyslel (myslim tim, jak je zadany operand)
<{/ForumPost}>

<{ForumPost(poster="MarketkaK", timestamp=2008-01-30 18:01:17)}>
Muze mi nekdo prosim znovu vysvetlit ten CLOCK, stale to nechapu ikdyz jsem se divala jak je to vysvetlovane u zkousky z 29.1. Muze mi to nekdo vysvetlit jeste jednou a pomalu, krok po kroku?  
Díky
<{/ForumPost}>

<{ForumPost(poster="Donarus", timestamp=2008-01-30 18:51:57)}>
CLOCK: clock = stránky jsou drženy v kruhovém spojovém seznamu, každá stránka si drží stejný bit R jako při metodě NRU (R = referenced). Kruhový seznam se cyklicky obchází. Má-li aktuální položka bit R roven 0, tak se zamění. Je-li R = 1, tak se vynuluje a pokračuje se další položkou. (zkopirovano z CVUT wiki)  
  
  
vysvetleni:    algoritmus prochazi spojovy seznam ... dejme tomu ze ten spojovy seznam stranek ma 5 polozek ... takze jsi na zacatku (tohle ber relativne je to spojak a je to kruznice (hint = proc se to asi jmenuje clock)) takze chci-li neco do pameti neco zapsat tak potrebuju najit nejake misto kam to zapsat a na poslouzi ten algoritmus  
  
1) chci teda neco zapsat a vstoupim do pameti najit nejaky usek(stranku) kam cilova data mohu zapsat  
2) jsem v pameti a postupne ji prochazim  
3) narazim li na usek oznaceny R=1, pak tento index zmenim na R=0 a postoupim k nasledujicimu useku (spojeneho ukazatelem)  
4) opakuju 3) dokud nenarazim na usek oznaceny R=0 ... pokud na takovy usek narazim, tak ho smazu a nahradim tim, co chci zapsat a nastavim R=1  
..  
..  
..  
vyhoda teto metody spociva oproti tusim NRU v tom, ze u NRU musime v nejhorsim pripade projit celou pamet dvakrat a tady nam staci jedno projiti ... (proc? protoze je na zacatku napriklad vsech pet useku typu R=1, pak to vypada nasledovne  
"1"..1..1..1..1..     (je to kruznice, jen ji z pismenek neumim nakreslit .. :))  
ted teda chci neco zapsat, ale narazil jsem na jednicku,tak ji nastavim na nulu a postoupim o prvek dal (uvozovky ukazuji na kterem prvku se nachazim)  
0.."1"..1..1..1..   a zase ...  
0..0.."1"..1..1..  
0..0..0.."1"..1..  
0..0..0..0.."1".. - mno a protoze je to kruznice tak pri dalsim kroku se ocitnu opet na "zacatku" jenze pokud se nam do teto doby nepodarilo najit vhodne misto pro zapsani, tak na zacatku uz jsme logicky museli byt a tudiz tam muzeme zapsat (uz jsme tam nastavili R=0) - tedy staci nam na projiti jediny cyklus... :)  
  
aspon tak to chapu ja .. ale tohle bylo jen pro zapis .... ted si jen nejsem stopro jistej jak je to s algoritmem pro cteni ale tusim ze je to takto (90 procent)  
  
CTENI:  
1) pokud ctu z pameti z nejake pozice a ta ma hodnotu R=0, tak ji nastavim na R=1  
2) pokud ctu z pameti z nejake pozice a ta ma hodnotu R=1, tak hodnotu nemenim, tedy zustane R=1  
  
===================  
tak ted to nekdo budto potvrdte nebo vyvrate .. tohle je moje teorie pochopeni, treba to pomuze treba ne   
PS: znovu podotykam neni to formalni definice - takze nektera ma vyjadreni mohou byt nepresna ale doufam ze snad ne zavadejici
<{/ForumPost}>

<{ForumPost(poster="QZuzka", timestamp=2008-01-31 00:17:31)}>
Tak to mě Bulej namích.. až do teď, jsem měla dojem, že každá pro zkoušku relevantní instrukce je T0 - T7 (nebo T6), nikde jsem neviděla víc.. a celkem 8 kroků, mocnina dvojky mi připadala "že bude to pravé"..  
a pak jsem se to tam snažila do 8 kroků nacpat a připadalo mi divný, že to nejde...   
  
jinak úvodní loterií abcd jsem prošla.. a pak mi neuznal ani pitomý 4 body...
<{/ForumPost}>

<{ForumPost(poster="Lord_TNT001", timestamp=2008-01-31 10:46:52)}>

 > Him wrote:ten mikrokod mel vypadat takto: (doufam)  
 > 
 > 
 > 
 > 
 > 
 >     Fetch:
 >     T0: PC_out, MAR_in
 >     T1: read
 >     T2: MDR_out, IR_in
 >     Decode:
 >     T3: decode opcode in IR
 >     Execute:
 >     T4: IR_out, MDR_in
 >     T5: PC_out, aluadd
 >     T6: Temp_out, MAR_in
 >     T7: read
 >     T8: ACC_out, aluadd
 >     T9: Temp_out, ACC_in, pcincr, reset to T0
 > 
 > 
 > 
 > 
 > kdyztak me nekdo opravte :)

co je při tomhle "T8: ACC_out, aluadd" kroku v ACC?
<{/ForumPost}>

<{ForumPost(poster="Him", timestamp=2008-01-31 10:51:45)}>
V ACC je od zacatku cislo, ktery mas secist s tim cislem, ktere je zadane pomoci adresy (relativni vuci PC) v instrukci
<{/ForumPost}>

<{ForumPost(poster="Ellrohir", timestamp=2008-02-11 12:44:52)}>

 > Him wrote:ten mikrokod mel vypadat takto: (doufam)  
 >   
 > Fetch:  
 > T0: PC_out, MAR_in  
 > T1: read  
 > T2: MDR_out, IR_in  
 > Decode:  
 > T3: decode opcode in IR  
 > Execute:  
 > T4: IR_out, MDR_in  
 > T5: PC_out, aluadd  
 > T6: Temp_out, MAR_in  
 > T7: read  
 > T8: ACC_out, aluadd  
 > T9: Temp_out, ACC_in, pcincr, reset to T0  
 >   
 > kdyztak me nekdo opravte :)

mohl by mi někdo zkusit pls vysvětlit, co se přesně děje v těch posledních dvou krocích? moc tomu mikrokódu furt nerozumím a po T7 sem se trochu ztratil  :(
<{/ForumPost}>

<{ForumPost(poster="Him", timestamp=2008-02-11 12:53:52)}>
Fetch:  
T0: PC_out, MAR_in  
T1: read  
T2: MDR_out, IR_in   >> davam instrukci do IR  
Decode:  
T3: decode opcode in IR  
Execute:  
T4: IR_out, MDR_in  >> davam operand instrukce do MDR_in (ten operand je relativni adresa vuci program counteru; plati, ze cislo, ktere mam secist s tim, co je celou dobu v akumulatoru je dano: memory\[program_counter+relativni adresa v instrukci]), do MDR_in se dava cislo, ktere chci secist s tim, co je na sbernici (tak funguje aluadd)  
T5: PC_out, aluadd   >> do Temp_out dostanu adresu, kde v pameti je cislo, ktere mam secist s tim, co je v akumulatoru  
T6: Temp_out, MAR_in  
T7: read  
T8: ACC_out, aluadd  
T9: Temp_out, ACC_in, pcincr, reset to T0  
  
Je to jasnejsi?
<{/ForumPost}>

<{ForumPost(poster="Ellrohir", timestamp=2008-02-11 13:12:56)}>
á-ha, už sem to asi pochopil...mě totiž zmátlo to, že v T6 něco vyleze z TEMPu a ty to hodíš do Memory Address Registru a pak se v T7 přečte z paměti (a přečte se to, na co ukazuje hodnota v MAR jestli to správně chápu), ale pak mi nebylo jasný, že se už nikde neobjeví žádný MDR_out nebo tak něco, takže mi přišlo, že ta načtená hodnota do MDR (pokud dobře chápu read) se nikde neuplatní...ovšem teď když koukám na schéma znovu, tak mi došlo, že se to nikde objevit nemusí, protože to z MDR jde hned přímo do ALU a neleze to nikam na sběrnici...  
  
o to mi šlo, potom už to je vcelku jasný  :)
<{/ForumPost}>

