kategória | ||||||||||
|
||||||||||
|
||
A számítógépek a világon az ötvenes években jelentek meg és néhány évtized alatt elterjedtek. A számítógépek robbanásszerű fejlődésének az volt az alapja, hogy sikerült egy olyan jól használható elvi felépítést kidolgoznia a magyar származású Neumann Jánosnak, amely máig is meghatározza a számítógépek elvi felépítését: A Neumann elv az alábbiakat mondja ki:
Egy számítógépben az alábbi funkcionális egységeknek kell lennie:
A programok és az adatok tárolása közös nagy kapacitású memóriában történik, numerikus kódok formájában.
Az adatok és kódok ábrázolására kettes számrendszert használunk.
A számítógépben kell lennie egy vezérlőegységnek, amely különbséget tesz az adat és az utasítás között és az utóbbiakat automatikusan végrehajtja.
A számítógépben lennie kell egy aritmetikai-logikai egységnek (ALU), amelyaritmetik 727i86h ai műveleteken kívül alap logikai műveleteket is el tud végezni.
A külvilágot a számítógéppel perifériák kapcsolják össze.
A mai modern számítógépekben ezek az egységek funkcionálisan léteznek, bár nem mindig tisztán elkülönülve egymástól.
A fentieknek megfelelnek a következő fogalmak:
CPU (Central Processor Unit) Olyan egysége a számítógépnek, amely magábafoglalja a Neumann elv vezérlőegységét és az ALU funkcióit is elvégzi. Napjainkban ezeket a funkciókat mikroprocesszorok végzik.
Memória: Megkülönböztetünk operatív memóriát és háttértárat. Az operatív memória olyan eszköz, amelyből a CPU közvetlenül tetszőleges sorrendben ki tudja olvasni az adatokat és vissza tudja írni az eredményeket. Az operatív memóriának gyorsnak kell lennie. Ezt csak félvezetőkkel tudják ma megoldani. Korábban léteztek más, elektromágneses elven működő memóriák (pl. ferrit gyűrűs memória) vagy mágneslemezek. Mivel a mágneslemezek sokkal lassabbak, mint a félvezetős társaik, viszont a gép kikapcsolása után is megtartják a rajtuk lévő információt, így felhasználási területük is más lett. Őket háttértáraknak hívjuk. Ha egy mágneslemezre a számítógép kiírja a memóriája tartalmának egy részét, hogy az így felszabaduló helyre más memóriatartalmat töltsön, akkor azt mondjuk, hogy virtuális memóriát használ, azaz a háttértár egy része olyan funkciót lát el, mintha a memória kiterjesztése lenne.
Perifériák: Alapvető feladatuk a kapcsolattartás a külvilággal. Háromféle periféria típust különböztetünk meg: Input, Output és kétirányú.
Buszok vagy rendszersínek. A számítógép funkcionális eszközei között közvetítik az adatokat. Általában a számítógép minden eszköze buszon keresztül kapja az adatokat illetve továbbítja más eszközöknek. Amikor egy egység elhelyez egy adatot a buszon, akkor az adó lefoglalja a buszt, más eszköz ekkor nem adhat a buszra, csak fogadhatja az onnan érkező adatokat. Egy modern számítógépben többféle, és célú busz is van. Céljuk szerint beszélhetünk címbuszról és adatbuszról és vezérlő buszról beszélhetünk.. Az adatot küldő eszköz először elhelyezi a címbuszra a küldendő adat címét, majd elhelyezi az adatbuszon a küldendő adatot. A vezérlő buszon keresztül utasítja a megfelelő eszközt az adat fogadására, amely fogadja a címet, leveszi az adatbuszról az adatot és elhelyezi a megadott címre. A buszok felfoghatók több kábelből álló kötegekként, ahol az egyes kábeleken az adatnak csak egy-egy bitje helyezkedik el. A vezérlő busz az egységek összehangolásának fontos eszköze.
Egy processzor működése során ciklikusan hajtja végre feladatait. Az operatív memóriából veszi az adatokat és az eredményeket is oda írja vissza. A processzor mindenkor tárolja az operatív memóriának azt a pontját, ahonnan az éppen feldolgozott utasítást olvasta be. Ezt a tárolóegységet utasításszámlálónak vagy PC-nek (Program Counter). A PC mérete akkora, hogy a számítógépben lévő bármilyen adat címe beleférjen, ezért nem ritka a 64 bites PC sem.
Minden processzornak típustól függően van több - kevesebb olyan tárlóhelye, ahonnan közvetlenül memória-hozzáférés nélkül tud műveleteket végezni és az eredményeket is el tudja helyezni ott. Ezeket a tárlóhelyeket regisztereknek hívjuk. A regiszterek között van olyan, amit a programozók nem használhatnak, mert a processzor automatikusan tölti be az adatokat oda és vannak a programozás során felhasznált regiszterek is. A regiszterek mérete általában megegyezik az adatbusz szélességének méretével, azaz 16 bites busz esetén 16 bites regiszterek vannak, míg 32 bites esetben a 16 bites regiszterek összevonhatók 32 bitessé. Vannak olyan regiszterek, amelyek kitüntetett szerepet játszanak a processzor életében. Az Intel processzorok esetén ezeket a regisztereket az alábbi néven nevezzük
Általános célú adattároló regiszterek (16 bites)
AX - Akkumlátor, aritmetikai műveletek eredménye és bemenő adatira használják
BX - Táblázatok kezdőcíme illetve relatív címzés az értéke
CX - Számlálókat tárolnak benne (Count)
DX - általános adattároló regiszter.
Memória címek tárolására használatos regiszterek
IP - A végrehajtandó utasítás helyét tárolják benne (utasításszámláló)
CS - A program kódszegmensének tárolására használt regiszter
DS - A program adatszegmensének tárolására használt regiszter
SS - A veremszegmensre mutató regiszter.
ES - Extra szegmens vagy a CS vagy a DS-sel együtt használják 32 bites címzéshez használják.
SP - A verem mutató (Stack Pointer). A verem tetejének címét tartalmazza.
BP - A verem kezdetére mutat
(Base Pointer) (Ha az SP-be beleírom a BP tartalmát, akkor kiürítettem a
vermet !)
SI - Indexregiszter. Neve forrásindex (source index). Egy általános célú regiszterrel együtt használatos. A másik index által mutatott adatmezőn belüli relatív címet mutatja. Adatok másolásánál a forrás pillanatnyi relatív címére mutat
DI- Indexregiszter. Neve célindex (destination index). Egy általános célú regiszterrel együtt használatos. A másik index által mutatott adatmezőn belüli relatív címet mutatja. Adatok másolásánál a cél pillanatnyi relatív címére mutat.
Feltételregiszter
A regiszter egyes bitjei az utasítás végrehajtása során keletkező eredmények tartalmazó eredmény regiszter. Ha egy utasítás végrehajtódik, akkor ennek a regiszternek egy-egy bitje jelzi az eredmények jellegét. Ezeket a biteket szokás flag-eknek (zászló) is hívni.
A lehetséges flag-ek:
CF - volt-e aritmetikai átvitel (Carry)
OF - volt-e túlcsordulás (Overload)
ZF - az eredmény zérus-e (Zerus)
SF - az eredmény negatív-e (Sign)
PF - páros számú 1-es bit van az eredményben (Parity)
AF - Igazítás szükséges-e (Align)
DF - Ciklikus műveletnél az SI, DI jobbra vagy balra lépjen (Direction)
IF - Megszakítás engedélyezve van-e (Interrupt)
TF - Csapda (Debugger használatakor) működik-e (Trap)
A processzor működési ciklusa a következő:
Az utasításszámlálók által mutatott helyről beolvassa az egy byte-os kódot a processzor egy belső regiszterbe (fetch), amit utasításnak tekint
A kód alapján meghatározza, hogy milyen művelet, hány adat szükséges a végrehajtáshoz
Beolvassa a megfelelő számú adatot a regiszterekbe
Növeli az utasítás plusz az adatok hosszával az utasításszámláló értékét.
Végrehajtja az utasítást, elvégzi a megfelel műveleteket, majd az eredményt elhelyezi a megfelelő regiszterekben, esetleg közvetlenül a memóriában.
Beállítja az eredményjelző biteket.
Megnézi van-e még utasítás, ha van, akkor kezdődik a ciklus elölről, különben a processzor leáll.
A processzorokban az alábbi gépi kódú utasításfajták vannak:
Adatmozgató utasítások: regiszter és memória között, regiszterek között, illetve két memóriatartomány között. (MOV)
Aritmetikai, logikai utasítások (ADD, SUB, RHL, SHL, INC, DEC)
Összehasonlító utasítások (CMP, CNV, stb. ...)
Feltételes ugrás a jelzőbitek alapján. (JNE, JEQ, RETURN)
Feltétlen ugrás (JuMP), eljáráshívás (Jump SubRutin), visszatérés eljárásból (RETurn)
Megszakításkezelés (INT, RETI)
Jelzőbitek állítása
Lebegőpontos utasítások
Egyéb utasítások
A számítógép memóriáját az XT-k esetén 20 bittel címezhetjük meg, amelyből 16 bit jelzi a szegmens címét, 4 bit az offszet címét. Így közvetlenül csak 220 byte, azaz 1 Mbyte memóriát lehet megcímezni. A 286-os processzorok ugyanezt a címzést használják. A 386-os és fejlettebb processzorok a 16 bites szegmenshez szintén 16 bites offszet címet rendelhetnek hozzá. Ekkor a szegmens már lapnak (Page) hívjuk és az így címzett memóriával 232 byte, azaz 1 Terabyte memóriát lehet megcímezni
Ha konkrétan beírjuk egy utasításba a kért címet, akkor abszolút címzésről beszélünk.
Ha egy memóriacímen lévő adat által mutatott helynek a címét használjuk, akkor közvetett címzésről beszélünk.
Ha a memória megcímzése során a programozó a szegmens és offszet címet is használja, akkor közvetlen címzésről beszélünk.
Ha a programozó egy szegmens kezdetéhez viszonyított címzést használ, akkor relatív címzésről beszélünk.
A legbonyolultabb eset, amikor közvetett, relatív címzést használunk. A többit gondolja végig mindenki maga!
A társprocesszorok olyan processzorok, amelyek a fő processzor irányítása alatt valamilyen kisegítő szerepet töltenek be. A PC-k esetén ilyen a matematikai kooprocesszor, amely a lebegőpontos utasítások végrehajtásában játszik óriási szerepet vagy más számítógépekben a grafikai processzor, amely a kép előállításáért felelős, stb.
A legegyszerűbb adatbeviteli és kiviteli mód. A processzor rendszeres időközönként lekérdezi a bemeneti periféria állapotát és ha érdemleges adatot talál, akkor beolvassa és feldolgozza azt. Hátránya, hogy a processzor állandóan foglalt még akkor is, ha sokáig nincsen bemenő adat. A periféria átvitele alatt mást nem is képes csinálni.
Az ilyen rendszerekben a periféria a számára meghatározott megszakításkérő vonalon keresztül értesíti a processzort az adatátviteli igényére. A kérés hatására a processzor megvizsgálja, hogy engedélyezett-e a megszakítás. Ha engedélyezett, akkor a regiszterek tartalmát és az utasításszámláló tartalmát elmenti a stack-be, kikeresi egy táblázatból a megszakításhoz tartozó ugrási címet és elkezdi a megszakítás lekezeléséhez szükséges programot. Miután lekezelte a programot odaér a megszakításból való visszatérés utasításhoz, aminek hatására kiveszi az utasításszámláló értékét a stackből, beállítja az utasításszámlálót és visszatölti a stackből a regiszterek értékeit is, majd folytatja a megszakított programot.
Ennek a megoldásnak a hátránya az, hogy a veremműveletek sok gépidőt igényelnek, tenni kell valamit a megszakítás alatti megszakítások kezelésével is. A megszakítás lekezelése a futó programoktól veszi el a gépidőt.
Ebben az esetben a periféria és a memória közötti adatátvitelt önálló, a processzortól független áramkör végzi, a működésnek azokban az időszeleteiben, amikor a processzor nem kommunikál az adatbuszon. A processzornak csak annyi a dolga, hogy a DMA vezérlővel közölje az átadandó adatok címét és mennyiségét.
:
1665