- [TÉMA1] A számítógép felépítése: o alaplap, o processzor, o memóriák (RAM, ROM, CACHE [gyorsítótár]) címzés: adatbusz, címbusz, o portok (ISA [Industry Standard Architecture], VESA local [Video Electronics Standards Association], PCI [Peripheral Component Interconnect], AGP [Accelerated Graphics Port]), o grafikus kártya (ISA, VL, PCI [alaplapi], AGP), o portok a külvilág felé: soros (COM), párhuzamos (LPT), USB [Universal Serial Bus], o hálózati kártya (MAC [Media Access Control] address: 6 byte, egyedi), o merevlemez: [disc platters (heads), cylinder, track, cluster, sector], [FAT, MBR, bad sector, lost cluster, fragmentation, defragmentation], http://www.helpwithpcs.com/jargon/sector-track-cluster.htm http://members.iweb.net.au/~pstorr/pcbook/book4/hdtech.htm o a PC blokkvázlatos felépítése: illetve o PC-bekapcsolás: először az alaplap ROM-jában tárolt néhány utasítás fut le (ez a POST, azaz a Power-On Self Test). Ez végignézi a PC-ben detektált HW-eszközöket, hogy megfelelően működnek-e. Így a CPU-t, a memóriát, és a BIOS-t (Basic Input-Output Systems). Ha minden rendben, akkor a BIOS veszi át az irányítást, és a saját tesztjei után aktiválja a számítógép lemezes egységeit, és megpróbálja betölteni a preferált lemezegységről (ez általában az első merevlemez) az első néhány szektor tartalmát, ami az operációs rendszer ún. bootstrap loader-ét kell, hogy tartalmazza. Ha ez sikerült, akkor átadja az irányítást ennek a rövidke programnak, ami betölti az operációs rendszert. http://computer.howstuffworks.com/operating-system4.htm
- [TÉMA2] Operációs rendszerek: - az operációs rendszer feladatai: o processzor menedzsment [processor managament] (1. minden processznek és applikációnak jusson elég processzor-idő; a processzor teljesítményéből; 2. a lehető legtöbb fordítódjon valódi munkára, és a lehető legkevesebb a processzek menedzselésére). Ez nem könnyű feladat. Manapság a Windows XP-k és modern Linuxok világában a felhasználó által nem is látott (de nagyon fontos funkcionalitással bíró) háttérfolyamatok száma igen magas. Rengeteg ilyen folyamat tartozik a hálózat menedzseléséhez, memória-felügyelethez, vírusok kereséséhez, stb. Az OS-nek úgy kell igazságosan elosztania a rendszer erőforrásait (többek között a processzor teljesítményét), hogy közben a megszakításokat a felhasználó előtt láthatatlanul tudja kiszolgálni. http://computer.howstuffworks.com/operating-system5.htm o memória-menedzsment [memory managament] (1. minden processz elegendő memóriát kell, hogy kapjon a futáshoz, de egyetlen processz sem futhat bele más processz memória-területébe; 2. a rendszerben található különböző típusú memóriákat úgy kell szétosztani a különböző processzek között, hogy a rendszer stabilitásának megőrzése mellett minden processz a számára legelőnyösebbhez jusson (regiszterek, gyorsítótár, rendszer-memória, virtuális memória). http://computer.howstuffworks.com/operating-system6.htm o eszköz-menedzsment [device managament] (az operációs rendszer és a fizikai HW között mindig ott van a driver, a meghajtó-program; ennek feladata lényegében az, hogy a kártya elektromos jelei, és az operációs rendszer gépi logikája között kapcsolatot teremtsen). http://computer.howstuffworks.com/operating-system7.htm o másodlagos tárolók menedzsmentje [storage managament] (mivel a számítógép csak a memóriában lévő programkód futtatására képes, ezért az OS feladata az is, hogy a szükséges adatok és programrészletek mindig az operatív tárban legyenek. Ezzel kapcsolatban az OS-nek feladata: 1. a lemezes egységek megfelelően időzített használata (ne zavarja a már aktív programok futását); 2. a lemezeken található fájlrendszerek konzisztens kezelése; 3. és a szabad lemezterületek menedzselése). http://www.netnam.vn/unescocourse/os/13.htm
o applikáció-interfész [application interface] (ahogy a meghajtó programok hozzáférést biztosítanak a HW elemekhez az operációs rendszernek [anélkül, hogy az OS-nek ismernie kellene az egyes HW-ek pontos felépítését], úgy az API-k (Application Programming Interface) hozzáférést biztosítanak az operációs rendszerhez a programozók számára. Ez azt jelenti, hogy a programozónak nem kell például regiszterszinten programozni a floppy-meghajtót ahhoz, hogy egy fájlt beolvasson, hanem egy egyszerű API-hívás segítségével ezt elintézi számára az OS.) http://computer.howstuffworks.com/operating-system8.htm o felhasználói interfész [user interface] (az API-hoz hasonlóan az UI (user interface) vagy a GUI (graphical UI) is egy hozzáférési felületért felelős. Nevezetesen a felhasználónak ad egy könnyen kezelhető felületet, amelyen az operációs rendszer, a számítógép erőforrásai, és a felhasználó közötti interakció megvalósulhat. DOS-ban ez a prompt, Windows-ban ez az explorer (nem Internet Explorer!), Linux-ban ez a shell, vagy az X). - [TÉMA3] Programozási nyelvek: o Gépi kód: A gépi kód valójában nem nyelv, mivel az a gép számára közvetlenül értelmezhető adatsort jelenti. Ez a nyelv tulajdonképpen számokból áll, mely számok a memóriában tárolódnak, és amelyeket értelmezi és végrehajtja a processzor. A gépi kódú programozás esetén a programozó közvetlenül írja elő minden egyes utasítás végrehajtását, a gép összes regiszterének, memóriabitjének felhasználását, http://hu.wikipedia.org/wiki/programoz%c3%a1si_nyelv#g.c3.a9pi_k.c3.b3d o Assembly: A gép teljes architekturális ismerete rendkívül nehéz, ezért hozták létre az assemblyt, amely egy kicsit megkönnyíti a munkát. Ha egy assembly 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ű. ASM nyelven nehéz programot írni, mert azt teljesen a gép architektúrájához alakítva, gépi logika szerint kell elkészíteni. Cserébe viszont az assembly nyelven írt programok a leggyorsabbak. Az assembly nyelven írt programot gépi kódra az assembler (fordítóprogram) fordítja le, egy assembly sor formátuma: Szimbólum Mûveleti kód (direktíva Operandusok Megjegyzés pr. programcím, címke: kezdés move ax,cs ;ax<-cs szam equ 5 ;szam:=5 A regiszterek csoportosítása: Regiszter: 80x86 típusú mikroprocesszorok belső tároló helyei. (Számuk 80286 CPU-ban 15 db.). A CPU működését jelentős mértékben gyorsítja, ha a gyakran használt adatokat nem az operatív tárban, hanem magában a processzorban tároljuk, megspórolva ezzel a processzor és a memória közötti út lassú megtételének idejét. Léteznek az általános célú regiszterek, ezek: AX, BX, CX, és DX. Ezek 16 bit nagyságúak, és felbonthatóak 8 bites regiszterekre, mint pl. az AX AH-ra és AL-re. (Tehát ha AX tartalma FFEEh (hexadecimálisan!), akkor az AH tartalma FFh, és az AL tartalma EEh.) Ezekkel a 8 bites regiszterekkel is ugyanúgy elvégezhetőek műveletek, mint a 16 bitesekkel. Igaz, hogy ezek szabadon használható regiszterek, de mindegyiknek van egy általános feladata, ezek: - AX: akkumulátor (aritmetikai műveleteknél gyakran használt regiszter), - BX: bázisregiszter (a szegmentált memória-címzésnél a cím ofszetjét
tartalmazza), - CX: számlálóregiszter (az assembly nyelvben írt programok: ciklusutasítások számlálója), - DX: adatregiszter (műveletek végzése közben adatok tárolására használatos), léteznek szegmensregiszterek, amelyek a szegmentált memória-címzésnél a cím szegmensét tartalmazzák. Ezekből 4 db van: - CS: kódszegmens regiszter (CodeSegment) - DS: adatszegmens regiszter (DataSegment) -SS: veremszegmens regiszter (StackSegment) -ES: extraszegmens regiszter (ExtraSegment) léteznek Mutató-, és Indexregiszterek, amiket leggyakrabban más regiszterekkel együtt használnak.(adott memóriacímet leggyakrabban az, ES:[DI] és DS:[SI], regiszterpárokkal címzünk.): - IP: utasításszámláló regiszter (InstructionPointer) - SP: veremmutató regiszter (StackPointer) - BP: bázismutató regiszter (BasePointer) - SI: forrásindex regiszter (SourcePointer) - DI: célindex regiszter (DestinationPointer) Néhány kiemelt utasítás bemutatása példákkal: - MOV AX, 5 [értékadás] - MOV BX, AX [értékadás] - PUSH BX [push a verembe] - XOR BX, BX [BX kizáróvagyolása = nullázás] - POP BX [pop BX megint 5] - RET [visszatérés az operációs rendszerhez] http://www.gtbbp.hu/~szabol/tetelek/programming/b/gepikod.html o Minden egyes processzor-családnak saját assembly nyelve (vagy nyelvei) van. A processzorokat utasításkészletük nagysága alapján nagy csoportokra oszthatjuk: vannak CISC (Complex Instruction Set Computer = összetett utasításkészletű) és RISC (Reduced Instruction Set Computer = csökkentett utasításkészletű) processzorok. A CPU családokat szokták még architektúráknak is nevezni. Az Intel x86 architektúra legismertebb assembly nyelvei: Intel assembly nyelv, Turbo assembly (TASM, Borland), Netwide assembly (NASM, GNU). o Fordított nyelvek: C (a nyelvet Dennis Ritchie és Ken Thompson az 1970-es évek elején fejlesztette ki, a UNIX operációs rendszereken való használat céljából. Ma már gyakorlatilag minden operációs rendszerben megtalálható és a legnépszerűbb programozási nyelvek egyike. Rendszerprogramozáshoz és felhasználói program készítéséhez egyaránt jól használható. A C viszonylag minimalista programozási nyelv. Lényegesen alacsonyabb szintű, mint más programozási nyelvek, bár néha magas szintű nyelvnek hívják, de igazából csak az assembly alacsonyabb nála. A C-nek alapvetően két nagy előnye van az assemblyvel szemben. Az első, hogy a forráskód általában könnyebben olvasható és kevésbé nehéz annak írása, főleg a hosszabb programok esetében. A második, hogy az assembly kód kötött az adott számítógép architektúrájához (x86, RISC, stb.), míg a C programok könnyen
átvihetők (a forrás módosítása nélkül) más architektúrájú rendszerekre. Természetesen az adott típuson léteznie kell egy C-fordítónak és az esetlegesen használt függvények itt használható változatainak.) C++ (Az 1970-es évek vége felé a C nyelv népszerűsége ugrásszerűen emelkedni kezdett. Ugyanebben az időben Bjarne Stroustrup és társai a Bell Labs-nál elkezdtek dolgozni objektum orientált nyelvi elemek hozzáadásán a C nyelvhez. A nyelv, amit készítettek a C++ nevet kapta, ez ma a legelterjedtebb programozási nyelv a Microsoft Windows operációs rendszereken, míg a régi C a UNIX világban a mai napig is megőrizte népszerűségét.) C# (C sharp a C egyik legfontosabb jellemzője, hogy a programozó kezében van a memóriakezelés. A szabványos C nem ismer olyan definíciókat, hogy tömb vége vizsgálat, vagy automatikus memóriakezelés. Ezzel szemben, pl. a JAVA és a C# nyelvek, mindkettő C alapú, rendelkeznek automatikus memóriakezeléssel. Míg a "kézi" memóriakezelés több lehetőséget ad a programozónak a program "finomhangolására", ugyanúgy megnövekedik a hibák lehetősége is (bug), mint pl. a "túlcsordulás" (buffer overflow). Ezek a hibák felhasználhatók, számítógépes rendszerekbe való betörésekhez.) Clipper (főleg adatbázis-kezelésre orientálódott programozási nyelv; eltűnőben van) Java (A Java egy objektumorientált programozási nyelv. A nyelvet a Sun Microsystems fejlesztette ki a 90-es évek alatt. Kezdetben a neve Oak (tölgyfa) volt (James Gosling, a nyelv atyja nevezte így az irodája előtt növő tölgyfáról). A Java (Jáva) nevet a Jáva-kávéról kapta. Négy fontos szempontot tartottak szem előtt, amikor a Javát kifejlesztették: objektumorientáltság; függetlenség az operációs rendszertől, amelyen fut (többé-kevésbé sikerült); olyan kódokat és könyvtárakat tartalmazzon, amelyek elősegítik a hálózati programozást; távoli gépeken is képes legyen biztonságosan futni.) Pascal (A Pascal ma is az egyik legelterjedtebb, legkedveltebb programozási nyelv. Ennek talán egyik oka, hogy sok helyen még mindig ezen tanítják a programozást, hiszen a szintaxisa egyszerű, könnyen érthető, ennek ellenére hatékony eszközt ad használója kezébe. A nyelvet 1970-ben Niklaus Wirth professzor fejlesztette ki, aki emellett a Modula-2 és az Oberon atyja is. A Pascal maga az Algol programozási nyelven alapul, és a francia matematikus-filozófus Blaise Pascal tiszteletére nevezték el.) o Interpretált nyelvek: Az interpretált nyelveket nem gépi kódra fordítva, hanem forrásszövegben tárolják és terjesztik, és azok minden futtatás előtt vagy alatt alakulnak át a gép számára érthető (alacsony szintű) utasítások sorozatára. Az ilyen nyelvekre jellemző a gyors fejlesztési és tesztelési idő, a rugalmasabb szerkezet, valamint az alacsonyabb futási sebesség. Ilyenek: BASIC (A BASIC [Beginner's All-purpose Symbolic Instruction Code] programozási nyelvet 1964-ben készítette Kemény János és Thomas Kurtz a Dartmouth College-ben, oktatási céllal. Elterjedésében nagyban közrejátszottak az 1980-as években elterjedt számítógépek, melyeknél gyakran a számítógéppel egybeépítve adták a BASIC értelmezőt. Ezekben a különböző számítógépeken futó BASIC programok szinte mindig inkompatibilisek voltak egymással: az egyik géptípusra írt programot más számítógéptípusokon nem lehetett futtatni. Nagy lökést jelentett a nyelv elterjedésében a DOS operációs rendszer elterjedése, melynek újabb verzióiba beépítették a Qbasic nevű BASIC
változatot, melynek a 4.5-ös és a 7.0-ás verziója alkalmas *.exe és *.com kiterjesztésű futtatható program létrehozására is.). Ilyenek (de modernebbek) még a: Javascript Perl Python PHP - http://hu.wikipedia.org/wiki/vita:programoz%c3%a1si_nyelv