A digitális számítógép a számítógépek egyik kategóriája. Az elnevezés megkülönbözteti az analóg számítógépektől, illetve a 2010-es évek második felében kísérleti jelleggel megjelent kvantumszámítógépektől. A digitális számítógép működésének és felépítésének alapja a digitális technika.
A ma használt számítógépek szinte kivétel nélkül digitális számítógépek. Analóg számítógépeket kevés helyen, speciális környezetben vagy célokra használnak. A kvantumszámítógépek 2022-ben még kísérleti stádiumban vannak, elterjedésük a következő évtizedekben várható.
A digitális számítógépek esetén az adatok bevitele (input), feldolgozása és az eredmények megjelenítése (output) számjegyek formájában történik[1].
A digitális számítógépeket (régebbi névvel programvezérelt digitális számítóautomatákat vagy programvezérelt digitális számológépeket) azzal a céllal fejlesztették ki, hogy egyrészt az embert tehermentesítsék a numerikus számolás rutinmunkájától, másrészt, hogy lerövidítsék a számolás idejét. Különösen az olyan feladatoknál alkalmazható előnyösen a számítógép, ahol sok különböző számértékkel kell ugyanazt a számítási folyamatot végrehajtani. Ismert, hogy az ember ha egy műveletsort monoton módon, gyakran ismétlődően végez el, egy idő után gyakrabban téveszt.[2] Maga a monotóniatűrés egy emberi adottság, vannak emberek, akik jobban és vannak, akik kevésbé tűrik azt.[3][4] A számítógépek alkalmazásával sok monoton folyamat automatizálható, gépesíthető, ezzel az emberi hibázás esélye csökkenthető.
Digitális szó jelentése
A számítástechnikában, az informatikában, illetve az elektronikában használt magyar digitális (angolul digital) kifejezés a latin eredetű angol digit (számjegy) szóból származik[1]. Az anatómiában a latin digit/digiti/digitus[5][6] kifejezés a kézen, illetve a lábon lévő ujjakat jelenti. Általánosabban a gerinces állatok ujjait jelenti. Az orvosi kifejezések között a szintén latin digitalis jelentése „az ujjhoz tartozó”[6]. Hasonló a növényrendszertanban a Gyűszűvirág nemzetség latin digitalis elnevezése is. Feltételezhető, hogy a digit szó számjegy jelentése is a latin eredetű ujj/ujjak szóból ered, majd ennek egy jelentésváltozása a kézen történő számolás értelme, majd ebből alakult ki a számjegy jelentéstartalom.[7]
Később már a 20. század közepén ebből kifejezésből alakult ki a digitális számítógép elnevezés is, jelezve, hogy a működésének alapja a számjegyeken alapuló digitális technika.
Az 1940-es években még kísérleteztek decimális (tízes számrendszeren alapuló) számítógépek építésével is, ilyen volt az első teljesen elektronikusnak tekintett programozható számítógép, az ENIAC[8]. Nagyjából azonos korban többen bináris (kettes számrendszeren alapuló) számítógépet építettek ilyen volt pl. Konrad Zuse Z3 jelfogós számítógépe, illetve John Vincent Atanasoff vezetésével épült Atanasoff–Berry computer (ABC) elektronikus számítógép is[9]. Neumann János a korszakot meghatározó 1945. június 30-án közzétett First Draft of a Report on the EDVAC[10] című munkájában határozottan javasolta a bináris felépítést. Ettől az időszaktól kezdve a számítógépek kettes számrendszert használnak. Sokan tévesen a bináris elvű számítógépek és a digitális számítógép fogalmakat szinonimának kezelik. Ez a fentiek alapján téves, mert a bináris számítógép a digitális számítógép egy részhalmazának tekinthető. Azaz minden bináris számítógép digitális számítógép, de nem minden digitális számítógép bináris.
Számítógép szó
A számítógép szó a magyar nyelvben 1958-ban jelent meg. A magyar nyelvben egészen az 1970-es évek végéig nem volt egységes a kifejezés használata.[11] Korábban több kifejezést is használtak a számítógépekre, pl. számológép, számoló automata. Sokszor az 1970-es évek vége előtt megjelent magyar nyelvű szakcikkekben, szakkönyvekben sem mindig egyértelmű, hogy a mai értelemben vett számítógépről, vagy a számológépről van-e szó.
Digitális számítógépek kialakulása
A digitális számítógépek kialakulása a számítástechnika és a számítógép történetének az utolsó kb.100 évére tehető. Korábban főleg számolási feladatokat megkönnyítő mechanikus, illetve elektromechanikus eszközöket készítettek, használtak. Az 1930-as évek végére, az 1940-as évek elejére az elektrotechnika, elektronika fejlődése lehetővé tette a számítástechnika gyors fejlődését is. Nagyjából ezzel egyidőben, részben a második világháború hatására megnőtt az igény a gyors működésű számítógépekre. Ebben az időszakban Németországban, Angliában, és az USA-ban több mérnök, fizikus, matematikus dolgozott a számítógépek megalkotásán.
1937-ben John Vincent Atanasoff felismerte, hogy a számítógépeket célszerű digitális elven felépíteni az analóg elv helyett[12]. Részben Atanasoff eredményeinek felhasználásával alkotta meg 1943-46 között John Presper Eckert és John William Mauchly[13] az ENIAC nevű elektronikus, programozható digitális számítógépet. A gép megalkotását az amerikai Hadügyminisztérium Hadianyag-ellátási Részlege rendelte meg 1943. június 5-én kelt szerződéssel a Moore Intézettől.[14] Később Herman Heine Goldstine-t kinevezték a projekt felügyelőjévé.[15] Ez a gép 1945. december 10-re készült el. Goldstine 1944-ben az aberdeeni[16] vasútállomáson találkozott véletlenül Neumann Jánossal és ekkor kezdődött kettejük között egy hosszabb ideig, Neumann János haláláig, tartó közös munka.[17]
Neumann János szerepe
Neumann 1944-ben, amikor először találkozott Goldstine-nal, a Manhattan terven dolgozott Los Alamosban. Goldstine meghívására többször meglátogatta a Moore Intézetet, ahol közben készült az ENIAC. Ekkor már felmerült a gép továbbfejlesztése, egy újabb gép megépítésének a gondolata, ez a gép lett később az EDVAC. Az EDVAC-cal kapcsolatos fejlesztési munkába szinte a kezdetektől bekapcsolódott Neumann János.[8] Ennek a fejlesztési projektnek a keretében Neumann egy összefoglalót készített First Draft of a Report of the EDVAC[10] címmel (a szakirodalmakban gyakran „csak” First Draft címmel hivatkoznak erre a munkára), amelyben összefoglalta azokat az alapelveket, amelyeket fontosnak tartott az EDVAC megépítéséhez. Ez az eredetileg belső (bizalmasnak) szánt feljegyzés később nyilvánosságra került, és ez lett hosszú időn keresztül a digitális számítógépek felépítésének az elméleti alapja. Tartalmazza a később Neumann-elveknek nevezett irányelveket, és az ebből következő felépítését a digitális számítógépeknek. Ezt utóbb Neumann-architektúrának nevezték el. Neumann a First Draft-ban következetesen a digital computing system[18] (magyarul digitális számoló rendszer), digital computing device[19] (magyarul digitális számoló eszköz) kifejezéseket használta. Ekkora már egyértelműen felismerték, hogy a digitális elvű számítógépek fejlesztésével érdemes foglalkozni, az analóg számítógépek speciális területen maradtak csak meg.
A digitális számítógépek elterjedése
A digitális számítógép megalkotása nem egy ember és nem egy intézmény munkája. Egy hosszú, több évtizedet átölelő folyamat eredményeként az 1940-es évek közepére, második felére alakultak ki azok a fő tervezési elvek, módszerek, amelyek meghatározzák a mai napig a digitális számítógépek felépítését. Kezdetben az akkor már a távíró- és telefontechnikában elterjedt jelfogókat (más néven reléket) használták az elektromechanikus digitális számítógépek alap elemeként[8]. A jelfogós gépek legfontosabb problémája a sebesség volt[20]. Az 1940-es évek közepétől elkezdték az elektroncsöveket használni az elektronikus digitális számítógépek fő alkatrészeként a jelfogók helyett. Az első valóban használható, elektronikus digitális számítógép 1945 végére készült el, ezt követően sorra jelentek meg a digitális számítógépek[8]. Az 1950-es évekre egyre több gép jelent meg. Kezdetben a számítógépek csak a hadiipar számára épültek. A fő alkalmazási területük az atomfegyverekhez kapcsolódó, illetve a különböző lövedékek[21] röppálya elemzéséhez szükséges számítások elvégzése volt[8]. Az első, kereskedelmi forgalomba hozott, sorozatban gyártott számítógép, az UNIVAC-I 1951. június 5-én került üzembe helyezésre. Ekkortól kezdődött a számítógépek rohamos elterjedése, ami után már nem csak a hadiipar és a kiemelt kutatóhelyek rendelkezhettek számítógéppel, hanem elvileg bárki, aki azt képes volt megfizetni[22]. Ebben az időszakban Európában (elsősorban Németországban, Franciaországban, Angliában) is megjelentek az első számítógépek. A hidegháború idején a keleti-blokkban a Szovjetunióban 1953-ban készült el az első, sorozatban gyártott számítógép, a Sztrela. Ezek a gépek még elektroncsöves felépítésűek voltak.
A tranzisztor megalkotása (1947. december 24.[23]) és elterjedése után a tranzisztorok lettek a számítógépek fő alkatrészei, azonban még az 1960-as évek elején is készültek elektroncsöves gépek. 1947 körül megjelent a mágnesdobos memória,[24] illetve néhány évvel később 1950 körül a ferritgyűrűs memória[25]. A mágneses tárolás lehetővé tette azt, hogy a digitális számítógépek memóriája nagyobb kapacitás mellett egyszerűbb (olcsóbb) felépítésű legyen. A ferritgyűrűs memória egy lényeges sebességbeli növekedést is magával hozott. Az integrált áramkörök megjelenése után – az első integrált áramkört a Texas Instruments mutatta be 1958-ban[26] – rövid idő alatt elkezdte az integrált áramkör felváltani a tranzisztort. 1971-ben az Intel bemutatta az első mikroprocesszort[27] ezután gyorsan terjedt a mikroprocesszorok alkalmazása is. A mikroprocesszor megjelenését követő években több gyártó is forgalomba hozott eleinte 8 bites, később 16 bites mikroprocesszorokat. Az első 16 bites mikroprocesszor 1976-ban jelent meg, a Texas Instruments TMS 9900 típusjelű eszköze volt[28]. 1979-ben a Motorola bemutatta az MC68000-es processzort, amelyik az első 32 bites mikroprocesszor volt[28]. Az 1970-es évek végétől a digitális számítógépek leggyakrabban mikroprocesszorokból és az azokat kiegészítő integrált áramkörökből épülnek fel. Az elektronikai alkatrészek fejlődésével a gépek gyártástechnológiája változott, ennek következménye lett, hogy a gépek mérete és ára rohamosan csökkent. 1981-ben megjelent az IBM PC,[29] majd ezt követte az IBM PC XT és később az AT változatok. Ezek a gépek kifejezetten személyi használatra szánt, jelentős teljesítményű gépek voltak. Ennek a folyamatnak a következménye lett, hogy az 1980-es évek közepére elérhetővé vált, hogy az embereknek akár a saját lakásukban is lehetett számítógépük. A 2000-es évektől megjelentek a kis méretű, kézben hordozható eszközök (pl. PDAk) később az okostelefonok is terjedtek[22]. Ezek az eszközök műszakilag digitális számítógépek.
A digitális számítógépekben használt mikroprocesszor-technika fejlődésének eredményeként a 2010-es évekre a fejlett világban a digitális számítógép az élet nélkülözhetetlen eszköze lett, a mindennapokban az okos eszközök használata, valamint az IoT megszokottá vált.
Programvezérlés
A digitális számítógépek egyik legfontosabb jellemzője, hogy programozottan működnek. Egy program azt határozza meg, hogy a számítógép az adatokkal milyen sorrendben milyen műveletek végezzen. Maga a program (elemi) utasítások sorozata. A számítógép értelmezi az utasítást, majd végrehajtja azt. Egy utasítás lehet egy matematika művelet elvégzése (pl. két szám összeszorzása), vagy lehetőség van arra, hogy bizonyos feltétel teljesülése esetén a program egy másik helyen folytatódjon (ún. feltételes ugró utasítás). Az minden számítógép egyik fontos jellemzője, hogy milyen utasításokat tud végrehajtani.
A programvezérlés a digitális számítógépek megjelenése előtt is létezett. 1725-ben Basile Bouchon készített egy perforált (lukasztott) papírszalaggal vezérelt szövőszéket[30]. Basile megoldását többen tökéletesítették, végül Joseph Marie Jacquard 1804-ben elkészítette az első, ipari termelésre és sorozatgyártásra is alkalmas lyukkártya vezérlésű szövőszéket. Jacquard szövőszékének rövid időn belül megindult a sorozatgyártása is.[30] Az ilyen szövőszék nagyon gyorsan terjedt, 1812-ben már 11 000 ilyen gép működött Franciaországban[31]. Az ő megoldása a szövés mintájának „programozására” szolgált. Charles Babbage az 1830-as években tervezett, és részben megépített mechanikus számoló- és számítógépeket.[32] Babbage jól ismerte Jacquard megoldását, és felismerte, hogy a lyukkártya alkalmas az általa tervezett analitikai gép[33] programjának tárolására[34]. A számológépek (számítógépek) programvezérlésének ötlete és kidolgozása Babbage nevéhez fűződik[32][35]. 1886-ban Herman Hollerith[36] egy olyan adatfeldolgozó rendszert készített, amelyben az adatokat lyukkártyán tárolták. Hollerith rendszere alkalmas volt arra, hogy egy lyukkártya csomagból kiválogassa, illetve megszámolja azokat a kártyákat, amelyeken a lyukak meghatározott feltételeknek megfelelően helyezkednek el[37]. Hollerith 1896-ban megalapította a Tabulating Machine Company nevű cégét.[38] 1911-ben Hollerith eladta a cégét egy befektetőnek, amely után létrejött a Computing-Tabulating-Recording Company[39]. Ez a cég további átalakulások után 1924-ben[40] felvette az IBM nevet.
Később, amikor az 1940-es években sorra jelentek meg a korai elektromechanikus és elektronikus számítógépek, a programvezérlés már ismert volt. Az első ilyen gépeknél a program módosítása kapcsolók mozgatásával és a gép áthuzalozásával történt. Például még az ENIAC esetén is dugasztáblákon, vezetékek áthelyezésével, illetve kapcsolókkal lehetett a programot elkészíteni és módosítani[41][42]. Ebben az időszakban többen kísérleteztek azzal, hogy az elektronikus számítógépek esetén a programot, az adatokhoz hasonlóan lyukkártyán, vagy elektronikusan tárolják. Neumann János a First Draftban ismertette annak az elméletét, hogy egy számítógép programját hogyan lehet ugyanúgy tárolni, mint az adatokat, és javaslatot tett arra, hogy a program a gép memóriájában az adatokkal egységesen legyen tárolva.
Programok elkészítése (programozás)
A számítógépek programozása nem más, mint az a folyamat, amikor a programozó elkészíti a programot. Ez egy összetett, sokszor több szakember közös tevékenysége.[43] A legelső számítógépek esetén a programozás még részben elektromos huzalozással történt. Később a programot lyukkártyákon helyezték el. Az 1940-es évek közepére kialakult az ún. tárolt programú számítógép, amely gépeknél a program a számítógép memóriájába került[8]. A korai a gépeknél a programozás még az ún. gépi kódban történt. A gépi kódú program egy olyan program, amelyet a számítógép processzora közvetlenül képes végrehajtani[44]. Ennél a programozási módszernél a program egy lépése egy olyan elemi utasítás, amelyet a processzor végre tud hajtani. A gépi kódú programozás során az utasításokat bináris kódban kell megadni, annak megfelelően, hogy milyen az adott processzor utasításkészlete. Azt nagyon korán felismerték, hogy a gépi kódú programozás bonyolult, sok hibalehetőséget hordoz. Ezért már az 1950-es évek legelején próbálkoztak az első ún. magas szintű programnyelvek megalkotásával. Az első sikeresen működő fordítóprogram (angol elnevezéssel compiler) Grace Murray Hopper vezetésével készült el 1952-ben[45][46] egy UNIVAC I típusú számítógépre. Ez a program képes volt egyszerűbb matematikai leírásokat bináris kódra fordítani, ők ezt a programnyelvet A-0-nak nevezték. Az 1950-es évek elejétől számtalan programozási nyelv keletkezett. Az első, szabványban rögzített nyelv a Fortran 66 volt, ANSI X 3.9 1966 Fortran 66 jelzettel jelent meg,[47] a Fortran programozási nyelv története 1954-ben kezdődött, az első kereskedelmi változata 1957-ben az IBM fejlesztésében jelent meg[48].
Programozási nyelvek
A programozási nyelvek a számítógépes programok elkészítésének megkönnyítésére létrehozott mesterséges nyelvek. A programozási nyelvek egy kapcsolatot biztosítanak az emberi gondolkodás és a gép által végrehajtható gépi kódú utasítások között. A magas szintű programnyelvek lehetővé teszik, hogy egy programutasítás hatására a gép több száz vagy több ezer elemi, gépi utasítást úgy hajtson végre, hogy nem kell minden egyes utasítást leírni[49]. Egy adott programozási nyelv szabályai szerint elkészített programot (más néven forrásprogram) egy fordító program alakítja át gépi kódú utasítások sorozatává. Ennek a lépésnek az eredményeként jön létre a futtatható program[49][44]. Egy másik lehetőség a magas szintű programozási nyelvek használatára az ún. interpreter használata. Ebben az esetben a programnyelv értelmező programja fut az adott számítógépen és az adott programnyelven megírt utasításokat sorról sorra értelmezi és hajtatja végre a számítógéppel[44]. A magas szintű programnyelvek további előnye az ún. hordozhatóság, azaz ellentétben a gépi kódú programmal, egy adott típusú számítógépre elkészített program egy másik típusú számítógépen is használható (esetleg egy minimális átalakítás szükséges lehet)[44].
A kezdetektől a számítástechnika fejlődésével több ezer programozási nyelv alakult ki, és napjainkban is folyamatosan születnek új programozási nyelvek.[50][51] Vannak köztük általános célú programozási nyelvek, amelyek több típusú feladatra használhatóak, vannak speciális probléma orientált nyelvek, amelyek egy adott típusú feladat megoldására alkalmasak (pl. statisztikai számítások). Egy adott feladat esetén a programozónak lehetősége van az adott feladatra legmegfelelőbb nyelv kiválasztására.
Digitális számítógépek felépítése
A digitális számítógépek leggyakrabban alapvetően három elv szerint épülnek fel. Ezeket alapvető architektúrának nevezik.
A három felépítési módszer között a különbség a memória kezelésében, elérésében van. A Neumann-architektúra esetén a számítógép memóriájában nincs megkülönböztetve a program és az adat. Ugyanabban a memóriában, azonos bináris formában kerülnek elhelyezésre a programutasítások gépi kódban, és az adatok bináris kódolásban. A Harvard-architektúra esetén a program és az adat két egymástól független memóriában kerül elhelyezésre. A programmemóriában a programutasítások, míg az adat memóriában az adatok kapnak helyet. Ez utóbbi lehetővé teszi azt, hogy a programutasítások szóhossza és az adatok szóhossza eltérő legyen, valamint biztosítja, hogy a program nem tud adatként viselkedni. Ennek következtében a program nem képes megváltoztatnia saját magát[52]. A módosított Harvard-architektúra lehetővé teszi azt, hogy egy program futás közben módosítani tudja a programmemória tartalmát.
A korszerű mikroprocesszorok gyakran „hibrid” megoldást használnak. A belső gyorsítótár kezelésében a módosított Harvard-architektúra szerint működnek, a gyorsítótárakban elkülönül a program- és az adat-gyorsítótár, a processzoron belül két független buszrendszer csatlakozik a két gyorsítótárhoz, azonban a processzoron kívül a számítógép memóriájának elérése a Neumann-architektúra szerint történik[53].
A memóriában tárolt program alapján a számítógép kezeli a perifériákat, ezeken keresztül képes a számítógépbe a külvilágból adat bekerülni (input), vagy a számítógépből a külvilág felé adat kikerülni (output). Az egész gép vezérlését a vezérlő egység (Control Unit) végzi. A kijelölt aritmetikai és logikai műveleteket az Aritmetikai és Logikai egység (rövidítve ALU) hajtja végre.[10][54]
Az eredeti architektúrákhoz képest az 1950-es évek végétől, 1960-as évek elejétől az ALU-t és a vezérlő egységet összevontan központi egységnek, angol rövidítéssel CPU-nak kezdték el nevezni, és azóta is így használják.
Alapvető működés
A korszerű digitális számítógépek alapvető működése elválaszthatatlanul összefügg a gépek felépítésével. A felépítést és az alapvető működést összefoglalóan először Neumann János írta le a First Draft of a Report of the EDVAC[10] című munkájában. A három bemutatott alapvető architektúra közti különbség a számítógépek alapvető működésében alig okoz eltérést. Neumann munkájának közzététele óta kisebb módosításokkal szinte az összes digitális számítógép elemi működése ennek megfelelő. A módosítások leginkább egyszerűsítések, és egyes részegységek összevonását jelentette. A tranzisztoros számítógépek megjelenésének idejére már nagyjából teljesen kialakult a mai felépítés.[56] Nagy változást a mikroprocesszorok megjelenése hozott, mert ez lehetővé tette, hogy fizikailag egy alkatrészbe legyen összeépítve a számítógép CPU-ja.[28] Később az egycsipes mikrogépek (más néven mikrokontroller) megjelenésével fizikailag egy darab alkatrész (integrált áramkör) képes egy teljes számítógépet tartalmazni.[57]
Regiszterek
A CPU-ban az adatok (átmeneti) tárolására szolgálnak a regiszterek.[58] Az, hogy egy adott CPU-ban hány darab, milyen hosszúságú[59] regiszter kerül kialakításra, a CPU típusától függ. A regiszterek száma, és hosszúsága nagymértékben meghatározzák a CPU jellemzőit. Van néhány olyan (általános) regiszter, amely a legtöbb CPU-ban előfordul:
Utasításszámláló: Más néven programszámláló, angol elnevezéssel Program Counter, vagy rövidítve PC.[60] Ez a regiszter tartalmazza, hogy melyik memória címen található az aktuális vagy a következő utasítás. Hogy a két érték közül melyiket tartalmazza az utasításszámláló, az a CPU kialakításától függ. Ez a regiszter minden utasítás végrehajtásakor eggyel növekszik, ugró utasítás esetén ebbe kerül kiszámításra az ugrás helye, azaz, hogy hol kell folytatni a program végrehajtását. Régebbi gépeken ezt a gép valamelyik kezelő szervén megjelenítették.[61]
Utasításregiszter: angolul Instruction register. A CPU egyik lényeges regisztere. Az utasításlehívás[58][62] (angolul fetch) után ebbe a regiszterbe kerül az a gépi utasítás, amelyet végre kell hajtani.[58] A gépi utasítás felépítése, szóhossza az adott CPU típusától függ. Az utasításregiszterbe csak gépi kódú utasítás kerülhet. Az utasításregiszter közvetlenül csatlakozik az utasítás dekóderhez, amely ténylegesen értelmezi az utasítást, majd ennek megfelelően kerül végrehajtásra. Az utasítás dekóder alapvetően a vezérlő egység (CU) működését befolyásolja.
Akkumulátor regiszter: vagy röviden akkumulátor. Az akkumulátor regiszter az egy, illetve két címes gépekkel jelent meg. Ez a regiszter tartalmazza az elvégezendő műveletek egyik operandusát, és felépítéstől függően gyakran az eredményt is.[58]
Általános célú regiszterek: angol elnevezéssel General Purpose Registers, régebbi irodalmakban Register File. Az általános célú regisztereket az aritmetikai és logikai műveletek operandusainak tárolásához; a cím számításhoz; illetve memória-pointer műveletekhez lehet használni. Ezek a regiszterek közvetlenül elérhetőek a processzor műveletvégző egysége számára.[62][63]
Állapotregiszter: ez a regiszter az ALU által elvégzett utolsó művelet eredményétől függő állapotjelzőket tartalmaz.[62][63] A pontos elnevezése és szerkezete a CPU típusától függ. Leggyakrabban a következő jelzőbiteket tartalmazza[62][63]:
Átvitel (Carry): jelzi, hogy a legmagasabb helyiértékű biten a művelet során átvitel keletkezett.
Zérus: az utolsó művelet eredménye 0
Negatív: az utolsó művelet eredménye negatív szám. Ez általában kisebb mint 0-t jelent.
Nem negatív: az utolsó művelet eredménye nem negatív, nagyobb vagy egyenlő mint 0.
Aritmetikai és logikai egység
A digitális számítógépekben ez az egység végzi el az utasítás által kijelölt matematikai műveletet. Talán ez az a részegység, amely a leginkább megváltozott a korai számítógépekhez képest. Neumann János a First Draft-ban még CA–Central Arithmetical part-nak nevezi [10], és feladata a számítási műveletek elvégzése volt. Később egészült ki logikai műveletek elvégzésével, és alakult ki a mai elnevezése.[54] A korai számítógépeknél, illetve a nem-Neumann elvű számítógép esetén nem volt külön egység. De minden számítógép tartalmazott valamilyen műveletvégző egységet. Eleinte ezt a mechanikus számológépek összeadó műve alapján építették meg, ilyen volt pl. az ENIAC-ban alkalmazott ún. gyűrűs számláló (angolul ring counter), amely egyszerre volt képes tárolni az adatokat (regiszterként viselkedni) és az összeadás művelet elvégzésére is. Ezek a gépek még jellemzően decimális (tízes számrendszer) alapúak voltak.[8]
Azt, hogy egy számítógép milyen matematikai műveleteket képes közvetlenül elvégezni, azt az ALU képességei határozzák meg. A programozható számítógépek egyik előnye, hogy olyan műveleteket is el lehet végezni, amelyet az ALU önmagában nem képes. Ha olyan műveletre van szükségünk, amit a gép nem tud elvégezni, akkor egy olyan algoritmust kell megvalósítani, amelynek minden egyes elemi műveletét már képes a gép elvégezni. Például a Z80 mikroprocesszor ALU-jában nem volt szorzás művelet[62], így ha valakinek erre volt szüksége, meg kellett írnia a szorzó programot.
Az 1960-as évek végén, az 1970-es évek elején több cég készített olyan integrált áramköröket, amelyek önállóan egy ALU funkcióját el tudták látni. Az egyik legismertebb ilyen a Texas Instruments által 1970-ben készített 74181[64] típusjelű 4 bites ALU volt, amelyet a 74182-vel lehetett kiegészíteni. Ez az integrált áramkör az összeadás, kivonás, shiftelés (egy bittel eltolás), összehasonlítás és további 12 aritmetikai műveletet, és 16 logikai műveletet volt képes elvégezni[64].
A legtöbb ALU két forrás operandussal végzi el a műveleteket, ezeket egy-egy átmeneti regiszter tárolja. Az eredmény az eredmény regiszterbe kerül, és ebből másolja a CPU a megfelelő helyre az adatot, ez vagy az akkumulátor regiszter, vagy az utasításban kijelölt cél. [62][58]
Gépi utasítás felépítése
Egy gépi utasítás két részből áll. Az egyik rész az ún. műveleti[65] kód (angolul operation code vagy röviden op.code), a másik rész az operandus[58]. Az utasításkód határozza meg magát a végrehajtandó utasítást. Az operandus azt határozza meg, hogy milyen adattal, vagy adatokkal kell elvégezni a műveletet. Ez lehet egy állandó (konstans); egy vagy több memória cím; belső általános célú regiszter; vagy egy ugró utasításnál az a cím, ahol folytatni kell a program végrehajtását. A cím rész a processzortól függően több részből állhat. Leggyakrabban 4 címzési módszert használnak[66]:
Nulla címes felépítés: az utasítás nem tartalmaz külön címet. Az elvégzendő műveletek operandusait egymás után, az ún. stackben helyezik el, majd a kijelölt művelet elvégzése után az eredmény szintén a stackbe kerül.
Egy címes felépítés: az utasításkódhoz egy cím kapcsolódik. Ilyenkor az elvégzendő művelet egyik operandusa mindig az akkumulátor regiszter, a cím azt a memória címet (vagy regisztert) határozza meg, ahol a másik operandus található. Az így megcímzett adat az ALU átmeneti regiszterébe kerül. Az eredmény általában az akkumulátorba kerül.
Két címes felépítése: az utasításhoz két cím tartozik. Ez a két cím a két operandus címe. A két forrás cím által meghatározott helyről az ALU két átmeneti regiszterébe kerül az adat. Az eredmény vagy a két cím közül az egyikbe kerül vissza írásra[66], vagy ritkábban (pl. a Razdan-3 számítógép esetén az utasítástól függően [67]) az eredmény az ALU egyik átmeneti regiszterébe kerül vissza másolásra, ezzel előkészítve a következő műveletet.
Három címes felépítés: az utasításhoz három cím tartozik. Ebből kettő az elvégzendő művelet két operandusának a címe. A két forrás cím által meghatározott helyről az ALU két átmeneti regiszterébe kerül az adat. Az eredmény az eredmény regiszterből a harmadik cím által meghatározott helyre kerül.
Utasítás feldolgozás
A digitális számítógépek programozott működésének alapja az utasítás feldolgozás. A program egyes utasításait a CPU-nak fel kell dolgoznia, és az utasításoknak megfelelő műveleteket el kell végeznie. Ez a működés mód következik a programvezérelt működésből[60]. Az utasítás feldolgozást a vezérlő egység három része összehangoltan végzi. Neumann János ezt a First Draft-ban CC–nek, Central control part-nak nevezi [10]. Egy mai mikroprocesszor esetén az utasítás feldolgozásban részt vevő fontosabb részegységek[68]:
Utasításlehívás (fetch): Az utasításszámláló regiszter által kijelölt memória címről a következő gépi utasítás beolvasása az utasításregiszterbe. Ez az a pont, ahol lényeges eltérés van a Harvard- és a Neumann-architektúrás gépek között. A tisztán Neumann-architektúrás gépek esetén mind a programutasítások, mind az adatok közös memóriában, az ún. operatív memóriában találhatók. A Harvard-architektúrás gépek esetén a programutasítások és az adatok két külön álló memóriában találhatók. Az előbbiek az ún. program memóriában, az utóbbiak az adat memóriában[52]. Korszerűbb processzorok esetén gyakori, hogy az utasításlehívást az előző utasítás végrehajtásának idejében hajtja végre a processzor, így működnek pl. az Intel processzorai, ahol ezt pre-fetchnek nevezik[63]. A sikeres utasításlehívás után a végrehajtandó utasítás gépi kódban, az utasítás regiszterben lesz elérhető a processzor többi részegysége számára.
Utasítás dekódolása: A processzor felépítésétől függően ez lehet huzalozott (angolul hardwired) vagy mikroprogramozott. Jellemzően a korai processzorok (elektroncsöves, és tranzisztoros) valamint egyes RISC processzorok esetén találkozunk huzalozott kialakítással. Az újabb (integrált áramkörös, illetve mikroprocesszoros gépek) valamint a CISC processzorok esetén elterjedtebb a mikroprogramozott módszer.[70] Vannak olyan processzorok és utasítástípusok, amelyeknél az utasítás dekódolását egy külön lépés követi, az operandusok betöltése a műveleti regiszterekbe.
Az utasítás végrehajtása: Az utasítás által meghatározott művelet tényleges elvégzése. Ezt a legtöbb utasítás esetén az ALU végzi el. Egy utasítás végrehajtása akár több lépésben, hosszabb idő alatt történhet, a processzor felépítésétől és az aktuális utasítástól függően.[62] Egy adott processzor típus esetén a gyártó általában megadja minden gépi utasítás végrehajtási idejét.[forrás?]
Perifériák
A periféria szó alap jelentése környék, külváros, külterület, központtól távol eső (ld. még pl. az azonos előtagú perifériás látás, perifériás idegrendszer kifejezéseket).[71] Jelenti azt is, hogy egy témától távol eső, kevésbé fontos, mellékes.[72] A peri- görög előtag jelentése körül,[73] mellett,[74] körbe[71](vesz).
A számítógépek esetén a perifériák a számítógép központi egységéhez csatlakoztatott különféle kiegészítő számítástechnikai eszközök, amelyek célja az adatok továbbítása a számítógép és a környezete között.[75][76][77] Leggyakrabban három (ritkábban négy)[78] csoportba szokás sorolni a perifériákat:
Kimeneti perifériák: ezek célja a számítógépben keletkező adatok kivitele a számítógépből a külvilág felé. Ilyen például a képernyős megjelenítő, a nyomtató, a rajzgép (plotter), de ilyen pl. egy robot kar is, amit egy számítógép mozgat stb.
Bemeneti perifériák: ezek célja, hogy a számítógépbe adatot vigyen be a külvilág felől. Ilyen például a billentyűzet, egér, lapolvasó (szkenner), egy digitális fényképezőgép képbontó egysége, egy hőmérséklet-érzékelő, szintérzékelő stb.
Kétirányú perifériák: olyan perifériák, amelyek mind be- és kivitelre is alkalmasak. Ilyen például a hálózati kártya, multifunkciós nyomtató, stb.
Háttértárak: Ezek célja a számítógépben keletkező adatok tartós tárolása. Ilyen például a mágneslemezes tároló (HDD), SSD tároló, lehet egy ún. pendrive, mágnesszalagos egység, régebben a lyukkártya és a lyukszalag.
Az első három csoportot összefoglalóan IO egységnek is szokták nevezni. Ebből az I az angol Input (bevitel) az O az angol Output (kivitel) kezdőbetűjéből álló rövidítés[58]. Írják I/O formában is.
Számítógép – ember
A számítógépeket elsősorban azért alkották meg, hogy a bonyolult, sok munkát jelentő számításokat gépesíteni lehessen, ezzel megkönnyítsék az emberek munkáját. H.H. Goldstine a Számítógép Pascaltól Neumannig c. művében így ír erről: „A történet szerint Herschel[79] és Babbage[80] egy alkalommal csillagászati számításokat ellenőriztek, amikor Babbage mérgében állítólag azt mondta: »adná Isten, hogy ezeket a számításokat a gőzgéppel lehessen elvégezni!«”[81]. Mindig fontos szempont volt, hogy a számítógép ki tudja szolgálni azt az embert, aki azt használja. A kezdeti időszakokban a számítógépek kezelése rendkívül bonyolult volt. Ahogy fejlődtek a számítógépek, egyre egyszerűbbé vált azok kezelése. Az első operációs rendszerek megjelenése egy fontos lépés volt, hogy a számítógépek kezelése egyszerűsödjön.[82]Ken Thompson 1969-ben elkészítette a UNIX operációs rendszer első változatát, ezzel a célja egy egyszerűen használható operációs rendszer elkészítése volt.[83] Az 1970-es években megjelentek az ún. mikroszámítógépek. 1977-ben megjelent az első otthoni felhasználásra készült gép is (angolul home computer).[84] Ezek már bárki számára elérhető, egyszerűen kezelhető gépek voltak. Még 1977-ben Ken Olsen, a DEC társalapítója mondta: „Nem látom értelmét, hogy az emberek az otthonukba számítógépet akarnának”.[85] Ettől az időszaktól kezdődően nagy számban jelentek meg olyan gépek és operációs rendszerek, amelyek már a hétköznapi embereket célozták meg. A 2000-es évekre egy általános számítógép és a hozzá tartozó operációs rendszer alapvető kezelése egyszerűvé vált, szakértelmet nem igényel, ilyen rendszerekkel pl. az okos eszközöknél, okostelefonoknál is találkozhatunk. Ez nem jelenti azt, hogy minden számítógép kezelése egyszerű a 2000-es évektől kezdődően, mert léteznek olyan gépek, amelyek kezelése, üzemeltetése komoly szakértelmet igényel, ezek a gépek elsősorban a különböző szerverek, illetve egyedi cél számítógépek.
A digitális számítógépek kialakulásakor az emberi gondolkodásmódot próbálták utánozni. Neumann János a First Draft c. munkájában is több helyen kiemeli ezt a párhuzamot. Erről a párhuzamról 1958-ban jelent meg Neumann János The Computer and the Brain (magyarul „A Számítógép és az ember” címmel jelent meg) című munkája.[86]
Digitális számítógépek kezelése
Az ember–számítógép kapcsolat alapvető fontosságú a számítógépek kezelésében. A számítógép céljának, és felépítésének megfelelően kell kiépíteni azokat a szoftver és hardver komponenseket, amelyek biztosítják az ember-gép kapcsolatot. Beágyazott rendszerek esetén a Human Machine Interface (rövidítve HMI) biztosítja a kezelő és a gép közti kapcsolatot[87]. Ilyen pl. egy automata mosógép esetén az egyre fejlettebb, sokszor érintőképernyős kezelő felület. Az általános célú számítógépek esetén a számítógép–kezelő közti interakciót a felhasználói felület biztosítja. Kezdetben ez nagyon egyszerű volt, kapcsolók, nyomógombok, visszajelző lámpák alkották. A programok, adatok bevitele lyukkártyán, lyukszalagon történt[61]. Később megjelent az ún. konzol írógép. A konzol írógép eleinte egy átalakított távgépíró volt (más néven telexgép). A konzol írógép elterjedten használt készülék volt hosszú időn keresztül. A billentyűzeten beírt parancsokat a gép értelmezte, és képes volt a gép a benne lévő papírra nyomtatni az üzeneteit.[88] Ezek használatát a képernyős megjelenítők szorították ki, az 1960-as évektől kezdődően. A képernyős megjelenítők kezdetben csak szöveges üzenetek megjelenítésére voltak képesek, majd fokozatosan megjelentek a grafikus megjelenítők. A grafikus megjelenítőket kezdetben elsősorban CAD/CAM tervezési munkákhoz használták. A ma elterjedten használt grafikus felhasználói felület (rövidítve GUI) az 1960-as évek legvégén, az 1970-es évek elején kezdett kialakulni.[89] A GUI megjelenése, és elterjedése nagyban hozzájárult ahhoz, hogy az 1990-es évekre a számítógépek kezelése egyszerűbbé vált, ennek egyik fontos szereplője volt Steve Jobs és Steve Wozniak, illetve általuk alapított Apple Computer cég.
Adatok kódolása
A digitális számítógépek esetén az adatok bevitele, feldolgozása és az eredmények megjelenítése, valamint a működést meghatározó program bevitele számjegyek formájában történik.[1][58] A környezetünkben számtalan formában megjelennek adatok. Ahhoz, hogy ezeket digitális számítógéppel fel lehessen dolgozni, egy vagy több lépésben számértékké kell alakítani, ez a folyamat a kódolás. A kódolásnál követelmény, hogy az így kapott kód dekódolható legyen.[90] A kódolás legtöbb esetben több lépésben történik.
Például egy észlelő lát egy labdát, és ezt szeretné számítógépre vinni. A labda látványa alapján, a labda szó fog eszébe jutni, ha az illető magyar nyelven gondolkodik, a ball szó ha angol nyelven. Ez már egyfajta kódolás, mert a labda látványához egy adott nyelven egy (kód)szót rendeltünk. Az észlelő egy számítógép billentyűzete segítségével egymás után leüti az l, a, b, d, a billentyűket. A billentyűzet továbbítja a számítógép felé azt a pozíciót, hogy melyik billentyűt ütötte le a kezelő, ez a billentyűzet esetén az ún. scan kód.[91] A számítógépen futó program, a beállításoknak megfelelően egy karakter kódját fogja ehhez hozzárendelni. Ha ezt meg kell jeleníteni például egy képernyőn, akkor ennek a kódnak megfelelően jelennek meg egymás után az l, a, b, d, a betűk képei. Más adatok be- és kivitele is hasonlóan történik, ezt a folyamatot a perifériák és a számítógépen futó programok automatikusan elvégzik.
A korszerű digitális számítógépek esetén a kódolás eredményeként egy kettes számrendszerbeli szám (idegen kifejezéssel bináris szám) jön létre. Neumann János javasolta a számítógépekben a bináris rendszer alkalmazását, korábbi gépekből vett tapasztalat alapján.[8] A bináris kód esetén egy kódszó több helyi-értékű bináris szám. Egy helyi-értéket nevezünk egy bitnek. Ha a kódszavak hossza (azaz, hogy hány bitből áll) a kódkészletben állandó, akkor állandó hosszúságú kódrendszerről, ha az egyes kódszavak hossza nem állandó, változó szóhosszúságú kódrendszerről beszélünk. Ez utóbbira példa a Morzekód.[90]
Az idők során nagyon sok kódolási rendszer alakult ki, ezek egy része szabványos, más része nem. Szabványos az egyes betűk, írásjelek kódja. Az egyik ilyen elterjedt szabvány az Uincode. Vannak olyan esetek, amikor nem is lehet szabványos megoldást választani.
Például le szeretnénk képezni számítógépen egy iskolába járó tanulókat. Vannak köztük férfiak és nők. Ez esetben jelölhetjük (kódolhatjuk) 0-val a férfiakat és 1-el a nőket, de fordítva is. Ezt szabadon megválaszthatjuk, de a feldolgozás folyamán tisztában kell legyünk azzal, hogy mit, hogyan jelöltünk (kódoltunk). Sok helyen tévesen a kódolást a rejtjelzés szinonimájának értelmezik.
↑A monotónia nem csak számítási feladatoknál, hanem fizikai munkafolyamatoknál is jelentkezik, és a munkabalesetek egyik gyakori oka lehet. Számítási feladatoknál „csak” téves/hibás eredményt okozhat, bár az így bekövetkező számítási hibáknak is lehetnek súlyos következményei.
↑Az alkotók közti elsőbbségről később (1971 és 1973 között) egy bonyolult perben döntött egy amerikai bíróság. A bíróság megállapította Atanasoff elsőbbségét, és azt, hogy részben az ő eredményeit felhasználva dolgozott Eckert és Mauchly. Részletesen a perről és az ítéletről (angol nyelven): „Wednesday, Revised: The Trial (angol nyelven). Ames Lab SCL, 1997. október 29. [1998. január 31-i dátummal az eredetiből archiválva]. (Hozzáférés: 2021. december 25.)”
↑Moore School of Electrical Engineering. History + Heritage. Penn Engineering University of Pennsylvania. (Hozzáférés: 2022. január 29.)
↑A mágnesdobos memóriát eleinte operatív tárnak használták, a ferritgyűrűs memória megjelenése után kezdték csak háttértárolóként használni. Volt egy rövid átmeneti időszak, amikor mindkét célra használták.
↑Ha elkészült volna, az lett volna az első programozható, mechanikus számítógép, azonban technológiai és finanszírozási problémák miatt Babbage egyik gépe sem épült meg.
↑Gregorics Tibor, Heizlerné Bakonyi Viktória, Horváth Győző, Menyhárt László, Pap Gábor Sándorné, Papp-Varga Zsuzsanna, Szlávi Péter, Zsakó László: A problémamegoldás lépései. Programozási alapismeretek. (Hozzáférés: 2022. január 6.)
↑Az ábra több forrás felhasználásával készült. 1: Z80 CPU architecture. (Hozzáférés: 2022. január 1.) 2: Vancsó Gyula. Mikroszámítógép elemek a tervezéshez, 3. kiadás, Budapest: Műszaki Könyvkiadó (1984). ISBN 9631060217
↑szerk.: Radó Antal: Idegen szavak szótára, 10, Budapest: Lampel R. (Wodianer F. és fiai) (1942)
↑Bakos Ferenc.szerk.: Fábián Pál, Zigány Judit, Ármósné Eisenbarth Magda, Bödey József: Idegen szavak és kifejezések szótára. Budapest: Akadémiai Kiadó [1986]. ISBN 963-05-4262-5
↑Nem sorolják a perifériák közé a számítógép működéséhez szükséges olyan egységeket, amelyek alapvetően nem végeznek adatokkal műveleteket, pl. a számítógép háza, tápegység, szünetmentes tápegység, klímaberendezés stb.
↑A háttértárakat több helyen a kétirányú perifériák közé sorolják.
↑John Herschel(1792-1871) angol csillagász és matematikus
↑Ez a kijelentés több magyar fordításban is megtalálható. Több forrás szerint angolul úgy hangzott: „There is no reason for any individual to have a computer in his home.” Ken Olsen obituary. (Hozzáférés: 2022. január 13.)
↑Ez a munka már Neumann János 1957. február 8-án bekövetkezett halála után jelent meg. A megjelentetésben felesége, Klara von Neumann működött közre.
↑Számítástechnikai Kislexikon:P Müller, G. Löbel, H. Schmid(szerkesztők), A. Hahenbucher, H. Lange, P. Müller, S. Holzer, G. Löbel, H. Schmid, G. Sessler. Számítástechnikai kislexikon ford.: Számítástechnikai Oktatóközpont (SZÁMOK) munkaközössége:. Budapest: Műszaki Könyvkiadó (1973)
↑Magnetic Core Memory:Magnetic Core Memory. National High Magnetic Field Laboratory: Museum of Electricity and Magnetism. [2010. június 10-i dátummal az eredetiből archiválva].
↑Arcanum Periféria:periféria. (Hozzáférés: 2022. január 23.)
↑Szőllősy 2006:Szőllősy Éva (2006). „Adalékok a számítógép terminus megszilárdulásának történetéhez”. Terminologia et corpora - Supplementum Utak a Terminológiához, Szombathely, 160-180. o, Kiadó: Berzsenyi Dániel Főiskola Uralisztikai Tanszék és a Terminológiai Innovációs Központ közösen. ISSN1788-6368. (Hozzáférés: 2021. november 25.)