BabeBolyai Tudomnyegyetem MatematikaInformatika Kar Alkalmazsok s opercis rendszerek
„Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Alkalmazások és operációs rendszerek optimizálása 1 Bevezetés. Elvárások előadás dr. Robu Judit szeminárium drd. Lukács Sándor 2006 BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
Bevezető 2 ¢ a kurzus „tematikai” célja: egy rövid betekintőt nyújtani „hardverközeli” programozási területekre l l ¢ ¢ assembly szintű optimalizálások Windows NT driverek fejlesztése a kurzusban szereplő témák egyik közös pontja: mindenikük valamilyen módon elvárja a kíválóan megírt, részletekbe menően optimizált programozást a kurzus „gyakorlatias” célja: minden hallgató aktívan vegyen részt egy precízen, rendszerezetten megírt projekt fejlesztésében BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
3 Előadások a félév során 1 2. Programok fordítása, szerkesztése, végrehajtása (Visual C, Windows) ¢ 3. x 86 -os védett üzemmód (Windows NT alatt) ¢ 4. Az AMD 64 architektúra bemutatása ¢ 5. Programok visszafejtése, dizassembly. Debuggerek és Profilerek ¢ 6. SIMD MMX assembly programozás ¢ 7. SIMD SSE assembly programozás ¢ BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
4 Előadások a félév során 2 8. Forráskód szintű optimizálások C-ben ¢ 9. Assembly szintű optimizálások ¢ 10. Windows NT kernel architektúra ¢ 11. Windows NT driverek fejlesztése I ¢ 12. Windows NT driverek fejlesztése II ¢ ¢ majd elválik, mi lesz igazából jó BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
Általános elvárások 5 ¢ nincs félév végén elméleti vizsga l ¢ előadásra járni nem kötelező l ¢ a vizsga helyett féléves projekt + dokumentációk minden előadás végén 1 kérdéses teszt és egyben jelenlét íródik; egy helyes válasz 0, 1 pont szemináriumokra járni általában nem kötelező l l a szemináriumokon időnként be kell mutatni a projekt és a dokumentációk helyzetét szemináriumok (laborok) szabad beszélgetés az előadás témáival és a projektekkel kapcsolatosan BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
6 ¢ ¢ ¢ Vizsgára leadandók egy csoportos projekt (2 -4 személy) egy, a projekthez tartozó dolgozat l az elméleti és technikai háttér bemutatása l az implementáció fontosabb-specifikusabb részei l felhasználói dokumentáció egy programozói dokumentációt l minden egyes modul, függvény, struktúra stb. szerepe, szemantikai és funkcionális leírása l javasolt a Doxygen generátor használata (C-re) rövid (max. 10 perces) power-point bemutató mindez a 12 -ik tanhét végig leadandó mindenik rész kötelező; amennyiben bármelyik rész hiányzik, vagy nem megfelelő színvonalú, a vizsga végső jegye 4, függetlenül a további részek minőségétől, jelenléttől stb. BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
A dolgozattal kapcsolatos elvárások 7 ¢ ¢ könnyen olvasható, átlátható, követhető elvártak: absztrakt, tartalomjegyzék, bibliográfia l l ¢ Times New Roman 12 pontos betűtípus, másfeles sorköz, ékezetes karakterek, jól struktúrált l ¢ a bibliográfiai bejegyzésekről egy-egy rövid bemutatót várunk el (5 -15 sor) a bibliográfiára mutató referenciák legyenek pontosak (forrástól függően oldal szám, fejezet szám, alcím) van egy segítő sablon (nem kötelező használni) a programozói dokumentációhoz javasolt a Doxygen l nem kötelező: másképpen megírt alapos, pontos dokumentációt is elfogadunk BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
8 ¢ ¢ ¢ Projekttel kapcsolatos elvárások 1 minden projekt többszemélyes (2 -4) l minden hallgató egyaránt kódol és dokumentál l a leadott dokumentációban és a forrásállományok fejlécében (history) legyen pontosan leírva, ki mikor mit írt-kódolt a projektek nagy része C-ben lesz megírva elvárt az alaposan megírt, könnyen olvasható, rendszerezett, helyesen tördelt, részletesen kommentelt forráskód l ezekre extrém mértékben érzékenyek vagyunk, bármilyen mulasztás szigorúan megbírálódik egy projekt Visual C/C++ 2005 alatt, Warning Level 4 -el fordítva 0 hibával és 0 figyelmeztetéssel fordítható kell legyen részben fel lehet GNU GPL, Mozilla Public, BSD stb. licenszű forráskódot használni a projekthez, a kódrész pontos megjelölésével BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
Projekttel kapcsolatos elvárások 2 9 ¢ ¢ egy függvény maximum 50 soros lehet minden függvény visszatérési értékét ellenőrizni kell l ¢ ¢ minden paraméter értékét ellenőrizni kell (minimum ASSERT) a struktúrák, felsorolások és típusok nevei mind nagybetűvel íródnak l ¢ (__in int Alma, __in_opt DWORD Korte, __out_deref DWORD *Kimenet) a lokális változók mind kisbetűvel kezdődnek l ¢ My. Short. Function, My. Crazy. Iterative. Stub a paraméterek mind nagy betűvel keződnek és SAL-al íródnak l ¢ MY_LITTLE_STRUCT, MY_BIG_ENUM, DWORD a függvények elnevezése kapitálisokkal történik l ¢ kivéve alapvető eseteket, mint pl. printf int alma, int kek. Alma, int piros. Zold. Alma minden if, while, for stb. ciklust kötelezően blokk utasítás követ, még akkor is, ha csak egy utasítást tartalmaz BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
10 Kérdéseket várunk! ¢ szeminárium / labor órákon ¢ www. cs. ubbcluj. ro/~robu/optimizalas lukacs (at) cs. ubbcluj. ro ¢ robu (at) cs. ubbcluj. ro ¢ BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
11 Elvárt előzetes ismeretek elvárt: az x 86 -os ASM ismeret ¢ a C nyelv alapos ismerete, valamint a Visual C környezet ismerete (C++ jól fog) ¢ a Win 32 API programozás alapvető ismerete ¢ dokumentációk olvasása, információk keresése (MSDN, Google, fejlesztői fórumok) ¢ BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
x 86 -os architektúra 12 ¢ ¢ ¢ 8 általános regiszter 6 szegmens regiszter valós üzemmód (real mode) l ¢ védett üzemmód (protected mode) l ¢ ¢ ¢ 16 bites, DOS 32 bites, Windows, Linux (E)FLAGS CS: (E)IP – aktuális kód DS, ES – adat SS: (E)SP – verem FS, GS – speciális szerep (E)SI, (E)DI – index regiszterek BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
Komplementer kód 13 ¢ egész értékek ábrázolása l ¢ ¢ legnagyobb helyértékű bit = előjel bit pozitív érékek l l ¢ gyors és egyszerű aritmetikai műveletek az előjel bit 0 a pozitív érték tárolódik n-1 biten negatív érékek l l az előjel bit 1 2 n-x tárolódik n-1 biten BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
x 86 -os 16 bites memória címzés 14 ¢ szegmens 16: offszet 16 lineáris-cím 20 l ¢ ¢ near és far pointerek memória modellek (DOS, Turbo Pascal stb. ) l ¢ SSSS 0 + OOOO LLLLL tiny(nn), small(nn), medium(fn), compact(nf), large(ff) a memória címzése és az operandusok mérete egymástól függetlenül lehet 16 illetve 32 bites BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
15 ¢ ¢ ¢ 32 bites regiszterek elérése mindig elérhetők, 16 bites módban is 0 x 66 prefix: 16 bites ↔ 32 bites operandusok 0 x 67 prefix: 16 bites ↔ 32 bites címzés BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
16 ¢ ¢ A verem működése paraméterek átadása temporális tárolási hely, lokális változók BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
17 ¢ ¢ Paraméterek átadása Pascal konvenció (pascal) l paraméterek a megadott sorrendben l a hivott fél takarítja a vermet C konvenció (cdecl) l paraméterek fordított sorrendben l a hivó fél takarítja a vermet stdcall konvenció l paraméterek fordított sorrendben l a hivott fél takarítja a vermet register / fastcall konvenció l az első két paraméter ECX, EDX (MS specifikus) l általában a hivott fél takarítja a vermet BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
18 EFLAGS BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
19 ¢ ¢ ¢ ¢ Adatmozgató utasítások MOV reg, reg MOV reg, mem MOV mem, reg MOV reg, imm MOV mem, imm XCHG r/m, r/m MOVSX r/m, r/m MOVZX r/m, r/m BBTE, Alkalmazások és operációs rendszerek optimizálása ¢ ¢ ¢ ¢ PUSH r/m/i POP r/m PUSHA, POPA PUSHF, POPF BSWAP r 32 XLAT nem módosítják a flageket 2006
20 ¢ ¢ ¢ Aritmetikai utasítások ADD, SUB r/m, r/m/i ADC, SBB r/m, r/m/i a CF-et használják átviteli bitként INC, DEC r/m MUL r/m AX/DX: AX/EDX: EAX ← AL/AX/EAX*r/m DIV r/m AL ← AX DIV r/m AH ← AX MOD r/m IMUL r/m AX/DX: AX/EDX: EAX ← AL/AX/EAX*r/m IMUL reg, r/m reg ← reg * r/m IMUL reg, imm reg ← reg * imm IMUL reg, r/m, imm reg ← r/m * imm IDIV r/m AL ← AX DIV r/m AH ← AX MOD r/m CBW, CWDE, CDQ NEG r/m BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
21 Logikai utasítások ¢ AND r/m, r/m/i OR r/m, r/m/i XOR r/m, r/m/i NOT r/m ¢ TEST r/m, r/m/i ¢ ¢ AND 0 1 OR 0 1 0 0 0 1 1 1 1 XOR 0 1 NOT 0 1 0 0 1 1 0 módosítják a SF, ZF és PF flaget BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
Bitmanipuláló utasítások 1 22 ¢ bit eltolás – SHL, SAL, SHR, SAR r/m, i 8 vagy r/m, CL l ¢ ¢ ¢ dupla eltolás – SHLD, SHRD r/m, r, i 8 vagy r/m, r, CL bitforgatás – ROL, ROR, RCL, RCR bitteszt – BT, BTS, BTR, BTC l ¢ a legutolsó kimenő bit CF-be kerül a tesztelt bit CF-be kerül bitkeresés – BSF, BSR r, r/m l l legkisebb/legnagyobb helyértékű 1 bit keresése ZF = 1 ha nincs r/m-ben 1 -es bit BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
23 ¢ ¢ ¢ ¢ ¢ Végrehajtást vezérlő utasítások feltétel nélküli ugrás – JMP címke eljáráshívás – CALL címke RET vagy RET i 16 megszakításhívás – INT i 8 IRET összehasonlítás – CMP r/m, r/m/i feltételes ugrás – Jcc címke l JC, JNC, JZ, JNZ, JP, JNP, JS, JNS, JO, JNO, . . . l előjeles – JL, JG, JLE, JGE, JNL, JNG, . . . l előjel nélküli – JB, JA, JBE, JAE, JNB, JNA, . . . LOOP címke, LOOPZ címke (ZF=1), LOOPNZ címke (ZF=0) JCXZ címke, JECXZ címke BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
String utasítások, REP prefixek 24 ¢ DS: (E)SI forrás string ES: (E)DI cél string l ¢ ¢ ¢ minden iteráció után nő (E)SI és (E)DI ha DF=0, csökken, ha DF=1 LODSB, LODSW, LODSD STOSB, STOSW, STOSD MOVSB, MOVSW, MOVSD CMPSB, CMPSW, CMPSD SCASB, SCASW, SCASD BBTE, Alkalmazások és operációs rendszerek optimizálása AL/AX/EAX ← DS: (E)SI ES: (E)DI ← AL/AX/EAX ES: (E)DI ← DS: (E)SI CMP DS: (E)SI, ES: (E)DI CMP AL/AX/EAX, ES: (E)DI 2006
25 ¢ ¢ ¢ Speciális utasítások CLC, STC, CMC CLD, STD CMPXCHG r/m, reg CMPXCHG 8 B m 64 EDX: EAX ↔ m 64 LDS, LES, LSS, LFS, LGS reg, farmem LEA reg, mem LAHF AH ← SF: ZF: 0: AF: 0: PF: 1: CF IN AL/AX/EAX, i 8 vagy AL/AX/EAX, DX OUT i 8, AL/AX/EAX vagy DX, AL/AX/EAX NOP LOCK prefix BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
26 Kérdéseket várok! BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
27 Lehetséges projektek 1 ¢ más javaslatokat is elfogadunk, előzetes megegyezés alapján ¢ Dizassembler l 3 -4 személy l 16, 32 és 64 bites kód l SSE, SSE 2, SSE 3, MMX, FPU, 3 DNow! l tiszta kód szegmens visszafordítása l PE és PE 64 állományok visszafordítása l eljárások, címkék feltérképezése l fordítható kód készítése l pontos és részletes paracs-sor interfész l listingek BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
Lehetséges projektek 2 28 ¢ PE / COFF / LIB Viewer / Editor grafikus interfésszel l l l 3 -4 személy (jó ha van Visual C++ GUI tapasztalat, esetleg Borland C++ Builder) fejlécek feltérképezése szekciók, importok, exportok (adat és kód) hex és raw dumpok, exportok és importok dizassembly 1 függvényre vagy teljes állományra (NDISASM vagy előző projekt) elemzés egy állományon belül tetszőleges pozícióról fejlécek, szekciók, exportok stb. kimentése, betöltése és módosítása BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
Lehetséges projektek 3 29 ¢ 32/64 bites assembler l l l l 4 személy MS COFF kimenet (MS linker és Alink kompatibilitás) tiszta bináris kimenet Intel és AT&T szintaxis (2 frontend, FLEX / BISON) SSE, SSE 2, SSE 3, FPU, MMX, 3 DNow! NASM (vagy MASM) kompatibilitási fordítás makrók támogatása BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
30 ¢ Lehetséges projektek 4 Bináris és N-áris adatstruktúrák l 3 személy l C és ASM kód implementálása l a dokumentációban részletesen bemutatni az algoritmusokat l általános C kód, könnyen adaptálható különböző adatstruktúrákra l 32 bites egész, 64 bites egész és karakterlánc típusú kulcsok l inicializálás, beszúrás, törlés, keresés, felszabadítás, egy adott állapot helyességének ellenőrzése l AVL fa, Piros-Fekete fa, Splay fa, bináris fa, B+ fa, 2 -3 -4 -5 fa, Hash tábla, duplán láncolt lista l statisztikák készítése (beszúrások száma, kiegyenlítések száma, futási idő stb. ) l teszt / statisztikát készítő programok BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
Lehetséges projektek 5 31 ¢ NT Driver Varázsló Visual Studio 2005 alá l l l l l 3 személy egy főprojekt generálása (empty, basic skeleton, minifilter, device I/O, talán WDM) kontroll projektek generálása Win 32 library projektek generálása DDKBUILD, WDK, PREfast integrálás backup integrálás dinamikus verziószám stb. bővíthető, konfigurálható sablonok példa projektek BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
Lehetséges projektek 6 32 ¢ NT Kernel Explorer / Monitor driver 4 személy l GUI (Visual C++) és parancssor interfész l CPU MSR regiszterek monitorizálása l IDT, GDT, lapozási táblák feltérképezése l processzek és teljes memória feltérképezése l registry monitorizálás l távoli PC monitorizálása l BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
Lehetséges projektek 7 33 ¢ Statikus forráskód stíluselemző C-re 2 -3 személy l tördelési stílus l változók és függvények elnevezése l kommentálási stílus l nagy hibatűrő képesség (hibás bemenet) l konfigurálható stílusállományok l automatikus tördelési korrekció l BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
34 Köszönöm a figyelmet! BBTE, Alkalmazások és operációs rendszerek optimizálása 2006
- Slides: 34