PTE TTK prog.info. Programozási környezet tételek //// (C) by Bundzsy & Asti 2010 --------------------------------------------------------------------------------- 01. a. ciklusok(iterációk) ----- Ciklus, vagy iteráció: ismétlődő (azonos vagy hasonló) tevékenységek megvalósítására szolgál. A ciklus beépítését a programba ciklusszervezésnek is nevezik.Három alaptípusba sorolhatók aszerint, hogy hányszor futnak le: ezek az elöltesztelő, a hátultesztelő és a számlálós ciklus. Fajtái: --Feltételes -Elöltesztelő(futásszám előre nem ismert, lehet h egyszer se fut le) -Hátultesztelő(futásszám előre nem ismert, legalább 1x lefut) --Számlálós(futásszám előre ismert, lehet h egyszer se fut le) A végtelen ciklus olyan ciklus, melynek futása külső esemény bekövetkezte nélkül sohasem zárulna le. Eseményvezérelt programok használják, szerepe miatt főciklusnak is szokták nevezni. b. terminál működése ----- A számítógépes hálózatra csatlakoztatott minden számítógépet – a szerverek kivételével – munkaállomásnak nevezünk. A munkaállomás lehet a hagyományos értelemben vett személyi számítógép vagy az úgynevezett terminál. Amikor egy személyi számítógéppel csatlakozunk a hálózatra, a hálózati kiszolgálót jobbára csak adattárolás céljából használjuk. A programok futtatása és az adatok feldolgozása a saját gépünk feladata. A terminál általában olyan – képernyőből és billentyűzetből álló – eszköz, amely lehetővé teszi, hogy a számítógép-hálózat központi számítógépével kommunikáljunk. Egy terminál alapesetben nem rendelkezik saját háttértárral, esetleg saját CPU-val sem. Mivel a terminál nem rendelkezik a szükséges erőforrásokkal, hálózati kiszolgáló hiányában önálló munkavégzésre alkalmatlan. A felhasználó a terminált csak utasításainak továbbítására és az eredmények megjelenítésére használja, a programok futtatása és az adatok feldolgozása ténylegesen a szerveren történik. Napjaink számítógép-hálózatain gyakran találkozhatunk olyan esettel is, amikor a felhasználó egy terminálemulációs program segítségével egy hagyományos személyi számítógépet használ terminálként. c. Neumann-elvek ----- >>Neumann 1946-ben dolgozta ki őket: -1. Soros utasításvégrehajtás (utasítások végrehajtása időben egymás után történik, ellentéte a párhuzamos utasításvégrehajtás, amikor több utasítás egyidejűleg is végrehajtható) -2. Kettes (bináris) számrendszer használata (elektronikusan könnyebb megvalósítani) -3. Belső memória (operatív tár) használata a program és az adatok tárolására (nem mindig szükséges emberi beavatkozás, így a részeredmények tárolhatók és a gép számolhat műveletsorozattal is) kapcsolódó: Tárolt program elve (programokat is tárolhat a memória) -4. Teljesen elektronikus működés -5. Széles körű felhasználhatóság, univerzális legyen a szgép -6. Központi vezérlőegység alkalmazása >>Neumann-elvű gépek felépítése: -- központi egység - CPU - ALU - CU (vezérlőegység) -> utasítások alapján vezérli a működést - tár -- háttértárak, in/output perifériák 02. a. tömb+használata ----- Tömb: olyan adatszerkezet, amelyet nevesített elemek csoportja alkot, melyekre sorszámukkal (indexükkel) lehet hivatkozni. Vektornak is nevezik. A legtöbb programozási nyelvben minden egyes elemnek azonos adattípusa van és a tömb folytonosan helyezkedik el a számítógép memóriájában. A C nyelv megengedi, hogy bármilyen adattípusból hozhassunk létre tömböt. Létezhetnek tehát struktúrákból álló tömbök, pointerek tömbjei, sõt, tömbökbõl alkotott tömbök is. b. CPU típusai, felépítése, regiszterek ----- CPU: az utasítások értelmezését és végrehajtását vezérli, félvezetős kivitelezésű, összetett elektronikus áramkör. Egy szilícium kristályra integrált, sok tízmillió tranzisztort tartalmazó digitális egység. A processzor alatt általában mikroprocesszort értünk, régebben a processzor sok különálló áramkör volt, ám a mikroprocesszorral sikerült a legfontosabb komponenseket egyetlen szilíciumlapkára integrálni. Főbb részei: - ALU: alapvető matematikai és logikai műveleteket hajt végre. - FPU: Floating Point Unit, lebegőpontos műveleteket végző egység. - CU: Ez szervezi, ütemezi a processzor egész munkáját. Például lehívja a memóriából a soron következő utasítást, értelmezi és végrehajtatja azt, majd meghatározza a következő utasítás címét. - Buszvezérlő: A regisztert és más adattárolókat összekötő buszrendszert irányítja. A busz továbbítja az adatokat. - Cache(gyorsítótár): processzorba integrált memória, ami a viszonylag lassú rendszermemória-elérést hivatott kiváltani azoknak a programrészeknek és adatoknak előzetes beolvasásával, amikre a végrehajtásnak közvetlenül szüksége lehet. Regiszterek: A regiszterek gyors írható - olvasható munkatárak. A különböző regiszterek szigorúan meghatározott feladatokhoz vannak hozzárendelve, emiatt korlátozott funkció betöltésére alkalmasak. A belső sínrendszeren keresztül tartanak kapcsolatot a processzor más részeivel. A regiszterek a processzor legkülönbözőbb részeiben (ALU, CU) vagy önállóan tömbökbe szervezetten fordulhat elő. A regiszterkészlet processzor függő. - Akkumulátor regiszter: Az akkumulátor az aritmetikai és logikai műveletek operandusait, vagyis a műveletek tárgyát képező mennyiségeket vagy azoknak az eredményeit tárolja. - Adatszámláló regiszter: Az adatok kiolvasásakor vagy beírásakor azonosított memóriarekesz címét tárolja. - Utasításregiszter (IR): A vezérlő egységhez tartozó regiszter, amelyben a memóriából lehozott utasítás tárolódik, amíg a CU az utasítás műveleti jelrésze alapján meghatározza az elvégzendő műveletet és elindítja a mikroprogramot. Veremmutató regiszter (SP): - A verem legfelső elemét jelöli ki. c. Neumann-ciklus ----- 1, beolvassuk a programszámláló regisztert 2, betöltjük a megadott utasítást és a regisztert a következő utasításra állítjuk 3, végrehajtjuk az utasítást 4, megnézzük, hogy van-e utasítás, ha igen akkor az 1-től elölről, ha nem akkor leáll 5, a mai gépeknél mindig van utasítás, soha nem állnak le 03. a. aritmetikai/logikai műveletek ----- Aritmetikai műveletek: számokon végezzük, eredményül szintén számot kapunk. (hatványozás, gyökvonás, szorzás, osztás, összeadás, kivonás), átváltás számrendszerek között. Aritmetikai műveletek precedenciája: 1.hatványozás/gyökvonás 2.szorzás/osztás 3.összeadás/kivonás Logikai műveletek: negáció, AND, OR, XOR. Logikai műveletek precedenciája: 1.NOT 2.AND 3.OR (zárójel különlegessége megemlítendő) (kommutativitás, asszociativitás, disztributivitás) Az ALU az említett alapvetõ logikai függvények elvégzésére alkalmas, amelyekkel a többi logikai mûvelet is elvégezhető. Az aritmetikai egység tartalmaz egy akkumulátor (AC) nevû regisztert, amelyben a mûveletek végzése során a közbensõ eredményeket tárolja. b. erőforráskezelés, HWmegszakítások ----- erőforrás: gyakorlatilag minden lehet erőforrás, ami egy folyamat végrehajtásához szükséges (memória, processzor, perifériák, állományok, stb.) Erőforrások csoportosításai: 1. csoportosítás: - Hardver erőforrások, pl.: processzor, memória, nyomtató és egyéb perifériák - Szoftver erőforrások, pl.: közösen használható programok, adatállományok, adatbázisok. 2. csoportosítás: - Hagyományos erőforrások: azok az erőforrások, amelyek az operációs rendszer nélkül is léteznek. Pl.: nyomtató - Operációs rendszer által létrehozott erőforrás: az operációs rendszer saját, illetve a futó folyamatok vezérlésére többféle táblázatot, adatszerkezetet stb. is létrehoz, pl.: fájl leírótáblák, lemez adatblokkok, pufferek, folyamatvezérlő blokkok (PCB) 3. csoportosítás: - Vannak olyan erőforrások (pl.: processzor), melyek használata a folyamatok között (időben) megosztható (sharable) és a rendelkezésükre bocsátott idő leteltével megszakítható, elvehető (preemtive) - Vannak azonban olyan erőforrások, melyek nem megoszthatók (non-sharable) a folyamatok között, és ha már egyszer használatba vettük őket, a megkezdett művelet befejezéséig nem megszakíthatók, nem elvehetők (non-preeemtive). Pl.: nyomtató Megszakítástípusok: 1. Megszakítás (INTERRUPT) 2. Kivétel (EXCEPTION) 3. Nem maszkolható megszakítás (NON MASKABLE INTERRUPT) 4. Csapda (TRAP) Megszakításkezelés: megérkezik a CPUnak a ~, ezt az addig várakoztatja, amíg az aktuális utasítást le nem jegyezte, ill. az adott típusú megszakítás nem tiltott. Amennyiben elfogadta, úgy segít félretenni a megadott program állapotvektorát a veremben. A többi már a szoftverben vezetődik le: - betölti a megszakítást kezelő állapotvektort - elindul a megszakításkezelő program, további állapotinformációk lementésére, a megsz. okának meghatározására és lekezelésére. Általában a megsz.kezelő letiltja a további megszakításokat is. Ha a kritikus szakaszon túljutott, visszaállítja a tiltást és visszatölti a lementett állapotvektorokat, így a program tovább fut. c. szoftveres megszakítások, IRQ ----- IRQ(Interrupt Request): A processzort az aktuális feldolgozási művelet átmeneti megszakítására, és a megszakításkezelő eljárás elindítására utasító jel. 04. a. vezérlésátadás (szelekció) ----- Fajtái: Feltétel nélküli: az utasításban szereplõ címmel tölti fel a processzor az utasításszámláló regiszter tartalmát, amely a következõ utasítás címe lesz, és a program innen folytatódik. Feltételes: a műveleti jelrész által elõírt feltétel teljesülése esetén adódik át a vezérlés az operandusban megadott címre és a program az ott található utasítással folytatódik. Ha az operációs kód által elõírt feltétel nem teljesül, a program a soron következő utasítással folytatódik. b. memóriakezelés (szegmentálás stb.) ----- - Memóriakezelés: memória lefoglalása az adott folyamat számára. Utána felszabadítás. A virtuális memória egy, az operációs rendszer vagy a számítógép hardvere által nyújtott szolgáltatás, amit általában egy külső tárolóterület (merevlemez) igénybevételével, a futó program(ok) számára transzparens módon biztosítja, hogy a program végrehajtáskor a központi vagy operatív memória fizikai korlátai észrevétlenek legyenek. Az operációs rendszer úgy szabadít fel operatív memóriát az éppen futó program számára, hogy a memóriában tárolt, de éppen nem használt blokkokat (lapokat) kiírja a külső tárolóra, amikor pedig ismét szükség van rájuk, visszaolvassa őket. Mivel a merevlemez sebessége töredéke a memória sebességének, nagyon sok múlik azon, hogy a virtuálismemória-kezelő milyen stratégiát alkalmaz az operatív memóriából kimozgatandó lapok kiválasztásakor. A virtuális memória kezelése leggyakrabban lapozással (paging) történik. Ekkor a virtuális memória (egy folyamat virtuális címtartománya, amit a CPU biztosít) fel lesz osztva egyenlő nagyságú részekre, ún. lapokra (pages) - a háttértár és a memória között legalább ennyi byte-ot fog az operációs rendszer átvinni (vagy ennek többszörösét). - Verem (stack):Magas szintű programozási nyelveknél megismert alprogramok, eljárások visszatérési címének tárolását biztosító memóriát nevezik stack memóriának - Programozott (szoftver) stack memória a rendszer RAM memóriájának egy részét foglalja le, nagy kapacitású, adatfeldolgozásnál hasnálják. - Hardver stack memóriánál a mikroprocesszoron belül egy bizonyos számú regiszter alkotja ezt a memóriát, gyors, kisteljesítményű mikrovezérlőknél használják - Mikroprocesszorok stackbe beíró utasítása: PUSH, onnan kiolvasó: POP/PULL, ez LIFO sor - Szegmentálás: Célja a memória több címtérre bontása. A memóriát logikailag részekre un. szegmensekre osztják, egy memóriacím áll: szegmenscímből és eltolás(ofset)címből c. adattárolás, adattípusok ----- Elemi típusok(nincs belső szerkezete, illetve nem foglalkozunk vele): - Egész - Valós (fixpontos, lebegőpontos) - Logikai(1 bit, 1 byte: minden bitje, első bitje, utolsó bitje) - Karakter - Felsorolás - Mutató Összetett adattípusok (adatszerkezetek) -> pl. C struktúra/unió Regiszterek: A regiszterek gyors írható - olvasható munkatárak. A különböző regiszterek szigorúan meghatározott feladatokhoz vannak hozzárendelve, emiatt korlátozott funkció betöltésére alkalmasak. A belső sínrendszeren keresztül tartanak kapcsolatot a processzor más részeivel. A regiszterek a processzor legkülönbözőbb részeiben (ALU, CU) vagy önállóan tömbökbe szervezetten fordulhat elő. A regiszterkészlet processzor függő. - Akkumulátor regiszter: Az akkumulátor az aritmetikai és logikai műveletek operandusait, vagyis a műveletek tárgyát képező mennyiségeket vagy azoknak az eredményeit tárolja. - Adatszámláló regiszter: Az adatok kiolvasásakor vagy beírásakor azonosított memóriarekesz címét tárolja. - Utasításregiszter (IR): A vezérlő egységhez tartozó regiszter, amelyben a memóriából lehozott utasítás tárolódik, amíg a CU az utasítás műveleti jelrésze alapján meghatározza az elvégzendő műveletet és elindítja a mikroprogramot. Veremmutató regiszter (SP): - A verem legfelső elemét jelöli ki. 05. a. függvények és használatuk ----- A programozásban a függvény (szubrutin, metódus, procedúra vagy alprogram) egy nagyobb program kódjának része, amely egy adott feladatot hajt végre, a kód többi részétől viszonylag független és többször felhasználható. Használatuk előnyei:- csökkenthető a kódismétlődés- ugyanaz a függvény más programban is használható- összetett problémák egyszerűbb részekre bonthatók, ami könnyebbé teszi a kód frissítését és bővítését- javítható a program olvashatósága- elrejthetők és szabályozhatók a program egyes részei C/C++ -ban kétféleképpen adhatunk át paramétert: érték- és cím szerint. - Érték szerinti: a megadott paraméterekből másolatot hoz létre a memóriában, - Cím szerinti: magán a változón végzi el a műveleteket. Ebből adódóan a cím szerinti átadással módosítható a paraméter. A cím szerinti átadás elvben hatékonyabb, érték szerinti társa a C nyelvvel való kompatibilitás miatt maradt benne a nyelvben (és ez az alapértelmezett). Az érték szerinti nyilván több memóriát használ. A cím szerinti átadást az előző fejezetben megismert "címe" operátorral végezzük(&). b. bináris számokkal végezhető műveletek ----- - Összeadás: Bitenként adjuk össze a számokat az előző átvitelek figyelembe vételével. Az egyes bitösszegeket az összeadó bitek kizáró vagy kapcsolata adja meg(átvitelek 1 és 1-nél!). - Kivonás: A kivonás az összeadásra vezethető vissza az A-B= A+(-B) összefüggés alapján. Azaz a kisebbítendőhöz a kivonandó ellentettjét. Kettes számrendszerben egy szám ellentettjét kettes komplemensnek nevezzük. (K.k.előállítása: Képezzük a szám egyes komplemensét, ezt úgy tesszük, hogy a számot bitenként invertáljuk. Majd az így kapott egyes komplemenshez hozzáadunk 1-et.) - Szorzás: Bitenként összeszorozzuk a számokat, majd az összeadásra vonatkozó szabályokkal összeadjuk az egyes részszorzatokat. - Osztás: Az osztás kettes számrendszerben úgy történik, mint a tízesben. Az osztandó számot szorzatként vizsgáljuk. (pl.: kétjegyű számmal osztunk, ekkor az osztandó szám első két számjegyét vizsgáljuk, stb.) -További műveletek: - eltolás jobbra és balra (üres helyekre 0 bit kerül) - elforgatás jobbra és balra (üres helyekre a túloldalról kerül a bit) - bitsorrend megfordítása(tükrözés) - bitenkénti logikai műveletek (negáció, és, vagy, kizáró vagy) c. prog. nyelvek osztályozása ----- Alapvetően három kategóriába soroljuk a programozási nyelveket: - Gépi kód: valójában nem nyelv, mivel az a gép számára közvetlenül értelmezhető adatsort jelenti. A gépi kódhoz legközelebb álló nyelv az assembly nyelv. Ha egy assembly vagy mnemonik nyelv és az általa előállított gépi kód között egy-az-egy megfeleltetés van, akkor mondhatjuk, hogy az adott nyelv „gépi kód szintű”. - Assembly: A gépi kódhoz, vagyis az adott számítógép saját nyelvéhez legközelebb álló nyelveket nevezzük assembly nyelveknek: ezen a nyelven a legnehezebb programot írni, mert azt teljesen a gép architektúrájához alakítva, gépi logika szerint kell elkészíteni. Cserébe az assembly nyelven írt programok a leggyorsabbak. (alacsony szintű nyelvek) Minden egyes processzor-családnak saját assembly nyelve(i) van(nak). - Magas szintű nyelvek: valamilyen absztrakció segítségével az emberi logikához vagy a problématérhez közelebb eső nyelven fejezzük ki a programunkat. Magas szintű nyelvek részletes csoportosítása: - Imperatív (procedurális) nyelvek: a programfejlesztés értékadó utasítások megfelelő sorrendben történő kiadására koncentrálódik. (baloldalán egy változó , jobboldalán egy megfelelő típusú kifejezés). A szelekció (elágazás) csak azt a célt szolgálja, hogy bizonyos értékadó utasításokat csak adott esetben kell végrehajtani. A ciklusok pedig azért vannak, hogy az értékadó utasításokat többször is végrehajthassunk. Az értékadó utasítások során részeredményeket számolunk ki – végül megkapjuk a keresett végeredményt. - Applikatív (funkcionális) nyelvek: A kiszámolandó kifejezést adjuk meg, megfelelő mennyiségő bemenő adattal. A programozás a kifejezés kiszámításának leírására szolgál. A program futása közben egyszerűen kiszámítja a szóban forgó kifejezést. Nincs változó, általában ciklus sem(helyette rekurzió van). Értékadó utasítás sincs, csak függvény visszatérési értékének megadása létezik. Tipikus felh. területének a természettudományos alkalmazások tekinthetőek. - Logikai nyelvek: Tényeket fogalmazunk meg, és logikai állításokat írunk le. A program ezen kívül egyetlen logikai kifejezést is tartalmaz, melynek értékét a programozási nyelv a beépített kiértékelő algoritmusa segítségével, a tények és szabályok figyelembevételével meghatároz. Tipikus felh. területe a szakértői rendszerek létrehozásához kapcsolódik. - Objektum-orientált nyelvek: Ezen nyelveken a program működése egymással kölcsönhatásban álló objektumok mőködését jelenti. Az objektumok egymás műveleteit aktiválják, melyeket interface-ek írnak le. Ha egy művelet nem végrehajtható, akkor az adott objektum a hívó félnek szabványos módon (kivételkezelés) jelzi a probléma pontos okát. 06. a. 5 beépített eljárás/fv. bemutatása ----- b. adattárolás háttértáron ----- - Winchester: A lemez szerkezete: A koncentrikus körök a sávok. Ezen körök felosztását nevezzük szektoroknak. Bitsorozatok alkothatnak blokkot. Író-olvasófejek együtt pozicionálnak. - Lemezvezérlő egység feladatai: pozicionálás, pásztázó-scan algoritmus: ha a fej elindult vmeik irányba, ott minden kérést teljesít, a lemez közepén lévő cilindereknél gyakrabban jár- oprdsz fontosabb fájlait itt tároljuk. - CD: átlátszó műanyag hordozóra aluminium v arany festéket, majd lakkréteget visznek fel. Landek-pitek határozzák meg a biteket, spirál alakban sorakoznak fel belülről kifelé. Meghajtó lézersugara különböző módon verődik vissza róluk(1-0) Adatrögzítés sürüsége nagyobb, de elérési ideje rosszabb a winchesternél: sáv pozicionálás ideje, szektor elérési ideje - FAT tábla: Foglaltsági térkép, az üres és a foglalt helyeket tartja nyilván. Tudnia kell hogy melyik szektor csoport üres, foglalt, esetleg hibás. A bejegyzéseket úgynevezett clusterekben tartja nyilván. c. lebegőpontos számok ----- A lebegőpontos számábrázolás lényege, hogy a valós számok ábrázolásánál nincs rögzítve a tizedesjegyek száma. A számábrázolásnál a tizedespont „lebeg”, vagyis az ábrázolható számjegyeken belül bárhova kerülhet. A lebegőpontos ábrázolás előnye a fixpontos számábrázolással szemben az, hogy sokkal szélesebb tartományban képes értékeket felvenni; a számokat reprezentáló adat mennyisége főként az ábrázolható számjegyek mennyiségét határozza meg, és sokkal kisebb mértékben az ábrázolható számok nagyságrendjét. Számos számábrázolási rendszer létezik a lebegőpontos számok kezelésére, de a legelterjedtebb szabvány, hogy a nagy számokat exponenciális alakban írjuk fel. Pl. 152853,5047 -> 1,528535047·10^5 A lebegőpontos ábrázolás ehhez nagyon hasonló: - a mantissza a szám értékes jegyei adja meg, tizedespont nélkül; a tizedespont helye általában rögzített, nagyon gyakran az első számjegy mögé kerül; - az exponens megadja a szám nagyságrendjét("10 hányadik hatványa"). 07. a. egész, kar, karlánc változótípusok ábrázolása ----- Egész típus: egész (integer) értéket vehetnek fel a változók, ellentétben a float típus megadásával, amely lebegőpontos értékű változót – azaz olyan változót, amelynek értéke törtrészt is tartalmaz – jelöl. Az int és float típusú változók pontossága és lehetséges nagysága a használt számítógéptől függ. Gyakran 16 bites int típusú változókat használnak, amelyek értéke -32 768 és +32 767 közé eshet, de előfordul 32 bites int típusú változó is. A float típusú számokat általában 32 biten ábrázolják, legalább hat értékes számjegy pontossággal és az abszolút értékük 10-38-tól 10+38-ig terjedhet.Az int és float típuson kívül a C nyelv még további adattípusokat is értelmez. Ilyen achar karakter, egy bájton ábrázolva;short rövid egész típusú szám;long hosszú egész típusú szám;double kétszeres pontosságú lebegőpontos (valós) szám. signed/unsigned módosítók: használatukkal bármely eddig felsorolt változótípus előjele módosítható. char - egy karakter tárolására alkalmas változótípus - 2^8, azaz 255, tehát egy bájt. (Stringhez:)Tömb: olyan adatszerkezet, amelyet nevesített elemek csoportja alkot, melyekre sorszámukkal (indexükkel) lehet hivatkozni. Vektornak is nevezik. A legtöbb programozási nyelvben minden egyes elemnek azonos adattípusa van és a tömb folytonosan helyezkedik el a számítógép memóriájában. b. mágneses adattárak és működésük ----- Mágnesezhető réteggel borított korongokból állnak. A lemezek forgása közben, a koncentrikus körök, a sávok (track) mentén tárolt adatokat sugárirányban mozgatható olvasó/író fejek olvassák, illetve rögzítik. - Winchester szerkezete: A koncentrikus körök a sávok. Ezen körök felosztását nevezzük szektoroknak. Bitsorozatok alkothatnak blokkot. Író-olvasófejek együtt pozicionálnak. - Lemezvezérlő egység feladatai: pozicionálás, pásztázó-scan algoritmus: ha a fej elindult vmeik irányba, ott minden kérést teljesít, a lemez közepén lévő cilindereknél gyakrabban jár- oprdsz fontosabb fájlait itt tároljuk. c. STACK szerepe vezérlésátadásban ----- Stack (verem): számítógép memóriájának egy része, amelybe a processzor azokat a memóriacímeket menti el, ahova egyes eljárások befejeztével visszatér. Lineáris adatszerkezet, amelynek csak az utolsó elemével végezhetünk műveleteket. LIFO tárolószerkezet, mely megőrzi a tárolás sorrendjét. SP (Stack Pointer): veremmutató, a verem pillanatnyi tetejére mutat. Ha a verembe adatot helyezünk el, értéke kettővel csökken, ha adatot veszünk ki, akkor kettővel nő. (kettővel, hiszen a verembe mindig 1 szó, azaz két bájt kerül.) A verem esetén kétféle túlcsordulásról beszélhetünk: 1. túlcsordulás (overflow): SP értéke túlnő azon a határon, amit a verem számára maximális értéknek szántunk. Ez például eredményezhetné egyéb szegmens (adat– vagy programszegmens) felülírását, ezért általában az OS kivédi. 2. alulcsordulás (underflow): a verem üres, de megpróbálunk belőle olvasni. 08. a. adatátadás fv.-eknél, eljárásoknál ----- C/C++ -ban kétféleképpen adhatunk át paramétert: érték- és cím szerint. - Érték szerinti: a megadott paraméterekből másolatot hoz létre a memóriában, - Cím szerinti: magán a változón végzi el a műveleteket. Ebből adódóan a cím szerinti átadással módosítható a paraméter. A cím szerinti átadás elvben hatékonyabb, érték szerinti társa a C nyelvvel való kompatibilitás miatt maradt benne a nyelvben (és ez az alapértelmezett). Az érték szerinti nyilván több memóriát használ. A cím szerinti átadást az előző fejezetben megismert "címe" operátorral végezzük(&). Stack (verem): számítógép memóriájának egy része, amelybe a processzor azokat a memóriacímeket menti el, ahova egyes eljárások befejeztével visszatér. Lineáris adatszerkezet, amelynek csak az utolsó elemével végezhetünk műveleteket. LIFO tárolószerkezet, mely megőrzi a tárolás sorrendjét. SP (Stack Pointer): veremmutató, a verem pillanatnyi tetejére mutat. Ha a verembe adatot helyezünk el, értéke kettővel csökken, ha adatot veszünk ki, akkor kettővel nő. (kettővel, hiszen a verembe mindig 1 szó, azaz két bájt kerül.) A verem esetén kétféle túlcsordulásról beszélhetünk: 1. túlcsordulás (overflow): SP értéke túlnő azon a határon, amit a verem számára maximális értéknek szántunk. Ez például eredményezhetné egyéb szegmens (adat– vagy programszegmens) felülírását, ezért általában az OS kivédi. 2. alulcsordulás (underflow): a verem üres, de megpróbálunk belőle olvasni. b. grafikus környezet (HW/SW) ----- - Mátrix grafika (Rasztergrafika): Amennyiben minden egyes pontot önállóan jellemzünk, sorról-sorra történő megadással, raszteres betűről beszélünk. Előnye: Egyszerű adatszerkezet; Egyszerű algoritmus; gyors feldolgozás; Fototechnikai trükköknél jól alkalmazható. Hátránya: Adatállomány nagy méretű; Rögzített felbontás; Nagyításnál a minőség romlik. - Vektorgrafika: A vektorgrafikus rajzolóprogramok a képek felépítésére egyszerű alakzatokat (téglalap, ellipszis, sokszög, stb.) és ún. Bézier-görbéket (csomópontokkal, a csomópontok közt húzott görbékkel és érintőszakaszokkal felépített görbéket) használnak. A vektoros képkészítésnek számos előnye van, de vannak korlátai is. Mivel a képek nem képpontokból állnak, tetszőlegesen nagyíthatók és kicsinyíthetőek, a végeredmény minősége csak a képmegjelenítő eszköztől függ. Egy vektorokból álló objektumokkal felépített képen minden objektum kitölthető valamilyen színnel, viszont - mivel az objektumok jól elkülöníthető görbékből állnak - nincs lehetőségünk fotótechnikai eljárások (elmosás, élesítés, homályosítás) használatára. Ezek a műveletek csak pixelgrafikus rajzolóprogramokkal végezhetők el. c. op.rendszerek csoportosítása ----- - Operációs rendszernek nevezzük azt a rendszert, ami számítógépes rendszerben programok végrehajtását vezérli, ütemezi, elosztja az erőforrásokat, hatékonyságra törekszik és biztosítja a felhasználó és a számítógépes rendszer közötti kommunikációt. - Felhasználók száma szerint: single user, multi user. - Multiprogramozás foka szerint: egy v. többáramú - Hordozható és platformfüggetlen / csak egy fajta szgépre készült - Parancsorientált / GUI felületű - Hardver mérete alapján: Nagygépes, Kisgépes, Mikrogépes - Rendszerstruktúra alapján: centralizált, Elosztott, Hálózati Időosztásos rendszerek (time-sharing) Az időosztásos op.rendszer célja, hogy a számítógéprendszer interaktív használatát több felhasználó számára párhuzamosan lehetővé tegye. A CPU megfelelő ütemezésével és multiprogramozás alkalmazásával a gép idejét több felhasználó között osztja meg. Valósidejű rendszerek A munkák elvégzését szigorú időkorlát köti. Eseményvezérelt, az operációsrendszer nem vezérli a feldolgozást, hanem fogadja és teljesíti a kérelmeket. (taszkok). Az emberi beavatkozással kapcsolatos követelményeket minimalizálni igyekszik, ezek teljesen mégsem nélkülözhetők. (Kötegelt (batch): egy szakképzett operátor alkalmazása, aki több felhasználó munkáját összegyûjtötte és a gép számára legkedvezõbb sorrendben futtatta. De így a felhasználók csak az operátor közvetítésével érintkezhettek a számítógéppel. Egyes feladatokat leíró kártyakötegek utasításait egymás után hajtotta végre a gép. - Legfontosabb a hardver kihasználása - Minimális adminisztráció - az ütemezést a folyamatok maguk vezérlik ) 09. a. fixpontos számok ábrázolása/tul. ----- Fixpontos számábrázolás: Valós számok ábrázolása úgy, hogy rögzített számú biten lehet külön a szám egészrészét és külön a törtrészét ábrázolni. Mivel a bináris pont (tizedesvessző) a szám végén, fix helyen van, ezért ábrázolni nem szükséges. Előjeles, fixpontos számok esetén a legnagyobb helyi értékű bit az előjelbit. b. adattárolás operatív mem.-ban, mem.típusok ----- Operatív memória: tárolja az éppen futó programokat és a feldolgozás alatt lévő adatokat. A memóriának két fajtája van a ROM típusú csak olvasható, (van újraírható: EPROM) a RAM típusú írható és olvasható. A gép kikapcsolása után az adatokat elveszti. ->Jellemzésük: működési elvükkel, a kapacitásukkal, órajel frekvenciával A virtuális memória egy, az operációs rendszer vagy a számítógép hardvere által nyújtott szolgáltatás, amit általában egy külső tárolóterület (merevlemez) igénybevételével, a futó program(ok) számára transzparens módon biztosítja, hogy a program végrehajtáskor a központi vagy operatív memória fizikai korlátai észrevétlenek legyenek. Az operációs rendszer úgy szabadít fel operatív memóriát az éppen futó program számára, hogy a memóriában tárolt, de éppen nem használt blokkokat (lapokat) kiírja a külső tárolóra, amikor pedig ismét szükség van rájuk, visszaolvassa őket. Mivel a merevlemez sebessége töredéke a memória sebességének, nagyon sok múlik azon, hogy a virtuálismemória-kezelő milyen stratégiát alkalmaz az operatív memóriából kimozgatandó lapok kiválasztásakor. c. OOP alapfogalmai ----- (- Struktúrált programozás: a feladatot 1 utasításnak tekinti. A szg miatt felbontjuk elemi utasítások sorozatára -> alkalmazás adatai és a kezelésével kapcsolatos utasítások a programban szétszórva helyezkednek el.) - Objektumorientált programban szorosabban tartoznak össze az adatok és a kezelő műveletek. Az objektumorientált tervezés lényege ezeknek az egységeknek és a közöttük fennálló kapcsolatoknak a meghatározása. Objektumorientáltnak nevezünk egy programot, mely egymással kapcsolatot tartó objektumok összessége, ahol minden objektumnak meg van a jól meghatározott feladata. Az objektum egy spec változó, adatokat, de metódusokat is tartalmazhat (eljárások, függv) Az osztály egy absztrakt típus. Az objektum az osztály példánya vagy előfordulása. Az osztály csak egy leírás. Műveletet végezni csak az objektumon lehet. - Az osztály az objektum tulajdonságait leíró adattagok gyűjteményét tartalmazza. Az osztályban tetszőleges számú és típusú adattagok szerepelhetnek. - Az osztály objektumaira alkalmazható műveleteket definiáló, tagfüggvényeket tartalmazza. Különböző elérési jogokat tesznek lehetővé a program többi része számára. Az osztály tagjaihoz privát (private) és védett (protected) vagy nyilvános (public) elérési jog rendelhető. - Öröklődés: Lehetővé teszi hogy, egy osztály tagjai egy másik osztály tagjaivá váljanak. A programozónak nem kell ismernie az objektum megvalósításának módszerét csak a nyilvános tagokat. 10. a. fájlműveletek ----- A számítógépek háttértárain elhelyezkedő adatállományokat a C-ben tartalmuk alapján szöveges (text) és bináris fájlokra osztjuk. A szöveges állományok általában olvasható információkat tartalmaznak, változó hosszúságú sorokból állnak és a sorokat CR/LF (kocsivissza/soremelés) zárja. A bináris állományok bájtokból épülnek fel, a fájl egy egydimenziós bájt tömb. Az állományok tartalmának eléréséhez a következ lépéseket kell megtenni: - fájlazonosító definiálása, - az állomány megnyitása, (ellenőrzés!) - az állomány tartalmának feldolgozása fájlműveletek (olvasás, írás, pozicionálás, stb.)felhasználásával, - a műveletek elvégzése után az állomány lezárása. A nyitástól a zárásig valamennyi fájlműveletet könyvtári függvények meghívásával tudjuk elvégezni. A konstans-, típus- és függvénydeklarációkat ehhez az stdio.h fejlécfájl tartalmazza. A fájl megnyitásakor meg kell adnunk a fájlhoz való hozzáférés módját, azaz, hogy mit akarunk a megnyitandó fájlban csinálni. Hozzáférési módok magas szint fájlkezelésnél: Szöveges//Bináris "r" vagy "rt"//"rb" -> Létez fájl megnyitása csak olvasásra. "w" vagy "wt"//"wb" -> Új fájl megnyitása - ha már létezik, tartalma elvész! "a" vagy "at"//"ab" -> Fájl megnyitása a végéhez való hozzáírásra (append =folytatás). Ha a fájl nem létezik, akkor létrejön. "r+" vagy "rt+"//"rb+" -> Létező fájl megnyitása írásra és olvasásra (update). "w+" vagy "wt+"//"wb+" -> Új fájl megnyitása írásra és olvasásra (update). Ha a fájl már létezik, tartalma elvész! "a+" vagy "at+"//"ab+" -> Fájl megnyitása a fájl végén végzett írásra és olvasásra (update). Ha a fájl nem létezik, akkor létrejön. A magas szintű fájlkezelés legfontosabb függvényei: fopen() -> megnyitás fclose() -> lezárás Olvasás//Írás//Adategység fgetc()//fputc()//karakter fgets()//fputs()//sztring fscanf()//fprintf()//formázott fread()//fwrite()//adatcsomagok (blokkok) b. optikai adattárak és működésük ----- Felületükön az egyes biteket spirális vonalban elhelyezkedő kiemelkedések és a köztük lévő sík területek reprezentálják. Az olvasás elve az, hogy a lemezt letapogató infravörös lézersugár a felületről visszaverődve különböző időben (fázisban) érkezik vissza az érzékelőhöz, attól függően, hogy kiemelkedés vagy térköz haladt el alatta. c. adatbázis, adattárolási formák, módszerek ----- Adatbázis: egymással valamilyen kapcsolatban lévő adatok jól szervezett halmaza, ahol az adatok számítógépen vannak tárolva úgy, hogy egyidejűleg több felhasználó is hozzáférhet. Adatbázis-kezelő rendszer: olyan programcsomag, mely biztosítja az adatbázissal való kapcsolatot. Lehetővé teszi adatbázisok létrehozását, adatok lekérdezését, módosítását, karbantartását, nagy mennyiségű adat hosszú távú, biztonságos tárolását.