Bevezetés a rendszerprogramozásba Armv9-A platformon
VIMIBXAV029-00 | Szabadon választható | Kredit: 2 | Hivatalos tantárgyi adatlap
A tantárgy célkitűzése
A tantárgy célkitűzése, hogy az alapfokú számítógépes architektúrák, operációs rendszerek, valamint C programozási ismeretekkel rendelkező hallgatók tudását kiegészítse alacsony szintű, hardverközeli, performancia kritikus programozási ismeretekkel, nagy hangsúlyt fektetve a versenyszférában a mindennapokban alkalmazott gyakorlatra. Az oktatás során külön figyelmet kap nem csak az alacsony szintű szoftverfejlesztés az Armv9-A architektúrán, hanem a rendszerfejlesztés is, valamint a példákban szereplő Arm Cortex-A és Cortex-X alkalmazásprocesszor
platformok, illetve az ezek által nyújtott újdonságok és lehetőségek. A tárgy részletesen bemutatja, hogy mire kell figyelnie egy nagy hatékonyságot követelő szoftvert fejlesztő mérnöknek, hogy munkájában effektíven teljesítsen a jelenlegi ipari trendek által támasztott elvárásokkal szemben (pl. biztonság, hatékonyság). A tárgy feltételezi, hogy a hallgatók legalább alapszinten ismerik az operációs rendszerek, processzorok felépítését. A tárgy teljesítéséhez továbbá ajánlott a C programozási nyelvben legalább alapszintű jártassággal rendelkezni.
Kovácsházy Tamás
docens
tárgyfelelős
A tárgy oktatói
Kovácsházy Tamás
docens
2 fő
további közreműködő
A tantárgy részletes tematikája
- Részletek a programozási nyelvből, amin gyakran átsiklunk, de fontosak a minőségi kód írásához. "Mire jó ez az egész?" - Tömbök, láncolt listák és egyéb adatszerkezetek az operációs rendszer nézőpontjából - "Hogyan lehet optimálisan kihasználni az adatstruktúrákat?", példákkal. Kulcsszavak: C, array, linked list, workqueue, map, cache-friendly structs, undefined behaviour
- "Mit csinál az IDE a háttérben?" - A forráskódtól a "Hello World"-ig. A fordító, preprocessor és a linker a háztető alatt. Kódgenerálás és a különböző optimalizálások rejtelmei, kitérve az Armv9-A különlegességeire. Kulcsszavak: Compiler, preprocessor, linker, abstract syntax tree, link time optimisation, intermediate representation / language, profile guided optimization, object files, shared libraries, ELF, DWARF
- "Mi történik a main előtt? És miért pont a main?" - A libc, runtime és a dinamikus linker világa arm64 Linux platformon bemutatva. Kódgenerálás és végrehajtás futó alkalmazás során. Kulcsszavak: C runtime, libc, dynamic linker, ahead-of-time compilation, just-in-time compilation, library loading
- "Milyen alternatívák vannak alkalmazás fejlesztésre?" - Élet a C nyelven túl, alkalmazás fejlesztés modern C++ és Rust mellett. Az Arm C Language Extensions bemutatása a gyakorlatban. Kulcsszavak: Modern / Embedded C++, Rust
- "Mit is csinál a kódom? Hogyan kezeli az operációs rendszer és a hardver?" - Függvényhívástól a végrehajtásig. A 64-bites Arm ABI bemutatása példákkal. Kulcsszavak: API vs ABI, architecture, micro-architecture, calling conventions, cache, virtual address - intermediate physical address - physical address
- "Miért azt csinálja a kódom? Hogyan lehetne teljesen kihasználni a hardverben rejlő lehetőségeket?" - Általános betekintés a CPU (mikro)architektúrába. Esettanulmány: Cortex A és Cortex X alkalmazásprocesszorok. Kulcsszavak: Latency, throughput, pipeline, stalls and bubbles, in-order execution, out-of-order execution
- "Miért és hol lassú a kódom?" - Első lépések a natív és nem-natív alkalmazások optimalizáláshoz, hot-spotok megtalálása könnyedén. Esettanulmány: Cortex A/X alkalmazásprocesszorokon futó Linuxos alkalmazás vizsgálata. Kulcsszavak:Tracing, profiling, Perfetto, MagicTrace, ftrace, strace, debugging
- "Hogyan lehetne mindenhol a lehető leghatékonyabb a kódom?" - Architekturális kiegészítők kihasználása alacsony és magas szinten. Az Armv9-A architektúra felhasználása a végletekig. Kulcsszavak: SIMD, Neon, Scalable Vector Extension, Scalable Matrix Extension, intrinsics, Amdahl's law
- "Miért pont segmentation fault? Miért is fontos az alkalmazásunk biztonsága?" Biztonsági funkciók és szolgáltatások bemutatása korszerű arm64 Linux platformon. Kulcsszavak: SELinux, MAC, Return-Oriented Programming, JumpOriented Programming, Meltdown/Spectre, reverse engineering, memory bugs, Branch Target Identification, Pointer Authentication, Memory Tagging Extension, Control Flow Integration.
- "Hol rontottuk el? Miért nem úgy működik ahogy szeretném?" - Párhuzamos programozás és nehezen debuggolható problémák. Az Armv9-A architektúra által nyújtott debuggolást segítő funkciók bemutatása Cortex A/X alkamazás processzorokon. Kulcsszavak: Atomic operations, cache coherency, weaklyordered memory model, memory barriers
- "Miért kell nekem licenc? Hogyan oszthatom meg a kódomat?" - Fejlesztéstől a termékig, best practices. Kulcsszavak: open source, license, contribution, Software Development Lifecycle, style guide, checkers, linters, Code Review, version control.
- Mai Embedded A-R-M software stack. - "Miért van rá szükség?". Kulcsszavak: MCU független kód, compiler független kód.
- Szabad konzultáció és demonstráció.
- Zárthelyi.
BME-MIT