Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar AMD64 architektúra Windows alatt előadás dr.

Hasonló előadás


Az előadások a következő témára: "Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar AMD64 architektúra Windows alatt előadás dr."— Előadás másolata:

1 Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar AMD64 architektúra Windows alatt előadás dr. Robu Judit szeminárium drd. Lukács Sándor 4 2006

2 CRK 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 2 Copyright / Felhasznált anyag a prezentáció részben felhasználja a Windows Operating System Internals Curriculum Resource Kit-ben található prezentációkat az eredeti anyagot David A. Solomon, Mark E. Russinovich és Andreas Polze készítették a Microsoft licenszelte az anyagot és szabadon felhasználhatóvá tette akadémiai környezetben a MSDNAA / CRK keretében a teljes licensz megtalálható a következő címen: http://www.msdnaa.net/curriculum/license_curriculum.aspx ebben a prezentációban külön meg vannak jelölve azok a slide-ok, amelyek a CRK felhasználásával készültek a prezentáció részben felhasználja a Technical Details Of Microsoft Windows For The AMD64 Platform, WinHEC 2003, prezentáció slide-ait az egyetem (BBTE) keretében a CRK és WRK szabadon elérhető és letölthető a diákok számára [ide utólag, amikor felkerül a CRK a hálózatra link kerül]

3 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 3 AMD64 architektúra – Bevezető az AMD cég kibővítette az eredeti x86-os architektúrát a processzor képes 32 bites x86-os módban (Legacy) teljesen úgy működni, mint egy klasszikus 32 bites processzor létezik egy új üzemmód, a kibővített (vagy Long) üzemmód, amelyben a processzor egy 64 bites operációs rendszert és párhuzamosan 32 vagy 64 bites alkalmazásokat támogat a 64 bites üzemmód 64 bites címzést és általános regisztereket nyújt a kibővítések annyira egyszerűek, hogy a processzor párhuzamosan támogatja maximális sebességen az x86-os és AMD64-es alkalmazásokat teljes 32 bites kompatibilitás – nem úgy mint az Intel ITANIUM IA-64 esetén az Intel cég hamarabb készíett egy 64 bites architektúrát a Hewlett-Packard-al közösen → Intel ITANIUM, IA-64 EPIC arhitektúra, az expliciten erre fordított szoftverek gyorsabbak szoftveresen emulált x86-os arhitektúra – x86-os programok lassúbbak később az Intel elkészítette az AMD64 arhitektúra klónját → Intel EM64T AMD64 és Intel EM64T együtt → x64

4 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 4 AMD64 üzemmódok

5 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 5 R15 R8 RAX63 AMD64 bővítés XMM8 XMM15 (x87/MMX regiszterek nem használtatók 64 bites Windows alkalmazásokban) általános regiszterek x87 / MMX079 AH EAX AL310715 SSE hagyományos x86-os EDI EAX 1270 XMM0 XMM7 AMD64 programozási modell 1

6 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 6 AMD64 programozási modell 2

7 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 7 AMD64 specifikus módosítások 1 az alapértelmezett operandusok mérete 32 bit 64 bites operandusok → REX prefix 16 bites operandusok → 0x66 prefix az alapértelmezett mutatók mérete 64 bit a relatív címek és azonnali értékek mérete 32 bit 32 bites műveletek esetén a cél regiszter felső 32 bitje (63-32) lenullázódik (zero extended) MOVSXD r64, r/m32 – előjelese kiterjesztés azonnali értéket közvetlenül csak MOV utasítással lehet betölteni általános regiszterekbe

8 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 8 AMD64 specifikus módosítások 2 a veremműveletek 64 bitesek a verem 128 bites határra van igazítva megengedett a RIP relatív címzés könnyű a pozíció-független kód írása a függvényhívások az első négy egész paramétert RCX, RDX, R8 és R9-be helyezik ilyen esetben is foglalódik le hely a veremben a paraméterek esetleges ideiglenes tárolására

9 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 9 REX prefixek 1 az opcionális REX prefixek felhasználásával lehet 64 bites operandusokat kiválasztani a REX egy prefix család, 16 prefix (0x40-0x4F) 3 további kibővített regiszter kiválasztó bit a 64 bites utasítások átlagosan 0.4 bájttal nőnek a REX prefixek megengedik 16 általános illetve 16 SSE regiszter címzését mindig elegendő egyetlen REX prefix, akárhány új regiszter szerepel az utasításban

10 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 10 REX prefixek 2 Instruction Prefixes InstructionPrefixes Optional REX Prefix Byte 0100WRXB MODRM r/m, SIB base, or opcode reg field extension SIB index field extension MODRM reg field extension Operand Size: 0 = 32-bit, 1 = 64-bit Immediate Displace-ment M O D R M S I B OPCODE

11 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 11 REX prefixek 3

12 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 12 REX prefixek 4

13 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 13 AMD64 támogatás ellenőrzése CPUID utasítással CPUID – processzor specifikus tulajdonságok, információk szoftveres ellenőrzése EAX:EBX:ECX:EDX ← az EAX-ban megadott kód által kiválasztott információ értéke (maximum 128 bit) 0000.0000h – maximális standard informáicó kódja és CPU gyártó pl. EBX:ECX:EDX = „AuthenticAMD” 8000.0000h – maximális kiterjesztett információ kódja 8000.0001h – EAX = kibővített CPU tulajdonságok 29-ik bit LM (Long Mode), ha 1 → a processzor támogatja az AMD64-es üzemmódot 8000.0008h – virtuális és fizikai címzés mérete

14 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 14 Modell specifikus regiszterek (MSR-ek) már az Intel Pentium esetén megjelentek pl. Intel Pentium 4 több tucat MSR-el rendelkezik szám szerint azonosítják be őket speciális funkcionalitásokat vezérelnek memória konfigurálás utasítás-szett vagy funkcionalitás kibővítések mikrokód update számláló és statisztika MSR-ek processzor modellenként és gyakran verziónként változnak van egy jó néhány amely szinte mindig jelen van két utasítás írásra és olvasásra RDMSR: EDX:EAX ← ECX által kiválasztott MSR WRMSR: ECX által kiválasztott MSR ← EDX:EAX

15 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 15 Szegmentálás, szegmensregiszterek a szegmentálás nem használt 64 bites módban már processzor szinten FLAT architektúra DS, SS, ES egyáltalán nem használt mindig egy teljes 2 64 méretű szegmenst jelölnek meg a CS csak a D és L biteket használja FS, GS használható mint bázisregiszter FS – TEB (Thread Environment Block) mutató Windows alatt GS – PCR (Processor Control Block) mutató Windows alatt SWAPGS – rendszerfüggvények számára gyors GS csere nincs PUSH / POP CS, DS, SS és ES számára a PUSH / POP FS, GS csak 32 bites részt tárol a teljes 64 bites báziscím MSR-en keresztül érhető el

16 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 16 64 bites szegmens deszkriptorok ha a CS.L bit = 1, akkor 64 bites deszkriptor / 64 bites mód, különben 32 bites kompatibilitási mód a 64 bites szegmensek / deszkriptorok esetén a LIMIT mező egyáltalán nem használt csak CS.D = 0 engedélyezett 64 bites üzemmódban

17 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 17 Call kapuk. Kanonikus címzés a Call és Trap kapuk ki vannak bővítve 16 bájtra az ofszettek mérete 64 bit a 64 bites címeket kanonikus formában kell mindig megadni kanonikus cím, ha az összes legrangosabb, az architektúra által nem implementált bit vagy mind 1, vagy mind 0

18 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 18 SWAPGS példa megszakításkezelők / rendszerfüggvényhívás kezelők használhatják fel KernelGSbase MSR – C0000102h – kernel adatstruktúrák báziscíme SystemCallEntryPoint: SwapGS ; get kernel pointer, save user GSbase mov gs:[SavedUserRSP], rsp ; save user’s stack pointer mov rsp, gs:[KernelStackPtr] ; set up kernel stack push rax ; now save user GPRs on kernel stack. ; perform system service. SwapGS ; restore user GS, save kernel pointer

19 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 19 Rendszerregiszterek GDTR, IDTR – 16 bites limit, 64 bites bázis LGDT, LIDT – 10 bájtos operandust használnak 16 bites limit mezők LDTR, TR – 16 bites limit, 64 bites bázis 128 bites deszkriptorok 32 bites limit mezők

20 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 20 EFER regiszter (Extended Feature Enable Register) C0000080h című MSR SCE – SYSCALL / SYSRET engedélyezése LMA – (csak olvasható) a LONG mód aktív, ha 1 LME – LONG mód engedélyezése

21 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 21 Átváltás LONG módba több lépésben történik előbb lapozás nélküli 32 bites védett üzemmódba váltunk aktiváljuk a fizikai címkiterjesztést – CR4.PAE = 1 betöltjük a 64 bites lapozás báziscímét – CR3 = PML4 bázicíme engedélyezzük a LONG üzemmódot – EFER.LME = 1 aktiváljuk a lapozást – CR0.PG = 1 a processzor egyszerre aktiválja a lapozást és a LONG üzemmódot, így EFER.LMA = 1-re vált

22 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 22 Kompatibilitási mód egy olyan almódja a LONG módnak, amelyben a hagyományos x86-os alkalmazások módosítás nélkül, bináris formában futtathatók a kód szegmens alapján választódik ki (CS.L=0) távoli hívások segítségével lehet a 64 bites és a kompatibilitási módok között vátlani → gyorsabb, mint egy teljes üzemmód váltás a hagyományos alkalmazások módosítás nélkül futnak x86-os szegmentálás x86-os alapértelmezett adat és cím méretek a rendszerfüggő részek 64 bites szemantikát alkalmaznak a megszakítás és kivételkezelés 64 bites LONG módot használ a lapozás teljes mértékben 64 bites szemantikát alkalmaz

23 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 23 Rendszerszintű x64-es elvárások a BIOS standard x86-os, 32 bites kód a 64 bites üzemmódba való váltást az SO vezérli nincsenek további OEM / firmware elvárások a 32-bites alkalmazások esetén a processzor teljes x86-os kompatibilitást nyújt, teljes sebességgel nincs Virtual-86-os üzemmód támogatás (16 bit) az SO egy konverziós réteget nyújt a kernel API-k hívása szintjén a 64-bites alkalmazások 64 bites operációs rendszert és 64 bites eszközmeghajtókat igényelnek egy Windows disztribúció rengeteg drivert tartalmaz nem támogatott a firmware függvények hívása (pl. Net / Video BIOS); kivételesen egy minimális emulációs réteget biztosít a HAL a video számára 64 bites fejlesztő eszközök szükségesek fordítóprogramok, szerkesztők, függvénykönyvtárak debuggerek, teljesítmény elemzők (profilerek)

24 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 24 x64-es virtuális címterület Windows-ban felhasználói címterület ~8TB 0x0000.0001.0000 → 0x07FF.FFFE.FFFF növekedhet a továbbiakban kernel címterület 248TB 1TB system cache 512GB per-process kernel mapping (hyperspace) 512GB per-session kernel mapping (hydra) 128GB paged pool 128GB non-paged pool 0000,0000,0000,0000 0000,007F,FFFF,FFFF FFFF,0800,0000,0000 FFFF,F78F,FFFF,FFFF FFFF,F800,0000,0000 FFFF,FFFF,8000,0000 FFFF,FFFF,FFFF,FFFF System Space 1 System Space 2 User Mode Space (8 TB) HAL (2 GB) No Access (64K) FFFF,FFFF,7FFF,FFFF

25 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 25 x64-es alkalmazások 1 PE32+ állományformátum (max. 2GB kód/adat szegmens) még mindig a Win32-es API-t alkalmazzák bizonyos 64 bites logikai kiterjesztésekkel (adattípusok) egy 32 bites DLL-el csak IPC-n keresztül kommunikálhat egy 64 bites alkalmazás új, előre jól dokumentált 64-bites ABI (Application Binary Interface) új, az x86-tól eltérő kivételkezelés táblázat alapú (mint a RISC architektúrában), nem terheli a végrehajtási útvonalat ha nincs kivétel minden assemblyben megírt kód is kötelezően kell támogassa a standard prológust, epilógust és verem-igazítást (stack alignment) védelem és biztonság a 64 bites laptábla bementek támogatják az NX bitet minden verem és heap alapértelmezésből tiltja a kód végrehajtását

26 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 26 x64-es alkalmzások 2 a lebegőpontos műveletek kizárólag SSE és SSE2-ben íródtak meg gyorsabb CPU/FPU kontextus váltás 16 darab 128 bites lebegőpontos regiszter (a 8 darab verem szerűen struktúrázott FPU regiszter helyett) az x87, MMX ™ és 3DNow! utasítások NEM támogatottak 64 bites alkalmazások esetén az összes általános libc matematikai eljárást SSE/SSE2-ben újra implementáltak → minden eljárás legalább olyan gyors, mint x87-es utasítások felhasználása esetén a kompiler és az SO szabadon használhat több újabb x86-os utasítást (Pentium, Pentium III specifikusak) CMOVcc SSE2

27 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 27 ABI: Skaláris adattípusok Skaláris típusC adattípusLefoglalt méretIgazítás (Aligment) INT8char1-byteByte UINT8unsigned char1-byteByte INT16short2-bytes2-byte UINT16unsigned short2-bytes2-byte INT32int, long4-bytes4-byte UINT32unsigned int, long4-bytes4-byte INT64__int648-bytes8-byte UINT64unsigned __int648-bytes8-byte FP32float4-bytes4-byte FP64double8-bytes8-byte POINTER*8-bytes8-byte __m64struct __m648-bytes8-byte __m128struct __m12816-bytes16-byte

28 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 28 Regiszter(ek)StátuszFelhasználás RAXVolatileVisszatérési érték RCX, RDX, R8, R9VolatileNégy egész paraméter (1-4) R10:R11VolatileMBP, a hivó eljárás kérése szerint R12:R15, RBX, RSI, RDI, RBPNon-volatileMBP RSPNon-volatileVeremmutató XMM0:XMM3VolatileNégy lebegőpontos paraméter (1-4) XMM4:XMM5VolatileMBP, a hivó eljárás kérése szerint XMM6:XMM15Non-volatileMBP MXCSR [0..5]VolatileLebegőpontos státusz MXCSR [6..15]Non-volatileFP vezérlőbittek, MBP MBP = Must Be Preserved a hivott eljárás nem módosíthatja ABI: Eljárás hívások regiszterhasználata (Register Call Conventions)

29 CRK 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 29 31 22 21 12 11 0 10 bits 12 bits Page table selector Page table selector Page table entry selector Page table entry selector Byte within page 47 39 38 30 29 21 20 12 11 0 9 bits 12 bits Page table selector Page table selector Page table entry selector Page table entry selector Byte within page x86 32-bit x64 64-bit (a jelenlegi AMD64 és Intel EM64T processzorok csak 48. bites virtuális címzést implementálnak) Page directory pointer selector Page directory pointer selector Page map level 4 selector 9 bits x64-es lapozás 1

30 x64-es lapozás 2PDOPTO 64-bit VA Offset CR3 Az AMD64 architektúra az x86-os PAE módot 64-bites virtuális (VA) és 52 bites fizikai (PA) címzésre bővíti ki. A jelenlegi Opteron és Athlon 64 processzorok 48 bites virtuális és 40 bites fizikai címzést támogatnak. 51121211 0202129634839473038PDP Sign-Extend PML4-O Page PA Page PA 52-bitPA51 1211 0 Offset PML4 Base (PA) PML4-O 511211230 000 Access PML4 Entry PDP Base (PA) PDP Base (PA) PDP 511211230 000 Access PDP Entry Page Dir Base (PA) 511211 230 PDO 000 Access PD Entry Page Tbl Base (PA) 511211 230 PTO 000 Access PT Entry

31 x64-es lapozás 3 Page table selector Page table selector Page table entry selector Page table entry selector Page Map Level 4 Laptáblák (Page Tables) Fizikai lapok (maximum 2 40 ) 1 2 3 4 5 7 8 9 10 11 12 PFN 0 Byte within page Page dir pointer Page map Level 4 Lapkönyvtárak (Page Directories) Lapkönyvtár mutatók (Page Directory Pointers) CR3 47 0 CRK 6 6

32 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 32 Rendszerfüggvények hívása Windows-ban felhasználói mód Windows / ANSI C alkalmazás→ call fwrite() C Run-Time Library (libc)→ call WriteFile() KERNEL32.DLL (Win32 subsystem)→ call NtWriteFile() NTDLL.DLL (Native)→ call NT kernel (INT2E / SYSCALL) kernel mód NTOSKRNL.EXE (KiSystemService )→ call NtWriteFile() NTOSKRNL.EXE (NtWriteFile)→ paraméterek ellenőrzése, majd call ZwWriteFile() NTOSKRNL.EXE (ZwWriteFile)→ I/O kérés (I/O Request Packet) az I/O Manager-en keresztül... állományrendszer és eszköz meghajtók... felhasználói módban jelen van még a USER32.DLL, GDI32.DLL kernel módban jelen van még a WIN32K.SYS

33 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 33 64 és 32 bites processzek Windows-ban a Windows szinte teljes mértékben „rétegezett” (layered) felépítésű a Windows x64 a WOW64 (Windows on Windows) segítségével hajtja végre a 32 bites alkalmazásokat kizárólag user mód szintjén futhat 32 bites kód a teljes kernel és az összes driver 64 bites

34 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 34 WOW64 konverziós réteg (WOW64 Thunking Layer) teljesen az operációs rendszer része transzparens a felhasználói programok számára a WOW64 mindig a 32 bites processzek keretében helyezkedik el minden 32 bites alkalmazás dinamikusan van linkelve a WOW64 konverziós réteghez a WOW64 implementál minden 32 bites rendszerfüggvény hívást konvertálja a paramétereket szükség esetén meghívja a 64 bites kernelt konvertálja a visszatérített értékeket az olyan 32 bites alkalmazások, amelyek támogatják a 2GB feletti címeket (large-address-aware) egy kibővített, 4GB-os felhasználói címterületettel rendelkeznek a 2GB feletti címeket nem támogató alkalmazások számára a WOW64 egy 2GB-os felhasználói címterületet biztosít

35 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 35 a WOW64 a megefelelő módszer, 32 és 64 bites kód (DLL stb.) csak IPC-n keresztül kommunikálhat a megszokott Windows ABI, a megszokott fejlesztői eszközök x87-es lebegőpontos műveletek SSE/SSE2, MMX ™ és 3DNow! egyaránt támogatott inline ASM támogatva van, akárcsak x86 esetén mivel egy AMD64-es Windows sokkal több fizikai memóriát tud felhasználni, ezért egyszerre több 32 bites alkalmazást támogat egy 64-bites SO hatékonyabb és gyorsabb mint egy 32 bites SO azonos hardveren, ezért egy 64 bites SO + 32 bites alkalmazás páros gyorsabb mint egy teljes 32 bites megoldás sok más tényező is közrejátszik, nem csak a CPU, ezért nem mindig igaz ez a valóságban 32 bites Windows alkalmazások végrehajtása WOW64 alatt

36 2006BBTE, Alkalmazások és operációs rendszerek optimizálása 36 Köszönöm a figyelmet!


Letölteni ppt "Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar AMD64 architektúra Windows alatt előadás dr."

Hasonló előadás


Google Hirdetések