Végh János Bevezetés a számítógépes rendszerekbe programozóknak
|
|
- Lídia Hajdu
- 7 évvel ezelőtt
- Látták:
Átírás
1 Miskolci Egyetem... és Informatikai Kara Végh János Bevezetés a számítógépes rendszerekbe programozóknak Egy gyors körkép Copyright (J.Vegh@uni-miskolc.hu) V0.11@
2 Ez a segédlet a Bevezetés a számítógépes rendszerekbe tárgy tanulásához igyekszik segítséget nyújtani. Nagyrészt az irodalomjegyzékben felsorolt Bryant-O Hallaron könyv részeinek fordítása, itt-ott kiegészítve és/vagy lerövidítve, néha már jó tankönyvek illeszkedő anyagaival kombinálva. A képzés elején, még a számítógépekkel való ismerkedés fázisában kerül sorra, amikor előbukkannak a különféle addig ismeretlen fogalmak, és megpróbál segíteni eligazodni azok között. Alapvetően a számítógépeket egyfajta rendszerként tekinti és olyan absztrakciókat vezet be, amelyek megkönnyítik a kezdeti megértést. A bevezetett fogalmakat a képzés későbbi részében a különféle tárgyak keretében részletesen meg fogják ismerni. Ez az anyag még erőteljesen fejlesztés alatt van, akár hibákat, ismétléseket, következetlenségeket is tartalmazhat. Ha ilyet talál, jelezze a fenti címen. Az eredményes tanuláshoz szükség van az irodalomjegyzékben hivatkozott forrásokra, és az órai jegyzetekre, ottani magyarázatokra is.
3 A dokumentum másolása, terjesztése és/vagy módosítása engedélyezett a Szabad Szoftver Alapítvány által kibocsátott GNU Free Documentation License a, 1.2 verzió vagy későbbi változata alapján. A dokumentum anyaga nem változtatható, és a szerzői információnak minden bemutatáson láthatónak kell maradni Végh János (J.Vegh@uni-miskolc.hu) a
4 Tartalomjegyzék Tartalomjegyzék i 1 Egy gyors körkép Információ Fordítás A fordítás részletei Tárolt utasítások Hardveres felépítés A hello program futtatása A gyorsítótár A tárolóeszközök hierarchiája Az operációs rendszer Folyamatok Szálak Virtuális memória Fájl Kommunikáció a hálózaton át Fontos egyebek Konkurrens és párhuzamos Szál-szintű konkurrens végrehajtás Utasítás szintű párhuzamosság Egy utasítás, több adat párhuzamosság Számítógépes absztrakciók Összefoglalás Táblázatok jegyzéke 12 Ábrák jegyzéke 13 i
5
6 FEJEZET 1 Egy gyors körkép A számítógépes rendszerek világával ismerkedve, nagyon sok új és ismeretlen fogalommal találkozunk. Rendkívül nehezen tudjuk elválasztani a még fontos részletet az esetleg érdekes, de az adott pillanatban nem nélkülözhetetlentől. Ez a segédlet azoknak készült, akik most kezdenek ismerkedni a területtel, és szeretnék megtanulni, hogyan lehet a nagyrészt állandó elvek felhasználásával eligazodni a számítógép programozás nagyon gyorsan változó és rendkívül szerteágazó világában. Célkitűzésünk, hogy a hallgatók számítógép programozóként hatékonyabban tudják használni a számítógépes rendszereket, függetlenül attól, hogy rendszer-, adatbázisvagy WEB-programozóként dolgoznak, netán fordítóprogramot írnak, hálózati alkalmazást vagy beágyazott rendszert készítenek. Magát a túrát [1] alapján, az ott megadott útvonalon tesszük, de jelentősen csökkentve a tárgyalás részletességét. A könyv szerzői az anyagot mindazoknak ajánlják, akik meg akarják érteni (kezdetben inkább csak felszínesen), mi megy végbe egy számítógépes rendszerben a színalak mögött. Későbbi tanulmányaikban az itt éppen csak érintett témákat részletesen tanulmányozni fogják. Látszólag hardver témákat érintünk, de nem konstruktőri, hanem programozói szempontból: hogyan készíthetünk hatékonyabb, gyorsabb programokat a jól megismert tulajdonságú hardverekre. Alapvetően Linux és C (vagy C++) ismereteket használunk, és gyakorlatilag nem tételezünk fel előzetes hardver vagy gépi/assembly kódolási ismereteket sem. Programozni természetesen csak programozás közben lehet megtanulni. Akinek még nem stabil és készség szintű a tudása, azoknak nagyon érdemes beható ismeretséget kötni a [4] könyvecskével. Számítógép mellett érdemes olvasni, és azonnal kipróbálni a programozási példákat. Mint oly sok más területen, a számítógépes világban is nagyon jól használható egy absztrakt, a bonyolult rendszert többé-kevésbé jól szintekre bontó megközelítés 1. A segédletben ilyen szemlélet alapján, de a jóval kisebb terjedelemnek megfelelően kevésbé részletesen tekintjük át, és főként nem belebonyolódva a részletekbe. Az egyes szintek megismerésére nem mindig a feltüntetett sorrendben kerítünk sort, hanem ahogyan az céljaink és a már megszerzett ismereteink alapján lehetséges. A bevezető jellegű anyagban nem követelünk meg előismeretet, de támaszkodunk a korábban megismertekre, és azokat csak ismétlés jelleggel megemlítjük. Bemelegítésként megismerkedünk a "kis ember számítógépe" model- 1 Főként [8] alapján 1.1. ábra. Egy tipikus számítógéprendszer rétegmodellje [8] 2014 lel[2, 3], amit érdemes figyelmesen tanulmányozni, mivel nagyon szemléletesen vezeti be a számítógéppel kapcsolatos fogalmakat, bár konkrét technikai megvalósítást nem tartalmaz. A második fokozatban egy félkész elemekből sajátkezűleg elkészítendő számítógépet ismertetünk [5, 6, 7], ami már konkrét technikai megvalósítást ismertet. Valóban megépíthető és működőképes, de mi csak szimulációs szinten fogjuk használni. Ez már szinte minden főbb olyan elemet tartalmaz, amit a mai processzorokban is alkalmaznak, de mindenből csak a minimumot. Ennek következtében nagyon könnyű átlátni és használni egyszerű feladatok megértésére, megtanulhatjuk használni az elemi gépi utasításokat, de komoly feladatokat csak nagy nehézségek árán lehet vele megoldani. Nagy hátránya, hogy nincs magas szintű támogatása, így nem lehet vele a számítógép magas szintű nyelvein készített programok alacsony szintű következményeit megtanulni. Nagyon kiváló gyakorlati segédeszközök állnak rendelkezésre, gyakran fogjuk használni a [5] oldalról letölthető szimulátort. Az eredményes tanuláshoz sok önálló foglalkozásra is szükség van. 1
7 2 FEJEZET 1. EGY GYORS KÖRKÉP Harmadik fokozatként megismerkedünk napjaink asztali és hordozható számítógépekben használt leggyakoribb processzorának, az Intel x86 családjának tulajdonságaival és programozásával. A rendelkezésre álló rövid idő alatt nem tudjuk teljes részletességgel tárgyalni az utasításkészletét, felépítését, stb, de a felületes megismerkedés alapján is sok hasznos ismeretet tudunk szerezni, és a tanulást a következő félév gyakorlataival fogjuk kiteljesíteni. Ehhez eleinte a DOSbox szimulátor programot fogjuk használni (hogy kiküszöböljük az operációs rendszer által okozott jelenségeket), majd áttérünk a valódi (Linux) rendszer alatt futó programok használatára. A programíráskor egyértelműen a C nyelvet használjuk (a Java használatában gyakorlottaknak nagyon ajánlott a mutatók, a dinamikus tárterület foglalás, stb. használatának felelevenítése, ami nincs a Java alatt). Hogy a jelen segédlet még elviselhető terjedelmű legyen, a gyakorló feladatok (és azok kapcsolódó útmutatásai) külön segédletbe kerültek. Ezt a két segédletet egymást kiegészítve és támogatva kell használni. Ismét hangsúlyozzuk, hogy a megértés kulcsa a végrehajtás és a gyakorlás. A gyakorlókönyv a legtöbb esetben tartalmazza a megoldást. Azt csak saját megoldásunk ellenőrzésére érdemes használni, nem helyettesíti az önerőt. Egy számítógépes rendszer hardver és szoftver elemekből áll, amelyek együttműködve felhasználói programozásokat futtatnak. A rendszer tényleges megvalósítása idővel változik, de az alapvető elvek nem. Valamennyi számítógép hasonló elemekből áll és a szoftver elemek is hasonló feladatokat látnak el. Azt fogjuk megismerni, hogyan lehet mindezeket hatékonyan felhasználni, és ezek a komponensek hogyan befolyásolják programjaink helyességét és hatékonyságát. Azért érdemes mindezt megtanulnia, hogy szakmáját értő programozóvá ("power programmer") váljon, aki érti a használt számítógépes rendszer működését és annak hatását a készített programra. Valamennyi, a C nyelvet tanító kurzuson szerepel az 1.1 program. Bár maga a program rendkívül egyszerű, egy számítógépes rendszer valamennyi részének összehangoltan kell működnie a sikeres végrehajtásához. Bizonyos értelemben, a kurzus célja annak bemutatása, mi történik pontosan, amikor ez a hello program lefut. Programlista 1.1: A "Hello Világ" program forráskódja # include <stdio.h> int main () { printf (" hello, } world \n"); Azzal kezdjük, hogy nyomon követjük a hello programot, kezdve azzal, hogy a programozó megírja, egészen addig, hogy fut a rendszeren, kinyomtatja ezt az egyszerű üzenetet és befejeződik. Közben pedig bevezetjük a kulcsfontosságú fogalmakat és a terminológiát, valamint a használt fontosabb komponenseket. Később majd részletesen is megismerkedünk velük. Megtanuljuk hogyan kerülhetjük el a számítógépes számábrázolásból fakadó furcsa numerikus hibákat milyen trükkökkel optimalizáljuk programunkat a modern processzorok és memóriák használatával hogyan valósítja meg a fordítóprogram az eljárás hívásokat és ez hogyan teszi sebezhetővé a hálózati szoftvereket hogyan kerülheti el a program összecsatoláskor keletkezhető csúnya hibákat hogyan kell saját parancs értelmezőt, memóriafoglalást vagy WEB kiszolgálót írni megismerjük a sokmagos processzorok használatakor mind fontosabb konkurrens programozást 1.1. Információ = bitek + értelmezés A mi hello programunk forrás fájlként (source program, forrás kód) kezdi pályafutását, amit a programozó egy szerkesztővel hoz létre és a hello.c szöveg fájlban ment el. A forrás kód egyszerűen bitek sorozata, amelyek egyenként 0 vagy 1 értéket vehetnek fel, és amelyeket 8 bites darabokba (bájtok) szervezünk. Minden egyes bájt a program egy szöveg karakterét ábrázolja táblázat. A hello.c program (lásd 1.1 programlista) ábrázolása ASCII szövegként # i n c l u d e <sp> < s t d i o h > \n \n i n t <sp> m a i n ( ) \n { \n <sp> <sp> <sp> <sp> p r i n t f ( " h e l l o, <sp> w o r l d \n " ) ; \ n } A legtöbb modern rendszer ASCII szabványú karakterekkel ábrázolja a szöveget, amely szabvány az egyes karaktereket egyedi, bájt méretű egész értékekkel ábrázolja. A ctexthello.c programot egy fájlban bájtok sorozataként tároljuk, lásd 1.1 táblázat. Az egyes bájtok egész értékek, amelyek egy bizonyos karakternek felelnek meg. Például, az első bájt 35, ami a # karakternek felel meg. A második bájt értéke a 105 egész szám, ami az i betű megfelelője, és így tovább. Vegyük észre, hogy az egyes szöveg sorokat a "láthatatlan" uj sor@új sor (newline, \n ) karakter határolja, amelyet a 10 érték ábrázol. A hello.c -hez hasonló fájlokat, amelyek kizárólag ASCII karaktereket tartalmaznak, szövegfájlnak (text file) nevezzük, minden más fájlt pedig bináris fájlnak (binary file). A hello.c reprezentációja egy nagyon fontos elképzelést mutat be: egy rendszerben minden információt beleértve a mágneslemez állományokat, a memóriában tárolt programokat és felhasználói adatokat, a hálózaton átvitt adatokat egy kupac bitként ábrázolunk. Ami a különböző adat objektumokat megkülönbözteti, az az értelmezés, amelyet hozzájuk fűzünk. Különböző összefüggésben ugyanaz a bájt sorozat jelenthet egy egész számot, egy lebegőpontos számot, egy karakter sztringet, vagy gépi utasítást. Programozóként meg kell értenünk a számok számítógépes ábrázolását, mivel az nem ugyanaz, mint az egész vagy valós szám. Ezek mindegyike egy véges közelítés, amelyik teljesen váratlan módon is viselkedhet. Ezt majd a következő fejezetben tárgyaljuk.
8 A processzor tárolt utasításokkal dolgozik Programot programmal fordítunk A hello program tehát magas szintű C nyelven megírt programként kezdi életét, mivel az emberek ilyen formában tudják megérteni és kezelni. Ahhoz azonban, hogy a hello.c programot futtassuk egy rendszerben, az egyes C utasításokat más programokkal le kell fordítanunk gépi utasítások sorozatává. Ezeket az utasításokat aztán végrehajtható fájlba fűzzük össze és bináris fájlként tároljuk a mágneslemezen. Egy Unix rendszeren a forráskódot objekt fájllá egy fordítóprogram felhasználásával alakítjuk át: unix> gcc o hello hello.c Ennek az utasításnak a hatására a GCC fordítóprogram beolvassa a hello.c forrás fájl tartalmát és azt a hello végrehajtható objekt kóddá fordítja. Ez a folyamat négy fázisban megy végbe, lásd 1.2 ábra. Előfeldolgozás (preprocessing phase) Az előfeldolgozó (cpp) az ún. direktívák (a # karakterrel kezdődő sorok) által meghatározott módon módosítja az eredeti C programot. Például az #include <stdio.h> utasítássor hatására az előfeldolgozó beolvassa a stdio.h rendszer fejzet fájlt, és annak tartalmát közvetlenül ennek a sornak a helyére helyettesíti. Ennek eredményeként egy másik C program keletkezik, tipikusan.i kiterjesztéssel. Magas szintű fordítás (compilation phase) A fordítóprogram (cc1) a hello.i szövegfájlt a hello.s szövegfájlba fordítja le, ami már egy ún. assembly nyelvű programot fog tartalmazni. Az assembly nyelvű program egyes utasításai sztenderd szöveges formátumként pontosan leírnak egy alacsony szintű gépi utasítást. Az assembly nyelv azért hasznos, mert a különféle magas szintű nyelvek fordítóprogramjai számára közösen használható kimeneti nyelvet biztosít. Gépi fordítás (assembly phase) Ezután az assembler fordító (as) a hello.s tartalmát gépi utasításokká fordítja, és azokat az athelyezheto objekt program@áthelyezhető objekt programként ismert formába helyezi el, a hello.o fájlba. Ez a hello.o olyan bináris fájl, amelynek bájtjai a gépi utasítások kódját és nem pedig karaktereket taralmaznak. Csatolás (linking phase) Vegyük észre, hogy a hello program meghívja a printf függvényt, ami a minden C fordítóprogramhoz tartozó sztenderd C könyvtár része. A printf függvény egy különálló, előre lefordított printf.o objekt fájlban található meg, amit valahogyan össze kell kapcsolnunk saját hello.o programunkkal. A csatoló (linker, ld) végzi el a csatolás feladatát. Ennek eredménye a hello fájl, amelyik egy végrehajtható objekt program (végrehajtható állomány), azaz betölthető a memóriába és azt a rendszer végre tudja hajtani Érdemes megérteni a fordítás részleteit A hello.c programhoz hasonló "bonyolultság" esetén bízhatunk benne, hogy a fordítóprogram helyes és hatékony programot készít. Van azonban pár általános indok, miért érdemes megérteni a fordító rendszer működését: A program működés optimalizálása A modern fordítóprogramok bonyolult eszközök, amelyek általában jó kódot készítenek. Ahhoz, hogy hatékony kódot írhassunk, meg kell értenünk a fordítóprogram belső működését. Viszont ahhoz, hogy jó kódolási döntéseket hozzunk C programunkban, legalább a gépi kódolás alapjait meg kell ismerni, valamint tudnunk kell, a C fordító hogyan fordítja le a C utasításokat gépi kóddá. Például, egy switch utasítás mindig hatékonyabb, mint if-else utasítások sorozata? Mennyi többlet tevékenységet okoz egy függvényhívás? Egy while ciklus hatékonyabb, mint egy for ciklus? A mutatóval való hivatkozás hatékonyabb, mint egy tömb indexelése? Miért fut egy ciklus sokkal gyorsabban, ha az összeget egy helyi változóban gyűjtjük, és nem egy hivatkozásként átadott változóban? Miért fut gyorsabban egy függvény, ha egyszerűen átrendezzük a zárójeleket egy aritmetikai kifejezésben? Hogyan befolyásolja a program futás gyorsaságát számítógépünk memóriájának szerkezete? Csatolási hibák megértése Tapasztalatunk szerint a legzavarbaejtőbb hibák a csatoló program működésével kapcsolatosak, különösen ha nagyobbacska szoftver rendszert építünk. Például, mit jelent, ha a csatoló hibajelentése szerint nem lehet feloldani egy hivatkozást? Mi a különbség egy statikus és egy globális változó között? Mi történik, ha különböző C fájlokban két globális változót ugyanazzal a névvel definiálunk? Mi a különbség egy statikus és egy dinamikus könyvtár között? Miért számít az, milyen sorrendben adjuk meg a könyvtárakat a parancssorban? És a legfurcsább: bizonyos csatolási hibák miért csak futási időben nyilvánulnak meg? Biztonsági lyukak elkerülése Sok éven át a puffer túlcsordulás sebezhetőség számított a hálózatok és az Inernet szerverek fő biztonsági problémájának. Ennek a legfőbb oka, hogy csak kevés programozó értette meg, hogy a megbízhatatlan forrásból származó adatok mennyiségét és formáját korlátozni kell. A biztonságos programozáshoz vezető út első lépése, hogy meg kell érteni annak következményeit, hogy a program veremtárolójában adat és vezérlő információt tárolunk. Megismerjük a veremtároló működési elvét és a puffer túlcsordulás okozta sebezhetőséget, assembly szinten. Megtanuljuk, hogy a programozó, a fordítóprogram és az operációs rendszer hogyan tudja csökkenteni a támadás lehetőségét A processzor tárolt utasításokkal dolgozik Eddig tehát hello.c forrásprogramunkat a fordító rendszer lefordította a hello nevű végrehajtható objekt fájllá, amit a mágneslemezen tárolunk. Hogy futtatni tudjuk programunkat egy Unix rendszeren, leírjuk annak nevét egy parancsértelmező felhasználói programban (shell): unix>./hello hello, world unix> A parancsértelmező kinyomtat egy ún. prompt jelzést (annak jeléül, hogy készen áll parancs végrehajtására), meg-
9 4 FEJEZET 1. EGY GYORS KÖRKÉP 1.2. ábra. A számítógépes fordításhoz használt rendszer várja, amíg leírjuk az utasítássort és végrehajtja az utasítást. Ha az első sor nem értelmezhető beépített utasításként, a parancsértelmező azt tételezi fel, hogy az egy végrehajtható fájl neve, amit be kell tölteni a memóriába és le kell futtatni. Ezt megteszi, majd megvárja, amíg az befejeződik. A hello program kinyomtatja az üzenetet és befejeződik. Ezután a parancsértelmező ismét jelzi a futáskészségét egy prompt kiírásával, és várja a következő utasítást A rendszer hardveres felépítése Hogy megértsük, mi is történik, amikor futtatjuk a hello programot, meg kell értenünk, hogy milyen hardver felépítésű egy tipikus rendszer, lásd 1.3 ábra. Ezen a képen egy Intel Pentium alapú rendszer modellje látható, de valamennyi rendszer hasonlónak látszik és hasonlóan működik. A részleteket majd később fogjuk megérteni ábra. Egy tipikus rendszer hardveres felépítése. CPU: Central Processing Unit, ALU: Arithmetic/Logic Unit, PC: Program counter, USB: Universal Serial Bus. A számítógép sín rendszere (vagy más néven busz rendszere) olyan vezetékekből áll, amelyek az elektromos jeleket szállítják az egyes komponensek között. A sínrendszereket tipikusan úgy tervezik, hogy a bájtok többszörösének megfelelő rögzített méretű darabokat (ezeket nevezzük szavaknak) szállítanak. A szóban található bájtok száma (a szó mérete) fontos paraméter, ami eltér a rendszerek között. A legtöbb mai számítógép 4 bájtos (32 bites) vagy 8 bájtos (64 bites) szó hosszal rendelkezik. Az egyszerűség kedvéért a továbbiakban 4 bájtos hosszúságot tételezünk fel, valamint hogy a busz egyidejűleg csak egy szót tud átvinni. A rendszer be/kiviteli (I/O) eszközökön át kapcsolódik a külvilághoz. A példában szereplő rendszernek négy I/O eszköze van: billentyűzet (keyboard) és egér (mouse) a felhasználói adatbevitelhez, kijelző (display) az adatmegjelenítéshez, és mágneslemez egység (disk drive) az adatok hosszú távú tárolására. Kezdetben a hello program a mágneslemezen van. Az egyes I/O eszközök egy vezérlőn (controller) vagy adapteren át kapcsolódnak az I/O sínrendszerhez. A kettő közötti különbség lényegében csak a tokozás. A vezérlők olyan áramköri elemek, amelyek vagy magában az eszközben vagy a rendszer fő nyomtatott áramköri lapján (anyakártya avagy motherboard) találhatók. Az adapter pedig olyan kártya, ami az anyakártya csatlakozójához kapcsolódik. Mindkettő célja, hogy adatot szállítson az I/O sínrendszer és az I/O eszköz között. A fő memória olyan átmeneti tároló, amelyik mind a programot, mind az általa kezelt adatokat tárolja, amíg a programot a processzor végrehajtja. Fizikailag a fő memória véletlen hozzáférésű memória áramkörökből (dynamic random access memory, DRAM) épül fel. Logikailag a memória egy lineáris bájt tömbnek tekintendő, ahol minden bájtnak saját egyedi címe van (a tömb index), mely nullától kezdődik. A programot alkotó egyes gépi utasítások általában eltérő számú bájtból állnak. A C program változóinak megfelelő adat elemek mérete azok típusának megfelelően változik. Például, egy Linuxot futtató IA32 számítógépen a short típusú adat két bájtot igényel, a int, float és long típusú adatok négy bájtot, a double típusúak pedig nyolc bájtot. A központi feldolgozó egység (avagy central processing unit, CPU) az a feldolgozó "motor" amelyik értelmezi (vagy végrehajtja) a fő memóriában tárolt utasításokat. Ebben központi szerepet játszik egy szó-méretű tároló (avagy regiszter), a program számláló (program counter, PC). A PC bármely pillanatban a főmemóriában valamely gépi kódú utasításra mutat (annak a címét tartalmazza). Attól a pillanattól kezdve, hogy a rendszernek tápfeszültséget adunk, amíg azt ki nem kapcsoljuk, a processzor folyamatosan végrehajtja a programszámláló által kijelölt utasítást és frissíti a programszámlálót, hogy az a következő utasításra mutasson. A processzor nagyon egyszerű utasítás végrehajtási modell szerint dolgozik, amit az utasítás készlet szerkezete (instruction set architecture) határoz meg. Ebben a modell-
10 1.4. TÁROLT UTASÍTÁSOK 5 ben az utasítások szigorú sorrend szerint hajtódnak végre és egy utasítás végrehajtása egy lépés sorozat elvégzését jelenti. A processzor beolvassa az utasítást a programszámláló (PC) által kijelölt memória címről, értelmezi az utasítást, elvégzi az utasítás által előírt egyszerű műveletet, majd frissíti a PC értékét, hogy az a következő utasításra mutasson, ami vagy a memóriának az utasítás helyét követő sorszámú helye, vagy egészen más érték. Csak pár ilyen egyszerű művelet van, amelyek a fő memóriával, a regiszter tömbbel (register file) és az aritmetikai/- logikai egységgel (arithmetic/logic unit, ALU) foglalkoznak. A regiszter tömb egy olyan kisméretű tároló, amely szó méretű regiszterekből áll és mindegyiknek saját neve van. Az ALU számítja ki az új adatok és címek értékét. Pár példa, milyen egyszerű műveleteket hajthat végre a CPU egy utasítás hatására: Betöltés (Load) egy bájtot vagy szót a fő memóriából egy regiszterbe másol, a regiszter előző tartalmát felülírva Eltárolás (Store) Egy bájtot vagy szót másol egy regiszterből a fő memóriába, a memória előző tartalmát felülírva Művelet (Operate) két regiszter tartalmát az ALU-ba másolja, a két szóval arimetikai műveletet végez, majd az eredményt egy regiszterbe menti, a regiszter előző tartalmát felülírva Ugrás (Jump) Magából az utasításból következtet egy egy szó hosszúságú értéket, azt a szót a programszámlálóba másolja, felülírva a PC előző értékét. Azt mondjuk ugyan, hogy a processzor egyszerűen az utasításkészletének a tényleges megvalósítása, de valójában a modern processzorok összetett mechanizmusokat használnak a program végrehajtás felgyorsítására. Ennek megfelelően megkülönböztetjük a proceszor utasításkészlet architektúrát, amely az egyes mikroutasítások hatását írja le, a processzor mikroarchitektúrájától, amely a processzor tényleges megvalósítása A hello program futtatása A számítógépes rendszerek szerkezetének és működésének eddig megismert részleteivel már elkezdhetjük megérteni, mi történik, amikor futtatjuk példa programunkat. Néhány (a későbbiekben megismerendő) részlettől eltekintve, már képesek vagyunk egyfajta "madártávlati" képet adni. Kezdetben a parancsértelmező (shell) hajtja végre saját utasításait, arra várva, hogy begépeljünk egy utasítást. Amint begépeljük a "./hello" karaktereket a billentyűzeten, a parancsértelmező beolvassa azokat egy regiszterbe, és eltárolja a memóriába, lásd 1.4 ábra ábra. A végrehajtható fájl betöltése a mágneslemezről a fő memóriába. Amikor lenyomjuk az "enter" gombot a billentyűzeten, a parancsértelmező tudomásul veszi, hogy befejeztük az utasítás begépelését. Ezután a parancsértelmező betölti a végrehajtható hello fájlt, egy olyan utasítássorozat végrehajtásával, amelyik a hello objekt fájl kódját és adatait bemásolja a mágneslemezről a fő memóriába. Az adatok között van az a hello, world\n karakterfüzér (string), amit esetleg kinyomtatunk. Ebben az esetben a közvetlen memóriaelérés (direct memory access, DMA) nevű technika segítségével az adatok a mágneslemezről közvetlenül a fő memóriába kerülnek, a processzoron való áthaladás nélkül, lásd 1.5 ábra ábra. A hello utasítás beolvasása a billentyűzetről ábra. A kimenő szöveg kiírása a memóriából a képernyőre. Amikor a hello program kódja és adatai betöltődtek a memóriába, a processzor elkezdi a hello program gépi kódú
11 6 FEJEZET 1. EGY GYORS KÖRKÉP utasításainak végrehajtását. Ezek az utasítások a hello, world\n szöveg bájtjait a memóriából a regiszter tömbbe másolják, onnét pedig a kijelzőre, aminek következtében azok láthatóvá válnak a képernyőn, lásd 1.6 ábra A gyorsítótár is számít el, mint az L1 gyorsítótár, de ez még mindig 5-10-szerese a fő memória elérésének. Az L1 és L2 gyorsítótárakat a static random access memory (SRAM) technológiával készítik. Az újabb rendszerek három szintű gyorsítótárat használnak: L1, L2, és L3. A gyorsítótár mögött az az ötlet áll, hogy a rendszer jó hasznát látja mind a nagyon nagy memóriának, és az ún. lokalitás (azaz, hogy a program jól lokalizálható helyről veszi a következő adatokat és kódot) kihasználásával a nagyon gyors memóriának is. Ha a gyorsítótárat úgy tudjuk beállítani, hogy az tartalmazza a várhatóan gyakran használt adatokat és kódokat, a legtöbb memória műveletet a gyorsítótár felhasználásával tudjuk elvégezni. Az egyik legfontosabb következtetés, hogy az alkalmazói programok írói, ha jól tudják használni a gyorsítótárat, nagyságrenddel gyorsabb programot tudnak készíteni ábra. Gyorsítótárak. Fontos tanulság ebből az egyszerű példából, hogy a rendszer sok időt tölt azzal, hogy információt mozgasson egyik helyről a másikra. A hello programban levő gépi utasításokat eredetileg a mágneslemezen tároltuk. Amikor a programot betöltjük, ezeket bemásoljuk a fő memóriába. Amikor a processzor futtatja a programot, ezeket az utasításokat a fő memóriából a processzorba másolja. Hasonlóképpen, a hello,world\n adatfüzér, amit eredetileg a mágneslemezen tároltunk, bemásolódik a fő memóriába, majd a fő memóriából a kijelző eszközre. A programozó szempontjából, eme másolások jelentős része csak olyan többlet tevékenység (overhead), ami lelassítja a program "valódi munkáját". Emiatt a rendszer tervezők fő célja, hogy ezeket a másolási műveleteket a lehető leggyorsabban végre lehessen hajtani. A fizikai törvények miatt, a nagyobb tárolóeszközök lassúbbak, mint a kisebbek. A gyorsabb eszközök pedig többe kerülnek, mint a megfelelő lassúbb változatok. Például, egy tipikus mágneslemez tároló kapacitása 1000-szer nagyobb lehet, mint a fő memóriáé, de a processzor akár 10,000,000- szor lassabban tud egy szót a mágneslemezről elővenni, mint a memóriából. Hasonlóképpen, egy tipikus regiszter tömb csak pár száz bájtnyi információt tárol, szemben a fő memória néhány milliárdnyi bájtjával. A processzor azonban csaknem százszor gyorsabban tudja a regiszter tömbből olvasni az adatokat, mint a memóriából. Még ennél is rosszabb, hogy a félvezető technológia fejlődésével ez a szakadék a processzor és a memória között tovább mélyül. Egyszerűbb és olcsóbb a processzorokat gyorsítani, mint a memóriákat. A szakadék mélységének csökkentésére a rendszer tervezők kisméretű gyors tároló eszközöket, gyorsítótárat (cache memories vagy egyszerűen cache) helyeznek el a processzorban, amelyek olyan információk átmeneti tárolására használhatók, amely információkra a processzornak várhatóan szüksége lesz a közeli jövőben. Az 1.7 ábra egy ilyen, gyorsítótárral ellátott rendszert mutat. A processzor chipben levő L1 gyorsítótár pár tízezer bájtot tartalmaz és csaknem ugyanolyan gyorsan lehet elérni, mint a regisztertömböt. A nagy L2 gyorsítótár pár százezer... pár millió bájtot tartalmaz és egy speciális busszal kapcsolódik a processzorhoz. Az L2 gyorsítótár ötször lassabban érhető 1.6. A tárolóeszközök hierarchiája 1.8. ábra. Példa a memória hierarchiára. Az az ötlet, hogy egy kisebb, de gyors tárolóegységet (azaz gyorsítótárat) tegyünk a processzor és a nagy eszköz (pl. fő memória) közé, általánosnak érvényű. Valójában minden számítógépes rendszerben a tárolóeszközök olyan hierarchiába szervezettek, lásd 1.8 ábra. Ahogyan a hierarchia tetejétől az alja felé haladunk, az eszközök egyre lassúbbá, nagyobbá és fajlagosan (bájtonként) olcsóbbá válnak. A hierarchia tetején a regiszter tömb található, 0. szint (L0) néven. Ezt az 1-3 szinten található L1-L3 gyorsítótárak követik. A fő memória van a négyes szinten, és így tovább. A memória hierachia lényege, hogy egy szint gyorsítótárként szolgál a következő alacsonyabb szint számára. Azaz, a regiszter tömb az L1 gyorsítótár gyorsítótára. Az L1 és az L2 gyorsítótár az L2 és L3 gyorsítótár számára. Az L3 gyorsítótár gyorsítja a fő memória működését, ami viszont a mágneslemez gyorsítótára. A hálózatba kapcsolt számítógépek elosztott fájlrendszere számára a helyi mágneslemez a hálózat többi számítógépe mágneslemezének a gyorsítótára A hardvert kezelő operációs rendszer Térjünk vissza a hello példánkhoz. Amikor a parancsértelmező betöltötte a hello programot, és a hello program kinyomtatta az üzenetét, a program a billentyűzet, a kijelző,
12 1.7. AZ OPERÁCIÓS RENDSZER ábra. A számítógépes rendszer rétegszerkezete. a mágneslemez vagy a fő memória egyikével sem lépett közvetlenül kapcsolatba. Ehelyett az operációs rendszer szolgáltatásaira hagyatkoztak. Az operációs rendszert olyan szoftver rétegnek tekinthetjük, amelyik az alkalmazói program és a hardver között helyezkedik el, lásd 1.9 ábra. A felhasználói program kizárólag az operációs rendszeren keresztül férhet hozzá a hardverhez. Az operációs rendszernek kettős célja van: a hardvert megvédeni egy elszabadult alkalmazás kártevésétől az alkalmazások számára egyszerű és egységes mechanizmust kínálni a bonyolult és típusonként erősen eltérően kezelendő alacsony szintű eszközök kezelésére ábra. Az operációs rendszer által biztosított absztrakciók Az operációs rendszer ezt a két célt az 1.10 ábra szerinti absztrakciók alkalmazásával éri el: bevezeti a folyamat, a virtuális memória és a fájl fogalmát. Amint azt az ábra sugallja, a fájlok az I/O eszközök, a virtuális memória a fő memória és a mágneslemez I/O eszközök, a folyamat pedig a processzor, a fő memória és az I/O eszközök absztrakciója. Vegyük sorra ezeket Folyamatok ábra. A folyamatok környezetváltása Amikor egy program, például a hello, fut egy modern rendszerben, az operációs rendszer igyekszik azt a látszatot kelteni, hogy az operációs rendszer számára ez az egyetlen folyamat létezik. Úgy tűnik, a program kizárólagosan használja a processzort, a fő memóriát és az I/O eszközöket. Úgy tűnik, hogy a processzor a program utasításait hajtja végre, egyiket a másik után, megszakítás nélkül. Továbbá, hogy a program kódja és adatai az egyetlen objektum a rendszer memóriájában. Ezt az illúziót a folyamat (process) szolgáltatja, ami a számítógép tudomány egyik legfontosabb és legsikeresebb fogalma. A folyamat (process) egy futó program absztrakciója az operációs rendszerben. Egyazon rendszerben több folyamat is futhat konkurrens módon, és mindegyik folyamat látszólag kizárólagosan használja a hardvert. A konkurrens végrehajtás alatt azt értjük, hogy az egyik folyamat utasításai közé beiktatódnak egy másik folyamat utasításai. A legtöbb rendszerben több folyamat van, mint olyan CPU, amelyen futhatnak. A hagyományos rendszerek egyidejűleg csak egyetlen programot futtathatnak, az újabb többmagos processzoros rendszerek viszont több programot képesek egyidejűleg futtani. Ilyen esetekben a CPU több folyamatot futtat konkurrens módon, a processzort a folyamatok között kapcsolgatva. Ezt az operációs rendszer végzi, a környezet átkapcsolás (context switching) mechanizmus használatával. A továbbiakban az egyszerűség kedvéért egyprocesszoros, egyetlen CPUt tartalmazó rendszereket vizsgálunk. Az operációs rendszer nyomon követi azt az állapot információt, ami ahhoz szükséges, hogy a folyamat futni tudjon. Ez az állapot, amit környezetként (context) is ismernek, olyan információt tartalmaz, mint a PC aktuális értéke, a regiszter tömb, és a fő memória tartalma. Bármely időpillanatban, egy egyprocesszoros rendszer csak egyetlen folyamat kódját képes végrehajtani. Amikor az operációs rendszer úgy dönt, hogy a vezérlést az aktuális folyamatból egy másikba viszi át, egy környezet váltást (context switch) végez, amelynek során elmenti a jelenlegi folyamat környezetét, visszaállítja az új folyamat környezetét és a vezérlést az új folyamatnak adja át. Az új folyamat ilyen módon pontosan ott folytatja, ahol előzőleg abbahagyta. Az elképzelést a hello példaprogram esetén az 1.11 ábra mutatja. Példánkban két konkurrens folyamat szerepel: a parancsértelmező (shell) folyamat és a hello folyamat. Kezdetben a parancsértelmező folyamat egyedül fut, és arra vár, hogy a parancssorból adat bemenetet kapjon. Amikor a hello program futtatását kérjük, a parancsértelmező egy rendszerhívásként ismert speciális függvény meghívásával hajtja azt végre, amely rendszerhívás a vezérlést az operációs rendszernek adja át. Az operációs rendszer elmenti a parancsértelmező környezetét, létrehozza a hello folyamatot és annak környezetét, majd átadja a vezérlést az új hello folyamatnak. Miután hello befejeződik, az operációs rendszer visszaállítja a parancsértelmező környezetét és visszaadja annak a vezérlést, miután az várja a következő utasítássort. A folyamat absztrakció megvalósítás szoros együttműködést igényel az alacsony szintű hardver és az operációs rendszer szoftver között Szálak Bár rendesen úgy gondolunk a folyamatra, hogy annak egyetlen vezérlési folyama van, a modern rendszerekben egy folyamat több végrehajtási egységből (ún. szálból, thread) állhat, amely szálak mindegyike a folyamat környezetét használva fut és ugyanazokat a globális adatokat és kódot használja. A szál alapú programozás növekvő jelentőségű, mivel a konkurrens feldolgozásra nagyon sok helyen szükség van, és sokkal könnyebb közöttük adatokat megosztani, mint folyamatok között, továbbá jóval hatékonyabb megvalósításuk is. A többszálú megvalósítás
13 8 FEJEZET 1. EGY GYORS KÖRKÉP jó lehetőséget kínál arra is, hogy gyorsítsuk programunk futását, ha több processzor áll rendelkezésünkre Virtuális memória a math könyvtár. A megosztott könyvtár nagyon hatékony, de nem egyszerű koncepció. Verem memória (Stack) A verem memória tetején található a felhasználói verem memória, amit a fordítóprogram függvényhívások megvalósítására használ. A heap memóriához hasonlóan, a felhasználói verem memória is dinamikusan kiterjed és összehúzódik a program végrehajtása során. Nevezetesen, minden függvény híváskor kiterjed és minden visszatéréskor összehúzódik. Kernel virtuális memória A kernel az operációs rendszer azon része, amelyik mindig a memóriában található. A memória címtér felső része a kernel számára van fenntartva. A felhasználói programok számára nem engedélyezett ezt a memóriaterületet közvetlenül írni és olvasni, vagy onnét függvényt hívni. A virtuális memória működéséhez a hardver és az operációs rendszer szoftver bonyolult kölcsönhatására van szükség, amelybe beletartozik a processzor által előállított címek mindegyikének hardveres "lefordítása" is. Az alapötlet, hogy a folyamat virtuális memóriáját mágneslemezen tároljuk, majd a fő memóriát használjuk a mágneslemez gyorsítótáraként Fájl ábra. Egy folyamat virtuális címtere A virtuális memória olyan absztrakció, amely minden folyamatot azzal az illúzióval ruház fel, hogy az illető folyamat a fő memóriát kizárólagosan használja. Ennek megfelelően mindegyik folyamat egyformán látja a memóriát, amit saját virtuális címtérként kezel, pl. Linux esetén az 1.12 ábrán mutatott módon. Linux esetén a címtér legfelső része az operációs rendszer számára van fenntartva, ahol az operációs rendszer azon kód és adat részeit tárolja, amiket valamennyi folyamat közösen használ. A címtér alsó részében találhatók a felhasználói folyamat által definiált kód- és adat részek. Megjegyezzük, hogy az ábrán a címek alulról felfelé növekszenek. Az egyes folyamatok által látott virtuális címtér több jóldefiniált területből áll, amelyek meghatározott célt szolgálnak: Program kód és adat A kód valamennyi folyamat számára ugyanazon a rögzített címen kezdődik, ezt követik azok a memória helyek, amelyek globális C változóknak felelnek meg. A kód és adatterületek a végrehajtható objekt fájl (a hello) alapján kapnak kezdőértéket. Heap A kód- és adat területeket közvetlenül követi a futási időben használható dinamikus memória tartománya, a heap. A kód- és adat területektől eltérően, amelyeknek mérete a folyamat futásának elkezdésekor rögzítődik, a heap memória dinamikusan kiterjed és összehúzódik, a C sztenderd könyvtár olyan rutinjainak hatására, mint a malloc és a free. Megosztott könyvtárak A címtér közepe táján található egy olyan terület, amely olyan megosztott könyvtárakat tartalmaz, mint a sztenderd C könyvtár vagy A fájl (file) egy bájtsorozat, sem több, sem kevesebb. Valamennyi I/O eszközt, beleértve mágneslemezt, billentyűzetet, kijelzőt, sőt még a hálózatot is, fájlként modellezünk. A rendszerben valamennyi kivitel és bevitel fájlok írásával és olvasásával valósul meg, rendszerhívások egy kis csoportját használva (Unix I/O). A fájl eme egyszerű és elegáns fogalma nagyon hatékony is, mivel lehetővé teszi az alkalmazások számára, hogy a rendszerben előforduló különféle I/O eszközöket egyformán tekinthessük. Például, egy alkalmazás fejlesztő programozó, aki egy mágneslemez fájl tartalmát manipulálja, teljesen figyelmen kívül hagyhatja az éppen használt mágneslemez technológiát. Ezen kívül, ugyanaz a program különböző rendszereken, eltérő mágneslemez technológiák esetén is futni fog A rendszerek hálózaton kommunikálnak egymással Eddig a számítógépes rendszereket egyszerűen hardver és szoftver elemek egymástól elszigetelt összességének tekintettük. A gyakorlatban azonban a modern rendszerek egymással hálózaton keresztül össze vannak kapcsolva. Az egyedi rendszerek szempontjából a hálózat csupán egy másfajta I/O eszköznek tekintendő, lásd 1.13 ábra. Amikor az egyik rendszer egy bájt sorozatot másol a fő memóriából a hálózati adapterre, az adatfolyam az egyik gépről a másikra kerül, mondjuk, egy helyi mágneslemez helyett. Hasonló módon, a rendszer tud elolvasni olyan adatokat, amelyeket egy másik számítógép küldött, és azokat az adatokat a fő memóriába tudja másolni. Az Internet-szerű globális hálózatok fejlődésével az adatmásolás egyik számítógépről egy másikra a számítógépes rendszerek egyik fő alkalmazásává vált. Például, az elektromos levél vagy azonnali üzenet küldése, a World Wide Web,
14 1.9. FONTOS EGYEBEK Konkurrens és párhuzamos végrehajtás A digitális számítógépek történetében két igény szolgált állandó hajtóerőként a tökéletesítésben: hogy mind többet hajtsanak végre és hogy mind gyorsabban. Mindkét említett tényező javul, amikor a processzor több dolgot hajt végre egyidejűleg. A következőkben a konkurrens végrehajtás kifejezést használjuk, amikor egy rendszer többféle, egyidejű aktivitást végez, és párhuzamos végrehajtásról beszélünk, amikor a konkurrens végrehajtást a rendszer gyorsabb futtatására használjuk. A párhuzamosságot egy rendszerben többféle szinten is használhatjuk egy számítógép rendszerben. Az alábbiakban három szintű párhuzamosságra világítunk rá, a rendszer hiararchia legmagasabb szintjétől a legalacsonyabbig ábra. A hálózat egy másfajta I/O eszköz FTP és telnet mind a hálózaton át való másolás képességén alapulnak. Visszatérve hello példánkhoz, a szokásos telnet alkalmazást használva, a hello programot egy távoli számítógépen is futtathatjuk. Tételezzük fel, hogy a telnet klienst futtatjuk helyi számítógépünkön, hogy a megfelelő telnet kiszolgálót elérjük a távoli számítógépen. Miután bejelentkeztünk a távoli számítógépen és egy parancsértelmezőt futtatunk, a távoli parancsértelmező arra vár, hogy egy bemenő parancsot kapjon. Ettől a ponttól kezdve, a hello program távoli futtatása a 1.14 ábrán mutatott alapvető öt lépésből áll. Miután leírtuk a "hello" szöveget a telnet kliensnek és megnyomtuk az "enter" gombot, a kliens elküldi a sztringet a telnet kiszolgálónak. Miután a telnet kiszolgáló megkapja a hálózaton át a sztringet, átadja azt a távoli parancs értelmező programnak. Ezután a távoli parancs értelmező futtatja a hello programot, és annak kimenő üzenetét átadja a telnet kiszolgálónak. Végül a telnet kiszolgáló a kimeneti sztringet a hálózaton keresztül eljuttatja a telnet kliensnek, amelyik kiírja azt a helyi képernyőn. Ez a fajta üzenet csere a kiszolgáló és az ügyfél között jellemző a hálózati alkalmazásokra Szál-szintű konkurrens végrehajtás A folyamat absztrakcióra építve, képesek vagyunk megérteni azokat a rendszereket, amelyekben több program hajtódik végre egyidejűleg, ami konkurrens végrehajtást eredményez. A szálak használatával egyetlen folyamaton belül több vezérlési folyam is lehetséges. A konkurrens végrehajtás a számítógépekben az 1960-as évek, az időosztás feltalálása óta létezik. Hagyományosan, a konkurrens végrehajtást csak szimulálták, egyetlen számítógépet kapcsolgatva a futó folyamatok között. Ez a fajta konkurrens végrehajtás lehetővé teszi, hogy egyidejűleg több felhasználó legyen kapcsolatban a rendszerrel, de akár egyetlen felhasználó is többféle feladatot futtathat. Egészen mostanáig a tényleges számítást egyetlen processzor végezte, és azt kapcsolgatni is kellett a több feladat között. Ezt a konfigurációt nevezik egyprocesszoros (uniprocessor) rendszernek. Amikor olyan rendszert hozunk létre, hogy több processzor van egyetlen operációs rendszer kernel irányítása alatt, azt többprocesszoros (multiprocessor) rendszernek hívjuk. Ilyen rendszerek a nagyobb skálájú számítások céljára az 1980-as évek óta léteznek, de széleskörűen csak a többmagos processorok és az ún hyper-threading megjelenésével terjedtek el. Az 1.15 ábra mutatja a processzortípusok elnevezési rendszerét Fontos egyebek Ezzel végére is értünk bevezető körutazásunknak. Amit az itt tárgyaltakból feltétlenül le kell vonnunk, az az, hogy a számítógépes rendszer több mint csupán hardver. Az szorosan egymáshoz kötődő hardver és rendszer szoftver összessége, amelyeknek együtt kell működniek annak a végső célnak az elérésében, hogy alkalmazói programokat futtassanak. A későbbiekben megtárgyaljuk ennek a hardver és szoftver részleteit, és bemutatjuk, hogy ezen részletek ismeretében hogyan írhatunk olyan programokat, amelyek gyorsabbak, megbízhatóbbak és biztonságosabbak. A fejezet lezárásaként még bemutatunk pár olyan fogalmat, amelyek a számítógépes rendszerek szinte minden vonatkozásában jelen vannak ábra. A különböző processzor típusok kategorizálása. A multiprocesszorok a többmagos processzorok és a hyperthreading megjelenésével váltak dominánssá. A többmagos processzorok több CPU-t (ezeket hívjuk "mag"nak) tartalmaznak egy áramköri tokba integrálva. Az Intel Core I7 processzor, lásd 1.16 ábra, négy CPUt tartalmaz, amelyeknek mindegyike saját L1 és L2 gyorsító-
15 10 FEJEZET 1. EGY GYORS KÖRKÉP ábra. A hello futtatása hálózaton át egy távoli számítógépen a telnet használatával tárral rendelkezik, de a magasabb szintű gyorsítótárak már közösek, éppúgy, mint a fő memória interfésze. Az ipari szakértők szerint akár processzorok százait lehet egyetlen áramköri tokba sűríteni. A hyperthreading, amit időnként egyidejű többszálasításnak is hívnak, olyan technika, amely lehetővé teszi, hogy egyetlen CPU több vezérlési szálat futtasson egyidejűleg. Ezekben a CPU hardver egy része például programszámláló és regiszter tömb több példányban, a hardver többi része például a lebegőpontos aritmetika egy példányban van jelen. Amíg egy hagyományos processzor kb. 20,000 órajelet igényel az egyik szálról egy másikra való átálláshoz, a hyperthreaded processzor órajelenként eldöntheti, melyik szálat futtatja. Ez a módszer lehetővé teszi, hogy jobban kihasználja számítási erőforrásait. Például, ha az egyik szálnak várakozni kell arra, hogy egy adat a gyorsítótárba töltődjön, a CPU közben egy másik szálat futtathat. Például az Intel Core I7 processzorban mindegyik mag két szálat futtathat párhuzamosan, azaz egy négymagos rendszer öszesen nyolcat. A multiprocesszing kétféle módon javíthatja a rendszer teljesítményét. Először is, csökkenti a konkurrens működés szimulálásának szükségletét, amikor több feladatot kell végrehajtani. Mint említettük, még a személyi számítógépek felhasználói is több feladatot végeznek egyidejűleg. Másodszor, akár egyetlen alkalmazást is gyorsabbá tehet, feltéve, hogy a program több szálat használ, amelyek valóban párhuzamosan futhatnak. Ilyen módon, bár a konkurrens működés elveit fél évszázada használják és kutatják, a többmagos és multithreading rendszerek nagyon megnövelték annak igényét, hogy olyan alkalmazói programokat írjunk, amelyek valóban kihasználják a hardver által kínált szál-szintű párhuzamosságot Utasítás szintű párhuzamos végrehajtás ábra. Az Intel Core I7 szerkezete. Négy processzor van egyetlen áramköri tokba integrálva. Egy sokkal mélyebb absztrakciós szinten, a modern processzorok képesek egyidejűleg több utasítást végrehajtani, ami tulajdonságot utasítás-szintű párhuzamosság (instruction-level parallelism) néven ismerünk. A korai mikroprocesszorok (például az Intel 8086 is) több (tipikusan 3-10) órajel ciklus alatt hajtottak végre egy utasítást. Az újabb processzorok 2-4 utasítást végeznek el egy órajel ciklus alatt. Egy adott utasítás sokkal több időt követel, a kezdettől a végéig, akár 20 vagy még több órajel ciklust, a processzor azonban okos trükkökkel akár 100 utasítást is végrehajthat egyidejűleg. Tanulmányainkban már találkozhattunk a csővezetékezés (pipelining) módszerével, ahol is a szükséges műveleteket lépésekre bontják és a processzor hardvert állomások sorozataként szervezik meg, ahol mindegyik állomáson ezen lépések egyikét végzik el. Az állomások párhuzamosan működhetnek, miközben a különböző utasítások különböző részein dolgoznak. Látni fogjuk, hogy egy viszonylag egyszerű hardveres felépítéssel közel egy utasítás per órajel végrehajtási sebességet lehet fenntartani. Azokat a processzorokat, amelyek egy utasítás per órajelnél nagyobbb végrehajtási sebességet tudnak biztosítani, szuperskaláris processzornak nevezzük. A legtöbb modern processzor támogatja a szuperskaláris működési módot Egy utasítás, több adat párhuzamosság A legalacsonyabb szinten, sok modern processzor rendelkezik olyan speciális hardverrel, amelyik lehetővé teszi, hogy egyetlen utasítás több, párhuzamosan elvégzett műveletet okozzon, ami módot egy utasítás, több adat párhuzamosság (single-instruction, multiple-data, or SIMD parallelism) ismerünk. Például, a jelenlegi Intel és AMD processzoroknak vannak olyan utasításai, amelyek négy pár egyszeres pontosságú lebegőpontos számot (C float adattípus) képesek összeadni párhuzamosan. Ezeket a SIMD utasításokat azzal a szándékkal hozták létre, hogy felgyorsítsák a kép-, hang- vagy video feldolgozással foglalkozó alkalmazásokat. Bár bizonyos fordítóprogramok megpróbálják a SIMD párhuzamosságot kivonni a C programokból, biztosabb módszer olyan speciális vektoros adattípusokat
16 1.10. ÖSSZEFOGLALÁS 11 használni a programíráskor, amelyeket a fordítóprogram (pl. gcc) támogat Számítógépes absztrakciók A számítógép tudományban az absztrakciók használata az egyik legfontosabb követelmény. Például, a helyes programozási gyakorlatnak az egyik vonatkozása a rendelkezésre álló funkcionalitáshoz egy olyan egyszerű programozási interfész (application-program interface, API) megfogalmazása, amelyik lehetővé teszi, hogy a programozók a kód belső működésének ismerete nélkül használhassák magát a kódot. A különböző programnyelvek különböző formákat és támogatási szinteket biztosítanak az absztrakció számára, például a Java osztály deklarációi vagy a C függvény prototípusai. A számítógépes rendszerekben használt néhány absztrakciót már megismertünk, lásd 1.17 ábra. A processzor oldaláról, az utasítás készlet architektúra a tényleges processzor hardver egy absztrakciója. Ezzel az absztrakcióval, egy gépi kódú program látszólag úgy viselkedik, mintha egy olyan processzoron hajtódna végre, amelyik egyidejűleg csak egyetlen utasítást hajt végre. A tényleges hardver ennél sokkal bonyolultabb, több utasítást hajt végre egyidejűleg, de olyan módon, amelyik az egyszerű, soros végrehajtási modellel konzisztens. A végrehajtási modell megtartásával, különböző processzor megvalósítások is végrehajthatják ugyanazt a gépi kódot, miközben költségben és működési hatékonyságban jelentősen eltérhetnek Összefoglalás Egy számítógépes rendszer hardver és szoftver komponensekből áll, amelyek együttműködve futtatják a felhasználói alkalmazásokat. A számítógép belsejében az információt bit csoportok ábrázolják, amelyeket különbözőképpen értelmezhetünk, összefüggéstől függően. A programokat más programok fordítják különféle formátumokra, amelyek ASCII szövegként kezdik életüket és a fordító és csatoló programok fordítják bináris végrehajtható fájlokká. A processzorok elolvassák és értelmezik a végrehajtható utasításokat, amelyek a fő memóriában tárolódnak. Mivel a számítógépek idejük nagy részét azzal töltik, hogy adatot másolgatnak a memória, az I/O eszközök és a CPU regiszterei között, a tárolóeszközöket olyan hierarchiába szervezik, amelynek tetején a CPU regiszterek állnak, azokat a gyorsítótárak különféle szintjei követik, majd a DRAM fő memória és a mágneslemez következik. Az ebben a hierarchiában magasabban fekvő eszközök gyorsabbak és fajlagosan (egy bitre számítva) költségesebbek, mint a hierarchiában mélyebben fekvők. A hierarchiában magasabban fekvő eszközök gyorsítótárként szolgálnak a hierarchia alacsonyabb szintjén található eszközök számára. A programozók optimalizálni tudják C programjuk működését, ha megértik és felhasználják ezt a memória hierarchiát. Az operációs rendszer kernel közvetítői szerepet játszik az alkalmazás és a hardver között. Három alapvető absztrakciót használ A fájlok az I/O eszközök absztrakciója A virtuális memória a fő memória és a mágneslemez absztrakciója A folyamatok a processzor, a fő memória és az I/O eszközök absztrakciója Végezetül, a hálózat nyújt módot arra, hogy a számítógépek egymással kommunikáljanak. Az egyes rendszerek szempontjából, a hálózat csupán egyfajta I/O eszköz ábra. A számítógépes rendszerek által kínált néhány absztrakció. A számítógép rendszerek használatakor nagyon fontos szempont a különböző szinteken absztrakt ábrázolásokat biztosítani, amivel elrejthetjük a tényleges megvalósítás bonyolultságát. Az operációs rendszer oldaláról három absztrakciót vezettünk be: a fájlt mint az I/O, a virtuális memóriát mint a program memória és a folyamatot mint a futó program absztrakcióját. Most egy újat adunk ezekhez az absztrakciókhoz: a virtuális számítógép fogalmát, ami az egész számítógép (az operációs rendszert, a processzort és a programokat magában foglaló) absztrakciója. A virtuális számítógép fogalmát az IBM az 1960-as években vezette be, de csak mostanában vált széles körűen elterjedtté, mint egy olyan módszer, amelyikkel lehetővé válik többféle operációs rendszerre (úgymint Microsoft Windows, MacOS és Linux) tervezett programok vagy ugyanazon operációs rendszer többféle változatának futtatása.
Bevezetés a számítógépes rendszerekbe programozóknak
Végh János Miskolci Egyetem... és Informatikai Kara Bevezetés a számítógépes rendszerekbe programozóknak c Végh János V0.11@2015.02.16 Fejezet tartalomjegyzék 1 Bevezetés Mint oly sok más területen, a
Végh János Bevezetés a számítógépes rendszerekbe programozóknak
Miskolci Egyetem... és Informatikai Kara Végh János Bevezetés a számítógépes rendszerekbe programozóknak Egy gyors körkép Copyright 2008-2015 (J.Vegh@uni-miskolc.hu) V0.11@2015.02.16 Ez a segédlet a Bevezetés
Miskolci Egyetem... és Informatikai Kara Végh János Bevezetés a számítógépes rendszerekbe programozóknak Egy gyors körkép
Miskolci Egyetem... és Informatikai Kara Végh János Bevezetés a számítógépes rendszerekbe programozóknak Egy gyors körkép Copyright c 2008-2015 (J.Vegh@uni-miskolc.hu) V0.11@2015.02.16 Ez a segédlet a
Mintavételes szabályozás mikrovezérlő segítségével
Automatizálási Tanszék Mintavételes szabályozás mikrovezérlő segítségével Budai Tamás budai.tamas@sze.hu http://maxwell.sze.hu/~budait Tartalom Mikrovezérlőkről röviden Programozási alapismeretek ismétlés
5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix
2. Adattípusonként különböző regisztertér Célja: az adatfeldolgozás gyorsítása - különös tekintettel a lebegőpontos adatábrázolásra. Szorzás esetén karakterisztika összeadódik, mantissza összeszorzódik.
Számítógépek felépítése
Számítógépek felépítése Emil Vatai 2014-2015 Emil Vatai Számítógépek felépítése 2014-2015 1 / 14 Outline 1 Alap fogalmak Bit, Byte, Word 2 Számítógép részei A processzor részei Processzor architektúrák
Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor
Ismerkedjünk tovább a számítógéppel Alaplap és a processzeor Neumann-elvű számítógépek főbb egységei A részek feladatai: Központi egység: Feladata a számítógép vezérlése, és a számítások elvégzése. Operatív
Számítógép felépítése
Alaplap, processzor Számítógép felépítése Az alaplap A számítógép teljesítményét alapvetően a CPU és belső busz sebessége (a belső kommunikáció sebessége), a memória mérete és típusa, a merevlemez sebessége
A számítógép egységei
A számítógép egységei A számítógépes rendszer két alapvető részből áll: Hardver (a fizikai eszközök összessége) Szoftver (a fizikai eszközöket működtető programok összessége) 1.) Hardver a) Alaplap: Kommunikációt
Programozás alapjai gyakorlat. 2. gyakorlat C alapok
Programozás alapjai gyakorlat 2. gyakorlat C alapok 2016-2017 Bordé Sándor 2 Forráskód, fordító, futtatható állomány Először megírjuk a programunk kódját (forráskód) Egyszerű szövegszerkesztőben vagy fejlesztőkörnyezettel
Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT
BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT Eddig Tetszőleges
Digitális technika VIMIAA01 9. hét
BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT Eddig Tetszőleges
Számítógép architektúra
Budapesti Műszaki Főiskola Regionális Oktatási és Innovációs Központ Székesfehérvár Számítógép architektúra Dr. Seebauer Márta főiskolai tanár seebauer.marta@roik.bmf.hu Irodalmi források Cserny L.: Számítógépek
SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1
INFORMATIKAI RENDSZEREK ALAPJAI (INFORMATIKA I.) 1 NEUMANN ARCHITEKTÚRÁJÚ GÉPEK MŰKÖDÉSE SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1 Ebben a feladatban a következőket fogjuk áttekinteni: Neumann rendszerű számítógép
Java I. A Java programozási nyelv
Java I. A Java programozási nyelv története,, alapvető jellemzői Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2007. 02. 12. Java I.: Történet, jellemzők, JDK JAVA1 / 1 Egy kis történelem
Bepillantás a gépházba
Bepillantás a gépházba Neumann-elvű számítógépek főbb egységei A részek feladatai: Központi egység: Feladata a számítógép vezérlése, és a számítások elvégzése. Operatív memória: A számítógép bekapcsolt
Párhuzamos programozási platformok
Párhuzamos programozási platformok Parallel számítógép részei Hardver Több processzor Több memória Kapcsolatot biztosító hálózat Rendszer szoftver Párhuzamos operációs rendszer Konkurenciát biztosító programozási
Adatok ábrázolása, adattípusok
Adatok ábrázolása, adattípusok Összefoglalás Adatok ábrázolása, adattípusok Számítógépes rendszerek működés: információfeldolgozás IPO: input-process-output modell információ tárolása adatok formájában
2. Számítógépek működési elve. Bevezetés az informatikába. Vezérlés elve. Külső programvezérlés... Memória. Belső programvezérlés
. Számítógépek működési elve Bevezetés az informatikába. előadás Dudásné Nagy Marianna Az általánosan használt számítógépek a belső programvezérlés elvén működnek Külső programvezérlés... Vezérlés elve
OPERÁCIÓS RENDSZEREK. Elmélet
1. OPERÁCIÓS RENDSZEREK Elmélet BEVEZETÉS 2 Az operációs rendszer fogalma Az operációs rendszerek feladatai Csoportosítás BEVEZETÉS 1. A tantárgy tananyag tartalma 2. Operációs rendszerek régen és most
Adatbázis és szoftverfejlesztés elmélet
Adatbázis és szoftverfejlesztés elmélet Témakör 4. Összefoglalás 1. A kódolás eszközei Általános szövegszerkesztő Programozói szövegszerkesztő Fejlesztői környezet Vizuális fejlesztői környezet Általános
Programzás I. - 1. gyakorlat
Programzás I. - 1. gyakorlat Alapok Tar Péter 1 Pannon Egyetem Műszaki Informatikai Kar Számítástudomány Alkalmazása Tanszék Utolsó frissítés: September 15, 2007 1 tar@dcs.vein.hu Tar Péter (PE-MIK-DCS)
Párhuzamos programozási platformok
Párhuzamos programozási platformok Parallel számítógép részei Hardver Több processzor Több memória Kapcsolatot biztosító hálózat Rendszer szoftver Párhuzamos operációs rendszer Konkurenciát biztosító programozási
Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED AWK - szintaxis, vezérlési szerkezetek Operációs rendszerek 11. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik
Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)
1 Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication) 1. A folyamat (processzus, process) fogalma 2. Folyamatok: műveletek, állapotok, hierarchia 3. Szálak (threads)
Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?
Bevezetés Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések Forráskód Hibajegyzék p2p.wrox.com xiii xiii xiv xiv xvi xvii xviii
1. Fejezet: Számítógép rendszerek. Tipikus számítógép hirdetés
1. Fejezet: Számítógép The Architecture of Computer Hardware and Systems Software: An InformationTechnology Approach 3. kiadás, Irv Englander John Wiley and Sons 2003 Wilson Wong, Bentley College Linda
Operációs rendszerek. Az NT folyamatok kezelése
Operációs rendszerek Az NT folyamatok kezelése Folyamatok logikai felépítése A folyamat modell: egy adott program kódját végrehajtó szál(ak)ból és, a szál(ak) által lefoglalt erőforrásokból állnak. Folyamatok
SZÁMÍTÓGÉP ARCHITEKTÚRÁK
SZÁMÍTÓGÉP ARCHITEKTÚRÁK Az utasítás-pipeline szélesítése Horváth Gábor, Belső Zoltán BME Hálózati Rendszerek és Szolgáltatások Tanszék ghorvath@hit.bme.hu, belso@hit.bme.hu Budapest, 2018-05-19 1 UTASÍTÁSFELDOLGOZÁS
6. óra Mi van a számítógépházban? A számítógép: elektronikus berendezés. Tárolja az adatokat, feldolgozza és az adatok ki és bevitelére is képes.
6. óra Mi van a számítógépházban? A számítógép: elektronikus berendezés. Tárolja az adatokat, feldolgozza és az adatok ki és bevitelére is képes. Neumann elv: Külön vezérlő és végrehajtó egység van Kettes
Utolsó módosítás:
Utolsó módosítás: 2012. 09. 06. 1 A tantárggyal kapcsolatos adminisztratív kérdésekkel Micskei Zoltánt keressétek. 2 3 4 5 6 7 8 9 Forrás: Gartner Hype Cycle for Virtualization, 2010, http://premierit.intel.com/docs/doc-5768
Könyvtári címkéző munkahely
Könyvtári címkéző munkahely Tartalomjegyzék A RENDSZER HARDVER ELEMEI...3 1 RFID CÍMKÉK... 3 2 RFID ASZTALI OLVASÓ... 3 A RENDSZER SZOFTVER ELEMEI... 4 1 KÖNYV CÍMKÉZŐ MUNKAÁLLOMÁS... 4 2 A PC- S SZOFTVEREK
Iman 3.0 szoftverdokumentáció
Melléklet: Az iman3 program előzetes leírása. Iman 3.0 szoftverdokumentáció Tartalomjegyzék 1. Az Iman rendszer...2 1.1. Modulok...2 1.2. Modulok részletes leírása...2 1.2.1. Iman.exe...2 1.2.2. Interpreter.dll...3
Számítógépek felépítése, alapfogalmak
2. előadás Számítógépek felépítése, alapfogalmak Lovas Szilárd, Krankovits Melinda SZE MTK MSZT kmelinda@sze.hu B607 szoba Nem reprezentatív felmérés kinek van ilyen számítógépe? 2 Nem reprezentatív felmérés
Programozás alapjai Bevezetés
Programozás alapjai Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Programozás alapjai Bevezetés SWF1 / 1 Tartalom A gépi kódú programozás és hátrányai A magas szintÿ programozási nyelv fogalma
Nyíregyházi Egyetem Matematika és Informatika Intézete. Input/Output
1 Input/Output 1. I/O műveletek hardveres háttere 2. I/O műveletek szoftveres háttere 3. Diszkek (lemezek) ------------------------------------------------ 4. Órák, Szöveges terminálok 5. GUI - Graphical
Operációs rendszerek Folyamatok 1.1
Operációs rendszerek p. Operációs rendszerek Folyamatok 1.1 Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK A rendszermag Rendszermag
OpenCL alapú eszközök verifikációja és validációja a gyakorlatban
OpenCL alapú eszközök verifikációja és validációja a gyakorlatban Fekete Tamás 2015. December 3. Szoftver verifikáció és validáció tantárgy Áttekintés Miért és mennyire fontos a megfelelő validáció és
Utolsó módosítás:
Utolsó módosítás:2011. 09. 29. 1 2 4 5 MMU!= fizikai memóriaillesztő áramkör. Az utóbbinak a feladata a memória modulok elektromos alacsonyszintű vezérlése, ez sokáig a CPU-n kívül a chipset északi hídban
Utolsó módosítás:
Utolsó módosítás: 2011. 09. 08. 1 A tantárggyal kapcsolatos adminisztratív kérdésekkel Micskei Zoltánt keressétek. 2 3 4 5 6 7 8 9 10 11 12 13 14 Erősen buzzword-fertőzött terület, manapság mindent szeretnek
1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?
1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"
C programozási nyelv Pointerek, tömbök, pointer aritmetika
C programozási nyelv Pointerek, tömbök, pointer aritmetika Dr. Schuster György 2011. június 16. C programozási nyelv Pointerek, tömbök, pointer aritmetika 2011. június 16. 1 / 15 Pointerek (mutatók) Pointerek
ELŐADÁS 2016-01-05 SZÁMÍTÓGÉP MŰKÖDÉSE FIZIKA ÉS INFORMATIKA
ELŐADÁS 2016-01-05 SZÁMÍTÓGÉP MŰKÖDÉSE FIZIKA ÉS INFORMATIKA A PC FIZIKAI KIÉPÍTÉSÉNEK ALAPELEMEI Chip (lapka) Mikroprocesszor (CPU) Integrált áramköri lapok: alaplap, bővítőkártyák SZÁMÍTÓGÉP FELÉPÍTÉSE
sallang avagy Fordítótervezés dióhéjban Sallai Gyula
sallang avagy Fordítótervezés dióhéjban Sallai Gyula Az előadás egy kis példaprogramon keresztül mutatja be fordítók belső lelki világát De mit is jelent, az hogy fordítóprogram? Mit csinál egy fordító?
A mikroprocesszor felépítése és működése
A mikroprocesszor felépítése és működése + az egyes részegységek feladata! Információtartalom vázlata A mikroprocesszor feladatai A mikroprocesszor részegységei A mikroprocesszor működése A mikroprocesszor
Mutatók és mutató-aritmetika C-ben március 19.
Mutatók és mutató-aritmetika C-ben 2018 március 19 Memória a Neumann-architektúrában Neumann-architektúra: a memória egységes a címzéshez a természetes számokat használjuk Ugyanabban a memóriában van:
Programozás I. gyakorlat
Programozás I. gyakorlat 1. gyakorlat Alapok Eszközök Szövegszerkesztő: Szintaktikai kiemelés Egyszerre több fájl szerkesztése pl.: gedit, mcedit, joe, vi, Notepad++ stb. Fordító: Szöveges file-ban tárolt
Operációs rendszerek III.
A WINDOWS NT memóriakezelése Az NT memóriakezelése Memóriakezelő feladatai: Logikai-fizikai címtranszformáció: A folyamatok virtuális címterének címeit megfelelteti fizikai címeknek. A virtuális memóriakezelés
1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok
Számítógépes szimulációk 1. Bevezetés BME Fizika Intézet 2015. szeptember 9. Bevezetés A félév menete C-ismétlés, 1. rész Oktatók: Nagyfalusi Balázs: nagyfalusi@phy.bme.hu, F3 211. : tcsaba@eik.bme.hu,
OOP. Alapelvek Elek Tibor
OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós
GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc
4. fejezet Fordítók felépítése Grafikus Processzorok Tudományos Célú Programozása Fordítók Kézzel assembly kódot írni nem érdemes, mert: Egyszerűen nem skálázik nagy problémákhoz arányosan sok kódot kell
Virtualizációs technológiák és alkalmazások. Házi feladat. A Virtualbox. készítette: Andrus Tamás
Virtualizációs technológiák és alkalmazások Házi feladat készítette: Andrus Tamás Bevezető a honlapjuk (http://virtualbox.org) tanúsága szerint az egyetlen nyílt forrású virtualizációs szoftver a piacon.
Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek
Programozás alapjai gyakorlat 4. gyakorlat Konstansok, tömbök, stringek Házi ellenőrzés (f0069) Valósítsd meg a linuxos seq parancs egy egyszerűbb változatát, ami beolvas két egész számot, majd a kettő
Processzor (CPU - Central Processing Unit)
Készíts saját kódolású WEBOLDALT az alábbi ismeretanyag felhasználásával! A lap alján lábjegyzetben hivatkozz a fenti oldalra! Processzor (CPU - Central Processing Unit) A központi feldolgozó egység a
Az operációs rendszer szerkezete, szolgáltatásai
Az operációs rendszer szerkezete, szolgáltatásai Felhasználói programok Rendszerhívások Válaszok Kernel Eszközkezelők Megszakításvezérlés Perifériák Az operációs rendszer szerkezete, szolgáltatásai Felhasználói
1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3
Darvay Zsolt Típusok és nevek a forráskódban Állandók és változók Hatókörök és az előfeldolgozó Bevitel és kivitel Kifejezések Utasítások Mutatók Függvények Struktúrák és típusok Állománykezelés C programozás
Bevezetés a programozásba I.
Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12. Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk
Operációs Rendszerek II.
Operációs Rendszerek II. Második előadás Első verzió: 2004/2005. I. szemeszter Ez a verzió: 2009/2010. II. szemeszter Visszatekintés Visszatekintés Operációs rendszer a számítógép hardver elemei és az
Autóipari beágyazott rendszerek. Komponens és rendszer integráció
Autóipari beágyazott rendszerek és rendszer integráció 1 Magas szintű fejlesztési folyamat SW architektúra modellezés Modell (VFB) Magas szintű modellezés komponensek portok interfészek adattípusok meghatározása
elektronikus adattárolást memóriacím
MEMÓRIA Feladata A memória elektronikus adattárolást valósít meg. A számítógép csak olyan műveletek elvégzésére és csak olyan adatok feldolgozására képes, melyek a memóriájában vannak. Az információ tárolása
Számítógépes alapismeretek 1.
Számítógépes alapismeretek 1. 1/7 Kitöltő adatai: 1. Név: 2. Osztály: 3. E-mail címe: 2/7 Kérdések: 1. Mi az IKT (Információs és Kommunikációs Technológia)? Olyan eszközök, technológiák, amik az információ
Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft
Flash és PHP kommunikáció Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft A lehetőségek FlashVars External Interface Loadvars XML SOAP Socket AMF AMFphp PHPObject Flash Vars Flash verziótól függetlenül
Magic xpi 4.0 vadonatúj Architektúrája Gigaspaces alapokon
Magic xpi 4.0 vadonatúj Architektúrája Gigaspaces alapokon Mi az IMDG? Nem memóriában futó relációs adatbázis NoSQL hagyományos relációs adatbázis Más fajta adat tárolás Az összes adat RAM-ban van, osztott
C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem } http://www.ms.sapientia.ro/~mgyongyi
C programozás Márton Gyöngyvér, 2009 Sapientia, Erdélyi Magyar Tudományegyetem http://www.ms.sapientia.ro/~mgyongyi 1 Könyvészet Kátai Z.: Programozás C nyelven Brian W. Kernighan, D.M. Ritchie: A C programozási
1. tétel. A kommunikáció információelméleti modellje. Analóg és digitális mennyiségek. Az információ fogalma, egységei. Informatika érettségi (diák)
1. tétel A kommunikáció információelméleti modellje. Analóg és digitális mennyiségek. Az információ fogalma, egységei Ismertesse a kommunikáció általános modelljét! Mutassa be egy példán a kommunikációs
A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása
A verem (stack) A verem egy olyan struktúra, aminek a tetejére betehetünk egy új (vagy sorban több) elemet a tetejéről kivehetünk egy (vagy sorban több) elemet A verem felhasználása Függvény visszatérési
Labor gyakorlat Mikrovezérlők
Labor gyakorlat Mikrovezérlők ATMEL AVR ARDUINO 1. ELŐADÁS BUDAI TAMÁS Tartalom Labor 2 mikrovezérlők modul 2 alkalom 1 mikrovezérlők felépítése, elmélet 2 programozás, mintaprogramok Értékelés: a 2. alkalom
Programozási nyelvek Java
statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály
Labor gyakorlat Mikrovezérlők
Labor gyakorlat Mikrovezérlők ATMEL AVR ARDUINO 1. ELŐADÁS BUDAI TAMÁS 2015. 09. 06. Tartalom Labor 2 mikrovezérlők modul 2 alkalom 1 mikrovezérlők felépítése, elmélet 2 programozás, mintaprogramok Értékelés:
Rekurzió. Dr. Iványi Péter
Rekurzió Dr. Iványi Péter 1 Függvényhívás void f3(int a3) { printf( %d,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); } void f1() { int a1 = 1; int b1; b1 = f2(a1); } 2 Függvényhívás void f3(int a3) { printf(
8. gyakorlat Pointerek, dinamikus memóriakezelés
8. gyakorlat Pointerek, dinamikus memóriakezelés Házi ellenőrzés Egy számtani sorozat első két tagja A1 és A2. Számítsa ki a sorozat N- dik tagját! (f0051) Egy mértani sorozat első két tagja A1 és A2.
Clang Static Analyzer belülről
Clang Static Analyzer belülről Nagy Donát 2015. október 6. Áttekintés 1 Clang Static Analyzer kívülről 2 A statikus elemzés folyamata 3 Az eszköz felépítése 4 Egy checker felépítése Rövid definíciók Clang
C programozási nyelv
C programozási nyelv Előfeldolgozó utasítások Dr Schuster György 2011 május 3 Dr Schuster György () C programozási nyelv Előfeldolgozó utasítások 2011 május 3 1 / 15 A fordítás menete Dr Schuster György
A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.
Függvények 1.Függvények...1 1.1.A függvény deníció szintaxisa... 1..Függvények érték visszatérítése...3 1.3.Környezettel kapcsolatos kérdések...4 1.4.Lokális változók használata...4 1.5.Rekurzív hívások...5.kód
2017/12/16 21:33 1/7 Hardver alapok
2017/12/16 21:33 1/7 Hardver alapok < Hardver Hardver alapok Szerző: Sallai András Copyright Sallai András, 2011, 2013, 2014 Licenc: GNU Free Documentation License 1.3 Web: http://szit.hu Bevezetés A számítógépet
Grafikus csővezeték 1 / 44
Grafikus csővezeték 1 / 44 Grafikus csővezeték Vertex feldolgozás A vertexek egyenként a képernyő térbe vannak transzformálva Primitív feldolgozás A vertexek primitívekbe vannak szervezve Raszterizálás
Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe
Mechatronika és mikroszámítógépek 2017/2018 I. félév Bevezetés a C nyelvbe A C programozási nyelv A C egy általános célú programozási nyelv, melyet Dennis Ritchie fejlesztett ki Ken Thompson segítségével
ELSŐ LÉPÉSEK A SZÁMÍTÓGÉPEK RODALMÁBA AMIT A SZÁMÍTÓGÉPEKRŐL TUDNI ÉRDEMES
ELSŐ LÉPÉSEK A SZÁMÍTÓGÉPEK RODALMÁBA AMIT A SZÁMÍTÓGÉPEKRŐL TUDNI ÉRDEMES Számítógép = Univerzális gép! Csupán egy gép a sok közül, amelyik pontosan azt csinálja, amit mondunk neki. Hardver A számítógép
Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.
Eseménykezelés előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Függvénymutatókkal Származtatással Interfészekkel Egyéb
Digitális rendszerek. Utasításarchitektúra szintje
Digitális rendszerek Utasításarchitektúra szintje Utasításarchitektúra Jellemzők Mikroarchitektúra és az operációs rendszer közötti réteg Eredetileg ez jelent meg először Sokszor az assembly nyelvvel keverik
Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)
1 Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication) 1. A folyamat (processzus, process) fogalma 2. Folyamatok: műveletek, állapotok, hierarchia 3. Szálak (threads)
Összeadás BCD számokkal
Összeadás BCD számokkal Ugyanúgy adjuk össze a BCD számokat is, mint a binárisakat, csak - fel kell ismernünk az érvénytelen tetrádokat és - ezeknél korrekciót kell végrehajtani. A, Az érvénytelen tetrádok
Informatika érettségi vizsga
Informatika 11/L/BJ Informatika érettségi vizsga ÍRÁSBELI GYAKORLATI VIZSGA (180 PERC - 120 PONT) SZÓBELI SZÓBELI VIZSGA (30 PERC FELKÉSZÜLÉS 10 PERC FELELET - 30 PONT) Szövegszerkesztés (40 pont) Prezentáció-készítés
1. Digitális írástudás: a kőtáblától a számítógépig 2. Szedjük szét a számítógépet 1. örök 3. Szedjük szét a számítógépet 2.
Témakörök 1. Digitális írástudás: a kőtáblától a számítógépig ( a kommunikáció fejlődése napjainkig) 2. Szedjük szét a számítógépet 1. ( a hardver architektúra elemei) 3. Szedjük szét a számítógépet 2.
Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Reguláris kifejezések - alapok, BASH Operációs rendszerek 9. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor
Digitális rendszerek. Digitális logika szintje
Digitális rendszerek Digitális logika szintje CPU lapkák Mai modern CPU-k egy lapkán helyezkednek el Kapcsolat a külvilággal: kivezetéseken (lábak) keresztül Cím, adat és vezérlőjelek, ill. sínek (buszok)
Uniprogramozás. várakozás. várakozás. Program A. Idő. A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna
Processzusok 1 Uniprogramozás Program A futás várakozás futás várakozás Idő A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna 2 Multiprogramozás Program A futás vár futás
Verzió: 2.0 2012. PROCONTROL ELECTRONICS LTD www.procontrol.hu
PROCONTROL Proxer 6 RFID Proximity kártyaolvasó Verzió: 2.0 2012. Létrehozás dátuma: 2012.08.07 18:42 1. oldal, összesen: 5 A Proxer6 egy proximity kártyaolvasó, ami RFID kártyák és transzponderek (egyéb
2016/08/31 02:45 1/6 Hardver alapok
2016/08/31 02:45 1/6 Hardver alapok < Hardver Hardver alapok Szerző: Sallai András Copyright Sallai András, 2011, 2013, 2014 Licenc: GNU Free Documentation License 1.3 Web: http://szit.hu Bevezetés A számítógépet
Operációs rendszerek. Bemutatkozás
Bevezetés az operációs rendszerek világába dr. Benyó Balázs benyo@sze.hu Bemutatkozás www.sze.hu/~benyo 1 Számítógép HW-SW felépítése felhasználó felhasználó felhasználó Operációs rendszer Operációs rendszer
7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.
7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II. A gyakorlat célja: 1. A shell vezérlő szerkezetei használatának gyakorlása. A használt vezérlő szerkezetek: if/else/fi, for, while while, select, case,
Csoportos üzenetszórás optimalizálása klaszter rendszerekben
Csoportos üzenetszórás optimalizálása klaszter rendszerekben Készítette: Juhász Sándor Csikvári András Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Automatizálási
13. óra op. rendszer ECDL alapok
13. óra op. rendszer ECDL alapok 1. Mire szolgál az asztal? a) Az ideiglenesen törölt fájlok tárolására. b) A telepített alkalmazások tárolására. c) A telepített alkalmazások ikonok általi gyors elérésére.
Programozási alapismeretek 4.
Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)
UNIX / Linux rendszeradminisztráció
UNIX / Linux rendszeradminisztráció VIII. előadás Miskolci Egyetem Informatikai és Villamosmérnöki Tanszékcsoport Általános Informatikai Tanszék Virtualizáció Mi az a virtualizáció? Nagyvonalúan: számítógép
Első sor az érdekes, IBM PC. 8088 ra alapul: 16 bites feldolgozás, 8 bites I/O (olcsóbb megoldás). 16 kbyte RAM. Nem volt háttértár, 5 db ISA foglalat
1 2 3 Első sor az érdekes, IBM PC. 8088 ra alapul: 16 bites feldolgozás, 8 bites I/O (olcsóbb megoldás). 16 kbyte RAM. Nem volt háttértár, 5 db ISA foglalat XT: 83. CPU ugyanaz, nagyobb RAM, elsőként jelent
Dr. Schuster György október 14.
Real-time operációs rendszerek RTOS 2011. október 14. A fordítás vázlata prog.c Előfeldolgozó Átmenti állomány Fordító prog.obj más.obj-tek könyvtárak indító kód Linker futtatható kód Ismétlés Előfeldolgozó
Bevezetés a Python programozási nyelvbe
Bevezetés a Python programozási nyelvbe 8. Gyakorlat modulok random számok (utolsó módosítás: 2017. aug. 3.) Szathmáry László Debreceni Egyetem Informatikai Kar 2017-2018, 1. félév Modulok Amint a programunk
A programozás alapjai
A programozás alapjai Változók A számítógép az adatokat változókban tárolja A változókat alfanumerikus karakterlánc jelöli. A változóhoz tartozó adat tipikusan a számítógép memóriájában tárolódik, szekvenciálisan,
1. Alapok. #!/bin/bash
1. oldal 1.1. A programfájlok szerkezete 1. Alapok A bash programok tulajnképpen egyszerű szöveges fájlok, amelyeket bármely szövegszerkesztő programmal megírhatunk. Alapvetően ugyanazokat a at használhatjuk