Predslov
Prednedávnom tu bol článok, v ktorom sa písalo o vylepšenej ochrane Windows Vista (Bezpečnost nadovšetko). Perlili tam v diskusii mnohí, no človek s nickom "samael" sa podľa mňa prekonal (nič v zlom). Písal v diskusii vety o 64 bitových a 32 bitových programoch a pravdu povediac mal som pocit, že (aj ked si to on asi nemyslí) nevie o čom hovorí. Ked som sa o tom rozprával s niektorými ľudmi, tak som zistil, že nie som jediný, kto má tento pocit. Kedže tento portál by mal mať (podľa mňa) v prvom rade výchovný charakter a zasýtiť náš hlad po informáciách, rozhodol som sa napísať sériu článkov, aby dotyčný človek pochopil o čo ide na úrovni procesora. Chvíľu som váhal, pretože ak niekto napíše pojem dátová šírka programu je toľko a toľko bitov, tak bud nevie o čom hovor,í alebo sa veľmi veľmi pomýlil a preklepol a chcel to napísať úplne, ale úplne inak. No a ked napíšem článok, kde sa budem hned oháňať vecami ako instruction pointer, tak to ten človek asi nepochopí (možno). Lenže toto nie je portál len pre neho a preto verím, že to bude niečo prínosné pre všetkých.
---------------------------------------------------------------
EDIT + DODATOK:
Toto beriem späť (ako som bol upozornený tuším vidom a po overení si to tuna: http://en.wikipedia.org/wiki/X86-64), myslel som si že to je tak, že sú fyzicky 2 registre pre ten istý účel s rôznou šírkou, ale nie je to pravda, tie (general purpose) sú len 64bit. Takže toto beriem späť:
Pre toho človeka by som dodal len toľko, že ak si mysli, že má čisto 64 bitový procesor len preto, lebo má quadcore alebo niečo podobné od AMD a na tom napsíané veľkými písmenami 64, tak sa mýli. Tie procáky sú hybridné t.j. aj 32 bitové aj 64 bitové veci na nich, tak ako bola hybridná 386tka pri prechode z 16 bitov na 32! Posledný pokus Intelu o prechod na čisto 64 bit bol IA64 Ithanium, ktorý skončil na smetisku dejín.
---------------------------------------------------------------
V tomto článku (a pokračovaniach) nájdete:
- ako vyzerá IA32 (Intel Architecture 32)
- ako pracuje Control unit, Execution unit, načo sú registre a Flags
- v čom spočívajú vylepšenia Intelovských procesorov (SSE, MMX, SIMD, Hyperthreading...)
- aký je rozdiel medzi x86, x86_64 a plne 64 bitovým procesorom (načrtnuté v úvode)
Rád by som dodal ešte jednu vec. Všetko to čo sem napíšem je preložené z [1]. Je to môj preklad a snažil som sa ho urobiť nenásilne, tak aby to nebolo kostrbaté. Ci sa mi to podarilo alebo nie, môžete posúdiť sami. Všetkým vrelo doporučujem tú knihu si kúpiť. Podľa mňa je vynikajúca. Opisuje prakticky len procesory Intel a kompatibilné, kedže je to sú najrozšírenejšie typy procesorov pre platformu PC. Za prípadné chyby sa ospravedlňujem. Okrem malých dodatkov bokom som na obsahu nič nezmenil.
Literatúra:
[1] R. BLUM, Professional Assembly Language, ISBN: 0-7645-7901-0
Napriek tomu, že rôzne rodiny procesorov používajú navzájom rôzne inštrukčné sady a poskytujú rôzne možnosti, existuje základná časť, ktorú možno nájsť vo väčšine procesorov. Väčšinou možno počítač z teoretického hľadiska rozdeliť na štyri základné časti:
Procesor obsahuje hardware a kódy inštrukcií, ktoré kontrolujú a riadia prácu počítača.Je spojený s ostatnými časťami počítača (memory storage unit, input devices and output devices) použitím troch separátnych zberníc: kontrolnej, adresovej a dátovej.
Kontrolná zbernica sa používa na synchronizáciu úloh medzi procesorom a jednotlivými časťami systému. Dátová zbernica sa používa na presun dát medzi procesorom a ostatnými časťami. Príkladom tohoto by mohlo byť čítanie dát z miesta v pamäti. Procesor uloží adresu v pamäti, odkiaľ sa má čítať do adresovej zbernice a "memory storage unit" odpovie uložením hodnoty, ktorá sa nachádza na danom mieste v pamäti do dátovej zbernice pre procesor, aby si ju mohol vyzdvihnúť.
Procesor samotný pozostáva z mnohých častí. Hlavné časti procesora sú :
- Control unit
- Execution unit
- Registers
- Flags
Tie spolu komunikujú v procesore nasledovne
Nasledujúce časti opisujú každý komponent a ako sú implementované v platforme IA-32.
V srdci procesora je kontrolná jednotka. Jej hlavnou úlohou je kontrolovať čo sa deje vo vnutrí procesora v akomkoľvek čase. Kým procesor beží, inštrukcie musia byť získané z pamäte a nahrané do procesora, aby ich mohol spracovať. Kontrolná jednotka vykonáva štyri základné funkcie:
- Získanie inštrukcií z pamäte
- Dekódovanie inštrukcií pre danú operáciu
- Získanie dát z pamäte (podľa toho, či je to potrebné)
- Uložiť výsledky tak, ako je potrebné
Počítadlo inštrukcií (instruction counter) získa další kód inštrukcie z pamäte a pripraví ho na spracovanie. Dekóder inštrukcií (instruction decoder) sa používa na dekódovanie získaného inštrukčného kódu do mikro-operácie. Mikro-operácia je kód, ktorý kontroluje špecifické signály v čipe procesora tak, aby sa vykonala funkcionalita inštrukčného kódu (t.j. aby čip spravil to, na čo je inštrukcia určená - pozn. prekladateľa).
Ked je mikro-operácia pripravená, kontrolná jednotka ju presunie do execution unit (jednotka pre vykonávanie operácií) na spracovanie a vyzdvihne si výstup na uloženie do zodpovedajúceho pamäťového miesta.
Kontrolná jednotka je pravdepodobne najviac vyvíjaná časť procesora. Mnoho pokrokov v technológii mikroprocesorov spadá pod vývoj kontrolnej jednotky. Intel spravil mnoho vylepšení na zvýšenie rýchlosti operácií v tejto jednotke. Jedno z najviac cenených vylepšení je v spôsobe, v akom sú inštrukcie získané a spracovávane kontrolnou jednotkou.
V čase písania tejto knihy [1] posledný procesor od Intelu (Pentium 4) používa technológiu pre kontrolnú jednotku zvanú NetBurst. Technológia NetBurst zlučuje 4 rozdielne techniky na zlepšenie rýchlosti spracovania inštrukcií v kontrolnej jednotke. Tieto techniky sú:
- Instruction prefetch and decoding (predvýber inštrukcií a ich dekódovanie)
- Branch prediction (predpovedanie vetvenia/vetiev)
- Out-of-order execution
- Retiremnt ("odchod do dôchodku" - kedže som nevymyslel rozumný slovensky ekvivalent tak budem používat retirement)
Vzájomná kooperácia týchto jednotiek funguje nasledovne:
Staršie procesory v rodine IA-32 vyberali inštrukcie a dáta priamo zo systémovej pamäte tak, ako to bolo potrebné pre execution unit. Vzhľadom na to, že výber dát z pamäte zaberá podstatne viac času než spracovanie samotných dát, objavuje sa "backlog" - procesor stále čaká a nič iné nerobí, kým sa dáta a inštrukcie nezískajú z pamäte. Koncept predzískavania bol vyvinutý práve na riešenie tohoto problému.
Predzískavanie zahrnňuje pokus o získanie inštrukcií a/alebo dát pred tým, než sú naozaj potrebné pre execution unit. Na použitie predzískavania je potrebné v procesore vytvoriť úložný priestor. Taký, ktorý je ľahko dostupný procesorom a rýchlejší než normálny prístup do pamäte. Toto bolo vyriešené tzv. pipelineingom.
Pipelining zahrňuje vytvorenie pamäťovej cache v čipe procesora, z ktorej môžu byť získavané aj dáta aj inštrukcie a uložené podstatne skorej, než budú naozaj potrebné na spracovanie. Ked je execution unit pripravená na dalšiu inštrukciu, tá je už prístupná v cache a môže byť ľahko spracovaná. Toto demonštruje obrázok:
IA-32 implementuje pipelineing tak, že používa dve (alebo viac) vrstvy cache. Prvá vrstva (ktorá sa volá L1) sa pokúša predzískať aj inštrukcie aj dáta z pamäte tak, ako predpokladá, že ich bude procesor potrebovať. Ako sa inštrukčnéhý pointer (to je adresa v pamäti, ktorá ukazuje na nasledujúcu inštrukciu, ktorá má byť vykonaná - pozn. prekladateľa) posúva po pamäti, algoritmus predzískavania sa pokúša určiť, ktoré dátá môžu byť dalej potrebné a načítava ich do cache.
Samozrejme jeden z problémov získavania inštrukcií je, že nie je žiadna garancia, že bude program vykonávať inštrukcie za sebou. (pôvodná veta - Of course, one pitfall to caching instructions and data is that there is no guarantee that the program will execute instructions in a sequential order.) Ak má program logické vetvy (IF-THEN-ELSE, pozn. prekladatela), ktoré presúvaju inštrukčný pointer na úplne iné miesto v pamäti, tak je celý obsah cache zbytočný, musí byť zmazaný a znovu naplnený inštrukciami z nového miesta.
Na zmiernenie tohoto problému sa vytvorila druhá vrstva cache, nazvaná L2. Môže tak isto uchovávať dáta aj inštrukcie bez ohľadu na obsah L1. Ked program, kvôli logickému vetveniu skočí na iné miesto v pamäti, aby vykonával inštrukcie tam, tak L2 môže ešte stále uchovávať inštrukcie z pôvodnej adresy. Ked program spraví skok späť na pôvodnú pozíciu (z dôvodu vyhodnotenia logického stavu), dáta ostávaju nacacheované a môžu sa spracovať skoro tak rýchlo, ako inštrukcie uložené v L1. Programovými prostriedkami (mám namysli assembler - pozn. prekladateľa) nie je možné pracovať s obsahom L1 a L2. Minimalizovaním vetiev v programoch môžete zrýchliť vykonávanie inštrukcií vo vašom kóde.
Nuz. Pokial mi je znamo, pipelining instrukcii znamena nieco trocha ine, nez opisuje pan Blum. L1 cache existovali v x86 uz v ere procesorov 486, ktore snad este pipelining nevedeli.
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
Ak mas na mysli fakt ze sa na 1 takt vykonaju 2 instrukcie tak mas pravdu. Ak sa nemylim tak sa to v knihe vyhasni, ak nie dam dodatok.
major_kusanagi
/* no comment */
pipelining nie je prave o tom, ze sa 2 instrukcie vykonaju. skor ide o to, ze az tomu nebrani nejaka skutocnost, tak v case vykonavania jednej instrukcie sa uz dekoduje druha, pripadne sa este zapisuju vysledky tej predoslej.
to s tym vykonavanim dvoch instrukcii paralelne je hyperthreading... to je zas o niecom inom.
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
to s tym vykonavanim dvoch instrukcii paralelne je hyperthreading... to je zas o niecom inom.
Zase nie celkom, pokial viem pojmom hyperthreading sa oznacuje az trochu neskorsia technologia. To ze sa "vykonavaju dve instrukcie naraz" umoznoval uz uplne prvy pipeline na Pentiach, tym ze od dekoderu uz v skutocnosti isli dalej dve pipeliny (zvane "u" a "v" tusim). Jedna z nich vedela vsetko, ta druha len zakladne jednoduche instrukcie, takze aby sa to plne vyuzilo bolo treba podla toho radit instrukcie. Pojem hyperthreading myslim oznacuje az o dost mladsiu technologiu nez bolo toto.
jasne, ked sa bavime o intelackej superskalarnej technologii, tak pentia so zavedenim pipelines mali 2x ALU, takze aritmeticke operacie vedeli paralelizovat, ale to nie je principom, ani ulohou pipelines...
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
este k tym pametiam a sirkam ich zbernic:
DIMM SDRAM pamate uz boli 64bitove a DIMM DDRAM pamate su uz asi 128 bitove. U tych preto parovanie nie je treba. (paruje sa kvoli dual channel, ale to je trocha o niecom inom)...
...DIMM DDRAM su stale len 64bitove, rozdiel je len v casovani a frekvencii...do dual-ch. sa zapajaju uz len z dovodu znasobenia velkosti zbernice, t.j. dve rovnake napr. 1GB DDRAM XYZ + 1GB DDRAM XYZ = 128bitova datova priepustnost...pricom 1GB DDRAM XYZ + 512MB DDRAM ZYX = 64 bit pre cely par...
486 nemali pipelining, ten sa objavil az v pentium procesoroch.
Slovo dátová šírka je bežne použivané a možno ním popísať architektúru CPU. Pekné ,že si napísal článok ,ale skor by spom uvítal niečo iné. Mohol si napríklad konkretne napísať v čom sa mýlim (v tomto článku som nič konkretne nenašiel).Inak výrokom Pre toho človeka by som dodal len toľko, že ak si mysli, že má čisto 64 bitový procesor len preto lebo má quadcore alebo niečo podobné od AMD a na tom napísané veľkými písmenami 64, tak sa mýli. WTF asi by som ti mal napísať skutočný príspevok o CPU. Doma pracujem na Dual Core ale to neznanemá ,že je 64 bit. To si si naozaj myslel,že si myslím že viacjadrové procesory musia byť zákonite 64 bit?
Tiež poradím peknú a hlavne poučnú knihu - Juraj Štefanovič - Základy Operačných Systémov
Skor si mohol objasniť problematiku hyperthreadingu ,to je zaujímava téma. Hyperthreading je tu už nejakých tých pár rokov a mohol si písať o jeho nasadení do viacprocesorových CPU. Poznámka ventyla bola správna o L1 cache pri 486.Mal som tú čest s 286 , 386 a 486. A k mojemu odstavčeku bol venovaný len jednoduchému vysvetleniu 32/64 bit (tzv.po lopate). Pre istotu ešte raz viacprocesorový systém či CPU nemusí byť nutne 64 bit!(Trápna poznámka - Mimochodom dosky na osadenie viacerých dosiek si pamatám ,že boli ku kupe už pri AMD Duronoch). Mám ešte pár vecí - rozumieš tomu čo si písal ? Budú rozumieť tomu všetci usery ,nie len tí advanced?
Odpovedz si sám. (osobne sa snažím písať v takých rovinách ,aby tomu rozumel každý). Nemám nič proti tebe ,ale obhajujem si svoj česť , mimochodom možeme kludne pokecať na temu CPU ,aspon si hned overíme kto je lama :-).Pošli mi icq , mám na teba pár veci.
Only two things are infinite, the universe and human stupidity, and Im not sure about the former.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Albert Einstein
cica. potrebne zelezo pre SMP (teda viacjadrovy system) obsahovali uz procesory 8086 (t.j. prahistoricke realmode procesory s dosahom na 1MB pamate). len to vtedy prakticky nikto nepouzival, pretoze neexistoval nikto, kto by dokazal v tej dobe napisat operacny system fungujuci na SMP a ta platforma by s tesnym SMP tiez mala bohovske problemy po organizacnej stranke.
Inac, rozoberat tu taku neskutocne pokurvenu architekturu, akou x86 je a vyzdvihovat tu skoro paralelne odpalovanie dvoch instrukcii, ak napriklad posledne procesory G5 vedeli paralelne odpalit ~200 instrukcii (dufam, ze som sa s cislom nepomylil), je smiesne.
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
Tym "zelezom pre viacjadrovy system" myslis LOCK prefix, alebo aj nieco viac?
defakto, s autolockingom, lock prefixom, bez uchylnosti, ako su cache (nezdielana cache by v tom mohla narobit velky pruser) a nejakou dodatocnou dratovackou (namatkovo by bolo treba vyriesit, kam sa budu posielat prerusenia) by nejake ultraprimitivne SMP malo ist zlatat dohromady... bez MMU by to aj tak bolo hodne ohubu v takom niecom cokolvek robit.
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
Ano, bol tam rezervovany prefix a mozno jeden drat pren, a to je asi vsetko o com viem.
Chybalo to co si napisal: autolocking (ten na 8086 nebol, az od 386 ci ktorej), radic preruseni co by to podporovalo, a este si zabudol na nejaku komunikaciu medzi procakmi - IPI. Neviem ci by nebolo treba riesit nejako zvlast aj I/O, a ci by vtedajsia zbernica zvladla nejaku synchronizaciu pristupov. Takze vlastne mam pocit ze chybalo skoro vsetko, aj ked v tejto oblasti sa moc neorientujem zatial (ale uz coskoro to prijde, ach-jaj)
LOCK prefix zamykal mam pocit, ze adresnu zbernicu. vzhladom k tomu, ze adresna zbernica sa pouziva ako pre memory, tak pre I/O, lock prefixom (nie autolockingom) vies zmanazovat aj pristup k I/O, aj ked je mozne, ze LOCK prefix pred I/O operaciou nie je povoleny (skor by som povedal, ze je to dost pravdepodobne).
s I/O, ak by sa podarilo vyriesit zdielanie zbernice by nemal byt tak tazky problem, kedze drviva vacsina zariadeni na zberniciach fachala skrze prerusenia, cize by si zdielanie zbernice pri komunikacii riesil len smerom von. Povedzme nejakym hardwareovym mutexom, alebo niecim takym (tam by vznikali prekrasne deadlocky, jak sa nad tym teraz tak zamyslim).
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
Preco sa snazis za kazdu cenu prejst na temu ktora sa riesi niekde inde a mna osobne uz ma rozculuje?
Mam z teba pocit ze si takto riesis komplexy a potom sa niekde chvalit, ze som bol tam a tam a riesil to a to, ego si chod mastit inde, toto tu nemusime trpiet. Tvoj predchadzajuci prispevok by mal zmysel kedby v nom boli len prve 3 riadky ostatne su len zvasty ...
Ja mám komplexy z detstva a masírujem si ego ? :-) a čo ta kačička v tvojom obrázku ?
Prečítaj si pls ked teraz dokoncim moj článok a ohodnoť ho potom objektívne.Posud sam ci mám komplexy.tot vše
Only two things are infinite, the universe and human stupidity, and Im not sure about the former.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Albert Einstein
preco mi odpovedas na otazku otazkou? a btw kacicka tam je lebo sa mi paci. cakam na clanok;)
Považoval som za potrebné to napísať .a dohnodnuté s článkom :-)
Only two things are infinite, the universe and human stupidity, and Im not sure about the former.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Albert Einstein
mne neda sa ta neopytat, kolko to mas rokov ? kde pracujes ? alebo co studujes ? Pytam sa to preto, lebo ma udivuje, ze stihas (mas cas) pisat taketo bohapuste a nicnehovoriace nezmyselne komentare ;) K teme tolko, ze x86tkou svet ani nezacina, ani nekonci ;)
Opýtať kludne možeš (len to čo napíšem ,bude brane ako samolubosť).Mám 20 ,studujem IT , a popritom robim lektora PC a elektrotecniky ... napísal som pár script a pár projektov.
Only two things are infinite, the universe and human stupidity, and Im not sure about the former.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Albert Einstein
Daj link alebo nejaku referenciu na tie skripta a projekty.
Bolo ukazané :-) ,kedy chcel niekto vidieť nech mi napíše. Nie kvoli tomu ,že by som nechcel ukázať svoju tvorbu ,ale kvoli kradnutiu a zneuživaniu. Stálo to kopu času napísať.
Only two things are infinite, the universe and human stupidity, and Im not sure about the former.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Albert Einstein
Skriptá sa predsa píšu preto, aby sa vo veľkom používali, nie? Trocha podivné tvrdenie o krádežiach a zneužívaní. Nevraviac o tom, že vo veku 20, by som bol fakt dosť hrdý, keby niekto moje odborné články citoval.
Len prosím nezačni s tým, že čo som ja publikoval a podobne. Nič som nepublikoval, rovno priznávam. A takisto rovno poviem, že z toho ani nemám komplexy. Nemám pocit, že by som predbehol svojich učiteľov (keďže ešte stále aj študujem) a preto nepociťujem potrebu opakovať niečo, čo už bolo povedané.
Skriptá sa predsa píšu preto, aby sa vo veľkom používali, nie?
Suhlasím s tvojím tvrdení ,ale rovno ti poviem, že je to velmi nevdacna práca.
Každá škola sa lúbi hrať na svojom piesočku a ked ti nejaký profesor či študent napíše nejaké skriptá, tak sa ich drží ako svojho materiáliu (vačšinou ich dostaneš, len na tej škole s výnimkou starých skrípt, ktoré najdeš v knižniciach).Nie su to jedny skriptá, ale je toho požehnane. Konkretne elektrotechnika, elektronika, telekomunikačná technika, prenosová technika, silnoprúdové zariadenia, elektrotechnické merania a kopu dalších. Kedže vidím ,že by bol zaujem, tak som sa rozhodol, že uvolnim pár skript k nahladnutiu pod podmienkou nezneužita. Teraz ku krádežiam , trvalo 3/4 roka kým som dával celý projekt do kopy (úlohou bolo zavedenenie e-learningu na školách).Malo sa to spočiatku dostať hlavne na technicky zamerané školy a neskor aj do ostatných škol. A k tomu podivnému tvrdeniu o krádežiach - neprešiel ani mesiac a stalo sa to, že som videl moje texty, využívajú vo svojich prácach ostatní bez odkazu na moj zdroj (holt nie je nič lepšie ako sa trápiť a potom ti niekto vyfukne len tak tvoje veci).Momentálne skriptá používam pri doučovania a každý človek, ktoré učím ich dostáva bežne. Ak máš o nejaké skriptá záujem a súhlasíš s podmienkami, tak mi napíš, o ktoré máš zaujem a budeš ich mať ešte dnes.
PS: Neviem prečo by som ťa mal rozoberať na základe toho či si niečo publikoval, alebo nie. Každopádne nie je na škoda ak si tým každý prejde, aby vedel čo to je . :-)
Only two things are infinite, the universe and human stupidity, and Im not sure about the former.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Albert Einstein
Only two things are infinite, the universe and human stupidity, and Im not sure about the former.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Albert Einstein
"Kedže vidím ,že by bol zaujem, tak som sa rozhodol, že uvolnim pár skript k nahladnutiu pod podmienkou nezneužita."
A čo takto zavesiť to na blackhole? Minimálne by si dostal feedback.
ty sa stale iba pytas. nepytaj sa tolko.
to, co sa v clanku rozhodol autor objasnovat je jeho vec. odporucat mu aby objasnoval hyperthreading v prvej casti je ako posadit cerstveho ziaka autoskoly do auta a pustit len tak na pretekarsky okruh.
k viacprocesorovym doskam. ja som mal svojho casu vo firme 7u servery, ktore obsahovali 8procesorove dosky pre xeony ery pentium II (ked sa stale drzime ia32). a rovnako ako tvoja pamat o duronovych doskach to nehovori nic o tom, ze jednym z tvojich argumentov pod blogom o 64bitovej viste bolo, citujem:
"Vačšina operačných systémov má v súčastnosti 32 bitovú architerktúru ale pomaly sa prechádza na 64 bitovú. Prečo ? Kvoli nárastu výkonu , kvoli kvalitnejším a prepracovanejším CPU (2,4,8 procesorové)"
takze sa necuduj, s cim ta potom ludia spajaju. mimochodom si zrejme myslel 2,4,8jadrove nie procesorove (kedze ako som pisal ia32 uz okolo 1999-2000 nemal problem s 8 procesormi na doske /pocet jadier tiez nie je limitovany bitmi - to pre rypakov/).
______________
kam by som chodil...na dvor
Ohladom hyper tradingu a ostatnych veci - to ze si to tam nenasiel je preto lebo je to serial ak si si nevsimol - nechce sa mi to vsetko prekladat naraz a kreslit obrazky.
ohladom datovej sirky. Datova sirka programu je bez blizsej definicie blbost. Mozes mat datovu sirku vstupu procesora (t.j. ake velke data dokaze procesor prijat na jeden takt) ale nie programu ako celku. Pod tym sa neda nic konkretne predstavit a to co si aj clovek predstavi nedava zmysel pri zvysku toho co si povedal. Ak to mas z knihy co si pisal, tak dopis celu definiciu a ak tam nie je tak ten clovek ci ti pisal nie je dobry ucitel a nemal by pisat knihy.
ohladom pipelineingu - mam taky pocit ze pan Blum ma pravdu. Dokaz : http://en.wikipedia.org/wiki/Pipeline_(computing)
konkretne cast Buffered, Synchronous pipelines.
dalsi dokaz : http://en.wikipedia.org/wiki/L1_cache
citujem:
"Pipelined CPUs access memory from multiple points in the pipeline: instruction fetch, virtual-to-physical address translation, and data fetch (see classic RISC pipeline). The natural design is to use different physical caches for each of these points, so that no one physical resource has to be scheduled to service two points in the pipeline. Thus the pipeline naturally ends up with at least three separate caches (instruction, TLB, and data), each specialized to its particular role."
obvlast slova: multiple points in the pipeline: instruction fetch
takze imho ten clovek ma pravdu, len to nerozvadzal do detailov.
major_kusanagi
/* no comment */
asi by ta velmi nasralo, keby som ti povedal, ze 64bitovy procesor nema 64 bitovu datovu zbernicu a este by to navyse aj bola pravda, ze? :)))
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
nie prave naopak, ak je to pravda tak pis (aj s linkou plz)
major_kusanagi
/* no comment */
P.S. Ja som hlavne narazal na definiciu "int" v Ccku (neformalnu) - int je taky siroky aka velka je datova sirka procesoru, t.j. kolko dokaze procesor naraz prijat.
P.S.2 co sa tyka zbernice je to lahko mozne (vid 386SX mala 20 tusim)
int je obvykle tak velky, ake velke cislo dokaze procesor v danom rezime schrumat v jednej aritmetickej operacii. to je asi najpresnejsia definicia.
u x86 tusim od 486 vyssie plati, ze procesor ma datovu zbernicu 2x tak siroku, ako je sirka jeho registrov (teraz neviem, ci to bola 486tka, pentium, alebo pentium pro). preto napriklad s 32bitovymi SIMM modulmi sa pamate vzdy museli parovat, aby dve rovnako velke pamate vytvorili jeden blok 64-bitovej pamate. DIMM SDRAM pamate uz boli 64bitove a DIMM DDRAM pamate su uz asi 128 bitove. U tych preto parovanie nie je treba. (paruje sa kvoli dual channel, ale to je trocha o niecom inom). 2x tak siroka zbernica ti umozni precitat 2x tak vela dat za rovnaky cas a kedze sa od 486 vyssie pouzivaju execution a data cache, citanie a zapis z/do pamate nie je viazany na to, co chce procesor, ale na to, ako sa fetchuju a zapisuju riadky cache.
a s tou 386tkou nemas pravdu. 386tka mala 32bitovu adresnu a v pripade SX 16bitovu datovu, v pripade DX 32bitovu datovu zbernicu (386tky este nemali cache). to 8086 mala 20bitovu adresnu zbernicu, ale to zas kvoli inemu paskvilu, volanemu segmentacia (inac v tej dobe velmi chytre riesenie, ale s prechodom na paging ho mali velmi rychlo dropnut).
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
segmentacia (inac v tej dobe velmi chytre riesenie, ale s prechodom na paging ho mali velmi rychlo dropnut).
No len potom by bol dost problem s protekciou. Alebo trebarz aj s odchytavanim pretecenia zasobniku, alebo s context strukturami. Vsetky tieto veci sa este doteraz riesia cez segmenty, aj ked x86-64 uz dost vela zo segmentacie vypustilo.
int je obvykle tak velky, ake velke cislo dokaze procesor v danom rezime schrumat v jednej aritmetickej operacii. to je asi najpresnejsia definicia
To minimalne od x86-64 nieje pravda. V 64-bit veciach je int vsade 32-bitovy (na GNU je 64-bit od "long", u MS "long long").
pretecenie zasobnika sa da vcelku elegantne riesit v obsluhe page faultu (vypadne mi stranka, v strukture OS o beziacom procese mam poznacene hranicnu stranku zasobnika, ak ide prave o tuto stranku, zostrelim proces so stack overflow, event. segfaultom)
s protekciou, ak pouzivas lokalne page directories a page tables (dufam, ze som sa teraz nesekol, ale mam dojem, ze take cosi u x86 existuje, uz som to fakt hodne davno nevidel), by si tiez tak tazky problem mat nemal, okrem toho, ak mas 4gb linearny code / data / stack segment, tiez tam moc s ochranou pamate neporiesis.
uz druha vec je, aky bordel bude mat OS v mape stranok. ale to ma v podstate aj teraz.
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
pretecenie zasobnika sa da vcelku elegantne riesit v obsluhe page faultu (vypadne mi stranka, v strukture OS o beziacom procese mam poznacene hranicnu stranku zasobnika, ak ide prave o tuto stranku, zostrelim proces so stack overflow, event. segfaultom)
Nesuhlasim:
1. pretecenie zasobniku sa nemusi prejavit hned na prvej stranke. Kludne sa moze stat ze funkcia ma obrovske lokalne premenne (velky objekt / alloca() v C++ napriklad), a ze sa chyti o stranku-dve dalej. Mozes to riesit sice tak ze tu hranicu das "dost velku", ale stale to nieje ono, vid dalsie body.
2. kludne moze stat ze do tej stranky "sahnes" inak ako pri preteceni - napriklad blba aritmetika s pointrom na nieco co je na zasobniku.
3. takisto to nezachyti pripad ked sa podari dosrat stack pointer.
... proste, podla mna by taketo riesenie bolo dost slabe
s protekciou, ak pouzivas lokalne page directories a page tables (dufam, ze som sa teraz nesekol, ale mam dojem, ze take cosi u x86 existuje, uz som to fakt hodne davno nevidel), by si tiez tak tazky problem mat nemal, okrem toho, ak mas 4gb linearny code / data / stack segment, tiez tam moc s ochranou pamate neporiesis.
Neviem co myslis pod lokalnymi page tables. Kazdy proces ma svoju tabulku stranok + kernel ma svoju, a tieto sa prepinaju podla potreby. Protekciou som nemyslel ochranu pamate, ale skor veci akoze v akom ringu bezis, ako ich bezpecne prepinat, kto moze pristupovat na ktore I/O porty, kto ma pravo volat ktore sluzby a tieto veci (CPL, DPL, RPL, IOPL). Jasne ze by to islo riesit pre klasicke dnesne operacne systemy ktore v podstate vyzaduju len 2 mody - kernel/user, ale vtedy ked robili 386ku to este taketo jasne nebolo. A taky I/O bitmap alebo ring1 su obcas veci na nezaplatenie.
Navyse context struktury sa este doteraz robia cez segmenty (TS, FS a GS este aj na x86-64 ako-tak funguju).
hej, mas pravdu. az do takych detailov som to nepremyslel.
---
Cuchat s nadchou, to je ako sniffovat bez promiscu.
Myslím že v súčasnosti sa už rieši skôr reverzný hyperthreading, kde viac fyzických procesorov stavajú do pozície jedného logického / virtuálneho, neviem ako to nazvať...
njn, to co som prekladal (a prekladam) je povodne kniha o assembleri a su tam naozaj zaklady architektury. Cela kniha je ponata stylom "v assembleri dnes robi malo kto a ak to vediet tak napriklad preto lebo chcem mat lepsi performance pri mojich uz aj tak dost low level kodoch ala C a mam pocit ze to assembler zvladne".
major_kusanagi
/* no comment */
Cely clanok sa mi zda taky strasne chaoticky... ako keby ho pisal niekto z nasej vysokej skoly :)
Vsetko mozne okrajove sa spomenie jednou vetou, ale je to cele dopletene, a nic z toho aj tak nikomu nemoze byt jasne. Podstatne veci sa spomenu okrajovo a tak velmi zovseobecnene az to nieje pravda, zatial co s blbostami sa zabije vela miesta. To spomenute pletenie cache a pipeliningu je dobrym prikladom. Nechcem byt zly, ale mam pocit ze ani v tomto pripade autor prilis nevie o com pise.
To co citas je preklad knihy, takze ak sa ti nieco nezda, tak pis autorovi knihy.
major_kusanagi
/* no comment */
Mal som pocit ze je to vprvomrade tvoj vycuc z knihy, a kritizujem to ze na niektore najmenej podstatne casti si sa zameral az prilis (suvislost pipeline a cache), a ovela viac dolezite veci si "nevycucol" (napriklad poriadne vysvetlit co to pipeline vlastne je).
Ak to je naozaj doslovny preklad knihy bez toho ze by si nieco odtial vynechaval, tak som z autora knihy veeelmi sklamany.
Ano je to doslovny preklad, s tym ze ked napise 3 vety o tom istom - napr. register EAX je 32bitovy. Je dostatocne siroky na ulozenie 32bit. dat. Zmestia sa do neho aj 32bitove hodnoty, tak som to scvrkol na vetu EAX ma 32bitov. Ono vo vseobecnosti som si vsimol, ze vela americkych knich je pisanych stylom www.sme.sk - 5 odstavcov, 20 viet a realna informacia je na 1 - 2.
Ja nie som z autora sklamany ani z knihy. Kniha je venovana programovaniu v assembleri a pouzitiu opensource technik pri ladeni a profilovani. Nie na detailny opis architektury. To co autor napisal je tak uvod aby ludia co vobec nevedia o co ide (az na niektore veci aj ja pred precitanim tej knihy) dostali prvy hint a sajn o tom wo co go. Rozhodne sa ten clovek nesnazil urobit detailnu prirucku pre IA32 a ani to nebolo jeho cielom, chap to prosim ta v tom svetle.
major_kusanagi
/* no comment */
Za uvod clanku mas u mna nula bodov. Potom som sa uz aj nieco docital a niecomu sa priucil. Je chybou (ktoru pozorujem aj u mna a snazim sa jej do buducna vyvarovat) pisat clanky/komenty s horucou hlavou. Zvlast ma mrzi osocovanie, ktore sa cloveku dostane v pripade nesuhlasu s jeho nazorom. Povazujem to za slabinu tohoto portalu.
Co sa tyka osocovania: To, ze podla mna clovek co povie, ze "program ma bitovu sirku 32" nevie o com hovori nie je osocovanie. To je pre mna to iste ako kebyze si povedal, ze clovek co tvrdi ze "sucet 2 realnych cisiel nie je realne cislo" - nevie o com hovori, je podla teba osocovanie.
Ked ti profak na vyske povie ze to co si povedal nie je dobre a povie ti co sa mu nezda a na zaklade toho a nulovej/zavadzajucej odpovede od teba ti povie ze tomu ty nerozumies - je to podla teba osocovanie ? Pojem "bitova sirka programu" - tak ako ju on pouzil v diskusii k clanku "Bezpecnost nadovsetko" pre mna nema zmysel. Neviem co to je. On mi to nepovedal a jak tak kukam ani sa nechysta. Ani to nedefinoval. Mozem si len domyslat o com asi hovoril. Jedine hodnotne z jeho prispevku tuna su tie skripta ci kniha ci co to je. To mal napisat ako prve. Napisem mu na ICQ a spytam sa ho ako to mysli s tou sirkou programu.
Osocovanim by imho bolo kebyze som mu zacal nadavat bez toho aby som uviedol preco. Ja som mu nenadaval a este som aj uviedol preco si myslim ze nevie o com hovori - vid. spominana datova sirka programu.
A co sa tyka zavadzania a neodpovedania na otazku (o com som vravel na zaciatku tohoto reply) :
Tvrdim ze je prinajmensom tak isto horuca hlava ako ja - vid reakcia o quad core a 64 bitoch, kde napisal, citujem :
"WTF asi by som ti mal napísať skutočný príspevok o CPU. Doma pracujem na Dual Core ale to neznanemá ,že je 64 bit. To si si naozaj myslel,že si myslím že viacjadrové procesory musia byť zákonite 64 bit?"
Kde reagoval na to, ze som povedal ze to co sa oznacuje 64bit procesor je s najvyssou pravdepodobnostou hybrid. Je podla teba normalne, aby clovek na vetu "64bit procesor od intelu (aj quad-core) je s najvyssou pravdepodobnostou hybrid - mix 32bit a 64bit" odpovedal proti-argumentom : " To si si naozaj myslel,že si myslím že viacjadrové procesory musia byť zákonite 64 bit?" Potom ja sa pytam - Co ma moja veta spolocne s tym ze je to viacjadrovy procesor ? (okrem toho ze som pouzil ako priklad quadcore) Ja som mu predsa hovoril o hybridoch aj ked ma velke 64 na procesore a on mi na to povie ze som uplne mimo ked si myslim ze viacjadrove procesory musia byt len 64 bit ? Teraz sa ja pytam WTF ? To je imho nieco tako ako ked sa opytam kolko je hodin a ty mi odpovies ze ti vcera vecer chutil obed.
major_kusanagi
/* no comment */
> Tie procáky sú hybridné t.j. aj 32 bitové aj 64 bitové veci na nich, tak ako bola hybridná 386tka pri prechode z 16 bitov na 32! Posledný pokus Intelu o prechod na čisto 64 bit bol IA64 Ithanium, ktorý skončil na smetisku dejín.
Když tak moc zdůrazňuješ tu hybridnost, měl by sis to "Ithanium" nejdřív ověřit. Kvůli zpětné kompatibilitě dokáže Itanium emulovat i IA-32, takže, tvými slovy, je i Itanium hybridní. Dá se to snadno najít v Itanium manuálu:
"The IA-64 architecure enables IA-64 operating systems to host IA-32 applications, as well as mixed IA-32/IA-64 applications. ..."
"One of the most compelling motivations for executing IA-32 code on an IA-64 operating system is the ability to run existing unmodified IA-32 application binaries. ..."
Znamena to teda, ze priamo v procesore mas aj 32bitove registre aj 64 bitove registre (nehovorim o SSE so 128mimi v P4, ale o registroch ako je AX, EAX...) ? Pretoze to je podla mna hybrid. Pod slovom emulovat si clovek vie predstavit cokolvek. Ja si pod tym napriklad predstavujem ze umelo vytvaram prostredie pre nejaku vec, tak aby mohla zbehnut. To ale nemeni charakter mna sameho. Tym chcem povedat ze ked ma procesor vlastnost 'A' a emuluje 'B' tak to znamena len tolko ze vytvori podmienky pre 'B' a nie ze naozaj realne ma 'B' (snad som sa vykoktal dost jasne). Najdi to plz v tom manualy alebo posli linku.
major_kusanagi
/* no comment */
Znamena to teda, ze priamo v procesore mas aj 32bitove registre aj 64 bitove registre (nehovorim o SSE so 128mimi v P4, ale o registroch ako je AX, EAX...) ?
Nie, mas len 64-bitove general-purpose registre, pricom dokazes pristupovat aj k ich 32-bitovej, 16-bitovej alebo 8-bitovej casti. Podla tvojej logiky by potom trebarz Intel core2duo bol hybrid medzi 64-bitovym, 32-bitovym, 16-bitovym a 8-bitovym procesorom?
Mas pravdu.
Ja som to myslel som to tak, ze mas aj 32bit aj 64 bit registre toho isteho typu na cipe - tym myslim fyzicky oddelene 2 pamate. Chcel som ti to dokazat tymto clankom ktory som nasiel http://en.wikipedia.org/wiki/X86-64, no tam som nasiel napisane: All general-purpose registers (GPRs) are expanded from 32 bits to 64 bits, and all arithmetic and logical operations, memory-to-register and register-to-memory operations, etc. can now operate directly on 64-bit integers.
Takze nie je pravda co som si myslel a tvrdil, ze mas 2 fyzicky oddelene pamate v procesore jedna je 32bit a druha 64 bit s tym ze sluzia na to iste len pre inu sirku. (teda no, mas ich tam ale jedny su na nieco ine ako druhe, nemas 2 varianty toho isteho)
major_kusanagi
/* no comment */
Uznávám, že běh IA-32 kódu na Itaniu je jenom emulovaný, na rozdíl třeba od x86-32bitové aplikace běžící na x86-64bitovém OS (v compatibility mode), kde to probíhá nativně.
Vygooglit se o tom dá dost, něco je třeba na wikipedii. Co jsem během chvilky zjistil, tak se na prvních Itaniích používala hardwarová emulace (představuju si to jako speciální obvod v procesoru, který dynamicky převádí IA-32 kód na IA-64 kód ). Prý to ale bylo moc pomalé, takže na pozdějších Itaniích se používá softwarová emulace, tzn. softwarový IA-64 emulátor (nejspíš driver) detekuje spuštění IA-32 aplikace a provádí ji sám.