2012 m. gruodžio 28 d., penktadienis

6. Atminties segmentavimas


6. Atminties segmentavimas
Tikslai:
1. Suprasti atminties segmentavimo prasmę.
2. Atpažinti segmentavimo ir puslapiavimo būdų ypatumus.
3. Nustatyti segmento ir puslapio adresą pagal lenteles.
Temos studijoms reikalingas laikas                             1 val. teorijos.
6.1. Atminties segmentavimo principas ir sąvokos
Atminties segmentavimas yra visu pirma reikalingas kaip priemonė, daranti programą mažai priklausomą nuo jai išskirtos vietos atmintyje. Antras, labai svarbus, segmentavimo privalumas yra tas, kad sudarant programą iš keliu moduliu, ryšių redaktoriui nereikia ištiesinti visų modulių į vieną tiesinę adresų erdvę.
Pakanka toki tiesinimą atlikti tik vieno segmento ribose, todėl galima efektyviau atlikti ryšiu redagavimo darbą.
Pirmą kartą atminties segmentavimas panaudotas I8086 mikroprocesoriuje.
Jame yra segmentų registrai :
Ø                         CS- komandų;
Ø                         DS- duomenų;
Ø                         SS - dėklo;
Ø                         ES-  papildomas duomenų.

Absoliutus adresas yra užrašomas pora: < segmento numeris > : < EA >
Šiame procesoriuje segmentų registrų turiniai keičiami tik tada, kai reikia kreiptis į kitame segmente saugomas komandas arba duomenis.
Į programinį modelį įvesti segmentų registrai leidžia padidinti fizinės atminties adresaciją iki 1MB.
Komandų formatuose nurodomas 16-kos skilčių adresas (poslinkis). Realus fizinis kreipties į atmintinę adresas gaunamas prie vykdomojo adreso prisumavus atitinkamo segmento registro turinį, perstumtą 4-riomis skiltimis į kairę.
6.1 pav. Fizinių adresų formavimas MP 8086


6.2 pav. Fizinių adresų vietos nustatymas MP 8086
6.2. Segmentavimas
Esant segmentavimui programos yra sudalomos į nepriklausomus segmentus, kurie yra laikomi nesurištose adresinėse srityse.


Operacinė sistema

Kitos programos

Programa A, Segmentas 0

Kitos programos

Programa A, Segmentas 1

Kitos programos

Programa A, Segmentas 2

Kitos programos


Segmentavimas reikalauja papildomo žingsnio, kai yra atliekama adreso transliacija. Kai programa yra įkeliama į atmintį, operacinė sistema sukuria segmentų lentelę, kurioje yra nurodomas (absoliutus) kiekvieno programos segmento pradžios adresas. (10.6 pav.). (Kiekvienai aktyviai programai yra atskira segmentų lentelė). Vėliau, kai operacinė sistema pradeda vykdyti šią programą, jos segmentų lentelės adresas yra įkeliamas į specialų registrą.
Programos vykdymo metu  adresai turi būti transliuojami iš santykinių į absoliučius, kadangi programuotojai naudoja santykinius adresus, o kompiliatoriai juos transliuoja į bazę plius poslinkis. Vykdant komandą (instrukciją), komandos operandų adresai yra gaunami prie bazinio registro turinio sumuojant poslinkį. Tradiciškai tokiu būdu gautas adresas vadinamas absoliučiu adresu. Esant segmentacijai, adresas susideda iš dviejų dalių: segmento numerio bei poslinkio (10.6 pav.). Konvertuojant tokį adresą į absoliutų, atliekami šie veiksmai:
1.      Tikrinamas specialus registras ieškant programos segmentų lentelės.
2.      Iš adreso paimama jo dalis – segmento nr.
3.      Naudojamas segmento nr. paieškai segmentų lentelėje
4.      Randamas segmento pradžios adresas, jis yra pridedamas prie poslinkio ir taip gaunamas absoliutus adresas.
Šis procesas vadinamas dinamine adreso transliacija.
6.3 pav. Atminties segmentavimas
6.3. Puslapiavimas
Programos segmentai gali skirtis savo ilgiu. Taikant puslapiavimą, programa yra sudaloma į fiksuoto ilgio puslapius. Puslapio dydis paprastai yra nedidelis ir yra parenkamas siekiant efektyvumo techninės įrangos atžvilgiu.
Kaip ir segmentų atveju, programos puslapiai nėra talpinami į vientisą atmintį, jie išmėtomi į laisvas atminties sritis. Tokiu atveju adresas yra sudaromas iš dviejų dedamųjų (10.4 pav.), puslapio numerio (adreso vyresnėse bitų skiltyse) bei poslinkio (nurodomo adreso jaunesnėse bitų skiltyse).
6.4 pav. Atminties puslapiavimas
Adresų dinaminė transliacija yra atliekama programos vykdymo metu. Instrukcijos vykdymo metu, bazinis adresas bei poslinkis yra paverčiami absoliučiu adresu techninės įrangos priemonėmis. Puslapio bazinis adresas yra gaunamas iš programos puslapių lentelės (kaip kad segmento adresas – iš segmentų lentelės), šią lentelę tvarko operacinė sistema. Puslapio adresas sumuojasi su poslinkio reikšme ir tuo būdu yra nustatomas absoliutus adresas.
6.4. Segmentavimas ir puslapiavimas
Kartais segmentacija ir puslapiavimas naudojami kartu, tokiu atveju adresas nusakomas segmento numerio, puslapio numerio segmente bei poslinkio reikšmės puslapyje.
Vykdant tokio adreso transliaciją pradžioje yra nagrinėjama su programa surišta segmentų lentelė, iš jos yra gaunama atitinkamo segmento puslapių lentelė, iš kurios yra gaunamas puslapio bazinis adresas, prie kurio pridėjus poslinkį yra nustatomas absoliutus adresas.

6.5 pav. Atminties segmentacija ir puslapiavimas
6.4. SVK
1.      Kaip formuojamas 20 skilčių fizinis adresas?
2.              Kokią naudą duoda atminties segmentavimas?
3.              Kas ir kada sukuria segmentų lentelę?
4.              Kada atliekama adsresų dinaminė transliacija?
5.              Kaip atmintinėje išdėstomi segmentai bei puslapiai?
6.              Ar gali keistis segmento ilgis?
7.              Ar gali keistis puslapio ilgis?
  1. Atminties segmentavimas yra visu pirma reikalingas kaip priemonė, daranti programą mažai priklausomą nuo jai išskirtos vietos atmintyje.
  2. Labai svarbus, segmentavimo privalumas yra tas, kad sudarant programą iš keliu moduliu, ryšių redaktoriui nereikia ištiesinti visu moduliu į vieną tiesinę adresu erdvę.
  3. Į I8086 programinį modelį įvesti segmentų registrai leidžia padidinti fizinės atminties adresaciją iki 1MB.
  4. I8086 komandų formatuose nurodomas 16-kos skilčių adresas (poslinkis). Realus fizinis kreipties į atmintinę adresas gaunamas prie vykdomojo adreso prisumavus atitinkamo segmento registro turinį, perstumtą 4-riomis skiltimis į kairę.
  5. Esant segmentacijai, programos yra dalomos į nepriklausomai adresuojamus segmentus ir jie yra laikomi atskirose adresinėse erdvėse. Segmentacija reikalauja papildomo žingsnio, kai yra atliekama adreso transliacija.
  6. Kai programa yra įkeliama į atmintį, operacinė sistema sukuria segmentų lentelę, kurioje yra nurodomas (absoliutus) kiekvieno programos segmento pradžios adresas. (Kiekvienai aktyviai programai yra atskira segmentų lentelė). Vėliau, kai operacinė sistema pradeda vykdyti šią programą, jos segmentų lentelės adresas yra įkeliamas į specialų registrą.
7.      Programos vykdymo metu  adresai turi būti transliuojami iš santykinių į absoliučius, kadangi programuotojai naudoja santykinius adresus, o kompiliatoriai juos transliuoja į bazę plius poslinkis.
  1. Programos segmentai gali skirtis savo ilgiu. Taikant puslapiavimą, programa yra sudaloma į fiksuoto ilgio puslapius. Puslapio dydis paprastai yra nedidelis ir yra parenkamas siekiant efektyvumo techninės įrangos atžvilgiu.
  2. Kaip ir segmentų atveju, programos puslapiai nėra talpinami į vientisą atmintį, jie išmėtomi į laisvas atminties sritis. Tokiu atveju adresas yra sudaromas iš dviejų dedamųjų, puslapio numerio (adreso vyresnėse bitų skiltyse) bei poslinkio (nurodomo adreso jaunesnėse bitų skiltyse).
  3. Adresų dinaminė transliacija yra atliekama programos vykdymo metu. Instrukcijos vykdymo metu, bazinis adresas bei poslinkis yra paverčiami absoliučiu adresu techninės įrangos priemonėmis. Puslapio bazinis adresas yra gaunamas iš programos puslapių lentelės (kaip kad segmento adresas – iš segmentų lentelės), šią lentelę tvarko operacinė sistema. Puslapio adresas sumuojasi su poslinkio reikšme ir tuo būdu yra nustatomas absoliutus adresas.
  4. Kartais segmentacija ir puslapiavimas naudojami kartu, tokiu atveju adresas nusakomas segmento numerio, puslapio numerio segmente bei poslinkio reikšmės puslapyje.   Vykdant tokio adreso transliaciją pradžioje yra nagrinėjama su programa surišta segmentų lentelė. Iš jos yra gaunama atitinkamo segmento puslapių lentelė, iš kurios yra randamas puslapio bazinis adresas, prie kurio pridėjus poslinkį yra nustatomas absoliutus adresas.

Tikslai:
1. Suprasti konvejerinio duomenų esmę.
2. Atpažinti konvejerių pakopų skaičių ir paaiškinti jo įtaką procesoriaus darbo dažniui.
3. Apibūdinti hiperkonvejerio privalumus ir trūkumus
Temos studijoms reikalingas laikas:      1 val. teorijos.
Naujųjų technologijų dėka kompiuterizuotos sistemos tobulėja, didėja jų našumas. Tai leidžia padaryti atsirandantys nauji spartesni schemotechniniai sprendimai. Kompiuterizuotų sistemų našumas didinamas ir tobulinant centrinio procesoriaus sandarą.
Šiuolaikiniai procesoriai informaciją apdoroja konvejeriniu (Pipelined) būdu. Taip apdorojant informaciją, ilgai trunkanti operacija suskaidoma į etapus, ir jie nuosekliai sujungtuose įtaisuose vykdomi vienas paskui kitą.
Pavyzdžiui, jeigu kiekviena programos instrukcija yra suskaidoma į penkis maždaug per vienodą laiką įvykdomus etapus, vienos operacijos vykdymo trukmė nesumažėja, bet vykdant viena paskui kitą daug operacijų, jos įvykdomos maždaug 5 kartus sparčiau.
Kadangi programos kai kada šakojasi, procesoriuose yra specialus prognozavimo įtaisas (BTB - Branch Target Buffer), nusprendžiantis, kurios programos šakos instrukcijas įrašyti į registrus, nes, apsirikus, tenka gaišti laiką jau įrašytoms instrukcijoms pakeisti kitos šakos instrukcijomis.
Konvejerizacija (pipelining) numato kiekvienos instrukcijos skaidymą į kelis etapus, be to kiekvienas etapas vykdomas atskiroje procesoriaus konvejerio pakopoje. Atsilaisvinant kitoms pakopoms, vykdoma instrukcija juda konvejeriu. Tuo būdu, konvejeryje vienu metu gali būti vykdomos kelios iš eilės einančios instrukcijos ir procesoriaus našumą galima vertinti pagal įvykdytų instrukcijų kiekį iš visų jo konvejerių. Tam, kad pasiekti maksimalų procesoriaus našumą, t.y. užtikrinti pilną konvejerių apkrovimą su minimaliu baudos ciklų (penalty cycles) skaičiumi, programa turi būti sudaryta atsižvelgiant į architektūrinius procesoriaus ypatumus. Savaime aišku, kad įprastu būdu sugeneruotas kodas Pentium ir P6 klasės procesoriuose bus vykdomas pakankamai sparčiai. “Klasikinio” Pentium procesoriaus konvejeris susideda iš 5-ių pakopų. Superkonvejerinės architektūros procesoriai (superpipelined) turi didesnį pakopų skaičių, kas leidžia kiekvieną iš jų supaprastinti ir tuo sumažinti instrukcijų vykdymo laiką. Hiperkonvejeris Pentium 4 jau turi 20 pakopų.
Konvejeris - speciali loginė schema, leidžianti optimizuoti procesoriaus darbą, vykdant nepriklausomus veiksmus lygiagrečiai.
Tipiškas procesorius bet kurią komandą vykdo keliais etapais:
  1. Komanda išrenkama iš atminties (pasiunčiama užklausa į atmintį, sulaukiama, kol atmintis procesoriui perduos komandos kodą);
  2. Komanda identifikuojama (nustatoma, kaip ir kokius duomenis komanda naudos) ;
  3. Iš atminties išrenkami komandos naudojami duomenys (pasiunčiama užklausa į atmintį, sulaukiama, kol atmintis procesoriui perduos komandos naudojamus duomenis);
  4. Komanda įvykdoma;
  5. Į atmintį perkeliami komandos apdoroti duomenys (į atmintį pasiunčiami duomenys, sulaukiama, kol jie bus įrašyti);
  6. Apskaičiuojamas kitos komandos adresas.
Visi šie etapai vykdomi gana nepriklausomai vienas nuo kito, todėl vykdant vieną iš šių veiksmų, už kitus veiksmus atsakingos paprasto procesoriaus dalys stovi be darbo. Naudojant konvejerį, visi šie darbai vykdomi lygiagrečiai, pvz., kol viena procesoriaus dalis identifikuoja naujai gautą komandą, kita dalis išrinkinėja iš atminties kitai komandai reikalingus duomenis.
Kai kurie sudėtingesni konvejeriai būna apjungti su kešavimo schemomis, ilgiau trunkančius
veiksmus (komandų išrinkimą, jų duomenų išrinkimą) jie vykdo iš anksto.
6.8. Konvejeriai RISC procesoriuose
Itin efektyviai konvejeriai naudojami RISC procesoriuose: dėl mažo komandų skaičiaus, vienodo komandų (ir duomenų) ilgio, mažo kiekio operandų (dažniausiai - vieno), adresavimo būdų ribojimo, RISC procesoriuose esančių konvejerių darbą galima efektyviai prognozuoti, atitinkamai - ir smarkiai optimizuoti.
Kaip jau minėta, komandos išrenkamos ir pagrindiniame procesoriuje suskaidomos į mikroopercijas. Šis skaidymas ir vykdymas atliekamas konvejeryje. Konvejeris panašus į surinkimo liniją. CPU komandos suskaidomos (iššifruojamos) konvejerio pradžioje. Jos paverčiamos mikrooperacijomis, kurios po vieną apdorojamos likusioje konvejerio dalyje:
            pav. RISC procesoriaus konvejeris

Pirmiausia CISC komandos dešifruojamos ir pakeičiamos lengviau apdorojamomis mikrokomandomis. Tada jos apdorojamos konvejeryje. 
Konvejerį sudaro daugybė pakopų. Senesniuose procesoriuose yra tik kelios pakopos, o naujesniuose – daug (paprastai 10-20). Kiekvienoje stadijoje su komanda “kas nors” daroma, o vienai stadijai iš procesoriaus reikia vieno takto.


6.3 pav. Konvejeris – surinkimo linija (čia 9 pakopos), kurioje vienas taktas skiriamas vienai makrokomandai  įvykdyti

6.9. Konvejeriai superskaliariniuose procesoriuose
Šiuolaikiniai CPU turi ne vieną konvejerį, todėl vienu metu gali apdoroti keletą komandų. Pavyzdžiui, “Pentium 4” ir “Athlon XP” per vieną sinchronizatoriaus taktą gali iššifruoti apie 2,5 komandos. Procesoriuje “Pentium 4” yra keli labai ilgi konvejeriai, leidžiantys procesoriui vienu metu ir skirtingomis stadijomis apdoroti 126 komandas. Todėl CPU gali padaryti daugiau darbo, kai lygiagrečiai veikia keli konvejeriai:

6.4 pav. Du konvejeriai per tą patį taktų skaičių leidžia vykdyti dvigubai daugiau komandų

Galima būtų manyti, kad “Intel” ir “AMD” inžinieriai viename CPU gali sukurti daugiau lygiagrečių konvejerių ir darbas tikriausiai turėtų padvigubėti? Deja, tai nėra taip paprasta. Atminties sistema dar nėra pajėgi vienu metu daugybės konvejerių prikimšti duomenų. Net ir šiuolaikiniuose konvejeriuose išeikvojama gausybė taktų. Tiesiog procesoriaus branduolys duomenų efektyviai nesunaudoja, nes jie tiekiami nepakankamai sparčiai.
Kita problema su keliais konvejeriais iškyla tada, kai procesorius gali lygiagrečiai iššifruoti keletą komandų – kiekvieną atskiriame konvejeryje. Kartais neįmanoma išvengti neteisingai išrinktų komandų (netinkama eilės tvarka). Tai vadinama klaidingu numatymu, kuris išeikvoja daugybę laikmačio taktų, nes turi būti išrinkta kita komanda, turinti pereiti per konvejerį.
“Intel” mėgino išspręsti šią problemą su šakos numatymo elementu, kuris nuolatos bando atspėti teisingą komandų eilės tvarką.

Procesoriuose skiriasi konvejerio ilgis – pakopų skaičius. Pavyzdžiui, “Pentium II” ir “Pentium III” yra 11 pakopų, o “Pentium 4” – 20. “Athlon” ALU konvejeriai turi 10 pakopų, o FPU/MMX/SSE konvejeriai - 15.
Pentium 2 konvejeris yra 11 pakopų. Išskiriamos 3 komandos išrinkimo, 2 dekodavimo, 3 parengiamieji (registrų peradresavimo, vykdymo buferių formavimo ir spartaus perdavimo), 1 vykdantysis ir 2 rezultato įsiminimo blokai.


IFU               Instruction Fetch Unit
ID                 Instruction Decode
RAT             Register Allocator
ROB             Reorder Buffer
DIS               Dispatcher
EX                Execute Stage
RET             Retire Unit
6.5 pav. Pentium 2 konvejeriai

Akivaizdu, jog kuo ilgesnis konvejeris, tuo lengviau didinti taktinį dažnį. Reikalas tame, jog didesnis konvejerio pakopų skaičius atskiriems taktams paskirsto mažiau darbo, tuo pačiu taktas vykdomas greičiau. Pentium 3 turi 12 pakopų konvejerį (FPU  -17-os). Athlon – 10.  Svarbu prisiminti, kad tais atvejais, kai programose yra daug ciklų, neteisingo nuspėjimo atveju konvejeris iškraunamas ir vėl užpildomas kitomis komandomis, todėl per didelis  pakopų skaičius gali turėti ir neigiamą įtaką procesoriaus spartai.
Procesoriaus efektyvumą galima įvertinti ir pagal IPC skaičių (komandas per valandą). Šiuo atžvilgiu AMD “Athlon XP” lenkia “Pentium 4”. AMD “Athlon XP” procesoriai iš tiesų daug spartesni už “Pentium 4”, esant tokiems patiems taktiniams dažniams. Tą patį galima pasakyti apie “Motorola” procesorius “G4”, naudojamus, pavyzdžiui, “Macintosh” kompiuteriuose. “G4” turi tik 4 stadijų konvejerį, todėl iš esmės gali atlikti tą patį, ką ir  “Pentium 4” per pusę taktinio dažnio ar net mažiau. pasirinko “Pentium 4” su labai ilgu konvejeriu.
Pentium 4 konvejeris pav. parodytas 11.5  pav.

6.6 pav. Pentium 4 konvejeris

Vienintelė problema – su tokiu trumpu konvejeriu taktinio dažnio nebegalima smarkiai padidinti.
 “Intel” Pentium 1- 4 konvejerių palyginimas parodytas 11.6  pav.
Intel® Pentium® konvejeriai
6.7 pav. Pentium procesorių konvejerių pakopų skaičiaus ir darbo dažnio palyginimas

Pentium 4 turintis 20 pakopų ilgio konvejerį, turi ir mažiausią takto vykdymo laiką, leidžiantį pasiekti didžiausią taktinį dažnį. Deja, vykdant susietas tarpusavyje operacijas, antrajai  teks 20 taktų laukti, kol pasibaigs pirmoji operacija).
Ši problema dalinai išsprendžiama dėka buferio. Kai kurias operacijas iš jo galima vykdyti nepriklausomai nuo ankstesnių rezultato. Tam reikia tiksliai nuspėti atšakas. Taigi, pirmo lygio priešatmintinės talpa Pentium 4 procesoriuje padidintas iki 256 KB (palyginimui: Pentium 3 turi 32, Athlon-128KBaitus). Be to, naujasis atšakų nuspėjimo mechanizmas leido padidinti atšakų nuspėjimo tikslumą iki 95%.


6.1 lentelė. Procesorių konvejerių pakopos
CPU
Konvejerio pakopos
Maksimalus taktinis dažnis
“Pentium”
5
300 MHz
Motorola G4”
4
500 MHz
Motorola G4e”
7
1000 MHz
“Pentium IIIII
12
1400 MHz
Athlon XP
10/15
2500 MHz
Athlon Clawhammer
12/17
>3000 MHz
“Pentium 4”
20
>5000 MHz

Atkreipkite dėmesį, kad dviejų AMD procesorių sveikųjų skaičių ir slankiojo kablelio skaičių konvejerių ilgis skiriasi .
Procesorinės architektūros naujove tapo priešatmintinė su instrukcijų tvarkymo mechanizmu. Jos užduotis – instrukcijų saugojimas ta tvarka, kurią jos turi būti vykdomos. T.y.,  jei pirmoji instrukcija, esanti adresu 100, nukreipia valdymą į instrukciją esančią adresu 200, tai priešatmintinėje ji bus tiesiogiai po pirmos, instrukcijos, būtent taip kaip turi būti vykdoma ir t.t..
1.         Kas tai yra konvejerinis duomenų apdorojimas?
2.         Kokios yra pagrindinės komandos vykdymo fazės?
3.         Kaip konvejerio pakopų didinimas įtakoja procesoriaus darbo spartą?
4.         Kaip vykdoma konvejerizacija?
5.         Kas charakteringa RISC architektūros procesorių konvejeriams?
6.         Kiek pakopų turi tipiniai šiuolaikiniai procesoriai?
7.         Kodėl esant konvejeriams reikalingas programos išsišakojimų nuspėjimas?
8.         Kokios problemos gali kilti konvejeryje dėl neteisingo programos išsišakojimo nuspėjimo?
1        Konvejeris - speciali loginė schema, leidžianti optimizuoti procesoriaus darbą, vykdant nepriklausomus veiksmus lygiagrečiai.
2        Šiuolaikiniai procesoriai informaciją apdoroja konvejeriniu (Pipelined) būdu. Taip apdorojant informaciją, ilgai trunkanti operacija suskaidoma į etapus, ir jie nuosekliai sujungtuose įtaisuose vykdomi vienas paskui kitą.
3        Kadangi programos kai kada šakojasi, procesoriuose yra specialus prognozavimo įtaisas (BTB - Branch Target Buffer), nusprendžiantis, kurios programos šakos instrukcijas įrašyti į registrus, nes, apsirikus, tenka gaišti laiką jau įrašytoms instrukcijoms pakeisti kitos šakos instrukcijomis.
4        Konvejerizacija (pipelining) numato kiekvienos instrukcijos skaidymą į kelis etapus, be to kiekvienas etapas vykdomas atskiroje procesoriaus konvejerio pakopoje. Atsilaisvinant kitoms pakopoms, vykdoma instrukcija juda konvejeriu. Tuo būdu, konvejeryje vienu metu gali būti vykdomos kelios iš eilės einančios instrukcijos.
5        Kai kurie sudėtingesni konvejeriai būna apjungti su kešavimo schemomis, ilgiau trunkančius veiksmus (komandų išrinkimą, jų duomenų išrinkimą) leidžia vykdyti iš anksto.
6        Itin efektyviai konvejeriai naudojami RISC procesoriuose: dėl mažo komandų skaičiaus, vienodo komandų (ir duomenų) ilgio, mažo kiekio operandų (dažniausiai - vieno), adresavimo būdų ribojimo, RISC procesoriuose esančius konvejerių darbą galima efektyviai prognozuoti ir smarkiai optimizuoti.
7        Šiuolaikiniai CPU turi ne vieną konvejerį, todėl vienu metu gali apdoroti keletą komandų. Pavyzdžiui, “Pentium 4” ir “Athlon XP” per vieną sinchronizatoriaus taktą gali iššifruoti apie 2,5 komandos. Procesoriuje “Pentium 4” yra keli labai ilgi konvejeriai, leidžiantys procesoriui vienu metu ir skirtingomis stadijomis apdoroti 126 komandas. Todėl CPU gali padaryti daugiau darbo, kai lygiagrečiai veikia keli konvejeriai:
8        Problema su keliais konvejeriais iškyla tada, kai procesorius gali lygiagrečiai iššifruoti keletą komandų – kiekvieną atskiriame konvejeryje. Kartais neįmanoma išvengti neteisingai nuspėtų komandų (netinkama eilės tvarka). Tai vadinama klaidingu numatymu, kuris išeikvoja daugybę laikmačio taktų, nes turi būti išrinkta kita komanda, turinti pereiti per konvejerį.

Tikslai:
1. Suprasti x86 komandų formatus.
2. Paaiškinti x86 taikomus adresavimo režimus ir jų darbo mechanizmą.
3. Įvardinti pagrindinius komandų sistemos skirtumus nuo  I8080 procesoriaus.
Temai studijuoti skirtas laikas:               1 teorijos valanda;
2 praktinio darbo valandos;
2 savarankiško darbo valandos.
6.14. MP 8086 komandų formatai
Komandos formatu vadinama žinių apie komandos dalių (laukų) ilgį, sudėtį, paskirtį ir tarpusavio padėtį visuma.
X86 šeimos procesorių komandų sistema formavosi programinio suderinamumo principu pradedant nuo I8086 procesoriaus.  Šio procesoriaus komandų sistema iš esmės perėmė ir I8080 procesoriaus komandų sistemos bruožus, tačiau, deja, dėl pakeistų registrų vardų ir kai kurių kitų niuansų, programinis suderinamumas nėra išlaikytas.
Prisiminkite procesoriaus I8086 programinį modelį, kuris nagrinėtas vadovėlio 4 temoje.
MP 8086 komandų formatai pateikti 12.1 pav.
12.1 pav. MP 8086 komandų formatai




I8086 naudojami nuo 1 iki 6 baitų komandų formatai.


Operacijos kodas teikiamas pirmajame komandos baite, o kartais ir centrinėse antrojo baito skiltyse. Kraštinėse šio baito skiltyse    nurodomas adresavimo režimas. Trečiajame  ir ketvirtajame baituose paprastai teikiamas adreso poslinkis , o penktajame ir šeštajame - tiesioginis (betarpiškas) operandas .
Vieno arba dviejų baitų komandose teikiamas operacijos kodas (OK), adresavimo režimo nuoroda bei (dažniausiai) registrų adresai.
Kai baitų daugiau, juose gali būti:
Ø      dviejų baitų adresas (tiktai tiesioginiam adresavimui);
Ø      vieno arba dviejų baitų poslinkis (postūmis):
Ø      vieno arba dviejų baitų tiesioginis operandas;
Ø      vieno arba dviejų baitų postūmis su vieno arba dviejų baitų tiesioginiu operandu;
Ø      dviejų baitų postūmis ir dviejų baitų segmento adresas.
Rašydami komandą, visada pirmiau rašykite jaunesnįjį, po to vyresnįjį postūmio ar tiesioginio operando baitą.



Šiame MP yra žymiai daugiau adresavimo režimų nei 8080. Be esančių MP 8080 adresavimo
tipų, įvesti dar ir tokie:
Ø      bazinis;
Ø     indeksinis;
Ø      bazinis su poslinkiu;
Ø      indeksinis su poslinkiu;
Ø      indeksinis-bazinis;
Ø      indeksinis-bazinis su poslinkiu.
12. 1 lentelė. Adresavimo režimų lentelė



Kai naudojami šie adresavimo režimai , komandos antrojo baito skiltyse MOD  bei M/R nurodoma kodų kombinacija, apibūdinanti adresavimo režimą.









Beveik visos šio mikroprocesoriais komandos leidžia manipuliuoti baitais ir žodžiais, saugomais registruose arba atmintyje. Mikroprocesoriaus duomenys priskiriami 16-os skilčių klasei. Mikroprocesorius gali apdoroti:
Ø      dvejetainius skaičius be ženklo,
Ø      dvejetainius skaičius su ženklu,
Ø      dešimtainius    skaičius    (supakuoto    ir   išpakuoto formato),
Ø      simbolius,
Ø      simbolių eilutes.

Vieno tipo  komandoms priskiriamos tos pačios mnemonikos.  Jų yra  111.  Bendras komandų su modifikacijomis kiekis - 11986. Pagrindinės komandų grupės yra šios:
Ø      persiuntimo,
Ø      aritmetinės,
Ø      loginės,
Ø      nukreipimo,
Ø      valdymo.
1.      Kodėl tarpI8080 ir I8086 procesorių komandų sistemų nėra pilno suderinamumo?
2.      Kokie nauji adresavimo režimai įvesti į I8086 komandų sistemą?
3.      Ar naujų adresavimo režimų įvedimas ir žymus komandų modifikacijų skaičiaus padidinimas I8086 buvo efektyvus sprendimas?
4.      Kokie komandų formatai naudojami I8086?
5.      Kur saugomas komandos operacijos kodas?
6.       Segmento registro turinys AA47H. Vykdomasis adresas (poslinkis) 784BH. Nustatykite fizinį adresą.
A. A484BH     B. B1CBBH    C.    2D47BH
7.       Nurodykite kaip formuojamas adresas ir kokie adresavimo režimai naudojami komandose, kurių antrasis baitas yra:
Antras komandos baitas
Adresavimo režimas
Adreso formavimas
00XXX010


01XXX110


10XXX011


10XXX001


00XXX011


10XXX101


00XXX011




1.      X86 šeimos procesorių komandų sistema formavosi programinio suderinamumo principu pradedant nuo I8086 procesoriaus. 
2.      Visos  MP     8080 komandos  vykdomos  ir MP8086,  tačiau visiško programinio suderinamumo "iš apačios į viršų" asemblerio lygyje nėra. Viena iš priežasčių – pasikeitė registrų pavadinimai.
3.       Komandos formatu vadinama žinių apie komandos dalių (laukų) ilgį, sudėtį, paskirtį ir tarpusavio padėtį visuma.



4.      Komandų formatai labai įvairūs: nuo vieno iki šešių baitų.
5.      Operacijos kodas teikiamas 1 komandos baite, o kartais ir centrinėse antrojo baito skiltyse; kraštinėse šio baito skiltyse    nurodomas adresavimo režimas. Šešių baitų komandos trečiame ir ketvirtame baituose paprastai teikiamas adreso poslinkis , o penktame ir šeštame - tiesioginis (betarpiškas) operandas .
6.      Vieno arba dviejų baitų komandose teikiamas operacijos kodas (OK), adresavimo režime nuoroda bei (dažniausiai) registrų adresai.
7.      Adresavimo režimai nurodomi antrojo baito dviejose vyriausiose ir 3 jauniausiose
skiltyse.
8.      Įvesti papildomi: bazinis, indeksinis, bazinis indeksinis, bazinis su poslinkiu, indeksinis su poslinkiu ir bazinis - indeksinis su poslinkiu Adresavimo režimai.
9.      Beveik visos šio mikroprocesoriais komandos leidžia manipuliuoti baitais ir žodžiais, saugomais registruose arba atmintyje. Mikroprocesoriaus duomenys priskiriami 16-os skilčių klasei.
10.  Vieno tipo  komandoms priskiriamos tos pačios mnemonikos.  Jų yra  111.  Bendras komandų su modifikacijomis kiekis - 11986.
11.  Pagrindinės komandų grupės yra šios: persiuntimo, aritmetinės, loginės, nukreipimo, valdymo.
12.  MP 8086 komandų sistema žymiai praplėsta, lyginant su MP8080.
13.  Įvestos tokios sudėtingos komandos kaip daugyba ir dalyba.
14.  Komandų sistema žymiai lankstesnė.
15.  Dėl Adresavimo režimų įvairovės labai išaugo komandų modifikacijų skaičius.
16.  Bet kuris iš bendrųjų registrų gali būti naudojamas kaip kaupiklis.

Tikslai:
1. Suprasti slankaus kablelio procesoriaus paskirtį.
2. Paaiškinti slankaus kablelio skaičių vaizdavimą.
3. Paaiškinti slankaus kablelio procesoriaus sudėtį ir veikimą.

Temai studijuoti skirtas laikas:               1 teorijos valanda.

          Kompiuteris atlieka skaičiavimus, kurios galima padalyti į dvi grupes:
Ø      Sveikųjų skaičių operacijos.
Ø      Slankiojo kablelio operacijos.
Sveikųjų skaičių operacijos tikriausiai pačios svarbiausios, žinoma, jeigu kompiuteryje veikia įprastos biuro programos. Tačiau pastaraisiais metais operacijos su slankiuoju kableliu pasidarė žymiai svarbesnės, nes į kasdienę kompiuteriją vis labiau skverbiasi trimatė grafika ir garsas, nuotraukų ir filmų apdorojimas.
Procesoriaus smegenys – ALU įtaisas. Tai skaičiavimo įtaisas, atliekantys operacijas su visais sveikaisiais skaičiais. Kompiuterio darbą , pavyzdžiui, su paprastu tekstu atlieka ALUALU puikiai operuoja sveikaisiais skaičiais. Jeigu pasitaiko dešimtainiai skaičiai ir ypač dešimtainės trupmenos (matematikoje vadinami realiaisiais skaičiais), ALU dūsta ir operacijų apdorojimas gali trukti labai ilgai.
Kompiuteris turi daug skaičiuoti su dešimtainiais (realiais) skaičiais, kai žaidžiami trimačiai žaidimai ir vykdomos kitos daugialypės terpės programos. Šiuos dešimtainius skaičius CPU apdoroja su specialiu įtaisu, vadinamu slankiojo kablelio operacijų įtaisu FPU (flopy point unit).
FPU specialiai sukurtas slankiojo kablelio operacijoms. Viename procesoriuje paprastai yra keli ALU ir FPUCPU taip pat yra kitokių operacijų įtaisų, pavyzdžiui, LSU (Load/Store Unit – duomenų įkėlimo ir laikymo įtaisas).
Realieji skaičiai (pavyzdžiui, skaičius 6) gali turėti daugybę skaičių po kablelio. Norint operuoti šiais, dažnai labai dideliais skaičiais, jie keičiami į specialų formatą.
Pirmiausia nustatomas reikimas tikslumas. Kadangi skaičiai turi daugybę skaičių po kablelio, juos reikia apvalinti. Pavyzdžiui, galima rinktis penkis reikšmingus skaičius, kaip pateikta pavyzdyje toliau (kompiuteris tikriausiai renkasi ir daugiau skaičių). Nustačius tikslumą, skaičiai keičiami, kaip parodyta toliau (kablelis slankioja):
Skaičius 1257,45 rašomas 0,12575x104.
Skaičius 0,00696784 rašomas 0,69678x10-2.
Dabar FPU skaičius gali tvarkyti ir juos apdoroti, pasitelkdamas aritmetinius operatorius.

Įprasta forma
Perrašyta
FPU
1257,45
0,12575 x 104
12575; +4
0,00696784
0,69678 x 10-2
69678; -2
13.1 pav. Skaičių vaizdavimas slankiojo kablelio formatu


6.21. FPU sandara
Kompiuteryje, kaip minėta iš principo gali būti dviejų tipų aritmetiniai- loginiai įtaisai:
Ø                          ALU (Arithmetic and Logic Unit – aritmetinis ir logikos įtaisas);
Ø                          FPU (Floating Point Unit – slankiojo kablelio operacijų įtaisas).
FPU - tai specializuota IMS , atliekanti sudėtingas aritmetines ir matematines oprecijas, duomenų slankaus kablelio formoje apdorojimą ir kt. Jis tai daro žymiai greičiau nei centrinis MP Dirbant su tekstų redaktoriais, matematinis procesorius nedidina duomenų apdorojimo spartos.
Tais atvejais, kai kompiuteris naudojamas inžinieriniams , matematiniams uždaviniams spręsti, kai vartotojas naudoja elektroninių lentelių taikomuosius paketus, matematinis procesorius duoda gana žymų efektą. Slankiojo kablelio skaičius standartiniam aritmetiniam procesoriaus įrengimui (ALU) apdoroti pernelyg sunku. Tiksliems skaičiavimams reikia milžiniško bitų skaičiaus. Sveikųjų skaičių skaičiavimai daug paprastesni ir visada teisingi. Štai kodėl naudojamas FPU – specialus skaičiavimo elementas, operuojantis įvairių bitų ilgių slankiojo kablelio skaičiais, priklausomai nuo reikiamo tikslumo. Slankiojo kablelio skaičiai gali būti iki 80 bitų ilgio, o įprasti sveikieji skaičiai – “tik” 32 bitų (leidžiama 4294 milijardai skirtingų skaičių). Taigi FPU yra skaičių triuškintojas, kuris sumažina ALU krūvį.
13.2 pav. Matematinio procesoriaus 8087 sandara



CPU ir FPU yra susieti tik išoriškaiMikroprocesorius negali kreiptis i FPU registrus ir atvirkščiai. Duomenimis abu procesoriai apsikeičia tik per atmintinę, prie kurios jie abu turi priėjimą. Tačiau atmintinės adresavimo registrai yra tiktai mikroprocesoriuje Intel 8088, todėl koprocesorius operandų atmintinėje adresavimui naudojasi mikroprocesoriaus paslaugomis per komandą ESC.
Sistemoje be matematinio procesoriaus komanda ESC yra analogiška komandai NOP, tačiau yra ilgiau vykdoma. ESC komandos turi adresinę informaciją, kuri saugoma adresavimo baite, su poslinkiu arba be jo. Nors mikroprocesorius komandos ESC nevykdo ir traktuoja ją kaip NOP, tačiau apskaičiuoja vykdomąjį adresą ir kreipiasi i atmintinę duomenų skaitymui ir rašymui.
Taigi mikroproesorius apskaičiuoja operando atmintinėje adresą, o FPU atlieka likusią komandos dalį.
FPU nepakeičia nei vienos Intel 8088 komandos, o tiktai papildo komandų sistemą nauju tipu aritmetinėmis operacijomis.
Jis naudoja septynis duomenų tipus, iš kuriu šeši yra būdingi tik FPU, t.y., jų nėra CPU. Keturi koprocesoriaus duomenų formatai yra skirti darbui su sveikais skaičiais, vienas iš jų yra išplėstinis dešimtainis formatas. Likę trys formatai skirti veiksmams su realiais skaičiais atlikti.
Matematiniai procesoriai  nuolat tobulinami. Pavyzdžiui procesorius “Intel 80386” neturėjo įmontuoto skaičiavimo įrenginio (FPU). Visus skaičiavimus atliko procesoriaus aritmetinis ir logikos įrenginys (ALU). Vartotojas galėjo nusipirkti atskirą FPU (“80387”), įstatomą į pagrindinės plokštės lizdą šaliaCPU.  Į “80486” jau buvo procesoriaus korpusą  jau integruotas  FPU.
Tobulindami šiuolaikinius procesorius projektuotojai ypatingą dėmesį skiria FPU darbu spartinti. Šalia įprastinių FPU funkcijų , šiuolaikinių procesorių FPU turi ir papildomas daugialypės terpės duomenų apdorojimo funkcijas. Jie realizuoja MMXSSE, SSE1, SSSE2, SSE3 ir kitus naujus komandų rinkinius
1.  Ar MP 8080 šeimoje yra matematinis procesorius?
2.              Ar gali centrinis  procesorius  atlikti slankaus  kablelio duomenų apdorojimooperacijas?
3.              Ar matematiniam procesoriui vykdant slankaus kablelio operacijas, CPU galiatlikti kitas komandas?
4.              Po kiek skilčių turi bendrieji 8087 registrai? 
5.      Paskaičiuokite maksimalų duomenų diapazoną slankaus kablelio formoje.
6.      Palyginkite matematinio ir centrinio procesoriaus sandaras.
1.    Matematinis procesorius žymiai greičiau nei CPU vykdo slankaus kablelio duomenų
apdorojimo ir kitas matematines operacijas.
2.    Kompiuteris turi daug skaičiuoti su dešimtainiais (realiais) skaičiais, kai žaidžiami trimačiai žaidimai ir vykdomos kitos daugialypės terpės programos.
3.    Šiuos dešimtainius skaičius CPU apdoroja su specialiu įtaisu, vadinamu slankiojo kablelio operacijų įtaisu FPU (flopy point unit).
4.    FPU  - tai specializuotas lustas , atliekantis sudėtingas aritmetines ir matematines oprecijas, duomenų slankaus kablelio formoje apdorojimą ir kt. Jis tai daro žymiai greičiau nei centrinis MP. Dirbant   su   tekstų   redaktoriais,   matematinis   procesorius   nedidina   duomenų apdorojimo spartos.
5.    Tais atvejais, kai kompiuteris naudojamas inžinieriniams , matematiniams uždaviniams spręsti, kai vartotojas naudoja elektroninių lentelių taikomuosius paketus, matematinis procesorius duoda gana žymų efektą.
6.    Slankiojo kablelio skaičiai gali būti iki 80 bitų ilgio, o įprasti sveikieji skaičiai – “tik” 32 bitų (leidžiama 4294 milijardai skirtingų skaičių). Taigi FPU yra skaičių triuškintojas, kuris sumažina ALU krūvį.
7.    FPU yra pavaldus mikroprocesoriui ir pačiame mikroprocesoriuje Intel 8088 yra atsižvelgta į jo buvimo galimybę per ESC komandą.
8.    FPU stebi mikroprocesoriaus imamas iš atmintinės vykdymui komandas ir, jeigu eilinė komanda yra jo, tai jis ją įvykdo lygiagrečiai mikroprocesoriaus darbui. Tokiu būdu realiai gaunamas lygiagretus programos vykdymas. 
9.    CPU apskaičiuoja operando atmintinėje adresą, o FPU atlieka likusią komandos dalį.
10.FPU nepakeičia nei vienos Intel 8088 komandos, o tiktai papildo komandų sistemą naujų tipų aritmetinėmis operacijomis.
11.Šalia įprastinių FPU funkcijų , šiuolaikinių procesorių FPU turi ir papildomas daugialypės terpės duomenų apdorojimo funkcijas. Jie sėkmingai realizuoja MMXSSE, SSE1, SSSE2  ir kitus naujus komandų rinkinius.

Komentarų nėra:

Rašyti komentarą

Etiketės