1. Tétel — Beágyazott rendszerek és programozási nyelvek elmélete
Ez a tétel két nagyobb témakört fed le: a beágyazott rendszerek tervezési lehetőségeit és kommunikációs protokolljait, valamint a programozási nyelvek elméletének és paradigmáinak alapfogalmait.
Témák
I. Témakör: Beágyazott rendszerek tervezése és kommunikációs protokolljai
- A beágyazott rendszerek feldolgozó egység megvalósításának lehetőségei: Processzor technológiák, implementációs technikák és tervezési technológiák.
- Beágyazott rendszerek tipikus perifériái.
- Kommunikációs protokollok.
II. Témakör: Programozási nyelvek elmélete és paradigmái
- Programegységek.
- Alprogramok.
- Paraméterkiértékelés, paraméterátadás.
- Blokk.
- Hatáskörkezelés, láthatóság.
- Absztrakt adattípus.
- Generikus programozás.
- A programnyelvek I/O eszközei, állománykezelés.
- Kivételkezelés.
- Párhuzamos programozás.
I. Témakör: Beágyazott rendszerek tervezése és kommunikációs protokolljai
1. A beágyazott rendszerek feldolgozó egység megvalósításának lehetőségei
Beágyazott rendszer (def.): egy nagyobb rendszer része, amely előre meghatározott feladat elvégzésére készült.
A feldolgozó egység megvalósítására több technológiai opció létezik, amelyeket a teljesítmény, a fogyasztás, a költség és a rugalmasság szempontjai alapján választanak ki.
Processzor technológiák:
- Általános célú processzorok (GPP – General Purpose Processors):
- Előnyük: Magas fokú rugalmasságot biztosítanak a szoftveres programozhatóság révén.
- Hátrányuk: Nagyobb energiafogyasztás és alacsonyabb végrehajtási sebesség specializált feladatok esetén. (Pl. mikrokontrollerek magjai, ARM Cortex-M sorozat).
- Alkalmazás-specifikus utasításkészletű processzorok (ASIP – Application-Specific Instruction-set Processors): Olyan processzorok, amelyek utasításkészletét egy adott alkalmazási területre (pl. digitális jelfeldolgozás – DSP) optimalizálták. Jó kompromisszumot jelentenek a rugalmasság és a teljesítmény között.
- Alkalmazás-specifikus integrált áramkörök (ASIC – Application-Specific Integrated Circuits): Maximális feldolgozási sebességet és minimális energiafogyasztást nyújtanak, de a fejlesztési költségük rendkívül magas (NRE – Non-Recurring Engineering), és a funkciók utólag nem módosíthatók.
- Mezőben programozható kaputömbök (FPGA – Field Programmable Gate Array): Konfigurálható logikai blokkokból állnak, amelyekben hardveres szintű párhuzamosság valósítható meg, miközben a logikai hálózat szoftveresen újrakonfigurálható.
Implementációs technikák:
- Standard áramkörök: Készen kapható mikrovezérlők vagy egylapkás rendszerek (SoC – System on Chip), amelyek gyors piacra jutást biztosítanak.
- Egyedi ASIC tervezés: Nagy sorozatú gyártás esetén gazdaságos.
- Fél-egyedi (Semi-custom / FPGA alapú) megoldások: Soft-core processzorok (pl. RISC-V vagy MicroBlaze implementálása FPGA-ban) vagy SoC-FPGA eszközök (pl. Xilinx Zynq), amelyek kombinálják a processzoros és a hardveres gyorsítást.
Tervezési technológiák:
- HW/SW Co-design (Hardver-szoftver együttes tervezés): A rendszer funkcióinak szétosztása a szoftveres (mikrokontrolleren futó kód) és a hardveres (FPGA/ASIC) megvalósítás között a hatékonyság maximalizálása érdekében.
- Magas szintű szintézis (HLS – High-Level Synthesis): Olyan tervezési módszertan, amely C/C++ nyelvű algoritmusokból automatikusan hoz létre optimalizált hardverleíró nyelvi (VHDL/Verilog) kódot.
2. Beágyazott rendszerek tipikus perifériái és kommunikációs protokolljai
Tipikus perifériák:
- GPIO (General-Purpose Input/Output): Digitális bemenetek és kimenetek (pl. gombok olvasása, LED-ek vezérlése).
- Időzítők és Számlálók (Timers/Counters): Időzítések, megszakítások generálása, impulzusszámlálás.
- PWM (Pulse Width Modulation): Impulzusszélesség-moduláció motorok sebességszabályozásához vagy LED-ek fényerejének állításához.
- ADC / DAC (Analóg-Digitális / Digitális-Analóg konverterek): Analóg szenzorjelek digitalizálása és analóg kimenetek előállítása.
Kommunikációs protokollok:
- UART (Universal Asynchronous Receiver-Transmitter): Aszinkron, pont-pont közötti soros kommunikáció (2 szál: TX, RX). Egyszerű, de alacsonyabb sebességű.
- SPI (Serial Peripheral Interface): Szinkron, master-slave alapú soros busz (4 szál: SCLK, MOSI, MISO, SS). Nagyon gyors, rövid távú chip-közi kommunikációra optimális.
- I2C (Inter-Integrated Circuit): Kétvezetékes szinkron busz (SDA, SCL), amely címzésen alapul, így több eszköz is ráköthető ugyanarra a buszra.
- CAN bus (Controller Area Network): Kétvezetékes, robusztus, differenciális buszrendszer, amelyet elosztott ipari és járműipari rendszerekben használnak zajos környezetben.
II. Témakör: Programozási nyelvek elmélete és paradigmái
1. Programegységek, alprogramok és paraméterkezelés
- Programegységek és Alprogramok: A moduláris programozás alapelemei (függvények, eljárások), amelyek logikai egységbe zárják az utasításokat, elősegítve a kód újrafelhasználását és áttekinthetőségét.
- Paraméterkiértékelés: Azt határozza meg, hogy egy alprogram meghívásakor a tényleges paraméterek kifejezései mikor és hogyan értékelődnek ki, illetve az értékük vagy hivatkozásuk hogyan adódik át a hívott alprogram formális paramétereinek.
- Paraméterátadás: Azt határozza meg, hogy a tényleges paraméter adatai milyen mechanizmussal (értékkel, címmel vagy referenciával) adódnak át a hívó környezetből a hívott alprogram formális paraméterének, és ez milyen hatással van a hívó oldali változókra.
Paraméterátadási mechanizmusok:
- Érték szerinti átadás (Call by Value): A hívó átmásolja az argumentum értékét az alprogram lokális változójába. Az alprogramban végzett módosítás nem hat vissza a hívó oldali változóra.
- Cím/Referencia szerinti átadás (Call by Reference): A hívó a változó memóriacímét (referenciáját) adja át. Az alprogram közvetlenül a memóriacímen lévő értéket módosítja.
- Név szerinti átadás (Call by Name): A paraméter kifejezésként adódik át, és minden hivatkozáskor újraértékelődik (ritkán használt, pl. Algol 60).
- Érték-eredmény szerinti átadás (Call by Value-Result): Híváskor átmásolódik az érték, visszatéréskor pedig a megváltozott érték visszamásolódik a hívó változójába.
- Szükség szerinti átadás (Call by Need): A név szerinti átadás optimalizált változata. A paraméter kifejezése csak akkor értékelődik ki, amikor először szükség van rá az alprogramban, és az eredményét a rendszer eltárolja.
2. Blokk, hatáskörkezelés és láthatóság
- Blokk: Utasítások csoportja, amely saját lokális névtérrel (hatáskörrel) rendelkezhet.
- Hatáskörkezelés (Scoping):
- Statikus (lexikális) hatáskör: A nevek láthatóságát a forráskód strukturális elhelyezkedése határozza meg.
- Dinamikus hatáskör: A név feloldása a futási idejű hívási lánc alapján történik.
- Láthatóság: Meghatározza, hogy egy adott programrészletből mely változók vagy függvények érhetők el közvetlenül.
3. Absztrakt adattípus (ADT) és generikus programozás
- Absztrakt Adattípus (ADT): Olyan matematikai modell, amely definiál egy adatszerkezetet és az azon végezhető műveletek halmazát, miközben elrejti a belső ábrázolás részleteit.
- Generikus programozás: Olyan programozási paradigma, amelyben az algoritmusok és adatszerkezetek típustól függetlenül (paraméterezett típusokkal) írhatók meg, növelve a kód újrafelhasználhatóságát.
4. I/O eszközök, állománykezelés és kivételkezelés
A programozási nyelvek I/O (Input/Output) alrendszere biztosítja a kapcsolatot a futó program és a külső környezet (felhasználó, perifériák, fájlrendszer) között, míg az állománykezelés a másodlagos tárolókon végzett tartós adatkezelésért felelős.
Standard adatfolyamok:
- Standard bemenet: Alapértelmezett bemeneti adatfolyam (általában a billentyűzet).
- Standard kimenet: Alapértelmezett kimeneti adatfolyam (általában a konzol/képernyő).
- Standard hiba kimenet: Hibaüzenetek megjelenítésére szolgáló külön adatfolyam, amely független a kimenettől.
- I/O adatfolyam (Stream): Logikai absztrakció, amely bájtok vagy karakterek sorozataként kezeli az adatmozgatást a program és a külső környezet (perifériák, fájlok) között.
- Állománykezelés: A nem-illékony háttértárakon (SSD, HDD) lévő adatok tartós tárolását, elérését, módosítását és adminisztrációját biztosító rendszerszintű mechanizmus.
- Szekvenciális (soros) állomány: Az adatok lineáris sorrendben érhetők el; az olvasáshoz/íráshoz végig kell haladni az előző elemeken.
- Direkt állomány: Az adategységek (rekordok) közvetlenül elérhetők a fájlon belüli pozíció vagy kulcs alapján.
- Kivételkezelés (Exception Handling): Futási idejű rendellenességek strukturált kezelésére szolgáló mechanizmus (például:
try,catch,finally,throw), amely megakadályozza a program váratlan leállását, és biztosítja az erőforrások szabályos felszabadítását.
5. Párhuzamos programozás
A párhuzamos programozás célja a számítási teljesítmény növelése feladatok egyidejű végrehajtásával.
- Folyamat (Process): Az operációs rendszer által kezelt, önálló végrehajtási egység, amely teljesen független, izolált memóriaterülettel és erőforrásokkal rendelkezik.
- Szál (Thread): Egy folyamaton belüli végrehajtási szál. Ugyanazon folyamat szálai osztoznak a közös memóriaterületen, de saját hívási veremmel és regiszterkészlettel bírnak.
- Szinkronizáció: Mivel a szálak közös memóriát érhetnek el, a koordinációjukhoz szinkronizációs eszközök szükségesek a kritikus szekciók (közös erőforrásokat író/olvasó kódblokkok) védelmére
- Mutex (kölcsönös kizárás): egyszerre csak egy szálat enged be a szekcióba
- Szemafor: körlátozott számú szál egyidejű hozzáférését engedélyezi
- Monitor: Magasabb szintű nyelvi szerkezet, amely magába foglalja az adatokhoz való kizárólagos hozzáférést és a feltételes változókon keresztüli várakozási mechanizmusokat.
- Veszélyek:
- Versenyhelyzetek: több szál egyidejűleg próbálja írni/olvasni az adott adatot.
- Holtpontok: olyan blokkolási helyzet, ahol két vagy több szál kölcsönösen egymás által lefoglalt erőforrásokra vár, így mindegyik végtelen ideig blokkolva marad.
- Kiéhezés: Olyan állapot, amikor egy szál a hibás ütemezési vagy priorizálási stratégia miatt sosem kapja meg a futásához vagy az erőforrás eléréséhez szükséges időt.
Hasznosnak találtad ezt a tételt?
Ezek a kidolgozások minden hallgató számára ingyenesek. Ha időt spóroltál vele, fontold meg egy borravaló hagyását.
☕ Hívj meg egy kávéra