View Single Post
Staro 11.05.2004., 12:54   #2
borgy
kenova
 
borgy's Avatar
 
Datum registracije: Sep 2003
Lokacija: München / Dubrovnik
Postovi: 919
Kako radna memorija radi?

Sad kada je taj dio iza nas, idemo vidjeti na koji nacin DRAM uopce obavlja svoj posao. Uzimamo proizvedeni modul i prikopcavamo ga u memorijski slot na maticnoj ploci. Time on postaje fizicki spojen sa vodovima na njoj, i ako bi pratili vod koji izlazi iz jednog memorijskog cipa na modulu, put bi bio sljedeci: Cip -> Modul -> Memorijski slot -> Vodovi koji idu do do memorijskog kontrolera na ploci -> Vodovi od kontrolera do North Bridge-a -> vodovi od NB-a do procesora. North Bridge je cip na maticnoj ploci, ne zanima nas za sto sluzi, vazno je samo da vodovi prolaze kroz njega. Na AMD Athlon 64 procesorima put je nesto drukciji, ali to nas nece smetati.
Put izmedju NB-a i modula naziva se Memory Bus - Memorijska sabirnica.
Zamislimo da je sada racunalo upaljeno, i svi vodovi iznenada ozive - signali putuju na sve strane. Na svakoj maticnoj ploci nalazi se element, kristal, koji generira odredjeni broj impulsa u sekundi. Recimo da generira 200 000 000 impulsa u sekundi. Tada je system clock jednak 200Mhz. U racunalu se svaka komponenta ravna po system clocku te svoj rad mora prilagoditi toj brzini od 200Mhz kako bi mogla komunicirati sa ostalim komponentama. Tako npr. procesor radi na 3Ghz, ali sa ostalim komponentama ne moze komunicirati brze od frekvencije koju mu dopusta memorijska sabirnica. Moze se reci da su sve komponente sinkronizirane sa system clock-om i koriste ga za svoj rad. DRAM memorija sinkronizirana sa system clockom naziva se SDRAM (Synchronous DRAM). To je vrsta memorije koja je uredjena tako da koristi system clock u svom radu, te se izmedju dva njegova "otkucaja" u modulu ne dogadja nista.
Procesor komunicira sa memorijom putem koji je vec opisan. Recimo da je upravo primio instrukciju koja mu govori da na odredjenom podatku iz memorije mora obaviti odredjenu operaciju.
Prvo, procesor mora postati tzv. bus master memorijske sabirnice. Buduci da je ona zapravo jednosmjerni kanal (kanal kojim se u jednom trenu komunikacija moze obavljati samo u jednom smjeru), mozda memorija bas u tom trenu nesto govori procesoru i zauzima sabirnicu. On zeli preuzeti kontrolu i poceti nesto govoriti memoriji - konkretno zeli joj reci "posalji mi podatak na lokaciji X". Dobija kontrolu sabirnice i na nju postavlja LOAD naredbu. Ona putuje do memorijskog kontrolera, koji odlucuje kojem modulu ce se naredba proslijediti.

Sada "mala" digresija. Procesor ocekuje da ce se nakon odredjenog vremena na memorijskoj sabirnici pojaviti trazeni podatak. Ali, kada procesor zatrazi odredjeni podatak, on ne zeli da mu se vrati samo tocno ta vrijednost koju je trazio - on zeli i odredjeni broj podataka iza te vrijednosti, jer je velika sansa da ce one biti one koje ce mu uskoro trebati. Recimo da je procesor upravo zabavljen sviranjem nekog mp3 (ogg?) sadrzaja. Ako zatrazi podatak (dio audio sadrzaja) u memoriji na broju 902, zar ne bi bilo bolje da mu memorija odmah posalje i sljedece podatke, jer ce ionako uskoro trebati obraditi njih? Zato procesor kada zatrazi podatak, zeli napuniti cijelu liniju u svojoj cache memoriji. Dakle, vazna cinjenica: Kada procesor zatrazi podatak od memorije, zeli da mu memorija posalje dovoljno podataka da napuni cijelu liniju u svojoj internoj memoriji (mjestu gdje drzi stvari s kojima trenutno radi). Konkretno, ta linija se spremi u L1 i L2 cache memoriju. O velicini linije ovisi koliko podataka ce mem. kontroler poslati procesoru. Ako je cache line velik 64 bita (kao kod Athlon XP procesora), onda ce procesor i dobiti 64 bita. ALI, veliki faktor ogranicenja je propusnost memorijske sabirnice. Sto ako u jednom taktu (jednom otkucaju system clocka) kroz sabirnicu moze proci samo 16 bitova? Onda ce procesor morati cekati duze da napuni cijeli cache line. A ako procesor ne moze vrijeme potrositi zabavljajuci se nekim drugim aktivnostima, onda ce jednostavno - cekati. I ne raditi nista. Dakle, zelimo da nam sabirnica ima sto vecu propusnost. Idemo sada vidjeti na koji nacin ce jedan memorijski modul vulgaris ispuniti tu zelju za 64 bita podataka.
Sjecate se kada smo rekli da je u memorijskom cipu jedna velika matrica u koju pohranjujemo podatke? E pa nije Zapravo je ta matrica podijeljena na puno manjih, jednake velicine. Svaka mala matrica ima svoju posebnu logiku za odredjivanje reda i stupca, pisanje/citanje podataka, itd. Uvedimo i pojam memory banka. To je skup tih malih matrica koji zajedno moze napuniti memorijsku sabirnicu sa onoliko podataka koliki je cache line. Svaki SDRAM memorijski cip ima maksimalno 16 podatkovnih vodova. To znaci da u jednom taktu (otkucaju system clocka) na memorijsku sabirnicu moze staviti 16 bitova. Znaci, cetiri SDRAM cipa mogu napuniti sabirnicu od 64 bita u jednom taktu (svaki doprinosi sa svojih 16 bitova po taktu). Zato ce se jedan bank na sistemu koji zahtijeva 64 bita po cache line-u rasprostirati po cetiri memorijska cipa. Znaci, po jedna mala matrica u ta cetiri cipa pripada memory banku. Bankova moze biti jako puno, ali svaki od njih moze u trenu napuniti sabirnicu sa 64 bita. Ako se pojavi procesor koji zahtijeva 128 bitni cache line i spojimo ga 128 bitnom memorijskom sabirnicom, onda ce se svaki bank morati prostirati na svih 8 cipova, da bi mogao isporuciti tih 128 bitova u jednom taktu (16*8=128).

Ako smo to usvojili, mozemo nastaviti sa nasim zahtjevom memorije od strane procesora, koji smo poceli opisivati. Dakle, on je stigao do mem. kontrolera. On aktivira odredjeni memory bank, gdje se trazeni podatak nalazi. To se radi na sljedeci nacin: Svi SDRAM cipovi sadrzavaju CS (Chip select) vod. Preko njega kontroler porucuje cipovima da se naredbe koje salje odnose na njih. Oni takodjer sadrze i BA (bank) vodove, preko kojih porucujemo cipovima da se naredbe odnose na odredjeni bank kojeg oni sadrze. Dakle, aktiviramo potrebne CS i BA vodove. Svaki SDRAM cip ima i WE (Write enable) vod, kojim cipu govorimo da se podaci citaju, a ne pisu. Cipovi sadrzavaju i DQM vod kojim im govorimo da podatke stave na mem. sabirnicu, odnosno da prestanu sa outputom, ali on nam nije bitan za raspravu. WE nije aktiviran, jer zelimo procitati podatak. Memorijski kontroler pretvara adresu koju je dobio od procesora u kombinaciju red*stupac. Na adresni vod prvo stavlja red. Zatim aktivira RAS pin na cipovima. Aktivirani RAS pin daje im do znanja da je na adresnoj sabirnici adresa reda kojeg treba aktivirati. Svaka mala matrica ima skup elemenata koji se nazivaju "dekoderi reda". Oni dekodiraju adresu koja je na adresnoj sabirnici i aktiviraju trazeni red u matrici. Nazalost, oni to ne rade trenutacno, nego tek nakon odredjenog vremena aktivnosti RAS-a (jer mu treba odredjeno vrijeme da se stabilizira). Ta latencija je prva koju susrecemo i naziva se tRAC - "Row Access time". Predstavlja vrijeme koje prodje od aktivacije RAS pina do trena kada memorija aktivira trazeni red.
borgy je offline   Reply With Quote