Upload
nguyennhan
View
229
Download
4
Embed Size (px)
Citation preview
1
BEVEZETÉS AZ INFORMATIKÁBA 2. rész
TARTALOMJEGYZÉK
BEVEZETÉS AZ INFORMATIKÁBA 2. RÉSZ..................................................................1
TARTALOMJEGYZÉK .........................................................................................................1
A SZÁMÍTÓGÉP.....................................................................................................................2 A számítógép, mint információ-feldolgozó egység .......................................................................... 2 Út a számítógépig............................................................................................................................... 3
Az első generáció (1952-57) ......................................................................................................................... 10 Neumann János és a Neumann-elvek............................................................................................................ 11 Második generáció (1955-1964) ................................................................................................................... 13 Harmadik generáció (1965-1974) ................................................................................................................. 15 A negyedik generáció (1971-)....................................................................................................................... 16 Ötödik generáció ........................................................................................................................................... 17
A számítógép felépítése.................................................................................................................... 19 A központi feldolgozó egység....................................................................................................................... 19 Perifériák....................................................................................................................................................... 21 A számítógépek alapkonfigurációja .............................................................................................................. 25
A számítógépek programozása ....................................................................................................... 26 Programnyelvek kialakulása, fejlődése ......................................................................................................... 26 Gépi kódú programozás ................................................................................................................................ 26 Szimbolikus programnyelvek........................................................................................................................ 30 Automatikus kódolású programnyelvek........................................................................................................ 31 Algoritmikus programnyelvek ...................................................................................................................... 31
KÓDOLÁSI ELJÁRÁSOK...................................................................................................35 Kódolás és dekódolás.................................................................................................................................... 35 Szeparálható kódok ....................................................................................................................................... 36 Prefix kódrendszer ........................................................................................................................................ 36 Az egyértelmű dekódolás elégséges feltétele ................................................................................................ 37 Szeparálható bináris kódrendszer.................................................................................................................. 37 Átlagos kódhossz .......................................................................................................................................... 39 Az entrópia és tulajdonságai ......................................................................................................................... 40 Hatásfok ........................................................................................................................................................ 42 Az egyértelmű dekódolás szükséges és elégséges feltétele........................................................................... 43 Huffman-kódolás .......................................................................................................................................... 43 Shannon-Fano kódolás .................................................................................................................................. 45 Shannon-féle bináris kódolás ........................................................................................................................ 46
Összefoglaló feladatok......................................................................................................................... 48 IRODALOMJEGYZÉK........................................................................................................49
2
A számítógép
A számítógép, mint információ-feldolgozó egység „A számítógépek adatok és jelsorozatok feldolgozására szolgáló elektronikus műszaki
berendezések.” [4] Ez a megfogalmazás az, amely leginkább megközelíti azt a berendezést,
amelyre a szó hallatán gondolunk, és amely legjobban leírja a ma használatos gépeket.
Elsősorban digitális számítógépekről van szó, napjainkban az analóg számítógépek száma
csekély a digitális számítógépekhez viszonyítva.
Érdekesség, olvasmány
Az analóg és a digitális számítógép összehasonlítására szolgál a következő táblázat: [1, 4]
analóg számítógép digitális számítógép Az információknak mindig valamilyen fizikai állapot vagy változás felel meg.
Az információ ábrázolására egyedi, jól elkülönült állapotokat – számokat – használnak fel.
A mért mennyiségek tetszőleges közbenső értékeket vehetnek fel → folytonos jelek
Az egymás után következő értékek között mindig van minimális eltérés, közbülső értékek nincsenek → diszkrét jelek
A számítások például kerekek elforgatásával, hosszúságmérésekkel, csigák, orsók, áttételek, ellenállások, kondenzátorok, erősítők használatával valósulnak meg.
A számítások a számértékektől függetlenül, az állapotokat leíró számokra vonatkozó műveleti szabályok alapján történik.
Egyedi feladatok megvalósítására készülnek. A megoldandó feladat változása a számítógép felépítésének, működésének változását is maga után vonhatja.
Univerzális berendezés. A szoftver cseréjével ugyanaz a gép új feladat megoldására alkalmas.
Például különböző folyamatok modellezésére, vezérlésére használják.
Elvileg bármilyen megoldható feladat megoldására alkalmasak.
A számítógépek megegyeznek abban, hogy valamilyen beérkező adatok alapján műveleteket
végez, melynek eredményét megjeleníti. A gép a külvilágból érkező jeleket érzékeli, belső
állapotait ezek hatására megváltoztatja, végül kimenő jelek segítségével pedig közli a
külvilággal az eredményt. Általánosan tehát mindenféle feladatmegoldást adatfeldolgozásnak
tekinthetünk. [2]
A feladatok közé tartozik az adatok befogadásától kezdve, az adatok tárolásán,
visszakeresésén, műveletek végzésén keresztül, az eredmények közléséig minden
tevékenység.
Bevitel Eredmény Feldolgozás
3
Út a számítógépig Manapság hétköznapjainkhoz tartozik a számítógép használata. Azoknak, akik „belenőnek” a
számítógépek világába, teljesen természetes ez, azonban még most is sokan vannak, akik
félve közelítenek a „csodamasinához”. Nem szabad azonban, hogy számítástechnika a
megismeréséről való lemondáshoz vezessen! A bonyolult hardver és szoftver megértésében
nagy segítséget jelenthet kialakulásuk folyamatának, történetének ismerete.
Számolás, számírás, számolási segédeszközök
A számolás, a számfogalom az ősember által ismert dolog volt. Az ember valószínűleg az
ujjait használta a számoláshoz, ezért volt „kézenfekvő” a tízes számrendszer használata A
latin digitus szó jelentése: ujj. Ebből a szóból ered az angol digit, számjegy elnevezés is.
Érdekesség, olvasmány
A számok leírása, illetve az erre szolgáló külön jelek, a számjegyek kialakulása az írással egy időben történt. Szükségessége gazdasági okokra is visszavezethető: az időszámításunk előtti ötödik évezredben kezdődött el olyan nagy birodalmak, államok kialakulása, mint például Egyiptom, Mezopotámia, Babilónia, a Római Birodalom, ahol már volt kincstár, adó. Sokat kellett számolni, valamint az adatokat rögzíteni is kellett. Több nép is használta a számok írására az ábécéjük betűit (pl. ókori görögök, zsidók, grúzok). A babiloniak két legnagyobb érdeme a 60-as számrendszer és a helyiérték bevezetése. A hindu matematika legfontosabb vívmányai a tízes számrendszer és a helyiérték alkalmazása, a műveleti jelek és a zárójel bevezetése, valamint a nullának, mint számjegynek a használata. A hindu matematika eredményei arab közvetítéssel kerültek Európába.
Az emberek mindig is törekedtek olyan eszközök készítésére, amely megkönnyíti a számolás
hosszas és gyakorta bonyolult műveletét. A számoláshoz eleinte köveket, kavicsokat,
csontokat használtak, a rögzítéshez pedig rovásokat készíttek fadarabba, csontba, alkalmaztak
csomóba rakott köveket, fadarabokat, zsinegre kötött csomókat is. Mennyiségek rögzítésére
sokáig használták Európa-szerte az úgynevezett rovásfákat. (Angliában egészen 1812-ig
rováspálcán vezették az adózók által befizetett összeget.) A számolópálcák használatának az
i.e. V. sz.-ból is van nyoma Kínában.
Az abakusz ókori számolási segédeszköz. Rudakon vagy hornyokban mozgatható golyókat,
kövecskéket tartalmaz. A kövecske latin neve calculus, innen származik a kalkulátor szó is. A
rudak jelentették a helyiértékeket, a rudakon lévő golyók helyzete pedig a számjegyeket. Az
összeadás és a kivonás igen egyszerűen és gyorsan elvégezhető vele, az eredményt könnyű
volt leírni római számokkal. Az összeadás lépéseit mutatja a következő ábra:
4
Hasonló eszközt használnak még ma is a kínaiak és a japánok, az utóbbit szorobánnak
nevezik.
A szorzás elősegítésére a középkor kezdete táján széles körben elterjedt a gelosia-módszer
(rácsos módszer), Európában a XIV. sz. elején vált ismertté. Az eszköz már az arab számok
használatára épül.
Érdekesség, olvasmány
Az ábra egy szorzási feladat megoldását mutatja be. Az egyes négyzetekbe az adott oszlop tetején és az adott sor végén álló számjegy szorzatát írjuk, az átló fölé kerülnek a tízesek, az átló alá az egyesek. Ha a ferde sávok mentén összeadjuk a számjegyeket, megkapjuk a végeredményt. A jobb alsó sáv adja az eredmény legkisebb helyiértékű számjegyét, a bal felső sáv pedig a legnagyobbat. Ha egy sávban az összeg két számjegyű, akkor az első számjegyet a felette (és tőle balra lévő) sáv összegéhez adjuk. Ez a módszer megfelel annak, ahogy mi végezzük írásban a szorzást és a rész-szorzatokat egy-egy hellyel jobbra tolva írjuk le.
A Napier-pálcák a gelosia-módszer
egyszerűsítésére készültek. Az eszköz nevét
kitalálójáról, John Napier (1550-1617) skót
tudósról kapta. A készlet tíz darab pálcából állt, egy
pálcára egy számjegy többszörösei kerültek. Szorzás
elvégzéséhez az egyik tényezőnek megfelelő
pálcákat rakták egymás mellé, majd a másik tényezőnek megfelelő sorokból a gelosia-
módszernél megszokott módon leolvasták a szorzatot.
Érdekesség, olvasmány
Gaspard Schott jezsuita szerzetes alkotta meg az eszközt a következő módon: henger alakú számolópálcákat készített, felületükre a teljes Napier-féle pálcakészlet tartalmát felírta. Ezeket egy keretbe erősítette úgy, hogy forgatni lehessen őket, így úgy nézett ki, mintha a Napier-pálcákat tették volna egymás mellé.
A XVI. sz. vége felé Simon Stevin (1548-1620) használta először a logaritmust. A
logaritmustáblák alkalmazásával a műveleteket egyszerűsíteni, gyorsítani lehetett. Az első
logaritmus-táblákat egymástól függetlenül készítette 1588-ban Jost Bürgi és 1594-ben John
Napier. A tízes alapú logaritmust 1615-ben vezette be Henry Briggs. A logarléc hosszú életű
számolási segédeszköz, használatát még ma is tanítják.
5
Érdekesség, olvasmány
Már régebben is alkalmaztak összeadásra és kivonásra két azonos beosztású, egymáshoz képest eltolható vonalzót: két hosszúságot egymás után mértek, vagy egyiket visszamérték a másikból. 1622-ben William Oughtred a vonalzókra logaritmusokat mért fel, de az eredeti számokat írta melléjük. Így a vonalzók elcsúsztatásával két szám logaritmusát tudta összeadni és kivonni, a vonalzóról viszont maga az eredmény, a két szám szorzata vagy hányadosa volt leolvasható. 1650-ben készítette Pattridge az első olyan logarlécet, amelyben egy nyelv csúszik a léctestben. A logarlécre egyéb skálabeosztásokat is készítettek, pl. a hatványozás, gyökvonás, reciprok értékek és szögfüggvények leolvasására. 1851-ben vezették be a csúsztatható ablakot, aminek segítségével több skálát is lehet egyszerre használni. Készültek speciális célokra alkalmas logarlécek is.
Mechanikus számológépek
A számolóeszközök fejlődésének lendületet adott a hajózás, az
egyre pontosabb szárazföldi és tengeri térképek iránti igény.
Mindezek elkészítéséhez komoly csillagászati ismeretekre és
rengeteg számítási műveletet elvégzésére volt szükség. 1623-ban
egy csillagász, Wilhelm Schikard (1592-1635) tübingeni
professzor a négy alapművelet elvégzésére alkalmas számológépet készített. A gépről Kepler
iratai között maradt egy vázlat. A gépezet magját az aritmetikai egység alkotta, amely az
összeadást és a kivonást végezte.
Érdekesség, olvasmány
A számológép felső része hat darab függőlegesen elrendezett hengeres Napier-pálcát tartalmaz, amely hat darab tízes számrendszerbeli helyiértéknek felelt meg, így a gép hatjegyű számokkal való műveletvégzésre volt alkalmas. Az egyes számjegyeket a kerekek elforgatásával lehet beállítani. A számlálómű fogaskerekekből készült. A számolást végzőnek a leolvasott részeredményeket kézzel kellett bevinni a számlálóműbe, és azzal összeadni. A számlálómű képes volt az átvitelt kezelni: a következő nagyobb helyiértékre: az egyik kerék egy teljes körülfordulása egy külön fog segítségével a következő helyiértéknek megfelelő fogaskereket egy számjeggyel elforgatta. Az eredmény a gép alján jelent meg. Schikard olyan kerekeket is felszerelt, amelyekkel a részeredményeket is lehetett tárolni. A gép jelezte csengőhanggal, ha a hetedik helyiértékre túlcsordulás történt. Az eredeti gép eltűnt, a Kepler számára készített másodpéldány elégett, így nem maradt fenn működő változat. A vázlat alapján 1960-ban készítettek egy jól működő másolatot.
Az első, „sorozatban gyártott” összeadógépet Blaise Pascal (1623-1662) francia filozófus
tervezte 1642-ben. Összesen hét példányt készített el. Az
automatikus átvitelt megvalósító gép „csak” összeadni és
kivonni tudott, és hatjegyű számokkal dolgozott.
6
Érdekesség, olvasmány
A számokat a gép elején lévő kerekeken kell beállítani, az eredmény pedig a gép tetején lévő kis ablakokban látszik. Az eszköz tízfogú fogaskerekeket tartalmaz, a fogaskerekek minden foga egy-egy számjegynek felel meg 0-tól 9-ig. A számokat összeadni vagy kivonni a fogaskerekek megfelelő számú foggal történő elforgatásával lehet. A gépet apja munkájának megkönnyítésére készítette az akkor 19 éves Pascal.
Gottfried Wilhelm Leibniz (1646-1716)
német filozófus és matematikus Pascal gépét
fejlesztette tovább. Gépével már szorozni,
osztani, és gyököt vonni is lehetett. Két
részből állt: az összeadómű megegyezett
Pascal megoldásával. Az újdonságot a
szorzómű jelentette, és a bordás tengely alkalmazása tette lehetővé.
Érdekesség, olvasmány
A henger felületén kilenc darab, eltérő hosszúságú borda van, ezek úgy működnek, mintha széles fogaskerék-fogak lennének. A hengerhez illeszkedő fogaskerék saját tengelye mentén elmozdítható, és megfelelő beállításával elérhető, hogy a bordás henger egy teljes körülfordulása során fogaiba pontosan 1, 2, ... 9 számú borda akadjon be, és így ennyi foggal forduljon el a fogaskerék. A fogaskerék tengely menti eltolásával állítható be a szorzandó, a bordáshengert pedig annyiszor kell körbeforgatni, amennyi a szorzó, ekkor a fogaskerék a két szám szorzatának megfelelő számú foggal fordul el. A XIX. sz. végéig a bordás henger jelentette az egyetlen gyakorlatban is kivitelezhető mechanikus megoldást a szorzás gépesítésére, és alkotórésze maradt az összes mechanikus számológépnek még a XX. században is. Leibniz nevéhez még két olyan elméleti felfedezés is fűződik, aminek szerepe van az informatika fejlődésében. 1666-ban bebizonyította, hogy egy számolási művelet egymás után elvégezhető egyszerűbb lépések sorozatára bontható, 1679-ben pedig ismertette a számítástechnikában alapvető fontosságú kettes számrendszert.
1820-ban Charles-Xavier Thomas de Colmar Franciaországban készítette Arithrométre
nevű gépét, mely egy Leibniz-féle bordás hengerrel működött. A számológép
tökéletesítéséhez tartozott később a billentyűzet és a tengelyek forgatására a villamos
meghajtás alkalmazása is. 1885-ben készíti el az amerikai Stevens Borroughs (1857-1898) az
első billentyűvel és nyomtatóval ellátott összeadógépet.
1887-ben készült el a svéd Theophil Witgold Odhner (1845-1905) nevéhez fűződő tekerős
számológép, melynek lelke a bordáshenger helyett a bütyköstárcsa. Minden helyiértéket egy-
egy ilyen tárcsán állítottak be, a bütykök száma pedig egy karral volt változtatható. Működése
gyakorlatilag megegyezett a korábbi megoldásokkal. 1905-ben készítették az első teljesen
automatikus, gombnyomásra működő számológépet. A
képen egy mechanikus
számológép látható.
Folyamatok vezérlésére már
évszázadok óta alkalmaztak
7
különböző vezérlési módokat. Egy jellemző megoldás volt a tüskés henger, melynek kerülete
szabta meg a program hosszát. A mintás szövés vezérlésére olyan módszer kellett, amivel
hosszabb programot is meg lehet adni, és egyszerűen lehet a szövőszéket „átprogramozni”
vagyis a mintát megváltoztatni. Joseph Marie Jacquard (1752-1834) francia mérnök 1810-
ben automatikus szövőszéket tervezett, amelynél fából készült vékony, megfelelően
kilyuggatott lapok – kártyák – vezérelték a minták szövését. A képen a szövőszék tetején
látható a lyukkártyás vezérlőszerkezet.
A modern számítógépgyártás megalapozója Charles Babbage (1792-1871) brit matematikus
és feltaláló. A XIX. században kidolgozta a modern digitális számítógép alapelveit. Több új
típusú gépet is kigondolt, ezek egyike a logaritmustáblázatok készítésére tervezett
differenciagép (Difference Engine) volt.
Érdekesség, olvasmány
A differenciagép a számolás eredményét a tervek szerint pontozóval közvetlenül a nyomda által használható fémlemezbe írta volna. Nevét a gép onnan kapta, hogy bizonyos függvényértékek (négyzetek, harmadik hatványok, logaritmusok, stb.) sorozatának kiszámítását különbségek, differenciák összeadására vezeti vissza. A gép 20 jegyű számokkal dolgozott volna. Újabb számítógépében, az Analytical-Enginben 1000 tengelyen 50 helyiértékű számoknak megfelelő számkereket akart elhelyezni. Babbage csak a gép egyes részeit tudta elkészíteni, a munkát azonban nem tudta befejezni: részben anyagi okok miatt, részben pedig a kor technikai lehetőségei nem voltak elegendőek. Babbage felismerte, hogy a számolási folyamat során szükség van a részeredmények tárolására. Az el nem készült gépre Ada Byron (Lord Byron költő lánya) írt programokat, kiemelkedő matematikai tehetségének köszönhetően ő nevezhető az első programozónak. Babbage univerzális gépet tervezett, amely adatbeviteli és eredmény-kiviteli egységből, számolóműből és részeredmény-tárolóból állt volna. A képen a malom rész látható, amely a számítási műveletek elvégzését szolgálta volna. A gép lyukkártyákról olvasta volna be az információkat, tudott volna utasításokat és adatokat tárolni, matematikai műveleteket végrehajtani, és adatokat kinyomtatni. Lyukkártyák vezérelték volna a számítási folyamatokat is. Megjelent a feltételes vezérlésátadás ötlete. A tárolómű 200 részeredmény tárolására lett volna alkalmas, 1000 db, egyenként 50 fogaskereket tartalmazó oszlop formájában. A gép működési elvei miatt sok történész Babbage-et tartja a modern digitális számítógép feltalálójának. 1991-ben megépítették az eredeti differenciagép egyszerűsített változatát Babbage részletes rajzai alapján. A gép négyezer alkatrészből áll, méretei 3,4 m × 0,5 m × 2,1 m. A berendezés tökéletesen működött: hibátlanul kiszámította a 7. hatványok táblázatának első száz értékét.
Az első működő differenciagépet 1853-ban készítette el Pehr Scheutz és fia, Edvard
Scheutz. Babbage készülékét egyszerűsítették: a gép „csak” 15 jegyű számokat és
harmadrendű differenciákat kezelt. Differenciagépeket egészen az 1940-es évekig használtak
matematikai táblázatok készítésére.
George Boole (1815-1864) és Augustus de Morgan (1806-1871) dolgozták ki a formális
logikát. Ekkor már régóta használták a bináris kapcsolásokat órák, automaták vezérlésére. A
Boole-algebra számítógép logikai tervezéséhez és programozásához nyújt elméleti alapot.
8
Megjelenik az elektromosság
A lyukkártya alkalmazásának másik úttörője Herman Hollerith (1860-1929) német
származású amerikai statisztikus volt. Az Egyesült Államok 1880-as népszámlálásán 55
millió ember adatait gyűjtötték össze. Az adatok feldolgozásához 500 ember munkájára volt
szükség, 7 éven keresztül. Hollerith az 1890-es népszámlálás adatainak feldolgozásához
szerkesztette meg rendezőgépét.
Érdekesség, olvasmány
Jacquard deszkalapjaihoz hasonló perforált kártyákat használt az adatfeldolgozásra. Egy kártyára egy ember adatait lyukasztotta. Az adatok feldolgozása során a lyukkártyák elektromos érintkezők között mentek át. Ahol a kártyán lyuk volt, az áramkör bezárult, így lehetett a lyukakat megszámolni. A népszámlálási adatatok feldolgozása ilyen módon mindössze négy hétig tartott! 1896-ban megalapította a Tabulating Machine Company nevű céget, amelyből aztán 1924-ben megalakult az IBM.
1914-ben Leonardo Torres y Quevedo (1852-1936)
bevezette a lebegőpontos számábrázolást a számítástechnikában, és olyan programvezérlésű
mechanikus számológépeket épített, amelyeknek kimeneti egysége írógép volt. Tőle
származnak a programozási nyelvek első kezdeményezései is.
1932-ben építette Konrad Zuse (1910-1992) Németországban az első mechanikus tárolót
tetszőleges adatok, elsősorban lebegőpontos számok tárolására. A tároló 24 bites adatokat
tudott fogadni. Ő építette meg Z1 néven az első olyan szabadon programozható számítógépet,
amely kettes számrendszerben működött és lebegőpontos számokkal dolgozott. Az első
teljesen működőképes, szabadon programozható, programvezérlésű számítógépet, a Z3-at
1941-ben fejezte be.
Érdekesség, olvasmány
A Z1 esetében adatbevitelre billentyűzet szolgált, az adatkivitel pedig kettes számrendszerben egy világító tábla (fénymátrix) segítségével történt. A számolómű és a tároló telefonrelékből készült. A gép 24 bites szavakkal dolgozott, a memóriája 16 adat tárolását tette lehetővé. A gép tartalmazott decimális-bináris és bináris-decimális átalakítót is. Ilyen eszközt Zuse készített először. A Z2 már lyukfilmes adatbeviteli egységet tartalmazott. A Z3 22 bites szavakat használt és lebegőpontos számokkal dolgozott. A tárolóegység 1600 mechanikus reléből állt, 64 szám tárolására volt képes. A számolómű 400 relé felhasználásával készült. A műveletek jellemző végrehajtási ideje 3s. Zuse cége 1967-ig gyártott számítógépeket. Az 1956-ban bevezetett relés Z11-ből 50 db készült, a Z22 már elektroncsöves volt. A céget a Siemens vette át 1967-ben.
Alan Mathison Turing (1912-1954) 1936-ban írta le egy olyan számítógép matematikai
modelljét, amely mint a lehető legegyszerűbb univerzális számítógép, bármilyen véges
matematikai és logikai problémát meg tud oldani. Ez a ma Turing-gép néven ismert eszköz
fontos lépcső volt a digitális számítógépek kifejlődésében.
9
Érdekesség, olvasmány
A Turing-gép három részből áll: egy mindkét irányban végtelen tárolószalagból, egy vezérlőegységből és egy író-olvasó fejből. A szalag mezőkre oszlik, mindegyik mező egy adatot vagy utasítást tud tárolni. Csak a fej alatt elhelyezkedő egyetlen mező olvasható, illetve írható. A gép a következőképpen működik: Kezdetben a gép meghatározott állapotban van. Beolvassa a szalagról az éppen a fej alatt lévő jelet, ettől függően végrehajt valamilyen tevékenységet, és így új állapotba jut. Közben a szalagot is új mezőre pozícionálja. A fej beolvassa a szalagról a következő jelet, és így tovább. A folyamat akkor ér véget, amikor az olvasófej a STOP utasítást olvassa be.
George Stibitz (1903-) 1937-ben építette meg Complex Number Calculator nevű gépét. A
gép bináris aritmetikát használt, a tárolóegység relékből készült. Az adatbevitel távírógéppel
történt. A gép egy változatát 1943-ban ballisztikai számításokra használták.
Claude Shannon (1916-) 1943-ban fedezi fel az elektromos kapcsolások és a logika
kapcsolatát.
Érdekesség, olvasmány
Eszerint ha egy áramkörben egy kapcsoló zárt állása az igaz logikai értéket jelképezi, a nyitott állása pedig a hamis értéket, akkor két kapcsoló soros kapcsolása az ÉS műveletet valósítja meg, két kapcsoló párhuzamos kapcsolása pedig a VAGY műveletet. A digitális számítógépek áramköreinek tervezésében az elmélet lényeges segítséget jelent. Shannon a matematikai információelmélet egyik megalapítója is.
Howard Aiken (1900-1973) vezetésével fejlesztették ki az első teljesen automatikusan
működő általános célú digitális számítógépet az Egyesült Államokban, a Harvard egyetemen.
Építését 1939-ben kezdték meg. A gép a Mark I nevet kapta. Relékből épült fel és fixpontos
számokkal dolgozott. A memóriája a mechanikus számológépekhez hasonlóan
fogaskerekekkel, tízes számrendszerben tárolta az adatokat. Az adatbevitel lyukkártyákkal
történt. A programot lyukszalag tartalmazta, ez vezérelte a gép működését. Továbbfejlesztése
a Mark II, amely 1948-ban készült el, és már lebegőpontos számokkal is tudott dolgozni.
Érdekesség, olvasmány
A Mark I 3304 db kétállású kapcsolót tartalmazott, összesen kb. 760 000 alkatrészből állt és 500 mérföld (800 km) huzalt használtak fel hozzá. A gép kb. 15 m hosszú és 2,4 m magas volt, memóriájában 72 db 23 jegyű számnak volt hely. A gépnek egy összeadáshoz 0,33, egy szorzáshoz 4, egy osztáshoz 11 másodpercre volt szüksége és gyakran meghibásodott. A tengeri tüzérség részére készítettek vele lőtáblázatokat. Ezt a számítógépet 1959-ig használták.
10
Az első generáció (1952-57) Az elektronikus működésű számítógépek megjelenésével kezdték el generációkba sorolni a
számítógépeket, azonban az egyes generációk között nem húzható meg éles választóvonal.
Az első generációs elektronikus számítógépek jellemző építőeleme az elektroncső. Az
elektroncsövet már 1904-ben feltalálták ugyan, de később jöttek rá arra, hogy nemcsak
erősítőként, hanem kapcsolóként is alkalmazható. Mivel azonban a csövek drágák,
megbízhatatlanok és rövid életűek voltak, csak az 1940-es évektől használták őket
számítógépek készítésére. Kezdetben a programozás gépi kódban történt, utána jelent meg az
assembly nyelv és az ebben készült programok lefordításához szükséges assembler.
A gépek működtetéséhez állandó műszaki felügyelet kellett, mert a számítógép bármikor
meghibásodhatott, a hiba megkereséséhez és kijavításához pedig hozzáértő szakemberek
kellettek. A leggyakoribb hiba ok egy-egy cső kiégése volt. Üzemeltetésük ráadásul rengeteg
energiát igényelt.
1939-ben az Egyesült Államokban építette meg John Atanasoff (1903-) és Clifford Berry
(1918-1963) az első elektronikus gépet. (Atanasoff-Berry Computer, ABC) Ezt a
számítógépet lineáris egyenletrendszerek megoldására használták.
Érdekesség, olvasmány
Vita folyt arról, hogy melyik az első általános célú elektronikus digitális számítógép. 1973-ban döntés született: ez a cím az Atanasoff-Berry Computert illeti meg.
Angliában, 1943-ban tudósok és matematikusok egy csoportja létrehozta az első teljesen
elektronikus digitális számítógépet, a Colossust. Rejtjelezett német rádióüzenetek
megfejtésére használták Alan Turing vezetésével, a németek ENIGMA nevű rejtjelét is ezzel
fejtették meg. Mivel a háború után is katonai célokat szolgált, egészen 1975-ig titokban
tartották a létezését.
Az első általános célú elektronikus digitális számítógép, az ENIAC (Electronic Numerical
Integrator And Computer). Ezt a számítógépet már szabadalmaztatták. Szintén katonai
célokra kezdte tervezni John Presper Mauchly és John William Eckert a Pennsylvania
egyetemen 1946-ban.
11
Érdekesség, olvasmány
Az ENIAC 17468 elektroncsövet tartalmazott, több mint 100 kW elektromos energiát fogyasztott, 450 m2 helyet foglalt el, tömege 30 tonna volt. Megépítése tízmillió dollárba került. A relés számítógépeknél három nagyságrenddel gyorsabb volt: az összeadást 0,2 ms, a szorzást 3 ms alatt végezte el. A programja fixen be volt „drótozva” a processzorba így csak többnapos munkával, csatlakozások átkötésével lehetett megváltoztatni. Memóriája 20 db tízjegyű előjeles decimális számot tudott tárolni, egy-egy számjegy tárolására 10 db elektroncsövekből épített flip-flop szolgát. Az elektroncsövek megbízhatatlansága miatt a gép csak rövid ideig tudott folyamatosan működni. Ballisztikai és szélcsatorna-számításokra használták. Az a számítás, ami a gépnek 15 másodpercig tartott, egy szakképzett embernek asztali kalkulátorral 10 órás munka volt. A gépet 1956-ban bontották le, mert elavult.
Az UNIVAC I. (UNIVersal Automatic Calculator) volt az első sorozatban gyártott univerzális
számítógép, mely kereskedelmi forgalomban is kapható volt. Első volt abban is, hogy a
számok mellett már szöveges információt is tudott kezelni, valamint háttértárként itt
használtak először mágnesszalagot. Ezt a gépet is John Presper Eckert és John Mauchly
tervezte, és ezt tekinthetjük az első generáció igazi kezdetének.
Neumann János és a Neumann-elvek 1951-ben helyezték üzembe az EDVAC-ot
(Electronic Discrete Variable Automatic Calculator),
mely szintén Mauchly és Eckert vezetésével épült.
Ez a gép már Neumann János (1903-1957) magyar
matematikus elvei alapján készült.
A Neumann-elvek
A ma használt számítógépek felépítését, működését nagyban meghatározta Neumann János
munkássága. 1946-ban a „First Draft of a Report on the EDVAC by John von Neumann című
jelentésében fogalmazta meg azokat az elveket, amelyek alapján a mai számítógépek is
felépülnek. Ezek az elvek röviden a következők [5]:
1. A számítógép legyen teljesen elektronikus, külön vezérlő és végrehajtó egységgel
rendelkezzen.
2. Kettes számrendszert használjon.
3. Az adatok és a programok ugyanabban a belső tárban, a memóriában legyenek.
4. A számítógép legyen univerzális.
5. Folyamatos emberi beavatkozás nélkül hajtsa végre a műveletsort, logikai döntéseket
hozva feldolgozás közben.
12
a) C
A számítógépnek rendelkeznie kell egy belső
címezhető írható-olvasható tárral. Ez egy közös tároló
abban az értelemben, hogy egyaránt tárolja a
végrehajtandó program utasításait, és a feldolgozandó
adatokat is. A memóriában az utasítások és az adatok
ugyanolyan módon – binárisan – ábrázoltak. A gép
vezérlése tehát tárolt program alapján történik:
megjelenik a belső programvezérlés elve. A számítógépnek soros működésű, az utasítások
végrehajtása szekvenciálisan történik. A processzor tartalmaz egy önálló egységet az
aritmetikai és logikai műveletek elvégzésére. Az adatok és a program be- és kivitelére önálló
egységek szolgálnak.
Érdekesség, olvasmány
A First Draftban leírt Neumann-elvű számítógép logikai felépítését mutatja a következő ábra. A nyilak az adatáramlás irányát jelzik. A rövidítések jelentése: CA: központi aritmetikai egység, CC: általános vezérlést ellátó egység, M: memória, R: külső rögzítő egység, I: beviteli egység, O: kiviteli egység. [7] Az EDVAC-nak volt egy elsődleges 1024 szavas higany-késleltetővonalas operatív tára és egy másodlagos, lassabb, 20 kilószó kapacitású mágnesdrótos tára. A tár és az aritmetikai-logikai egység is soros volt, bitenként dolgozta fel az adatokat. Adatbevitelre egy írógépszerű eszközt használtak, adatkivitelre egy nyomtatót. Egy program végrehajtásához előbb az egész programot és az adatokat be kellett táplálni a memóriába. Ez volt az első tárolt programú számítógép: egy új probléma megoldásához nem kellett a gépet áthuzalozni.
Neumann János zsenialitását bizonyítja, hogy ő fogalmazta meg azokat az elveket,
amelyek alapján a mai számítógépek is felépülnek.
Érdekesség, olvasmány
Neumann János életrajza 1903. december 28-án született Budapesten, jómódú családban. Apja Neumann Miksa bankár, anyja Kann Margit volt. Két öccse volt, egyikük orvos, másikuk jogász lett. Már egész kisgyermekként rendkívüli nyelvtehetségnek számított, és kivételesen jó emlékezőtehetsége volt. Hat éves korában már folyékonyan tudott ógörögül, apjával e nyelven viccelődött. Tudott latinul is, anyanyelvi szinten beszélt németül, és több ismerőse szerint németül is gondolkodott. Angolul úgy beszélt, hogy rendkívül gyorsan fordította a németül megfogalmazott gondolatait angolra. Mire leérettségizett, már matematikusnak számított. Fiatal korától érdeklődött a repülés és a technika más újdonságai iránt. Már ekkor gondolkodott kettes alapú elektromos számológép építésén. Mivel a matematika és a technika is érdekelte, párhuzamosan két egyetemet végzett.
Göttingemben, a német matematika fellegvárában tartotta meg első előadását a társasjátékok elméletéről. 1930 és 1933 között Amerikában és Európában is tanított. Meleg, emberséges személyiség volt, ily módon kiváló tanáregyéniséggé vált. Amikor Németországban győzött a fasizmus, letelepedett az Egyesült Államokban, 1937-ben kapta meg az amerikai állampolgárságot. Bekapcsolódott a nácizmus elleni katonai előkészületekbe: részt vett az atomenergia felszabadításában és háborús célú felhasználásában, majd a békés energiatermelés szolgálatába állításának irányításában is.
1945-től 1957-ig a princetoni Elektronikus Számítógép projekt igazgatója. Ekkor már az emberi agy, valamint az idegrendszer működését utánzó gépek kötötték le figyelmét. 1945-ben a cambridge-i egyetemen (Anglia) elkészült
13
az első elektronikus, tárolt programú számítógép, az EDSAC (Electronic Delay Storage Automatic Computer), mely már a „Neumann-elvek” alapján működött. A számítógép működéséhez a biológiát hívta segítségül: az emberi agy feladat megoldásainak mintájára megalkotta az algoritmust, s az agyat vette alapul a számítógépben való számítások elvégzésének megvalósításához. Érdemeinek elismeréseképpen az Amerikai Egyesült Államok elnöke kinevezte az USA Atomenergetikai Bizottságának elnökévé. Neumann mondta: „a tudomány a jövőben inkább a szabályozás és vezérlés, programozás, adatfeldolgozás, kommunikáció, szervezés és rendszerek problémáival törődik majd”. Felismerte, hogy egy rendszer biztonságát illetve hatékonyságát nem annyira az határozza meg, hogy milyen elemekből épül föl, hanem hogy hogyan van rendszerré szervezve, az elemek között milyen minőségű és mennyiségű információ megy át. Neumann János jól látta a fejődés további irányát, de életművét már nem fejezhette be. Hátralevő éveiben súlyos rákbetegségben szenvedett. 1957. február 8-án halt meg Washingtonban, Amerikában. [23, 24, 25]
Második generáció (1955-1964) A tranzisztorok megjelenése nem csak a híradástechnikában, de a számítógépek világában is
jelentős változásokat hozott. A tranzisztort 1947-ben fedezte William Shockley, aki ezért aztán
1956-ban Nobel-díjat is kapott. A tranzisztorokkal kisebb, gyorsabb és megbízhatóbb logikai
áramköröket lehetett készíteni, mint az elektroncsövekkel. Ezek a gépek sokkal kevesebb
energiát fogyasztanak és sokkal hosszabb életűek. Másodpercenként egymillió műveletet is el
tudtak végezni amellett, hogy megbízhatóságuk nagyságrendekkel nagyobb lett. Egyúttal
sokkal olcsóbbá is váltak a számítógépek, emiatt nőtt az eladások száma, egyre több cég
kezdett számítógépgyártással foglalkozni.
Az 1950-es években több forradalmi újítás is született. Jay W. Forrester kidolgozza a
ferritgyűrűs memóriát, a második és harmadik generációs gépek jellegzetes operatív tárát.
Kidolgozzák az amerikai John Backus vezetésével a FORTRAN nyelvet, majd az évtized
végén az ALGOL programozási nyelv definíciójának első változatát, és 1960-ban publikálják
a COBOL első változatát. A szoftver értéke a hardverhez képest egyre nőtt. Ebben az
időszakban építették az első szuperszámítógépeket, melyek különlegesen gyorsak voltak. A
gyorsabb műveletvégzés elérésére fejlesztették ki az egy időben végrehajtható tevékenységek
számának növelését. Az első teljesen tranzisztorizált számítógép, az RCA 501-es 1959-ben
készül el. Input-output processzorokat vezettek be az adatbevitel és kivitel felügyeletére, így a
CPU-t sok időigényes tevékenységtől és várakozástól szabadították meg. Jellemzővé vált a
mágnesdobos és a ferritgyűrűs operatív tár használata, háttértárolóként mágnesszalagot és
újdonságként mágneslemezt használtak.
Eisenhower
elnök Szabadság
Éremmel tüntette ki.
14
Érdekesség, olvasmány
Jelentős szerepet játszottak a számítástechnikai oktatás, kutatás és az alkalmazásfejlesztés fejlődésében Magyarországon a ’70-es években az ODRA számítógépek. Ezeken a gépeken már tanítani lehetett az ALGOL-60 magas szintű algoritmikus programozási nyelvet is (pontosabban ennek az ODRA-1204 számítógépes változatát, az ALGOL-1204-et), amelyben sokkal egyszerűbben és elegánsabban lehetett programozni, mint gépi kódban. Az ODRA-1204 típusú, második generációs, közép-teljesítményű digitális számítógépet francia licence alapján a lengyel ELWRO cég fejlesztett ki 1967-ben. Az ODRA-1204 jellemzése: • vezérlő pult; • konzol írógép (ROBOTRON) a gép irányítására, de be/kimenethez is használni lehetett; • a központi egység 6 µs ciklusidejű, ferritgyűrűs operatív memóriája 16384 db. 24+1 bites ún. "gépi szó"
kapacitású • 8 csatornás lyukszalagos be/kimeneti egység; • 80 karakter széles (DATA PRODUCT) sornyomtató; • 32 kiló-szavas (1 szó 24 bit) 96 Kbájt-os ferritgyűrűs operatív memória; • 4 db 64 kiló-szavas fix mágnesdob háttértár (kapacitás ~ 768 Kbájt) Programozása: Vezérlőrendszere nem volt, különböző kezelőprogramokat kellett használni, melyek bináris lyukszalagon voltak, ezek bevitele a memóriába a BINO elnevezésű fixen beépített bináris beolvasóval történt; • az utasítások végrehajtását mikroprogramok generálták, melyek 512 szavas tárban voltak; • assembler (JAS); • autókód ( MOST-2); • algoritmikus nyelvek (Algol-1204, FORTRAN); • a programok lyukszalagra rögzített szövegét különböző kezelő kétlépcsős fordító) programokkal közvetlenül
a memóriába, vagy bináris szalagra fordítottuk, s a futtatáshoz is szükség volt úgynevezett segédprogramok (PP) bevitelére (I/O eljárások, függvények, eljárások).
A működtetéséhez a vezérlőpult már nem játszott olyan nagy szerepet, hanem a segédprogramokkal – a konzol írógépet használva – az operátor kommunikálhatott, ezzel irányítva minden tevékenységet.
ODRA 1204
ODRA 1013
A korszak másik jellemző gépe: az R-30
Az ODRA-1204 központi egysége
[30, 31, 32, 33]
15
Harmadik generáció (1965-1974) A harmadik generációs számítógépek jellegzetes építőeleme az integrált áramkör, IC,
melyet 1958-ban fedezett fel a texasi Jack S. Kilby. Az első integrált áramköröket tartalmazó
számítógépek 1964-ben kerültek kereskedelmi forgalomba. Az integrált áramkörök tovább
csökkentették a számítógépek árát, méretét és meghibásodási gyakoriságát. Mindezen
tulajdonságok vonzóvá tették a számítógépet, a ’70-es években több mint 100.000
nagyszámítógépet és ugyancsak több mint 100.000 miniszámítógépet helyeztek üzembe. A
könnyű kezelhetőséget segítette elő, hogy megjelent a monitor és a billentyűzet, valamint az
első valódi operációs rendszerek. Ezekkel az olcsó gépekkel a számítástechnika kisebb cégek
számára is elérhetővé vált.
A Gene Amdahl tervei szerint készült IBM System/360-as megjelenése 1965-ben
mérföldkőnek mondható: ez egy egész gépcsalád volt, amely hat különböző teljesítményű
egymással kompatibilis modellből állt. Így lehetővé vált egy felhasználó számára, hogy
bővíthesse a memóriát, nagyobb teljesítményűre cserélje a gépet, vagy más perifériát
válasszon a gépéhez tetszés szerint úgy, hogy a már kész programjait használhatta az új gépen
is.
A képen egy IBM 360-as
számítógép látható. A terem
közepén a két nagy szekrényben
van a számítógép. Az operátori
konzolírógépen keresztül lehetett
parancsokat adni az operációs
rendszernek, és az üzeneteket is ide írta ki a gép. Elöl vannak a mágneslemezes egységek, a
háttérben mágnesszalag-meghajtók, valamint egy sornyomtató látható.
16
A negyedik generáció (1971-) A hetvenes évektől kezdődően a számítógépek fejlődésében robbanásszerű változás történt.
Ennek oka az igen nagy integráltságú (VLSI, Very Large Scale Integration) félvezető
áramkörök megjelenése volt. Általánossá válik a félvezetős, integrált áramkörökből készült
memória is. A mikroprocesszor megjelenése lehetőséget ad a személyi számítógép rohamosan
terjedésének; elsősorban szövegszerkesztésre, táblázatkezelésre, grafikára, adatbázis-
kezelésre, játékra alkalmazzák. Az új technológiának köszönhetően tovább csökken a hardver
ára, egyúttal megfigyelhető a szoftverek árának további növekedése a hardver árához képest.
A számítógépek programozása szinte kizárólag magas szintű nyelveken történik. 1968-ban
Nicklaus Wirth elkészíti a Pascal programozási nyelvet, amely a negyedik generációs
számítógépeken arat sikert. Seymour Papert 1971-ben alkotja meg a teknőcgrafikával
kiegészített LOGO nyelvet, amelynek pedagógiai érdemei elévülhetetlenek.
E korszakra jellemző az is, hogy lehetővé válik a számítógépek összekapcsolódása hálózaton
keresztül.
Érdekesség, olvasmány
Az első mikroprocesszor, 1971-ben készült, Ted Hoff tervezte, és az Intel készítette. Egy 7 mm oldalhosszúságú négyzet alakú szilíciumlapkán 2300 tranzisztort tartalmazott. A processzor 4 bites volt, azaz 4 bitet tudott párhuzamosan feldolgozni. Összesen 45 utasításból állt az utasításkészlete. Egyre több cég állította elő a saját mikroprocesszorait, megjelentek a 8, 16, 32, majd a 64 bites mikroprocesszorok. Az 1973-ban megjelent 8 bites Intel 8080-as mikroprocesszor meghatározó volt az újabb processzorok fejlesztésében és a személyi számítógépek gyártásában. 16 címvonala volt, így 64 kilobájt memóriát tudott megcímezni, a műveleteket azonban 8 bites adatokon tudta elvégezni. Az aritmetikai áramkörök fixpontos bináris és decimális számok összeadását és kivonását tudták elvégezni, a szorzást, osztást és a lebegőpontos műveleteket külön programozni kellett. 1973-ban az R2E nevű francia cég bemutatja az első mikroszámítógépet, a MICRAL-t. 1974-ben forgalomba kerül az első programozható zsebszámológép, a Hewlett-Packard által gyártott HP-65. Ugyanebben az évben megjelenik az első személyi számítógép, az Altair 8800, melyet összeszereletlen készlet formájában árusítottak, hihetetlen olcsón. Ez volt az első, kimondottan személyes felhasználásra tervezett asztali számítógép, és ez a gép indította el a számítógépes elektronika máig tartó forradalmát. A mikroszámítógép-készlet iránt hirtelen olyan nagy kereslet alakult ki, amire senki sem számított. Egyre több cég kezdett számítógépek gyártásával foglakozni, közük Tandy Corporation. Gépük billentyűzettel és katódsugárcsöves monitorral rendelkezett, az információ tárolására pedig mágneskazettás egység állt rendelkezésre. Stephen Wozniak és Steven Jobs Apple Computers néven alapított számítógépgyártó céget. Újítások közé tartozott a tárolására szolgáló olcsó lemezmeghajtó és a színes grafika, valamint az egér megjelenése. Áttörést jelentett az 1979-ben megjelenő VisiCalc, az első táblázatkezelő program, hiszen ezzel már a programozásban gyakorlatilag teljesen járatlan emberek is tudták a számítógépet használni 1981-ben lépett a színre IBM PC az IBM cég mikroszámítógépe. A PC bizonyította be, hogy a mikroszámítógép üzleti élet szükséges eszköze. Operációs rendszere a DOS. Ugyanebben az évben készült el az első hordozható mikroszámítógép, mely Adam Osborne műve volt. A gép 11 kg-ot nyomott. 1976-ban üzembe helyezik az első Cray-1 szuperszámítógépet, amely alkotójáról, Seymour Crayről kapja nevét. Kereskedelmi forgalomba is került, mivel azonban hétmillió dollárba került, csak igen nagy cégek tudták megvenni. Ez volt az első olyan számítógép, amely képes volt másodpercenként több mint százmillió lebegőpontos
17
műveletet végrehajtani, az alapműveletek végrehajtási ideje 12,5 ns. Az áramköröket freonnal hűtött függőleges lapokra szerelték. Azóta építettek ugyan gyorsabb számítógépeket is, de a Cray-1-et azóta is használják!
A ’80-as évek sok újdonságot hoztak. Ezek egyike a nagyteljesítményű 32 bites
mikroprocesszorok megjelenése volt, melyek alkalmasak voltak fejlett többfelhasználós és
multitaszkos operációs rendszerek futtatására. Egy másik újítás felhasználóbarát grafikus
felhasználói felület (graphical user interface, GUI) bevezetése. Ma már beszédvezérlésű
gépek is léteznek.
A ’90-es évekre a számítógépgyártás vált a világ leggyorsabban fejlődő iparágává, a világon
eladott több százmillió (!) személyi számítógép jelentős hányadát pedig már magánemberek
vásárolják.
Ötödik generáció Ennek az új generációnak egyik fontos alkotóeleme a mesterséges intelligencia lesz: olyan
intelligens számítógép létrehozása a cél, amelyik lát, hall, beszél és gondolkodik, képes
asszociálni, tanulni, következtetéseket levonni és dönteni.
Érdekesség, olvasmány
Egy elképzelhető fejlődési irány 1993-ban Leon O. Chua és Roska Tamás jelentették be egy forradalmian új számítógép feldolgozási egységének kifejlesztését. Folytonosan működő, kicsi analóg számítógépek ezreit működtetik összekapcsolva, szemben az eddig elterjedt néhány komplex, digitálisan működő processzorral. A celluláris neutrális hálózat egy chipen belül megközelítőleg tízezer piciny feldolgozó egység együttes munkájával oldja meg a feladatokat, szédületes sebességgel: másodpercenként egy trillió művelet elvégzésével. Hasznosítása a képfeldolgozás és alakfelismerés területén óriási változásokat idézett elő. [5] A Roska Tamás akadémikus vezette kutatócsoport több, mint tízévi, amerikai-spanyol együttműködésben végzett munka eredményeként a jelenleg alkalmazott számítógépek működési elvétől gyökeresen eltérő konstrukcióval dolgozó analogikai számítógépet fejlesztett ki. Az elnevezés az analóg és a logikai működés egyesítésére utal. Roska Tamás szerint a digitális technika ismert fizikai alapjainak és működési módjainak átgondolása igencsak időszerű volt. Az optikai érzékelők - így például a kamerák - ontják az analóg jeleket, ezek digitálisra konvertálása pedig nem megy olyan könnyen, lassú és energiaigényes folyamat. „Azokon a területeken - mondja Roska -, ahol változó jelek tömegével kell dolgozni, olyan számítógép válhat be, amelyben közel kerül egymáshoz az érzékelés és a feldolgozás.” Az analóg módon működő és logikai műveletekre képes komputer, az analogikai számítógép lelkét, a CNN csipet Leon Chua, a Berkeleybeli University of California kínai származású amerikai professzora és tanítványa, L. Yang találta fel 1988-ban. A CNN egy Cellurális Neurális/Nemlineáris hálózat. Olyan processzorsereg, amelyben az egyes processzorok (cellák) egy négyzetrács csúcspontjaiban foglalnak helyet. Mindegyik cella a közvetlen környezetében lévővel van összeköttetésben, azoktól hatást kap, illetve azokra hat. Ezek a hatások alakítják ki a CNN működését. Erre építve 1992-ben Roska és Chua megalkotta az úgynevezett CNN Univerzális Gépet, amely egy kétdimenziós rácson több ezer CNN elemi processzort tartalmaz. A CNN csip maga egy vizuális mikroprocesszor, amelyben minden egyes tranzisztor fényérzékelő optikával rendelkezik.
Roska Tamás
18
+ =
+ =
Az analogikai számítógépben a jelek folytonosak, érzékszerveinkből mintegy hullámszerűen terjednek tovább az idegrendszerben. Ezért a tudósok ezt a modellt hullámszámítógépnek is hívják. Egy új számítógépfajta jelent meg: vizuális mikroprocesszorként (látócsipként) már működő példányokat is lehet vásárolni. A számítógép alapelvét agykutatók, Hámori József, Frank Werblin és mások munkái inspirációjára alkotta meg Roska Tamás és Leon Chua. Ma már megszületett az új retinamodellnek a vizuális mikroprocesszoron történő részleges megvalósítása is, Bálya Dávid fiatal magyar kutató jóvoltából. 2002. március 2-án a Bolyai-díjat RoskaTamás vehette át Mádl Ferenc köztársasági elnöktől.
[26, 27]
Feladat
1. Nézz utána, hogyan lehet abakusszal számolni! Készíthetsz számoló asztalt a lenti rajz alapján egy nagyobb kartonlapra. Gyűjts össze a számok ábrázolásához 50 darab közel egyforma kavicsot! Kellő gyakorlás után rendezhettek versenyt is!
2. Milyen számokat ábrázolnak az abakuszok?
3. Figyeld meg a következő ábrákon az összeadás lépéseit. Készítsetek hasonló feladatokat a számolóasztalon!
4. Gyűjts képeket régebbi és mai számítógépekről! Ragaszd be a képeket füzetedbe! A képek forrásai számítástechnikai folyóiratok, újságok lehetnek. Internetről is tölthetsz le képeket!
5. Nézz utána, hogy a következő magyar vagy magyar származású személyek, milyen szerepet játszottak vagy játszanak ma is a számítástechnika fejlődésében!
Neumann János, Kozma László, Kalmár László, Nemes Tihamér, Tarján Rezső, Roska Tamás, Halassy Béla, George Kemeny, Charles Simonyi.
19
A számítógép felépítése A számítógép eredményes működéséhez számos berendezés, egység összehangolt
tevékenységére van szükség.
Hardvernek nevezzük a számítógép „kézzel fogható részeit”, pontosabban mechanikus és
elektronikus építőelemeinek, alkatrészeinek összességét.
Szoftver nélkül azonban nem tudjuk a számítógépet használni. A szoftver a számítógép
működtetéséhez, valamint a feladatok megoldásához használt programok összességét jelenti.
Mindezen erőforrások együttes működése biztosítja a számítógépes feladatmegoldás
lehetőségét.
A számítógép logikai felépítését mutatja be a következő ábra:
A ma használt számítógépek felépítését, működését nagyban meghatározzák a Neumann-
elvek. A külvilágból az adatok, információk a számítógép input egységén keresztül jutnak a
központi egységbe, ahol a feldolgozás történik. A háttértárakon adatok és programok
tárolását végzi a gép, a feldolgozás eredményét pedig az output egységen keresztül közli a
külvilággal.
A központi feldolgozó egység
Input egység
Központi feldolgozó egység
Output egység
Háttértárak
Input egység
Központi feldolgozó egység
Output egység
Háttértárak
Processzor CU ALU
Memóriák ROM RAM
20
A központi feldolgozó egység (Central Processing Unit, CPU) két fő alkotóeleme a
processzor és a memóriák, de valójában még tartalmaz ún. regisztereket is, melyek kis
tárolókapacitású, de rendkívül gyors elérésű tárolók, gyakran használt adatok, illetve
részeredmények tárolására szolgálnak.
A CPU feladatai közé tartozik a gép irányítása, a feldolgozási folyamat vezérlése, az adatok
feldolgozása, a külvilágból érkező illetve a külvilág felé küldött adatforgalom irányítása. Az
egyes résztevékenységeket a CPU-n belül önálló részek végzik.
Az egyik ilyen egység a processzor, amely a vezérlőegységből (Control Unit, CU) és az
aritmetikai-logikai egységből (Arithmetical Logical Unit, ALU) áll, valamint tartalmaz gyors
elérésű adattárolókat, regisztereket is. A processzor alkotóelemeit egyetlen áramköri lapon,
chipen állítják elő. Az integráltsági fok egy ilyen lapkán óriási, több millió elektronikai
alkotóelem zsúfolódik össze egyetlen cm2-en.
A vezérlőegység feladata a parancsok (a parancs a legkisebb munkafolyamat a
processzoron belül, melynek lépései az utasítások) feldolgozási sorrendjének meghatározása.
Kapcsolatban áll az ALU-val és az operatív memóriával, feladata tehát az ezekkel való
kapcsolattartás, valamint a parancsok értelmezése, és végső soron a számítógép egységeinek
vezérlése mindezen információk alapján.
Az ALU feladata a nevében van: aritmetikai és logikai műveletek végrehajtására
szolgál. Egyszerű logikai áramkörökből épül fel, melyek összehasonlítani, léptetni, invertálni
és összeadni tudnak.
A processzoron belül az információ- és adatcsere ún. buszokon (vagy síneken) keresztül
zajlik. A címbuszon keresztül történik a megfelelő tárolócella kijelölése, az adatbusz az
adatok továbbítását látja el, a vezérlőbusz pedig vezérlőjeleket továbbít. A folyamatok időbeli
ütemezését egy órajel-generátor végzi. Az órajel frekvencia a processzor, így a számítógép
működési sebességének jellemző adata. A mai számítógépek esetén GHz nagyságrendű.
A CPU másik fontos egysége az operatív tár vagy memória. Itt tárolódnak az adatok a
processzor számára, ezek olyan adatok, amelyek a feldolgozáshoz éppen szükségesek, és
gyorsan rendelkezésre is állnak. Alapvetően kétféle típusú memóriát különböztethetünk meg:
ezek a ROM és a RAM.
A RAM (Random Acces Memory, közvetlen hozzáférésű memória) olvasható,
törölhető, újraírható tár. Csak áramellátás esetén őrzi meg tartalmát, mely a számítógép
kikapcsolásakor, vagy akár áramszünet esetén elvész.
A ROM (Read Only Memory, csak olvasható memória) adatai gyártáskor kerülnek
fixen a tárba, így a felhasználó csak olvasni tudja (illetve a számítógép felhasználja
21
működéséhez) ezeket az adatokat, de törölni, írni nem. A ROM tartalma áramellátás nélkül is
megmarad, így nem változó adatok, programok kerülnek ide.
Az input és output egységeket, valamint a háttértárakat közös néven perifériáknak
nevezzük. A központi egység a perifériákkal az adatcsatornákon keresztül tartja a
kapcsolatot.
Perifériák A számítógép központi egysége és a külvilág közötti adatcserét megvalósító eszközöket be- és
kiviteli (input-output, I/O) eszközöknek nevezzük. Az adatforgalom szempontjából a
következő csoportokba sorolhatjuk ezeket:
1) Adatbeviteli vagy input egységek: az adatok, programok, vezérlőjelek ezeken keresztül
jutnak a számítógépbe. Leggyakrabban a billentyűzetet és az egeret szoktuk használni. A
billentyűzeten betűket, számokat, speciális jeleket, egyszóval karaktereket vihetünk be. Az
egér mutatóeszköz, mellyel a parancsok begépelését válthatjuk ki rámutatással és
kattintással. A sokféle egyéb eszköz közül néhány, a teljesség igénye nélkül: botkormány,
scanner (lapbeolvasó), mikrofon, botkormány (joystick), trackball („hanyattegér”),
vonalkód leolvasó, fényceruza, virtuális valóság kesztyű, stb.
2) Adatkiviteli vagy output egységek: Az információkat, a feldolgozás eredményeit ezeken az
eszközökön keresztül jeleníti meg a számítógép. A leggyakrabban alkalmazott eszközök a
képernyő (monitor) és a nyomtató (printer), de számos más berendezés is használatos,
például hangszóró, rajzgép (plotter), mikrofilm, virtuális valóság sisak, stb.
3) Be- és kivitelre egyaránt alkalmas eszközök: Ide tartoznak a háttértárak, melyek adatok
tárolására szolgáló eszközök. Tartalmukat áramellátás nélkül is megőrzik, így hosszú távú
tárolásra alkalmasak. Adathordozóik szerint egyfajta csoportosításuk lehet a következő:
A háttértárak lényeges jellemzői a tároló típusa, kapacitása, elérési ideje.
a) Mágneses tárak
Működési elvük: az adathordozó felületén lévő mágneses réteg alkalmas arra, hogy
kétállapotú jeleket rögzítsen. Az elektromos áram mágneses mezőt hoz létre maga
körül, mellyel az adatok rögzítésekor megváltoztathatjuk a felület mágnesezettségét.
Olvasáskor a mágneses térben levő vezetőben áram keletkezik, így visszakaphatjuk
azokat az elektromos jeleket (adatokat), amiket rögzítettünk.
22
Floppy
A hajlékonylemezes meghajtó (floppy disk drive, FDD) adathordozója a hajlékony
mágneslemez (floppy disk). A meghajtó a számítógépbe van építve, míg az
adathordozó cserélhető. Ha írunk a lemezre vagy olvasunk róla, egy elektromotor
megforgatja a lemezt. A lemezt két író-olvasó fej (pici elektromágnes) veszi közre,
melyek sugárirányban mozoghatnak. A fej bitsorozatokat ír, amelyek a lemezen
rendkívül kicsi (mikrométer nagyságrendű) mágnesezett tartományok. A lemez egy
vékony, hajlékony műanyag korong, mindkét oldalán jól mágnesezhető anyaggal
bevonva, műanyag burkolat védi a szennyeződésektől. A lemezeket óvni kell a magas
hőmérséklettől és az erős mágneses hatásoktól! A lemez mérete többféle lehet. A
normállemez 8” (8 coll vagy inch) a minilemez 5,25”, mikrolemez 3,5”, a
kompaktlemez 3” átmérőjű. A leggyakrabban 3,5”-os lemezt használunk, melynek
hétköznapi elnevezése „kislemez”.
A lemezek burkolatán különböző nyílások vannak: nyílás az író-olvasó fej számára,
indexlyuk a lemez helyzetének érzékelésére, írásvédő nyílás. A 3,5”-os lemezek esetén
a fejnyílást fedőlap zárja el, amely a meghajtóban automatikusan kinyílik. Az 5,25”-os
lemezek esetén, ha az írásvédő nyílást leragasztjuk, a lemezre nem lehet írni. Ez a
megoldás védelmet nyújt a véletlen törlés és a vírusok ellen. A 3,5”-os lemez esetében
ugyanezt a hatást érhetjük el, ha a sarkában lévő írásvédő ablakot kinyitjuk.
A lemezt első használat előtt formázni kell. Ezzel a művelettel válik a lemez
adattárolásra alkalmassá. A formázást az előre formázott lemezek esetén már a gyártás
során elvégzik. Formázáskor a lemezen koncentrikus körök vagy sávok (trackek),
majd a sávokon belül szektorok alakulnak ki. E kettő tartja nyilván az egyes
állományok fizikai helyzetét a lemezen. A
lemezeken található rövidítések jelentése: DS
= Double Sided - kétoldalas lemez, DD =
Double Density - dupla írássűrűség HD = High Density - magas felbontású.
Lemezátmérő 3,5” 5,25” lemezjelzés DS, DD DS, HD DS, DD DS, HD kapacitás 720 KB 1,44 MB 360 KB 1,2 MB sávok száma 80 80 40 80 szektorok száma 9 18 9 15
A floppy előnye, hogy cserélhető, olcsó, a számítógépek közötti adatcsere egyik
eszköze, de hátránya, hogy kis kapacitású és lassú.
23
Winchester
Merevlemezes tároló (hard disk drive, HDD). Adathordozója merev, mágnesezhető
felületű (fém) lemezkorong. A lemezek itt nem cserélhetők, ugyanis a meghajtóval
egybeépítettek, és több is lehet egymás felett egy tengelyen. A lemezek és a meghajtó
légmentesen záródó tokban helyezkednek el, mert az oldalakhoz tartozó író-olvasó
fejek olyan közel vannak a lemezfelülethez (0,3 µm), hogy egy porszem is komoly
károkat okozhat. A jelrögzítés módja hasonló a floppy-nál megismertekkel: az adatok
tárolása koncentrikus körökben elhelyezkedő sávokban és szektorokban történik.
Újdonság azonban, hogy a lemezek egymás feletti sávjait cilindereknek nevezik, a
tárolás pedig klaszterekben, a szektorok logikailag összetartozó csoportjában történik.
A winchester lemezei együtt forognak, jóval gyorsabban, mint a floppy. További,
jelentős különbség van a tárolható adatok mennyiségében is: a winchesterek
tárolókapacitása Gigabyte nagyságrendű, tehát nagy kapacitású, gyors háttértár.
Legtöbbször a számítógép házában található, nem cserélhető, de léteznek kivehető
merevlemez-meghajtók is (mobil rack-ek) és hordozható, külső winchesterek is.
A floppyn és a winchesteren kívül számos más, kevésbé ismert illetve használt
mágneslemezes tár is létezik, mint például a Zip Drive, az „A” Drive, a Jaz Drive.
Érdekesség, olvasmány
Zip Drive A legtöbb ZIP-meghajtó hordozható, s így minden gépre gyorsan csatlakoztatható. A hozzá tartozó lemezekre 100 MB illetve 250 MB fér. Hátránya, a meghajtó nem kompatíbilis a hagyományos floppy lemezekkel. „A” Drive A rendszeregységbe beépíthető, vagy a párhuzamos portra csatlakoztatható mágneslemezes háttértár. 120 MB-os cserélhető lemezekkel működik, de a 3,5-es floppy lemezeket is kezelni tudja. Tízszer gyorsabb és 83-szor nagyobb kapacitású a 3,5”-os floppy-meghajtónál. Mivel drága, nem terjedt igazán el. Jaz Drive A Jaz Drive cserélhető mágneslemezei lehetnek 1 vagy 2 GB-osak is. Gyorsasága majdnem eléri a merevlemezek gyorsaságát. A meghajtó nagyon drága.
Mágnesszalagos tárak
A háttértáraknak ez a típusa már a ‘60-as években megjelent. Működése leginkább a
közönséges magnetofonok működésére hasonlít. A mágnesszalagos adattárolókat
streamernek, „adatáramoltatónak” is nevezik. Ma leginkább archiválásra, azaz nagy
mennyiségű adat hosszú ideig való tárolására használják, illetve gyakran (pl.
winchester-tartalom) biztonsági másolat elkészítéséhez alkalmazzák. Az áruk a
winchesteréhez hasonló, de a kazettáik olcsók. Előnye, hogy nagy mennyiségű, akár
24
több gigabájtnyi adat olcsó tárolása lehetséges. Hátránya viszont, hogy lassú, ugyanis
a szalagot oda kell „pörgetni”, ahol a keresett információ található.
b) Optikai tárak
E tárak esetén az adatokat lézersugár írja egy forgó optikai lemezre. Ez a lemez
műanyagból készült, melyre fémfólia kerül. A lemezen az információt hordozó jelek
spirálisan rögzítettek. Az információkat különböző fényvisszaverő képességű
„gödröcskék” (pitek) formájában tárolják a lemezen. Olvasáskor a lemezkorongot egy
gyenge lézernyalábbal világítják meg, és a visszaverődő fény erőssége alapján
határozza meg a meghajtó a tárolt jelet. Mivel az információt lézersugár olvassa ki,
ezért a lemez nincs kitéve komoly fizikai igénybevételnek. Az adathordozó réteget
védő műanyag réteg óvja a portól, és a lemez a röntgensugarakra sem érzékeny.
A CD (Compact Disk, CD-ROM = CD Read Only Memory) kapacitása 650 MB – 4
GB. Csak olvasható lemez, a tartalma nem változtatható meg. Előnye, hogy olcsón
lehet rajta nagy mennyiségű adatot tárolni (adathalmazokat, lexikonokat,
telefonkönyveket, telepítő programokat). A CD-meghajtó zenei CD-ket is képes
lejátszani. A meghajtók ára fokozatosan csökken, tárolókapacitásuk és átviteli
sebességük egyre nő. Kezdetben adatkiolvasási sebességük lényegesen kisebb volt,
mint a winchestereké, kb. 150 Kbyte/s. A meghajtókat ma egy gyorsasági
viszonyszámmal szokták jellemezni: egy tízszeres sebességű meghajtó adatkiolvasási
sebessége 1500 Kbyte/s. Ma már többszörösére nőtt ez a sebesség is.
Léteznek olyan CD-k is, amelyek nem csupán olvashatóak, hanem írhatóak is. Az
egyszer írható (CD-R) lemezek esetén erős lézernyalábbal égethető információ a
lemez felületére. Vannak újraírható (CD-RW) lemezek is.
A DVD az optikai lemezes tároló-technológia új generációja. Tulajdonképpen ez egy
nagyobb kapacítású, gyorsabb CD, amely képes mozi minõségû videót, CD-nél jobb
minõségû hangot, fényképeket, és számítógépes adatokat tárolni. A DVD célja, hogy a
házi szórakoztató eszközöket, a számítógépeket, és az üzleti információkat egyetlen
digitális formátumban egyesítse. Mit jelent a DVD rövidítés? Sok féle eredete van a
mozaik szónak, de hivatalosan nincs szabványosítva a szó. Néhány változat
jelentéséről:
Digital Video Disc (digitális videó lemez) - az eredeti jelentés, melyet néhány DVD
fejlesztõ javasolt
Digital Versatile Disc (sokoldalú digitális lemez) - egy késõbbi jelentés, melyet
néhány DVD fejlesztõ javasolt
25
A DVD adatsűrűsége igen nagy, így tárolókapacitása több gigabájtnyi. A DVD-re
ráfér egy kétórás videofilm is, sztereó hanggal, jó képernyőfelbontással.
c) Egyéb
A tárgyaltakon kívül igen sok olyan háttértár létezik – vagy létezett –, melyek
alkalmazása kevésbé elterjedt. A teljesség igénye nélkül néhány: lyukkártya,
lyukszalag, mágnesdob, mágneskártya, magnetooptikai tárolók.
A számítógép belsejében, a gépházban található a számítógép egységeit fizikailag összekötő
áramköri lap az alaplap, mely helyet ad a processzor, a memóriák, az illesztőkártyák
számára. A perifériák ugyanis illesztő-áramkörökön keresztül kapcsolódnak az alaphoz. A
billentyűzet illesztője az alaplapba van építve, más perifériákhoz azonban az illesztők külön
kártyákon, ún. illesztőkártyákon vagy vezérlőkártyákon helyezkednek el (pl.
monitorvezérlő). A részegységeket buszrendszer köti össze, ehhez csatlakoznak az
illesztőkártyák és a beépített illesztők is. A buszrendszer bővíthető.
A számítógépek alapkonfigurációja Alapkonfiguráción értjük a számítógép központi egységét, a vele egybeépített belső
memóriával együtt, egy merev és egy hajlékony mágneslemez egységet, mint háttértárolót,
egy billentyűzetet és egy monitort. A multimédia számítógép CD-ROM-meghajtót,
hangkártyát, hangszórókat és mikrofont tartalmaz.
Egy „egyszerű” számítógép dobozában az egyes hardverelemek – igen vázlatosan – a
következőképpen helyezkednek el: [36]
26
A számítógépek programozása A számítógép az adatok, információk befogadására, tárolására, visszakeresésére,
feldolgozására, az eredmények közlésére alkalmas elektronikus gép. A számítógép
működéséhez azonban nem elég maga a berendezés, a hardver: szükség van szoftverekre,
programokra.
Egy adott feladat megoldásának lépéseit, valamint azok sorrendjét az algoritmus írja le. Az
algoritmusban leírt lépéseket a számítógép számára „érthető” formában kell megadnunk: ez a
program, létrehozásának folyamata pedig a programozás. A program legkisebb funkcionális
egysége az utasítás. A program az utasítások sorozatából áll. Az utasításokat tárolni kell,
majd egyenként, a meghatározott (nem feltétlenül lineáris) sorrendben végre kell hajtani. A
leírás nyelvét programozási nyelvnek nevezzük.
Programnyelvek kialakulása, fejlődése A világon több száz programozási nyelvet használnak. E nyelvek jelentőségét akkor
értjük meg, ha megvizsgáljuk, hogyan működtethető a számítógép ilyen nyelvek használata
nélkül. [2]
A számítógép alapvetően csak a saját „nyelvét” képes megérteni Ez egy olyan utasításnyelv,
amely a számítógép számára közvetlenül érthető módon, azaz bináris formában adja meg az
elvégzendő feladat végrehajtásához szükséges információkat. Ezt a nyelvet nevezzük gépi
kódnak.[2]
A számítógép működésének alapjául a már tárgyalt Neumann-elvek szolgálnak!
Gépi kódú programozás Az utasítások végrehajtása a vezérlőegység feladata. A gépi kódú utasítás végrehajtásához
információkra van szüksége: „mit” kell elvégezni, „mikkel”, azaz meg kell adni az operációt
és az operandusokat. Ezek az információk a központi tárban, bináris szám formájában
helyezkednek el, így ezek címére szükségünk lesz. Tudnunk kell azt is, hogy a majdani
eredmény hova kerüljön, valamint azt is, hogy keressük a következő utasítást.
27
Az utasítás formája tehát:
op. c1 c2 c3 c4
ahol op.: az elvégzendő művelet kódja. (a műveletek sorszámozottak)
c1: az első operandus címe
c2: a második operandus címe
c3: az eredmény címe
c4: a soron következő utasítás címe
Például a program végrehajtása során eljutunk a következő értékadási művelethez: Z := X
+Y. Ekkor itt az első operandus az X címen (c1), a második operandus az Y címen (c2) van, az
eredménynek pedig a Z címre (c3) kell kerülnie, a végrehajtandó művelet pedig összeadás
(op.). Valószínűleg a programunknak további folytatása is van, az utasítások
egymásutániságának biztosítására ismernünk kell a következő utasítás memóriacímét: c4. Ezek
a címek tárbeli címek, bináris számokkal jelöltek. [2] Az ilyen – elvileg elkészíthető – gépet 4
címes gépnek nevezzük.
Ha egy utasítás 24 bit (3 byte) címezhető memóriaterületen helyezkedik el, és 4 bit „jut” az
operációra, akkor 24 = 16 féle műveletet tud elvégezni ez a gép. A további címerekre marad 5-
5 bit, így 25 = 32 féle címet lehet megszólítani.
Gondoljunk csak bele: ha minden utasításnak ennyi információval kellene rendelkeznie, akkor
egy-egy utasítás is rengeteg helyet foglalna el, nemhogy egy egész program! Ilyen gépet
nemigen érdemes építeni. Milyen módon lehetne az utasítás hosszát – az információk számát
– csökkenteni?
Fenntarthatunk egy külön memóriaterületet, rekeszt az eredmény számára, így az eredmény
címe kikerül az utasításból:
op. c1 c2 c4
Ekkor egy 3 címes utasítás-formához jutunk, az ilyen utasításokkal dolgozó gép 3 címes gép.
Az eredményt tároló rekesz elnevezése: akkumulátor, mely tehát egy kitüntetett
memóriaterület, regiszter.
Az operációra és a memóriaterületek címzésére egyaránt 6-6 bit állhat rendelkezésre, így 26 =
64 féle művelet végezhető el, ugyanennyi rekesz címezhető meg.
Nem kell minden utasításnak tárolnia azt sem, hogy mi a második operandus címe (nincs is
minden utasításnak két operandusa!). A második operandus legyen mindig az, amit az
akkumulátor tárol. Így már 2 címes géphez jutottunk:
op. c1 c4
28
Ha ekkor 4 bitet szánunk az operátorra, 24 = 16 féle műveletet képes a gép elvégezni. Marad
10-10 bit a tárolóterület címzésére, így 210 = 1024 rekesz áll rendelkezésre. (Ilyen számítógép
már létezett.)
Valójában megtakarítható a következő utasítás címének tárolására szolgáló utasítás-rész is
akkor, ha elgondolkodunk a Neumann-elvek közül azon, amely azt határozza meg, hogy a gép
soros működésű legyen. Ezek szerint a soron következő utasítás lesz a következő – az
utasításban felesleges letárolni a címét! Tüntessünk ki egy újabb rekeszt, regisztert, melynek
nem lesz más feladata, mint hogy vezesse, adminisztrálja, tárolja a következő utasítás címét.
Ezzel eljutottunk az 1 címes géphez! A bevezetett regiszter neve: utasítás-számláló regiszter.
Az utasítás felépítése tehát a következő:
Mivel bináris számok formájában tároltak az utasítások is és az adatok is (Neumann-elv!),
„ránézésre” nem is látszik, hogy mi van egy memóriarekeszben, vagy utasításrészben. A
számítógép azonban más memóriaterületen tárolja az adatokat és az utasításokat. Az, hogy
melyik részre hány bit jut, már gyártótól függ, tőle függ a gép utasításkészlete is.
Az ilyen módon leírható programozási nyelvek a gépi kódú programozási nyelvek.
A gépi kódban való programozás igen nehéz, hálátlan munka, hiszen számok tömkelegével
kell dolgozni. „Cserébe” a gép az ilyen utasításokat tudja a leggyorsabban végrehajtani,
hiszen egy olyan nyelven „szólunk hozzá”, amit közvetlenül megért: a beírt jelsort a gép
azonnal végre tudja hajtani, minden további átalakítás nélkül. Eleinte ez volt az egyedüli
lehetőség a gép programozására. Gyakorlatilag csak az képes ezen a nyelven helyesen
működő programokat írni, aki jól ismeri a gép belső felépítését. Minden processzor külön
nyelvvel rendelkezik, a programok tehát processzorfüggők.
Címrész MIVEL Kell csinálni (operandus)
műveleti rész MIT kell csinálni (operáció)
Op c1
29
Érdekesség, olvasmány
A gépi kódú programozás megértése érdekében tekintsük a következő példát [1]: Képzeljük el, hogy van egy számítógép, melynek néhány utasítása gépi kódban a következő:
MIT? MIVEL? JELENTÉSE 01 02 03 04
xxxx xxxx xxxx xxxx
a := a + (xxxx) a := a - (xxxx) a := a ⋅ (xxxx) a := a / (xxxx)
11 12
xxxx xxxx
(xxxx) := a a := (xxxx)
21
22
23
xxxx
xxxx
xxxx
e := xxxx xxxx, ha a < 0 e := e + 1, ha a ≥ 0
xxxx, ha a = 0 e := e + 1, ha a ≠ 0
31 32 33
0000 0000 0000
beolvasás az „a”-ba kiírás az „a”-ból STOP
Az xxxx jelölés rekeszcímre utal, melynek értéke 1000 ≤ xxxx ≤ 2000 lehet a 0 és 1 utasításcsoportnál, és 0 ≤ xxxx ≤ 1000 a 2 utasításcsoportnál. (1000 a program utolsó utasításának sorszáma. Ezért azért fontos tudnunk, mert ebből látszik, hogy egy adott számsor adatot vagy műveletet jelöl.) Az „a” jelölje az akkumulátort. Feladat: Készítsünk programot, amely négy tetszőleges szám összegét határozza meg! A feladat megoldásához készítettük a következő két folyamatábrát: az elsőben leírtuk a feladat megoldásához szükséges algoritmust, a másodikat a megfelelő gépi kódú utasításokkal építettük fel. Mellettük található maga a program. A számokat képviselő változók és rekeszcímeik legyenek a következők: A: 1000, B: 1001, C: 1002, D: 1003. E feladat megértése után az adott utasításkészlet felhasználásával már összetettebb feladatok megoldására is vállal–kozhatunk.
START
INPUT a(1000) :=a
a := a + (1000)a := a + (1000)a := a + (1000)
PRINT a
STOP
INPUT a(1001) :=a
INPUT a(1002) :=a
INPUT a(1003) :=a
START
INPUT A
INPUT B
INPUT C
INPUT D
A := A + B + C + D
PRINT A
STOP
1 31 00002 11 1000
3 31 00004 11 1001
5 31 00006 11 1002
7 31 00008 11 1003
9 01 100010 01 100111 01 1002
12 32 0000
13 33 0000
PROGRAM
30
Feladat
Készítsünk programot, amely két tetszőleges szám a) különbségét b) szorzatát c) hányadosát d) átlagát
számítja ki!
Tapasztalhattuk, hogy a gépi kódú programozás az ember számára igen kényelmetlen: a
hosszú bináris számokkal való műveletvégzés nehéz, könnyen téveszteni lehet. A hiba
megkeresése sem egyszerű. Minden műveletet olyan szinten le kell bontani, hogy egy-egy
utasításban csak egyetlen hardverutasítás szerepeljen. [2]
Mindezen okok arra sarkallták a programozókat, matematikusokat, hogy olyan programozási
nyelvet készítsenek, amely az ember számára könnyebben kezelhető.
Szimbolikus programnyelvek A szimbolikus programnyelvekben az utasításkódok és a rekeszek címei helyén az ezekre
utaló szavak, betűk állnak. [1] Mivel a szimbólumok betűkombinációkból álló mnemonikus
(megjegyezhető) kódok, könnyebb megtanulni, használni őket, hiszen beszédesebbek, mint a
számsorozatok.[5]
Az utasításkódok helyett használt szimbólumokat azonban választhatjuk meg szabadon:
ezeket a gyártók adják meg. Ezeket, a géphez még közel álló, és gyakran géphez kötött
nyelveket nevezzük assembly szintű nyelveknek [2] vagy alacsony szintű nyelveknek [5].
Az így készített programokat viszont a számítógépek nem értik meg közvetlenül, ezért a
gépnek először le kell fordítania a saját nyelvére, gépi kódjára a szimbólumokat (azaz a
műveleti kódot, az utasítások, és az operandusok címét át kell alakítani a megfelelő bináris
számokká). Erre szolgál az assemblernek nevezett fordítóprogram, melyet egy adott
géptípushoz készítenek el. Ez tulajdonképpen egy „szótár”, egy táblázat, amelynek egyik
oszlopában a mnemonikus kódok, a másik oszlopában az ezekhez tartozó numerikus kódok
vannak. [2] A feldolgozás emiatt a közbeékelődő lépés miatt ugyan lassul, cserébe viszont az
emberhez közelebb álló nyelvet kaptunk. (Az embernek kevesebbet, a számítógépnek többet
kell dolgoznia.) Ez a nyelv tehát az emberi nyelv és a gépi kód között van, de még inkább
közelebb a gép nyelvéhez. Abban az időben, amikor az erőforrások szűkössége miatt fontos
volt, hogy a hardverhez közelebb álló nyelvet használjanak, sok program készült ilyen
nyelven. A számítógépek tömeges terjedése azonban megkívánta az emberközelibb nyelvek
kialakítását. [2]
31
Automatikus kódolású programnyelvek Az ún. mikro-utasítások mellet feltűntek a makro-utasítások, melyek összetettebb műveletek
elvégzését tették lehetővé. Ekkor jelent meg a változó is, amely olyan, aminek az értéke
valamilyen adat, illetve a címke is, amely olyan memóriacímet szimbolizál, amelyen egy
utasítás van. Függvényeket hoztak létre, és „visszajöttek” a matematikai jelek. Az ilyen
tulajdonsággal bíró nyelveket nevezzük automatikus kódolású programnyelveknek. (Vannak
irodalmak, melyek középszintű nyelveknek nevezik. [5])
Géptípustól függetlenebb, nagy hatékonyságú programozási nyelvek tartoznak ide. Fordítója
az ún. compiler, amely a gépi kódot állítja elő. A compiler az egész forrásnyelvű programot
végig, utasításonként (soronként) vizsgálja szintaktikailag, értelmezi, lefordítja a programot,
készít egy lefordított állományt is, mely az eredetivel egyenértékű, de sokkal gyorsabban
működő gépi kódú program. Hiba esetén jelzést ad.
A programozónak ismernie kell továbbra is a gép legtöbb hardver paraméterét. Az ötvenes
években jelent meg a FORTRAN (FORmula TRANslation) és ilyen nyelv például a C, a
FORTH. [5]
Algoritmikus programnyelvek Egyre erősödött az igény a géptől független nyelvek iránt: a programozó t ne befolyásolja az,
hogy programja milyen gépen fog futni, ne kelljen a gép hardveréhez igazítania a programját.
Tegye ezt meg a fordító, a forrásprogramot mindegyik gép a saját gépi kódjára fordítsa le. [2]
Ehhez még bonyolultabb fordítóprogramokra van szükség, és a hangsúly a gépről az
algoritmusra kerül. Szokás ezeket a nyelveket magas szintű programozási nyelveknek is
nevezni.
A programozó segítségükkel gépfüggetlen programokat készíthet, amelyek ugyan kevésbé
hatékonyak, de szabadon hordozhatók.
Ismét meg kell említenünk a FORTRAN-t, mely műszaki-tudományos problémák
megoldására készült elsősorban: kevés bemenő adat, bonyolult műveletek jellemzik az ilyen
feladatokat. Ebben az időszakban jelent meg a COBOL (COmmon Business Oriented
Language) is, de merőben más céllal: adatfeldolgozásra orientált nyelv ez, így sok bemenő
adat feldolgozására tervezték, a sok kimenő adatot viszonylag kevés és egyszerűbb
matematikai művelettel állítva elő. [2] Az üzleti életben, de akár népszámlálási, szavazási
adatok feldolgozására alkalmas.
32
A hatvanas években jelent meg az ALGOL (ALGOrithmic Language) melyet matematikai
feladatokhoz, műszaki-tudományos feladatok megoldására terveztek. A FORTRAN-nal
ellentétben ezt a nyelvet nem a gyakorlat alakította, hanem szigorúan, matematikailag
definiálták. Számos változata alakult ki a fejlesztések nyomán.
A PL/1 (Programming Language One) programozási nyelvet az az igény hozta létre, hogy
egyesíteni szerették volna a fenti nyelvek kedvező tulajdonságait: sok adattal legyen képes
dolgozni, és egyúttal ismerjen sokféle, bonyolult matematikai műveletet is. (Sajnos a munka
előkészítése így sok energiát igényelt, hiszen a programot mindenre fel kellett készíteni…)
Az 1960-as évek közepén John Kemeny és Thomas Kurtz egy rendkívül egyszerű
programnyelvet fejlesztettek ki, amelyet BASIC-nek (Beginner’s All Purpose Symbolic
Instruction Code) neveztek el. A kezdő számítógép-használóknak kitűnő segítséget nyújt a
programozással való ismerkedéshez. Interaktív nyelv, közvetlen kapcsolat van az ember és a
gép között. Előnyei közé tartozik, hogy könnyen megtanulható, és a kisebb feladatok gyorsan
és sikeresen megoldhatók (ez fontos a kezdők – például a gyerekek! – tanulása-tanítása
során!), így oktatási célokra igen jól használható. Hátránya azonban, hogy nem eléggé
strukturált, így nem szorít a tervezésre, nincsenek eljárások, terjedelmes programok írására a
nyelv nem alkalmas.
A gépi nyelvre való lefordításhoz interpretert (értelmező) használ. Az interpreterek
soronként fordítják a programot, és ellenőrzik szintaktikailag, majd le is futtatják a sort, ezek
után térnek a következő sorra. Előfordulhat azonban, hogy 1-2 adattal lefuttatva a programot,
rejtve marad még szintaktikai hiba, hiszen lehet, hogy nem minden programsorra adódott a
vezérlés a futás során. (Ilyen hiba a compiler típusú programoknál nem fordulhat elő.)
Érdekesség, olvasmány
Kemény János György matematikus, a BASIC programozási nyelv kifejlesztője 1926. május 13-án született Budapesten. Családja 1940-ben az Egyesült Államokba vándorolt, középiskoláit New Yorkban végezte, majd a Princetoni Egyetem hallgatója lett. A Manhattan-terv keretében a későbbi Nobel-díjas Richard Feynman munkatársa volt. A legnagyobbaktól, köztük Neumann Jánostól tanult, s 22 évesen Albert Einstein csoportjában dolgozott. 27 évesen elvállalta a Dartmouth-i Főiskola egyik matematika tanszékének megszervezését. Munkatársával, Tom Kurtz-cal 1962-ben javasolta az egyetemi számítóközpont létesítését, és kidolgozták a világ egyik első időosztásos rendszerét. Kemény felismerte, hogy a számítógép csak akkor válik mindenki számára hozzáférhetővé, ha a programozás, a programozási nyelv egészen egyszerű. Ezért 1964-ben Tom Kurtz-cal kidolgozta a BASIC (Beginner’s All-purpose Symbolic Instruction Code = a kezdők bármely célra használható szimbolikus utasítás kódja) nevű programozási nyelvet. Mindmáig szélesebb körben elterjedt programozási nyelv, amellyel lehetővé vált, hogy az addig csak kutatóknak hozzáférhető misztikus számítógépen diákok is dolgozhassanak. Tudományos munkásságát folytatva J. L. Snell-lel a Markov-láncok témakörében kutatott. A Three Mile Islandi atomerőmű-baleset után őt kérték fel a kormányzati vizsgálat vezetésére. A Kemény-jelentés országos visszhangot váltott ki, és szerzőjét az Egyesült Államok egyik legismertebb és legbecsültebb polgárává tette.
33
Az Egyesült Államokban hunyt el 1992. december 26-án. Keménytől származik a mondás: "A társadalom fő reménysége a számítógép lehet, az emberek és számítógépek harmonikus együttélése". [34, 35]
A PASCAL programnyelv alapjait Niklaus Wirth definiálta 1968-ban (Standard Pascal),
azóta több változata is megjelent. A nyelvet Blaise Pascal matematikusról nevezték el.
Általános célú programnyelv, mely jól olvasható és könnyen érthető megfogalmazást tesz
lehetővé. Korszerű adatstruktúra, vezérlési szerkezet jellemzi, sok adattípus használható, sőt a
programozó is értelmezhet típusokat. Az amerikai Borland Intézet terméke a TURBO
PASCAL, mely kibővített változat, felhasználóbarát kialakítás jellemzi. Szigorú, deklaratív
nyelv, határozottan típusorientált. Strukturált programozást tesz lehetővé. [14]
Fordítóprogrammal, compiler segítségével dolgozik.
Magas szintű programnyelvek még: ADA, C bizonyos változatai, LOGO.
Érdekesség, olvasmány
A Logo programozási nyelv és a hozzá kapcsolódó pedagógiai elvek kidolgozása és elterjesztése elsősorban Seymour Papert amerikai professzor nevéhez fűződik. A Logo lényegesen többet jelent egy számítógépes programnyelvnél: tulajdonképpen egy olyan pedagógiai környezetet, „mikrovilágot” jelent, amelyben a gyermekek maguk tehetnek felfedezéseket, miközben minden kényszer és „magolás” nélkül számos új ismeret birtokába jutnak. A teknőc a számítógép billentyűzetén keresztül utasítható a számára „érthető” feladatok végrehajtására: tud adott távolsággal előre vagy hátra menni, adott szöggel jobbra vagy balra elfordulni, tollát (ami a „hasára van erősítve”) felemelni, leereszteni, más színűre és vastagságúra cserélni, ezáltal mozgásával képes nyomot hagyni a képernyőn. A diák rögtön ellenőrizheti gondolkodásának és cselekedeteinek következményét. Megfigyeli utasításának hatását, majd módosíthatja azokat céljának megfelelően. A Logo filozófiája a modulszerűen felépített programozás: az egyes elemekből épül fel a program. A programírás- és építés tehát logikai egységekre bontható. A képernyőn megjelenő alkotás varázslat, amelynek elképzelője, kitalálója és létrehozója a gyermek. [29]
A magas szintű programozási nyelvekről összességében elmondható, hogy gépfüggetlenek,
áttekinthetők, aránylag egyszerűen megérthetők, közelebb állnak az emberi gondolkodáshoz.
A programot mindig le kell fordítani gépi kódra, és egy utasítás általában több gépi kódúnak
felel meg. Segíti a hatékony programírást.
A magas szintű nyelvek újabb generációja
Szakít a hagyományos programozási móddal: nem a feladat megoldását elvégző utasítássort
kell megadnia a programozónak, hanem a feladat kitűzésénél adott alapismereteket: tényeket
és következtetési szabályokat kell megfogalmazni, majd közölni a célt: a meghatározandó
adatokat. A mennyiben az alapismeretekből levezethető a cél, azt a gép közli. Ilyen
nyelvkísérlet például a PROLOG. [5] Az objektum-orientált programozás, illetve a grafikus
fejlesztő felületek (Delphi) újfajta szemlélet kialakulását hozták. A mesterséges intelligencia
kutatások kapcsán fejlesztettek ki egy ismeretleíró nyelvet, a LISP-et, amelyet a műszaki
programokban is előszeretettel alkalmaznak. [5]
34
Az adatbázisok kezelésére az SQL, a hálózati kommunikáció támogatására a JAVA, honlapok
készítéséhez a HTML nyelvek szolgálnak.
Érdekesség, olvasmány
A programnyelvek szigorú szabályok szerinti formalizált nyelvek, ellentétben a köznyelvvel. A következő ábra bemutatja a programnyelvek kapcsolódását az általános nyelvfához:
Sokféle csoportosítás lehetséges még, például az alkalmazások szerinti csoportosítás. A különböző alkalmazási területekre speciális programnyelveket fejlesztettek ki. Általában két csoportot különböztetünk meg: géporientált és problémaorientált programnyelveket. Géporientált programnyelvek A géporientált programnyelvek a számítógép speciális műszaki tulajdonságait különösen jól használják ki. Az ilyen nyelven megfogalmazott programok azonban nagymértékben kötődnek ahhoz a számítógéptípushoz, amelyre készültek, azaz más típusú számítógépen rendszerint nem futtathatók. E nyelvek utasításainak azonos vagy hasonló struktúrájuk van, mint az adott számítógép gépi utasításainak, fordításkor a géporientált programnyelv minden utasításából egy gépi utasítás keletkezik. Előnyösen alkalmazhatók speciális feladatokra, például rendszerszoftver előállítására. Ezeknek a nyelveknek a megtanulása és kezelése általában nehezebb, mint a problémaorientáltaké. A géporientált nyelveket assembly nyelveknek is nevezik (to assemble: összeállítani). Problémaorientált programnyelvek Míg a géporientált nyelvek utasításai az alkalmazott számítógép gépi utasításainak felelnek meg, addig valamely problémaorientált nyelv utasításai nem veszik figyelembe a számítógép-struktúrát. Ezek rendszerint összetettebbek is, mint a gépi utasítások, ezért a problémaorientált nyelv egy utasításának lefordításából többnyire több gépi utasítás keletkezik. A problémaorientált nyelvek előnye egyrészt abban nyilvánul meg, hogy a programok jól áttekinthetők, másrészt abban, hogy a programozás aránylag egyszerű, és hogy a problémaorientált nyelven írt programok különböző számítógéptípusokon lefuttathatók, amennyiben a megfelelő fordítóprogram rendelkezésre áll. A problémaorientált nyelvet nevezik magas szintű programnyelvnek is. Ezek általában bizonyos szakterületek igényeinek megfelelően vannak kidolgozva. Törekvés van arra, hogy egy univerzális programnyelvet fejlesszenek ki, amely a legjobban illeszkedik az emberi nyelvhez.
Nyelvek
Természetesnyelvek
Formálisnyelvek
Köznyelvek Szaknyelvek Hangjegyírás,képletírás
Programozásinyelvek
általános nyelvek
35
Kódolási eljárások Az információ továbbításánál, a kommunikációnál láthattuk, hogy célunk az, hogy az
információ az adótól eljusson a vevőhöz
Kódolás és dekódolás is történik a cél érdekében.
A csatorna előtt kódolás szükséges, mert:
- az adó jeleit a csatorna rendszerint nem tudja értelmezni,
- a kódolással az átvitel hatásfokát javíthatjuk,
- a csatorna az adó kódolt jeleit kevésbé torzítja.
Ha az adó az
A1, A2, A3,…An jeleket bocsátja ki,
p1, p2, p3,…pn valószínűségekkel, ahol 1n
1iip =
=∑ ,
de a csatorna csak az
X1, X2,…Xm alapjelekből ( betűkből ) képes alapjel-sorozatait ( szavait ) felépíteni és
továbbítani, akkor kódolásról van szó. Az n rendszerint sokkal nagyobb, mint az m. (n>>m).
A számítástechnikában a bináris alapjeleket használjuk. Ekkor az m=2 ( 0 vagy 1 alaplelek)
Kódolás: Amikor az A1, A2, A3,…An jelek és az SX1, SX2,…SXn alapjel-sorozatok (szavak)
halmaza között kölcsönösen egyértelmű hozzárendelést létesítünk, kódolást valósítunk meg.
A számítástechnikában többféle kódrendszert is használnak. Ezek hatásfoka különböző
lehet. Ennek eldöntéséhez részletesebb elemzésre van szükségünk.
Ezután tekintse át az alábbi táblázatot, ahol különböző kódolási rendszereket láthat!
36
A K1 kódrendszernél az {A1, A2, A3, A4} jelek halmazához a {00, 01, 10, 11} szavak
halmazát rendeltük kölcsönösen egyértelműen.
A K2 kódrendszernél {A1, A2, A3, A4} {1, 10, 100, 1000}
A dekódolás akkor felel meg a célnak, ha a kódolt üzenetből ismét az eredeti üzenetet kapja a
vevő.
Szeparálható kódoknak azokat a kódokat nevezzük, amelyeknél a közlemény az
elemek közötti határolójel nélkül egyértelműen dekódolható, azaz megfejthető.
A magyar nyelv nem szeparálható kódrendszer. Ezért használ határoló jelet, a szóközt. Vajon
mi volt az üzenet a következő szavaknál: kalapács, törölköző, szerszám… A morse abc sem
szeparálható kódrendszer. A két alapjel ( rövid, hosszú ) mellett elválasztó jelet is használ.
Prefix kódrendszer. Az olyan kódokat, ahol egyik kód sem eleje egy másik kódnak
prefix vagy irreducibilis kódnak nevezzük.
Vizsgálja meg, hogy az fenti táblázat K1, K2, K3, K4 kódrendszerei közül
1. melyik kódrendszer szeparálható és melyik nem!
2. Vizsgálja meg azt is, hogy melyik prefix és melyik nem!
Egy létező, kódolt üzenet legyen a következő: 10010001101110
Mi volt az eredeti üzenet, ha a K1 kódrendszert használja?
A dekódolásnál meg kell keresni, sorban, azokat a szavakat, amelyek a kódrendszerben
megtalálhatók. A jelzésekből egyértelmű a dekódolás.
Az üzenet: A3 A2 A1 A2 A3 A4 A3
A kódrendszer tehát szeparálható. Mivel egyetlen szó sem eleje egy másik szónak, ezért
prefix is.
Mit üzentek, ha K2 kódolást használták?
Az üzenet: A3 A4 A1 A2 A1 A1 A2
37
Másképpen nem csoportosíthatunk, mert akkor olyan szavakat kapnánk, amelyek nem
szerepelnek a K2 kódrendszerben, vagyis nem lehet hogy a kódolás eredményei.
Nézze meg a kérdést a K3 és a K4 kódrendszer esetén is!
A K4 kódrendszernél nem dekódolható egyértelműen a mondat, mert mindkét esetben olyan
szavakat kaptunk, amelyek szerepelnek a K4 kódtáblázatában.
Az üzenet vagy A3 A1 A3 A1 A1 A4 A2 A4 A1
vagy A3 A2 A1 A1 A2 A3 A4 A3
Ezért a K4 kódrendszer nem szeparálható kódrendszer.
Könnyen megállapítható az is, hogy nem is prefix.
Az egyértelmű dekódolás elégséges feltétele Egy kódolt üzenet egyértelmű megfejtésének, azaz szeparálhatóságának elégséges
feltétele az, hogy egyik kód sem legyen egy másik kódnak eleje, azaz, hogy prefix legyen.
Tehát: ha egy kódrendszer prefix akkor egyértelműen dekódolható. Ha nem prefix akkor
lehet, hogy egyértelmű a dekódolás ( pl.: K2 ), de lehet, hogy nem ( pl.: K4 ). A feltétel csak
elégséges és nem szükséges.
Szeparálható bináris kódrendszer 1. Adott egy J = {A1, A2, … An} jelrendszer.
Osszuk fel a halmazt két tetszőleges (de nem üres) részhalmazra úgy, hogy a két halmaz
uniója J legyen.
2. Rendeljük az egyik halmaz (J0) elemeihez a 0, a másik halmaz (J1) elemeihez az 1 kódot.
3. A J0 halmazt osszuk két részre – ha lehetséges –, az egyik részhez rendeljünk 0-t, a másik
részhez 1-et, és ezeket az értékeket írjuk az előző kódok után.
4. Alkalmazzunk a J1 halmazra is ugyanezt az eljárást.
5. Folytassuk ezt a folyamatot addig, amíg lehet, amíg kettéoszthatók a halmazok elemei.
Legyen: J = { A1, A2, A3, A4 }
Első lépés: J0 = { A1 }¥ 0
J1 = { A2, A3, A4 }¥ 1
Második lépés: A J0 tovább nem bontható, ezért a J1 felosztásával folytatjuk.
J1,0 = {A2} ¥ 0
J1,1 = {A3, A4}¥ 1
38
Harmadik lépés: J1,1,0 = {A3} ¥ 0
J1,1,1={A4} ¥ 0
Jelek 1. lépés 2. lépés 3. lépés Az eredmény
A1 0 0
A2 1 10 10
A3 1 11 110 110
A4 1 11 111 111
Láthatjuk, hogy a K3 kódrendszert kaptuk, amiről korábban is megállapítottuk, hogy
szeparálható kódrendszerről van szó.
Az algoritmus nem rögzíti, hogy a halmazokat hogy osszuk fel, csak azt mondja, hogy a
részhalmazok uniója a felosztott halmaz legyen. Nézzünk egy más módon való felosztást!
Jelek 1. lépés 2. lépés Az eredmény
A1 0 00 00
A2 0 01 01
A3 1 10 10
A4 1 11 11
Most a K1 kódrendszert kaptuk. Ráadásul most csak 2 lépésből állt az algoritmus. Nem
ugyanazt a kódrendszert kaptuk a két esetben, de a dekódolás egyértelmű, ezért egy üzenet is
egyértelműen megfejthető.
Végezze el egy konkrét üzenet kódolását és dekódolását mindkét kódrendszerrel!
Legyen az üzenet: SZÉK
K3 kódrendszerrel:
Jelek 1. lépés 2. lépés 3. lépés Az eredmény
A1=S 0 0
A2=Z 1 10 10
A3=É 1 11 110 110
A4=K 1 11 111 111
Kódolva: 010110111
Mivel prefix a kódrendszer, ezért egyértelműen dekódolható.
Dekódolva: S Z É K
A K1 lódrendszerrel:
A1 A2 A3 A4
SZÉK 00011011 SZÉK
39
A szeparálható bináris kódolás nagyon egyszerű eljárás. Akkor célszerű alkalmazni, ha csak
az egyértelmű kódolás és megfestés a feladat.
Feladat
- Kódolja, majd dekódolja szeparálható bináris kódolással a következő üzeneteket:
ALMA
ALMA A FA ALATT.
Alma a fa alatt
Átlagos kódhossz Eddigi elemzéseinknél csak az üzenet szeparálhatóságával, egyértelmű
megfejthetőségével foglalkoztunk. Viszont nem elhanyagolható kérdés az sem, hogy milyen
hatékonysággal folyik a kommunikáció. Egy távirat küldésénél igyekszünk röviden, tömören
megfogalmazni az információt, mert a fizetendő összeg az üzenet hosszától is függ nem csak
az információ mennyiségétől. Ha valaki sokat beszél, és keveset mond, akkor azt szoktuk
mondani, hogy nem elég hatékonyan kommunikál. A telefon szolgáltatások rövid üzeneteinél
is lényeges szempont, hogy a küldendő üzenetet meg tudjuk-e tömören fogalmazni. A
megfogalmazás tömörsége függ attól, hogy az egyes kódok milyen hosszúak és mennyi az
átlagos kódhossz.
Ha az adó az A1, A2, A3,…An jeleket adja,
p1, p2, p3,…pn valószínűségekkel, ahol 1n
1iip =
=∑ , és ha
h1, h2, h3,…hn a kódolt szavak hossza, akkor az átlagos kódhossz a szavak súlyozott
átlaga. h= i
n
1ii hp∑
=
Feladat:
- Számítsa ki az átlagos kódhosszt a K1, K2, K3, K4 kódrendszereknél!
40
815
84344=
+++
K1 esetén minden esetben hi=2, ezért h=2
K2 kódrendszernél h1=1, h2=2, h3=3, h4=4.
h= i
4
1ii hp∑
=
= 1/2*1+1/4*2+1/8*3+1/8*4=
K3-nál:h= K4-nél: h=
Érdekes, hogy az átlagos kódhossz a K4 kódrendszernél a legkisebb. Mivel a K4 kódrendszer
nem prefix, ezért hatékonyság szempontjából nem jöhet szóba. A többi közül a K3 esetén a
legkisebb az átlagos kódhossz.
Az entrópia és tulajdonságai Egy rendszer információtartalmát – eddig – csak olyan esetekben értelmeztük, amikor a jelek
kibocsátásának valószínűségei meggyeztek. Azt mondtuk, hogy ha az adó az A1, A2, A3,…An
jeleket azonos valószínűségekkel adja ( minden pi = p = ), akkor az információtartalom:
Ha nem tételezzük fel a valószínűségek egyenlőségét, akkor átlagos információtartalmat
számolhatunk. Ez az entrópia.
Ha az adó az A1, A2, A3,…An jeleket adja,
p1, p2, p3,…pn valószínűségekkel, ahol 1n
1iip =
=∑ , és 0 < pi ≤ 1, akkor a
valószínűségekkel súlyozott információtartalom:
A H(A)=H(p1, p2, p3,…pn) = függvényt entrópiának, a rendszer
határozatlanságának, bizonytalanságának nevezzük. Ez a megközelítés azt jelenti, hogy egy
jel kibocsátásakor annyi információt nyerünk, amennyi bizonytalanság megszűnik.
- Az átlagos kódhossz és az entrópia között is van összefüggés. Bizonyítható, hogy:
vagyis, hogy az átlagos kódhossz nem lehet nagyobb a
értékétől. Ezt másként úgy is mondhatjuk, hogy az átlagos szóhossz
minimuma
Bináris kódolásnál az átlagos szóhossz minimuma éppen az entrópia, mivel ekkor m=2, ezért
814
812
n1
plog2p1
log2nlog2 −==
pin
1ilog2pi∑
=−
pin
1ilog2pi∑
=−
mlog2
H(A)h ≥ mlog2
H(A)
mlog2
H(A)
H(A)hmin =
41
A K1, K2, K3, K4 kódrendszereknél kiszámítottuk az átlagos kódhossz értékeit.
K1: h= 2
K2: h=
K3: h=
K4: h=
Számítsuk most ki az entrópiát! H(A)=H(p1, p2, p3,…pn) =
Láthatjuk, hogy valóban a K3 kódrendszernél veszi fel az átlagos kódhossz a minimumát.
- Az entrópia további tulajdonságai:
A H(A)=H(p1, p2, p3,…pn)= függvény, ahol 1n
1iip =
=∑ , és 0 < pi ≤ 1
- a (0; 1] intervallumban folytonos,
- minden változójában szimmetrikus,
- maximumát akkor veszi fel, ha minden pi =
Az első két tulajdonság könnyen bizonyítható. Mivel a logaritmus függvények
folytonosak a lehetséges pi értékek esetén, és folytonos függvények összege is folytonos, ezért
az első tulajdonság már bizonyított is. A függvény szimmetrikus voltának bizonyítását azzal
támaszthatjuk alá, hogy az összeadásnál a tagok felcserélhetők, vagyis az összeadás
kommutatív.
A harmadik tulajdonság bizonyítása nehezebb. Két változó (p1=p és p2=1-p) esetén azt
kell igazolni, hogy a H(p, 1-p)= függvénynek p=1/2 –nél
van maximuma.
n1
pin
1ilog2pi∑
=−
p)](1log2p)(1plog2[p −⋅−+⋅−
815
814
812
?),,,H( 81
81
41
21 =
=),,,H( 81
81
41
21
814)
81log28
181log28
141log24
121log22
1( =⋅+⋅+⋅+⋅−
H(A)hmin =
42
Feladat:
- Mutassa meg, hogy ha minden pi= , akkor az entrópia az információ mennyiség korábbi
definícióját adja!
- Határozza meg a következő entrópiákat!
H(1/4, 1/4, 1/4 1/4)=?
H(1/4, 1/4, 1/2)=?
H(1/4, 1/4, 1/4, 1/4)=?
H(1/2, 1/4, 1/16, 1/16, 1/16, 1/16)=?
Hatásfok Egy kódolás hatásfoka ahol H(A) az entrópia, h az átlagos kódhossz az m
az alapjelek száma. A hatásfok nem lehet nagyobb, mint 1.
Bináris kódolásnál
A hatásfok viszonyszám, ezért százalékban is megadhatjuk. Pl.: f=0.9 esetén 90 % is írható.
Számítsuk ki a táblázattal adott K1, K2, K3, K4 kódrendszereknél a hatásfok értékeit!
Mivel mind a négy kódrendszer bináris ezért számolhatunk az képlettel.
Az etrópia mindegyik kódrendszernél
Mivel K4 nem dekódolható egyértelműen, ezért kizárható a hatásfok vizsgálatából. Így a
leghatékonyabb kódrendszer a K3 kódrendszer. Az esetek közül a K3 kódolási módszer elérte
a 100 % hatásfokot.
Tehát, ha egy bináris kódrendszer átlagos kódhossza felveszi minimumát, akkor hatásfoka
maximális.
A hatásfokkal kapcsolatos fogalom a redundancia vagy másként mondva a terjengősség.
redundancia= 1-hatékonyság.
n1
mlog2hH(A)f⋅
=
1f ≤
1h
H(A)f ≤=
hH(A)f =
=),,,H( 81
81
41
21
814
85%0.87587
28
14
f1 ==== 93.3%0.9331514
8158
14
f 2 =≈==
%1001
8148
14
f 3 === 167
8128
14
f 4 >==
f1r −=
43
∑=
≤n
1i1m h- i
∑=
≤n
1i12 h- i
144
1i 221
2 h- i =⋅∑=
=
11615
241
231
2214
1i 211
2 h- i <=+++∑=
=
1231
231
2214
1i 211
2 h- i =+++∑=
=
1221
221
2214
1i 211
2 h- i >+++∑=
=
Az egyértelmű dekódolás szükséges és elégséges feltétele Ha az adó az A1, A2, A3,…An jeleket adja,
p1, p2, p3,…pn valószínűségekkel, ahol 1n
1iip =
=∑ , és ha
h1, h2, h3,…hn a kódolt szavak hossza, akkor a kódolt üzenet egyértelmű
dekódolhatóságának szükséges és elégséges feltétele az, hogy teljesüljön:
Bináris kódolásnál m=2 , a feltétel így módosul:
Ellenőrizzük a feltétel teljesülését a már jól ismert bináris kódrendszerek esetén!
K1 kódrendszernél:
K2-nél:
K3 esetén:
K4-nél:
Látható, hogy az egyértelmű dekódolhatóság szükséges és elégséges feltétele az első három
esetben teljesül. A K4 esetében már korábban is láttuk, hogy a dekódolás nem egyértelmű.
Mostani megállapításunk korábbi meglátásunkkal szinkronban van.
Ezek után nézzünk további kódolási algoritmusokat! A korábban vázolt szeparáló bináris
kódolásnál csak a kódolt üzenet dekódolhatósága volt a követelmény. A most következő
eljárásoknál a kódolás hatásfokára is tekintettel leszünk.
Huffman-kódolás „A méz mindig kevés.” – mondja Micimackó. A számítástechnikában ezt úgy fordíthatnánk
le: „A hely mindig kevés.” A tárolás során mindig gondot okozott az adatok mérete, ezért
megpróbáltak olyan kódolási eljárást kifejleszteni, amellyel az adatok hatékonyan
44
tömöríthetőek, ezáltal kisebb helyet foglalnak. A Huffman-kódolás segítségével hatékonyan
(helytakarékosan) tudjuk adatainkat kódolni (és ezáltal tárolni). A kódolási rendszer
maximális hatásfokú. A Huffman kódolás optimális hosszúságú kódrendszer előállítására
szolgál, ezzel az eljárással prefix kódot készíthetünk, úgy, hogy a gyakrabban előforduló
elemeket rövidebb kóddal helyettesítjük, mint a ritkábban előfordulókat. Nézzük a kódolás
algoritmusát!
1. Adott egy J = {A1, A2, … An } jelrendszer
p1, p2, p3,…pn valószínűségekkel, ahol 1n
1iip =
=∑
A kódolandó jeleket rendezzük előfordulási valószínűségük szerint csökkenő sorrendbe!
p1 ≥ p2 ≥ … ≥ pn
2. A két legkisebb valószínűségű jelet kódoljuk –sorrendben- 0, 1 kódelemekkel. Majd
valószínűségeiket adjuk össze!
3. Újra keressük meg a két legkisebb valószínűségű jeleket! Ismét kódoljuk –sorrendben- 0-
val, 1-gyel, és a most kapott megfelelő alapjelet írjuk az eddig kapott jelek elé!
4. Ezt az eljárást addig folytassuk, amíg csak 2 jelet kapunk. Ezeket is lássuk el a megfelelő
sorrendben alapjelekkel! Kész vagyunk a kódolással.
Példa
A kódolandó elemek: A1 A2 A3 A4
pi értékeik: ½ ¼ 1/8 1/8 rendezettek
0 1
¼
0 10 11
½
0 10 110 111
1
0 10 110 111
A Huffman-kód hatékony kódolási eljárás és veszteségmentes kódolást eredményez, de
akadnak természetesen hátrányai is. Ilyen például a rendezés problémája, ugyanis ez nagy
elemszám esetén hosszú időt vehet igénybe. Ráadásul a rendezéshez a valószínűségeket közös
nevezőre kell hozni, ez is további időveszteséget jelent. [7]
0 1
0 1
0 1
½
¼
1
A1 A2 A3 A4½ ¼ 1/8
1/8
45
Feladat
- Kódolja, majd dekódolja Huffman kódolással a következő üzeneteket:
ALMA
ALMA A FA ALATT.
Alma a fa alatt
- Végezze el a kódolást és dekódolást, ha:
A1, A2, A3, A4, A5, A6, A7, A8
1/2, 1/8, 1/8, 1/16, 1/16, 1/16, 1/32, 1/32
- Végezze el a kódolást és dekódolást, ha:
A1, A2, A3, A4, A5, A6, A7,
1/2, 1/8, 1/8, 1/8, 1/16, 1/32, 1/32
Shannon-Fano kódolás 1. A kódolandó jeleket valószínűségeik szerint csökkenő sorrendben írjuk fel.
2. A jelek halmazát két –lehetőleg egyenlő valószínűségű– részhalmazra osztjuk. Az egyik
részhalmazba tartozó minden jelhez 0-t, a másik részhalmaz minden eleméhez 1-et rendelünk,
ezeket az eddigi kód után írjuk.
3. A 2. lépést addig ismételjük, amíg minden részhalmaz már csak 1 elemet tartalmaz.
Példa
A kódolandó elemek: A1 A2 A3 A4
pi értékeik: ½ ¼ 1/8 1/8 rendezettek
1. lépés 2. lépés 3. lépés A kódok
A1 p1 0 0
A2 p2 1 0 10
A3 p3 1 1 0 110
A4 p4 1 1 1 111
A Shannon-Fano kódolás egyszerűbb, mint a Huffman kódolás. Ha minden lépésnél
biztosítható az egyenlő valószínűségű részhalmazokra bontás, akkor az eljárás maximális
hatásfokú. Ez a feltétel általában nehezen biztosítható.
46
Feladat
- Kódolja, majd dekódolja Shannon-Fano kódolással a következő üzeneteket:
ALMA
ALMA A FA ALATT.
Alma a fa alatt
- Végezze el a kódolást és dekódolást, ha:
A1, A2, A3, A4, A5, A6, A7, A8
1/2, 1/8, 1/8, 1/16, 1/16, 1/16, 1/32, 1/32
- Végezze el a kódolást és dekódolást, ha:
A1, A2, A3, A4, A5, A6, A7,
1/2, 1/8, 1/8, 1/8, 1/16, 1/32, 1/32
Shannon-féle bináris kódolás Az előző kódolási eljárás gyenge pontját javítja ki a Shannon-féle kódolás Nem szukséges a
két halmaz egyenlő valószínűségekre bontása. Másként oldja meg a hatásfok növelését. A
kódolás menete a következő:
1. Az A1, A2, … An jeleket írjuk fel előfordulási valószínűségeik csökkenő sorrendjében.
(p1 ≥ p2 ≥ … ≥ pn)
2. Számítsuk ki a következő sorozat elemeit:
a1 = 0
a2 = p1 + a1= p1
a3 = p2 + a2 = p1 + p2
.
.
.
an = pn-1+ an-1= p1 + … + pn-1
an+1 = pn + an = p1 + … + pn = Σ pi = 1
3. Határozzuk meg azt a legkisebb hi számot, melyre még teljesül: 2hi * pi ≥1
4. Írjuk át az an sorozat elemeit bináris alakra és ai elemek tört részét vegyük hi
hosszúságúnak. Ha kell levágjuk, ha kell kiegészítjük.
ni
47
Példa
A kódolandó elemek: A1 A2 A3 A4
pi értékeik: ½ ¼ 1/8 1/8
1. ½ ¼ 1/8 1/8 csökkenő sorrendben rendezett
2. a1 = 0 0.02
a2 = 0 + ½ = 0,5 0.12
a3 = 0,5 + ¼ = 0,75 0.112
a4 = 0,75 + 1/8 = 0,875 0.1112
a5 = 0,875 + 1/8 = 1
3. h1 = ?
h1 = 1 -nél 21 * ½ = 1 ≥ 1 teljesül, tehát meg van a legkisebb h. h1=1
h2 = ?
h2 = 1-nél 21 * ¼ < 1, tehát 21 * ¼ ≥ 1 nem teljesül.
h2 = 2 –nél 22 * ¼ = 1 ≥ 1 teljesül, ezért h2=2
h3 = ?
h3 = 3-nál 23 * 1/8 = 1 ≥ 1, ezért h3 = 3
h4=? h4 = 3
4. mivel:
a1= 0.02
a2= 0.5= 0.102
a3= 0.75= 0.1102
a4= 0.875= 0.1112
Feladat
- Kódolja, majd dekódolja Shannon-féle bináris kódolással a következő üzeneteket:
ALMA
ALMA A FA ALATT.
Alma a fa alatt
- Végezze el a kódolást és dekódolást, ha:
A1, A2, A3, A4, A5, A6, A7, A8
1/2, 1/8, 1/8, 1/16, 1/16, 1/16, 1/32, 1/32
- Végezze el a kódolást és dekódolást, ha:
A1, A2, A3, A4, A5, A6, A7,
1/2, 1/8, 1/8, 1/8, 1/16, 1/32, 1/32
48
Összefoglaló feladatok
1. Kódolja a Huffman-kódrendszer segítségével!
Indul a görög aludni.
2. Kódolja a Huffman-kódrendszer segítségével!
Egy meggy sem megy.
3. Kódolja a Huffman-kódrendszer segítségével!
Szép kék még az ég.
4. Kódolja a Shannon-Fano módszerrel!
Gyere, nézz szét!
5. Kódolja a Shannon-Fano módszerrel!
Indul a görög aludni.
6. Kódolja a Shannon-Fano módszerrel!
Alma a fa alatt.
7. Állítsa elő szeparálható kódrendszert a pohár szóra!
8. Állítsa elő szeparálható kódrendszert az informatika szóra!
9. Kódolja Shannon-féle bináris eljárással!
Kék az ég.
10. Kódolja Shannon-féle bináris eljárással!
Számítógép
49
Irodalomjegyzék
[1] Dr Koncz József:
TECHNIKA – INFORMATIKA
Agria Kiadó Kft. 1990
És
Dr. Perge Imre:
Bevezetés az informatikába
Főiskolai jegyzet, Eger, 1993
valamint Dr. Koncz József előadásai
[2] Csépai János:
A számítástechnika alapjai
Műszaki Könyvkiadó, Budapest, 1985.
[3] G. Cullmann, M. Denis-Papin, A, Kaufmann:
A hír tudománya – Az információelmélet alapjai
Gondolat, Budapest, 1973.
[4] Hans Breuer
SH atlasz – Informatika
Springer Hungarica Kiadó Kft., 1995
[5] Rozgonyi-Borus Ferenc
RAM-ba zárt világ (Számítástechnikai segédkönyv)
Mozaik Oktatási Stúdió, Szeged, 1997.
[6] Rozgonyi-Borus Ferenc
Számítástechnika 5-6
Mozaik Oktatási Stúdió, Szeged, 1998.
[7] Rozgonyi-Borus Ferenc
Számítástechnika 7
Mozaik Kiadó, Szeged, 2000.
[8] Rozgonyi-Borus Ferenc
Számítástechnika – Összefoglaló feladatgyűjtemény
Mozaik Kiadó, Szeged, 1997.
[9] Dr. Kovács Tivadar, Dr. Kovácsné Cohner Judit, Ozsváth Miklós, G. Nagy János:
Mit kell tudni a PC-ről?
50
ComputerBooks, Budapest, 1998.
[10] Dancsó Tünde – Végh András:
Számítástechnika 10-11 éveseknek
Műszaki Könyvkiadó, Budapest, 1997.
[11] Dancsó Tünde – Végh András:
Számítástechnika 11-12 éveseknek
Műszaki Könyvkiadó, Budapest, 1998.
[12] Végh András:
Számítástechnika 12-13 éveseknek
Műszaki Könyvkiadó, Budapest, 1997.
[13] Végh András:
Számítástechnika 13-14 éveseknek
Műszaki Könyvkiadó, Budapest, 2001.
[14] Dr. Koncz József:
A PASCAL programozási nyelv elmélete és gyakorlata
EKTF Líceum Kiadó, Eger, 1999.
[15] Schulcz Róbert
Számítástechnika – Munkatankönyv 6. osztályosoknak
Comenius Kiadó Kft., Nágocs, 2003.
[16] Schulcz Róbert
Számítástechnika – Munkatankönyv 7. osztályosoknak
Comenius Kiadó Kft., Nágocs, 2003.
[17] Schulcz Róbert
Számítástechnika – Munkatankönyv 8. osztályosoknak
Comenius Kiadó Kft., Nágocs, 2003.
[18] Pitrik József:
Tanári kézikönyv az Informatika, Könyvtárhasználat, Számítástechnika
tankönyvsorozathoz
Apáczai Kiadó, Celldömölk, 1999.
[19] Pitrik József:
INFORMATIKA 5-6. – Könyvtárhasználat, számítástechnika (Tankönyv kezdők
részére)
Apáczai Kiadó, Celldömölk, 1999.
[20] Pitrik József:
51
INFORMATIKA 7-8. – Könyvtárhasználat, számítástechnika (Tankönyv haladók
részére)
Apáczai Kiadó, Celldömölk, 1999.
[21] http://www.szabilinux.hu/konya/konyv/2fejezet/2fdigi2.htm
[22] Bodnár István Olivér, Kiss Csaba, Krnács András:
Számítástechnikai alapismeretek A
Műszaki Könyvkiadó, Budapest, 2000.
[23] http://www.neumann-centenarium.hu
[24] http://www.zsido.hu/kozosseg/Neumann.htm
[25] http://www.ffg.sulinet.hu/oktinfo98/oppe/index.htm
[26] http://www.scitech.mtesz.hu/10kiraly/kiraly_5.htm
[27] http://www.mta.hu/aktualis/kivonat/hirek_2003_02.html
[28] Bonifert Zsolt:
Informatika
Műszaki Könyvkiadó, 2001.
[29] Turcsányiné Szabó Márta, Zsakó László:
Comenius Logo gyakorlatok
Kossuth Kiadó, 1997.
[30] http://www.cic.klte.hu/iszk30/oktatas.htm
[31] http://www.cic.klte.hu/ttk50/inf.htm
[32] http://www.inflab.bme.hu/hist/oldies.html
[33] http://ttk.unideb.hu/ttk25/mtcs/szk.html
[34] http://www.sulinet.hu/eletestudomany/archiv/2001/0121/kronika/kronika.html
[35] http://www.hpo.hu/ipsz/200104/ evnaptar.htm
[36] http://www.mek.iif.hu/porta/szint/muszaki/szamtech/pc
[37] http://www.mek.iif.hu/porta/szint/tarsad/konyvtar/informat/jegyzet/html/index.html
[38] http://www.inlap.jate.u-szeged.hu/modtan/nyito.htm