590 likes | 772 Views
Portierung von Applikationen auf 64 Bit Windows. Mike Becker, Microsoft Deutschland GmbH Senior Consultant Microsoft Services, Custom Development mbecker@microsoft.com. Agenda. 64 Bit Plattform Portierungsziele und -wege Entwicklungswerkzeuge Portierung von Win32 auf Win64
E N D
Portierung von Applikationen auf 64 Bit Windows Mike Becker, Microsoft Deutschland GmbH Senior Consultant Microsoft Services, Custom Development mbecker@microsoft.com Vortragstitel STC 02. – 03. Juni 2004
Agenda • 64 Bit Plattform • Portierungsziele und -wege • Entwicklungswerkzeuge • Portierung von Win32 auf Win64 • Portierung von Treiber • Portierung von UNIX auf Win64 • MS SQL Datenbankportierung • Portierungsorganisation • Softwareoptimierung Vortragstitel STC 02. – 03. Juni 2004
Agenda • 64 Bit Plattform • Portierungsziele und -wege • Entwicklungswerkzeuge • Portierung von Win32 auf Win64 • Portierung von Treiber • Portierung von UNIX auf Win64 • MS SQL Datenbankportierung • Portierungsorganisation • Softwareoptimierung Vortragstitel STC 02. – 03. Juni 2004
64 Bit Hardware • CPU • Intel Itanium Architektur (IA64) • Itanium 2 (1,5 GHz, 6MB L3C) • Montecito, Deerfield… • Extended Architecture • AMD x86-64 • Athlon 64 (1,6 GHz, 1MB L2C) • Athlon 64 FX • Opteron (1,4 – 2,2 GHz, 1MB L2C) • Athens, Egypt, San Diego, Toledo, Trinidad… • Intel • Xeon, Prescott... • Rechner • Dell, IBM, HP, Unisys, Angstrom Microsystems, NEC, RackSaver, HPC Systems,… Vortragstitel STC 02. – 03. Juni 2004
Microsoft 64 Bit Produkte • Betriebssysteme • Microsoft Windows XP 64 Bit Edition • Microsoft Windows Server 2003 64 Bit Editions (SP1) • Enterprise Edition • Datacenter • Longhorn, … • WOW64 für Win32 Applikationen • Datenbank • Microsoft SQL Server 2000 Enterprise Edition (64 Bit) 64-Bit Edition Version 2003 Vortragstitel STC 02. – 03. Juni 2004
Microsoft Windows 64 und 32 Bit Vortragstitel STC 02. – 03. Juni 2004
Unterstützt in 64 Bit Windows • Funktionalität und Produkteigenschaften • Installation • Internet Information Server, Clustering, Active Directory, Terminal Server, etc. • Win32 Applikationen und Komponenten werden unterstützt • Multilingual User Interface für deutsch, französisch, spanisch, italienisch, japanisch and koreanisch • OEM Pre-Installation Kit, WinPE • SDK (Software Development Kit) • DDK (Driver Development Kit) Vortragstitel STC 02. – 03. Juni 2004
Nicht unterstützt in 64 Bit Windows • Subsysteme: DOS, 16-Bit, POSIX, OS/2 • .NET Framework, CLR, ASP.NET (ab 2.0 - Whidbey) • Windows Product Activation • Jet RED • Netmeeting, Windows Media Player, Windows Media Server • Power Management • System Restore • Fax • Information: “Features unavailable on 64-bit versions of the Windows Server 2003 family” (TechNet, ProdInfo) http://www.microsoft.com/technet/prodtechnol/winxppro/reskit/prka_fea_tfiu.asp http://www.microsoft.com/technet/prodtechnol/windowsserver2003/Default.asp Vortragstitel STC 02. – 03. Juni 2004
Agenda • 64 Bit Plattform • Portierungsziele und -wege • Entwicklungswerkzeuge • Portierung von Win32 auf Win64 • Portierung von Treiber • Portierung von UNIX auf Win64 • MS SQL Datenbankportierung • Portierungsorganisation • Softwareoptimierung Vortragstitel STC 02. – 03. Juni 2004
Gründe zur Portierung • Mehr Speicher • 4GB Grenze -> 16 TB Grenze • Mehr Präzision • Fließkomma Kalkulationen • Bessere Performanzwerte • Durch neue Prozessoreigenschaften • VLIW, EPIC auf Itanium • x64 auf Extended Architecture • Intelligente Befehlausführung • „High-End“ Rechner erreichen Massenmarkt • 64 Bit Softwarestrategie von Microsoft • Synchrone Auslieferung von 32 und 64 Bit Versionen • Eine Codequelle für beide Plattformen Vortragstitel STC 02. – 03. Juni 2004
Kandidaten zur Portierung • CRM, ERP • Wissenschaftliche Anwendungen mit Fließkommakalkulationen • Datenmodellierung • Systememulation • CAD • Ton-, Bild- und Videobearbeitung • “Data mining”-basierte Software Vortragstitel STC 02. – 03. Juni 2004
Portierungswege • Generelle Portierung • für monolytischen Anwendungen • für Anwendungen, wo alle Komponenten portiert können (technisch und wirtschaftlich) • Inkrementelle Portierung • Win32 und Win64 Komponenten arbeiten zusammen: WOW64 • Nicht alle Komponenten/Dienste sind verfügbar für Win64 • Quellcode verloren, Bibliotheken fehlen etc. • Wichtig: ein Quellcodebasis für alle Plattformen! Vortragstitel STC 02. – 03. Juni 2004
Agenda • 64 Bit Plattform • Portierungsziele und -wege • Entwicklungswerkzeuge • Portierung von Win32 auf Win64 • Portierung von Treiber • Portierung von UNIX auf Win64 • MS SQL Datenbankportierung • Portierungsorganisation • Softwareoptimierung Vortragstitel STC 02. – 03. Juni 2004
Microsoft Windows SDK (32+64) • Werkzeuge: • Compiler (C++) • Linker • Profiler • Debugger • Hilfswerkzeuge • Bibliotheken • CRT, MFC, ATL • Dokumentation • +Beispiele • Entwicklungsumgebungen für alle unterstützte Plattformen: • Windows 2000, Windows XP, Windows Server 2003 • Debug und Release, 32 und 64 Bit (außer Windows 2000) http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ Vortragstitel STC 02. – 03. Juni 2004
Visual Studio 6.0 • C++ Unterstützung • SDK vorausgesetzt • Zielplattform wählen • VS Integration • msdev.exe starten • Beide Plattformen unterstützt: • Win32: Windows 2000, Windows XP, Windows Server 2003 • Win64 (WOW64): Windows XP 64 Bit Edition 2003, Windows Server 2003 64 Bit Editions Vortragstitel STC 02. – 03. Juni 2004
Visual Studio .NET • C++ Unterstützung • SDK vorausgesetzt • Zielplattform wählen • Pfadanpassungen erforderlich • devenv.exe starten • Nur auf Win32 Plattform • kann nicht auf Win64 installiert werden • erstellt Win32 und Win64 Komponenten Vortragstitel STC 02. – 03. Juni 2004
Whidbey (2004) • C++ Support • .NET Support • .NET Framework 2.0 Voraussetzung • Beide Plattformen unterstützt • Win32: Windows 2000, Windows XP, Windows Server 2003 • Win64 (native): Windows XP 64 Bit Edition 2003, Windows Server 2003 Editions • Native und plattformunabhängige (.NET) Softwaremodule Vortragstitel STC 02. – 03. Juni 2004
Softwareentwicklung mit Whidbey IA64 x86 Quellcode In MSIL kompilieren AMD64 Vortragstitel STC 02. – 03. Juni 2004
64 Bit Zeitplan für Entwickler SQL Server 2000 64-bit Edition SQL Server “Yukon” DB Visual Studio 6.0/.NET Visual Studio “Whidbey” Werkzeuge Platform SDK .NET Framework “Whidbey” .NET Framework 1.1 API Windows API (Win32/Win64) Windows XP, Windows Server 2003 64-bit editions OS Aktuell “Whidbey” Vortragstitel STC 02. – 03. Juni 2004
64-bit Entwicklungsszenarien Supported Scenarios Unsupported Vortragstitel STC 02. – 03. Juni 2004
Agenda • 64 Bit Plattform • Portierungsziele und -wege • Entwicklungswerkzeuge • Portierung von Win32 auf Win64 • Portierung von Treiber • Portierung von UNIX auf Win64 • MS SQL Datenbankportierung • Portierungsorganisation • Softwareoptimierung Vortragstitel STC 02. – 03. Juni 2004
Datenmodell (1) • Win32: ILP32 • 32 Bit: Integer, Long, Pointer (plus Derivate: HANDLE, HMODULE etc.) • Win64: LLP64 • 64 Bit: LongLong, Pointer (plus Derivate: HANDLE, HMODULE etc.) • 32 Bit: Integer, Long • Neue Datentypen in Win64 • fixed precision: DWORD32, INT64, … • pointer precision: DWORD_PTR, LONG_PTR, … • specific pointer precision: POINTER_32, POINTER_64 Vortragstitel STC 02. – 03. Juni 2004
Datenmodell (2) • Einige Datentypen waren 32 Bit, jetzt 64 Bit LRESULT HANDLE LPARAM WPARAM size_t intptr_t uintptr_t • Neu sind SIZE VARIANT Typen INT_PTR(“an INT the size of a Pointer”) Also: UINT_PTR, DWORD_PTR, LONG_PTR ULONG_PTR, etc. • Tip: • Identifizieren Deklaration von Typen, die sich geändert haben • Neudeklarieren als SIZE VARIANT Vortragstitel STC 02. – 03. Juni 2004
Konstanten • Hexadezimale Konstanten • 0xFFFFFFFF ist nicht mehr -1 • 0xFFFFFFFF ist nicht mehr INVALID_HANDLE_VALUE • 0x80000000 ist keine Maske mehr für Systemadressen • #define – Compiler kann Typen nicht prüfen • Bitoperationen, Bitmasken • Tip: const statt #define Vortragstitel STC 02. – 03. Juni 2004
Pointer (1) • DAS PROBLEM ! • Win32 – 32 Bit, Win64 – 64 Bit • plus Derivate: HANDLE, HMODULE, HWND, … • „Truncation“ Problembereich: • Cast: int x;x = (int) &y;SendMessage ( a, b, wParam, (LONG) hWnd ); • Assignment: int iSize = cArray.GetSize(); // GetSize() liefert intptr_t • Tip: • Alle Casts zwischen POINTER und INT, LONG etc. – implizit oder explizit – entfernen • unions, structs überprüfen Vortragstitel STC 02. – 03. Juni 2004
Pointer (2) • Fixed byte offsets:int * pThree;struct { int iCount; int * iArray [ 6 ] } ptrS;pThree = (char*)ptrS + 16; // faktisch pTwo// Alignment!!! • Sized offsets:pThree = ( char* ) ptrS.iArray + 3 * sizeof ( int ); • Tip: Immer sizeof(), offsetof() benutzen. Vortragstitel STC 02. – 03. Juni 2004
Alignment • CPU erwartet Daten „ausgerichtet“ im Speicher • Win64: Ausrichtung auf 64 Bit Grenzen • Alternativ: „data packing“: • Probleme mit Disk I/O, IPC, … • _unaligned: macht Code langsam • ohne – Exception!!! • Tips: • auf _unaligned und #pragma pack verzichten • TYPE_ALIGNMENT(type) nutzen Vortragstitel STC 02. – 03. Juni 2004
Alignment Beispiel struct node { char *l; char s; struct tnode *prev; int i; struct node *next; } Win32 4 8 12 16 20 padding Win64 4 8 12 16 20 24 28 32 36 Vortragstitel STC 02. – 03. Juni 2004
Windows API (1) • Geringe Änderungen • Kompatibilität zu Win32 • Get/SetClassLongPtr() zusätzlich zu Get/SetClassLong() • Get/SetWindowLongPtr() zusätzlich zu Get/SetWindowLong() • Einige Konstanten wurden angepasst • Typen beachten: HWND ist nicht DWORD* • Tip: SIZE VARIANT verwenden: • LONG -> LONG_PTR Vortragstitel STC 02. – 03. Juni 2004
Windows API (2) • Umgebungserkennung • IsWow64Process() – läuft Prozess in WOW64? • GetNativeSystemInfo() – welche Architektur hat der Rechner: • 32 / 64 Bit • CPU Type: x86, IA64, AMD64, … • CPU Zusatzinfo: prozessor-spezifisch (Revision etc.) • Ab Windows XP – GetProcAddress() benutzen • Tip: Für Win32 Applikationen, die auf 32 Bit und (diversen) 64 Bit Plattformen laufen sollen Vortragstitel STC 02. – 03. Juni 2004
InterProcess Communication (IPC) • Win32 und Win64 Code – nicht in einem Prozess! • COM: 32 64: nur out-of-process • Win32 COM Objekte für Win64: • Portieren auf Win64 • COM+ OOP Applikationen • Unterstützt: Sockets, SyncObjs*, Windows Messages*, Files, Shared Memory* • *Pointerkalkulationen beachten! • Tip: Portierung oder OOP COM Vortragstitel STC 02. – 03. Juni 2004
Weitere Portierungsaspekte • #ifdef Win32 • früher für Win16 Code Abgrenzung • #ifdef ALPHAfür 64 Bit Code • printf(…) Formatspezifikationen • %p- pointers,%x– 32 Bit • %I(polymorph) und%I64(64 Bit) • Inline Assembly Code • Alle Bibliotheken und Komponenten prüfen • Win64 oder Win32, keine Mischung • Dateisystem und Registrierungsdatenbank für Win32 unter WOW64 • c:\windows\syswow64 als c:\windows\system32 • HKLM\Software\Wow6432Node Vortragstitel STC 02. – 03. Juni 2004
.NET auf Windows 64 Bit • .NET Framework 2.0 (Whidbey) • aktuell Mai `04 Beta (MSDN) • Plattform: ab Windows Server 2003 SP1 • VisualStudio „Whidbey“ • 64 Bit – native • 32 Bit – in WOW64 • Assemblies markiert für „Bitness“ • 32 Bit, 64 Bit (ia64 oder amd64), Neutral („portable code“) • .NET Framework 1.1 ab VS.NET SP3 in WOW64 Vortragstitel STC 02. – 03. Juni 2004
Portable Managed Code • Verifizierbar • Nur MSIL Code (kein native Code) • Keine Pointerkalkulationen • Interop-Regeln • Signaturen, System.IntPtr, StructLayoutAttribute, Marshal.SizeOf • Architekturunabhängig: ia64, amd64 • Keine Fließkommaoperationen • Bitoperationen vermeiden Vortragstitel STC 02. – 03. Juni 2004
Agenda • 64 Bit Plattform • Portierungsziele und -wege • Entwicklungswerkzeuge • Portierung von Win32 auf Win64 • Portierung von Treiber • Portierung von UNIX auf Win64 • MS SQL Datenbankportierung • Portierungsorganisation • Softwareoptimierung Vortragstitel STC 02. – 03. Juni 2004
Treiberportierung von 32 Bit auf 64 Bit • Windows 64 Bit - NUR 64 Bit Treiber ! • IA64, AMD64 – architekturabhängig • Microsoft Windows DDK • Treibermodel hat sich nicht geändert (W2K) • 64 Bit Treiber muss signiert werden • 64 Bit Treiber muss PnP sein • 64 Bit Treiber muss u.U. 32 Bit Anwendungen unterstützen: • IOCTL / FSCTL • I/O Puffer enthält Pointer oder Derivate • DriverVerifier geprüft Vortragstitel STC 02. – 03. Juni 2004
Treiberentwicklung für 64 Bit • Neue Datentypen (LLP64 Datenmodell) • Viele neue Funktionen • DMA Zugriff (+ neue Konventionen) • IoIs32bitProcess(), … • Alignment • wie in User-Level Anwendungen • TYPE_ALIGNMENT() • Kernel SPI: ProbeForRead(), ProbeForWrite() • STATUS_DATATYPE_MISALIGNMENT • Kernel Kernel, Kernel User (32/64) Vortragstitel STC 02. – 03. Juni 2004
Agenda • 64 Bit Plattform • Portierungsziele und -wege • Entwicklungswerkzeuge • Portierung von Win32 auf Win64 • Portierung von Treiber • Portierung von UNIX auf Win64 • MS SQL Datenbankportierung • Portierungsorganisation • Softwareoptimierung Vortragstitel STC 02. – 03. Juni 2004
Portierung von UNIX auf Win64 • Schlüsselpunkte • Zugriffe auf OS Funktionen • Zugriffe auf OS Eigenschaften • Zugriffe auf Komponente von Drittanbieter • Evtl. Abweichungen vom C++ Standard Vortragstitel STC 02. – 03. Juni 2004
Portierungsbereiche • Speichermodell • Unix32 -> ILP32, Unix64 -> LP64, Win64 -> LLP64 • Prozesse und Threads • Unix –> Prozesse, Windows -> Threads • System calls, APIs • Treiber, Signale, … • GUI • Windows, .NET • Makefiles • Projektaufbau, Komponenten, … Vortragstitel STC 02. – 03. Juni 2004
Weitere Portierungsaspekte • Semantik von Dateideskriptoren • Unterstützung für Peripheriegeräte • Pfadnamen: UNIX -> Windows • UNIX Namensgebung • UNIX ids vs. Windows SIDs • UNIX Fifo's • Abweichungen vom C++ Standard • UNIX Sicherheitsmodell • Interpretierung von Makros Vortragstitel STC 02. – 03. Juni 2004
Agenda • 64 Bit Plattform • Portierungsziele und -wege • Entwicklungswerkzeuge • Portierung von Win32 auf Win64 • Portierung von Treiber • Portierung von UNIX auf Win64 • MS SQL Datenbankportierung • Portierungsorganisation • Softwareoptimierung Vortragstitel STC 02. – 03. Juni 2004
Produktinformation • Microsoft SQL Server 2000 64 Bit Edition • Enterprise Edition • 64-bit SQL Server, 64-bit SQL Server Agent, und 64-bit analysis server • 64 Bit Datenmodell • Bis 18 Exabytes adressierbarer Speicher • Getestet mit 512 GB • Virtueller Speicher 8 TB • Basiert auf SQL Server 2000 Quellcode Vortragstitel STC 02. – 03. Juni 2004
Portierungsaspekte • Aufwand minimal • Skripte werden weiterhin unterstützt • Extended Stored Procedures müssen neu kompiliert werden: • 64-bit Compiler von Platform SDK • Dateiformat ungeändert • Datenbank vom 32 Bit Server trennen (DETACH) • Dateien auf 64 Bit Server kopieren • Datenbank auf 64 Bit server einbinden (ATTACH) • Interoperabilität mit anderen SQL Server Installationen • Enterprise Manager ist Win32 Vortragstitel STC 02. – 03. Juni 2004
Nicht vorhandene Funktionen • Migration von SQL Server 6.5 und 7.0 • Remote Installation • English Query • Jet engine • Einige Module sind noch 32 Bit: • EM, QA, DTS Designer, Wizards, Development Tools • Man kann aber vom 32 Bit Client den 64 Bit Server verwalten • Weitere • DBLib • ESQL • Alle Access-basierte Provider und Treiber Vortragstitel STC 02. – 03. Juni 2004
Agenda • 64 Bit Plattform • Portierungsziele und -wege • Entwicklungswerkzeuge • Portierung von Win32 auf Win64 • Portierung von Treiber • Portierung von UNIX auf Win64 • MS SQL Datenbankportierung • Portierungsorganisation • Softwareoptimierung Vortragstitel STC 02. – 03. Juni 2004
Portierungsorganisation (1) • „Single codebase“ • Eine Codequelle für alle Plattformen • Ablauf • 64 Bit Plattform kennen lernen • Projekt analysieren (was, wann und wie portiert werden soll) • Quellcode überprüfen • (Teil)Projekt erstellen • Fehler und Warnungen beheben • Testen: beide Plattformen getrennt • Stabilisieren / Optimieren Vortragstitel STC 02. – 03. Juni 2004
Portierungsorganisation (2) x86 Rechner 64 Bit Rechner Entwicklung, erste Tests Kompilieren für 32 Bit und 64 Bit Erstellte Projektkomponenten auf 64 Bit Rechner übertragen Projekt testen Restliche Fehlerbehebung Optimierung Vortragstitel STC 02. – 03. Juni 2004
Portierungsorganisation (3) • Wichtige Projekteigenschaften: • Konfigurationen zum Erstellen • Umgebung Konfigurationen • Werkzeuge (mit Versionen!) • Argumente für Aufrufe von Werkzeugen • Anforderungen zum Starten von 64 Bit Komponenten (+Abhängigkeiten) • Komponenten von Drittanbieter • Interaktionen mit 32 Bit Komponenten • Auf Warnungen von Compiler / Linker achten! Vortragstitel STC 02. – 03. Juni 2004
Agenda • 64 Bit Plattform • Portierungsziele und -wege • Entwicklungswerkzeuge • Portierung von Win32 auf Win64 • Portierung von Treiber • Portierung von UNIX auf Win64 • MS SQL Datenbankportierung • Portierungsorganisation • Softwareoptimierung Vortragstitel STC 02. – 03. Juni 2004