bevezetés. elvárások
Post on 15-Jan-2016
41 Views
Preview:
DESCRIPTION
TRANSCRIPT
Alkalmazások és operációs rendszerek optimizálása
„Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar
Bevezetés. Elvárások
előadás
dr. Robu Juditszeminárium
drd. Lukács Sándor
1
2006
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
2Bevezető
a kurzus „tematikai” célja: egy rövid betekintőt nyújtani „hardverközeli” programozási területekre 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
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
3Előadások a félév során 1
2. Programok fordítása, szerkesztése, végrehajtása (Visual C, Windows)
3. x86-os védett üzemmód (Windows NT alatt) 4. Az AMD64 architektúra bemutatása 5. Programok visszafejtése, dizassembly.
Debuggerek és Profilerek 6. SIMD MMX assembly programozás 7. SIMD SSE assembly programozás
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
4Elő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ó
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
5Általános elvárások
nincs félév végén elméleti vizsga a vizsga helyett féléves projekt + dokumentációk
előadásra járni nem kötelező 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ő
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
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
6Vizsgára leadandók
egy csoportos projekt (2-4 személy) egy, a projekthez tartozó dolgozat
az elméleti és technikai háttér bemutatása az implementáció fontosabb-specifikusabb részei felhasználói dokumentáció
egy programozói dokumentációt minden egyes modul, függvény, struktúra stb. szerepe,
szemantikai és funkcionális leírása 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.
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
7A dolgozattal kapcsolatos elvárások
könnyen olvasható, átlátható, követhető elvártak: absztrakt, tartalomjegyzék, bibliográfia
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)
Times New Roman 12 pontos betűtípus, másfeles sorköz, ékezetes karakterek, jól struktúrált van egy segítő sablon (nem kötelező használni)
a programozói dokumentációhoz javasolt a Doxygen nem kötelező: másképpen megírt alapos, pontos
dokumentációt is elfogadunk
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
8Projekttel kapcsolatos elvárások 1
minden projekt többszemélyes (2-4) minden hallgató egyaránt kódol és dokumentá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 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
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
9Projekttel kapcsolatos elvárások 2
egy függvény maximum 50 soros lehet minden függvény visszatérési értékét ellenőrizni kell
kivéve alapvető eseteket, mint pl. printf 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
MY_LITTLE_STRUCT, MY_BIG_ENUM, DWORD a függvények elnevezése kapitálisokkal történik
MyShortFunction, MyCrazyIterativeStub a paraméterek mind nagy betűvel keződnek és SAL-al íródnak
(__in int Alma, __in_opt DWORD Korte, __out_deref DWORD *Kimenet) a lokális változók mind kisbetűvel kezdődnek
int alma, int kekAlma, int pirosZoldAlma 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
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
10Ké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
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
11Elvárt előzetes ismeretek
elvárt: az x86-os ASM ismeret a C nyelv alapos ismerete, valamint a Visual C
környezet ismerete (C++ jól fog) a Win32 API programozás alapvető ismerete dokumentációk olvasása, információk
keresése (MSDN, Google, fejlesztői fórumok)
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
12x86-os architektúra
8 általános regiszter 6 szegmens regiszter valós üzemmód (real mode)
16 bites, DOS védett üzemmód (protected mode)
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
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
13Komplementer kód
egész értékek ábrázolása gyors és egyszerű aritmetikai műveletek
legnagyobb helyértékű bit = előjel bit pozitív érékek
az előjel bit 0 a pozitív érték tárolódik n-1 biten
negatív érékek az előjel bit 1 2n-x tárolódik n-1 biten
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
14x86-os 16 bites memória címzés
szegmens16:offszet16 lineáris-cím20
SSSS0 + OOOO LLLLL
near és far pointerek memória modellek (DOS, Turbo Pascal stb.)
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
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
1532 bites regiszterek elérése
mindig elérhetők, 16 bites módban is 0x66 prefix: 16 bites ↔ 32 bites operandusok 0x67 prefix: 16 bites ↔ 32 bites címzés
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
16A verem működése
paraméterek átadása temporális tárolási hely, lokális változók
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
17Paraméterek átadása
Pascal konvenció (pascal) paraméterek a megadott sorrendben a hivott fél takarítja a vermet
C konvenció (cdecl) paraméterek fordított sorrendben a hivó fél takarítja a vermet
stdcall konvenció paraméterek fordított sorrendben a hivott fél takarítja a vermet
register / fastcall konvenció az első két paraméter ECX, EDX (MS specifikus) általában a hivott fél takarítja a vermet
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
18EFLAGS
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
19Adatmozgató 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
PUSH r/m/i POP r/m PUSHA, POPA PUSHF, POPF BSWAP r32 XLAT
nem módosítják a flageket
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
20Aritmetikai 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, CWD, CWDE, CDQ NEG r/m
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
21Logikai 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
módosítják a SF, ZF és PF flaget
AND 0 1 OR 0 1
0 0 0 0 0 1
1 0 1 1 1 1
XOR 0 1 NOT 0 1
0 0 1 1 0
1 1 0
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
22Bitmanipuláló utasítások 1
bit eltolás – SHL, SAL, SHR, SAR r/m,i8 vagy r/m,CL a legutolsó kimenő bit CF-be kerül
dupla eltolás – SHLD, SHRD r/m,r,i8 vagy r/m,r,CL bitforgatás – ROL, ROR, RCL, RCR bitteszt – BT, BTS, BTR, BTC
a tesztelt bit CF-be kerül bitkeresés – BSF, BSR r,r/m
legkisebb/legnagyobb helyértékű 1 bit keresése ZF = 1 ha nincs r/m-ben 1-es bit
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
23Vé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 i16 megszakításhívás – INT i8 IRET összehasonlítás – CMP r/m,r/m/i feltételes ugrás – Jcc címke
JC, JNC, JZ, JNZ, JP, JNP, JS, JNS, JO, JNO, ... előjeles – JL, JG, JLE, JGE, JNL, JNG, ... 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
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
24String utasítások, REP prefixek
DS:(E)SI forrás string ES:(E)DI cél string minden iteráció után nő (E)SI és (E)DI ha DF=0, csökken, ha DF=1
LODSB, LODSW, LODSD AL/AX/EAX ← DS:(E)SI STOSB, STOSW, STOSD ES:(E)DI ← AL/AX/EAX MOVSB, MOVSW, MOVSD ES:(E)DI ← DS:(E)SI CMPSB, CMPSW, CMPSD CMP DS:(E)SI, ES:(E)DI SCASB, SCASW, SCASD CMP AL/AX/EAX, ES:(E)DI
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
25Speciális utasítások
CLC, STC, CMC CLD, STD CMPXCHG r/m, reg CMPXCHG8B m64 EDX:EAX ↔ m64 LDS, LES, LSS, LFS, LGS reg,farmem LEA reg,mem LAHF AH ← SF:ZF:0:AF:0:PF:1:CF IN AL/AX/EAX, i8 vagy AL/AX/EAX, DX OUT i8, AL/AX/EAX vagy DX, AL/AX/EAX NOP LOCK prefix
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
26
Kérdéseket várok!
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
27Lehetséges projektek 1
más javaslatokat is elfogadunk, előzetes megegyezés alapján
Dizassembler 3-4 személy 16, 32 és 64 bites kód SSE, SSE2, SSE3, MMX, FPU, 3DNow! tiszta kód szegmens visszafordítása PE és PE64 állományok visszafordítása eljárások, címkék feltérképezése fordítható kód készítése pontos és részletes paracs-sor interfész listingek
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
28Lehetséges projektek 2
PE / COFF / LIB Viewer / Editor grafikus interfésszel 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
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
29Lehetséges projektek 3
32/64 bites assembler 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, SSE2, SSE3, FPU, MMX, 3DNow! NASM (vagy MASM) kompatibilitási fordítás makrók támogatása
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
30Lehetséges projektek 4
Bináris és N-áris adatstruktúrák 3 személy C és ASM kód implementálása a dokumentációban részletesen bemutatni az algoritmusokat általános C kód, könnyen adaptálható különböző adatstruktúrákra 32 bites egész, 64 bites egész és karakterlánc típusú kulcsok inicializálás, beszúrás, törlés, keresés, felszabadítás, egy adott
állapot helyességének ellenőrzése AVL fa, Piros-Fekete fa, Splay fa, bináris fa, B fa, B+ fa, 2-3 fa, 2-
3-4-5 fa, Hash tábla, duplán láncolt lista statisztikák készítése (beszúrások száma, kiegyenlítések száma,
futási idő stb.) teszt / statisztikát készítő programok
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
31Lehetséges projektek 5
NT Driver Varázsló Visual Studio 2005 alá 3 személy egy főprojekt generálása (empty, basic skeleton,
minifilter, device I/O, talán WDM) kontroll projektek generálása Win32 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
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
32Lehetséges projektek 6
NT Kernel Explorer / Monitor driver4 személyGUI (Visual C++) és parancssor interfészCPU MSR regiszterek monitorizálásaIDT, GDT, lapozási táblák feltérképezéseprocesszek és teljes memória feltérképezéseregistry monitorizálástávoli PC monitorizálása
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
33Lehetséges projektek 7
Statikus forráskód stíluselemző C-re2-3 személytördelési stílusváltozók és függvények elnevezésekommentálási stílusnagy hibatűrő képesség (hibás bemenet)konfigurálható stílusállományokautomatikus tördelési korrekció
2006BBTE, Alkalmazások és operációs rendszerek optimizálása
34
Köszönöm a figyelmet!
top related