1A05 64-bit Adressierung unter Alpha OpenVMS



Ähnliche Dokumente
Einführung in die C-Programmierung

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

DLLs (dynamic loaded libraries) mit MingW erstellen

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Dr. Monika Meiler. Inhalt

i2c-bus.de I2C-002 KURZBESCHREIBUNG I 2 C Modul mit PCA Bit I/O Port-Expander Dokument NR.: I2C-002-D-01

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Das neue Volume-Flag S (Scannen erforderlich)

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Algorithmen und Datenstrukturen

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Löschen eines erkannten aber noch nicht konfigurierten Laufwerks

Excel Funktionen durch eigene Funktionen erweitern.

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Tutorium Rechnerorganisation

1 Vom Problem zum Programm

8. Bintec Router Redundancy Protocol (BRRP) 8.1 Einleitung

Native Zeichenketten (C-Strings)

Leitfaden E-Books Apple. CORA E-Books im ibook Store kaufen. Liebe Leserinnen und Leser, vielen Dank für Ihr Interesse an unseren CORA E-Books.

WLAN auf der Kommandozeile

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

ecall sms & fax-portal

HP Software Patch- und Version-Notification

Übung - Konfigurieren einer Windows-XP-Firewall

Computerarithmetik ( )

Objektbasierte Entwicklung

Einführung in die C++ Programmierung für Ingenieure

Lokale Installation von DotNetNuke 4 ohne IIS

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Einleitende Bemerkungen

4D Server v12 64-bit Version BETA VERSION

End User Manual für SPAM Firewall

English. Deutsch. niwis consulting gmbh ( manual NSEPEM Version 1.0

A-CERT CERTIFICATION SERVICE

Version 0.3. Installation von MinGW und Eclipse CDT

HowTo: Einrichtung & Management von APs mittels des DWC-1000

Zählen von Objekten einer bestimmten Klasse

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Javakurs 2013 Objektorientierung

Wie Sie mit Mastern arbeiten

Individuelle Formulare

Handbuch - Mail-Sheriff Verwaltung

FILE *fp; char fname[100];... fp = fopen (fname, rb ); if( fp == NULL ) { perror( fopen );... } // Fehlernachricht auf letzten Fehler, der aufkam

RL

Sepiola Mockups. Overview. Show notes. Primäre Navigation anklicken um zum gewünschten Mockups zu gehen. Backup usage. Overview.

Nuetzlicher Kleinkram

Sage 200 BI Häufige Fehler & Lösungen. Version

Scala kann auch faul sein

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

MOUNT10 StoragePlatform Console

Tutorials für ACDSee 12: Hochladen von Fotos auf Ihren Account bei ACDSeeOnline.com

Zugriff auf die Modul-EEPROMs

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

FAQ The FAQ/knowledge base. Version 2.1.1

Vorkurs C++ Programmierung

Alltagsnotizen eines Softwareentwicklers

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

SWISSVAULT StorageCenter Console Version 5 Kurzanleitung für SWISSVAULT Combo Partner

Datentypen: Enum, Array, Struct, Union

Installationshinweise BEFU 2014

Einführung in die Programmierung

Propädeutikum. Dipl.-Inf. Frank Güttler

300 MBIT WIRELESS ACCESS POINT ROUTER

Remote Control - LeCroy Oszilloskop WaveSurfer 3000 mit LabVIEW via VICP LAN-Schnittstelle

Registrierungsprozess des Boardgeräts (OBU) Inhalt Registrierung auf der Online-Benutzeroberfläche HU-GO

Einführung in die Programmierung (EPR)

Applet Firewall und Freigabe der Objekte

Seite Wireless Distribution System (Routing / Bridging) 3.1 Einleitung

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70

Adami CRM - Outlook Replikation User Dokumentation

Klausur in Programmieren

Anleitung zur Einrichtung von Outbound und Inbound Filtern Für DWR-512 (Stand August 2012)

Rock-Band. Einleitung. Scratch. In diesem Projekt lernst du, wie du deine eigenen Musikinstrumente programmieren kannst! Activity Checklist

Kapsch Carrier Solutions GmbH Service & Support Helpdesk

Installation und Inbetriebnahme von Microsoft Visual C Express

Virtual Private Network

Einführung in die Programmierung

Die Rückgabe kann über folgende, von uns getestete Programme / Apps vorgenommen werden: Adobe Digital Editions Sony Reader for PC Bluefire Reader

S.W.I.F.T. Befüllungsregeln für MT 103 und MT 202

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Installation mit Lizenz-Server verbinden

Installation der SAS Foundation Software auf Windows

Von SVN zu Git. Daniel Willmann cbna

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

KURZANLEITUNG. Firmware-Upgrade: Wie geht das eigentlich?

2. Programmierung in C

Hilfe bei Adobe Reader. Internet Explorer 8 und 9

MetaQuotes Empfehlungen zum Gebrauch von

Dienstspezifikation nach RFC

Einführung in die Informatik Tools

1. Übung zu "Numerik partieller Differentialgleichungen"

Roter Faden. IMES ST : Tools Kurs FEM Programme 2011: ANSYS Classic APDL 1 ZÜRICH

Deklarationen in C. Prof. Dr. Margarita Esponda

Werkzeuge der Informatik UNIX

Übung 6. Tutorübung zu Grundlagen: Rechnernetze und Verteilte Systeme (Gruppen MI-T7 / DO-T5 SS 2015) Michael Schwarz

Transkript:

1A05 64-bit Adressierung unter Alpha OpenVMS Mit Compaq C und Compaq C++ www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 1 64 Bit Adressierung Raymund Grägel SWG GmbH, Sandhausen OpenVMS seit 1980, VMS2.5 Dienstleistung und Softwareentwicklung Hintergrund: Xetra Observer Unterlagen und Beispiele: www.swg-gmbh.de/decus kontakt@swg-gmbh.de Tel 06224-80315 www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 2 www.decus.de 1

Agenda Motivation 32-bit Welt in den VMS Sprachen historisch betrachtet Programmierung 64-bit Referenzen in Argumenten von System Services 64-bit Pointer in Item-Lists bei System Services Herstellung der Adressräume Vorhandene Bibliotheken und Umstellung eines Softwarepakets www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 3 Was ist das Problem? SS$_VASFULL virtual adress space is full %SYSTEM-F-VASFULL, virtual address space is full $ HELP /MESSAGE VASFULL VASFULL, virtual address space is full Facility: SYSTEM, System Services Explanation: The virtual address space is full. User Action: Reboot and increase the amount of allowable virtual address space. If this message is associated with a vector disabled (VECDIS) status code, insufficient process virtual address space exists to allow the current process's mainline vector state to be saved. www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 4 www.decus.de 2

Warum gibt es das Problem? Die Portierung von VAX auf Alpha muss sourcekompatibel sein. Deshalb 32-bit orienterte Sprachen. speziell System Services und Runtimelibrary (RTL) www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 5 Was muss man tun? Den Compiler auf 64-bit Adressen umschalten Datenstrukturen, die Pointer enthalten, ändern ihren Aufbau (Descriptoren, Item-Lists) Argumente von System Service mit Argumenten by reference prüfen. www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 6 www.decus.de 3

Compaq C-Compiler $ CC /POINTER=LONG $ CC SYS$INPUT /OBJ=TMP.OBJ #include <stdio.h> main () {printf ( %d\n, 8*sizeof (void*) ) ;} $ link tmp $ run tmp 32 $ Normalerweise sind die Pointer 32 Bits lang Aber: $ CC SYS$INPUT /OBJ=TMP.OBJ /POINTER=64 #include <stdio.h> main () {printf ( %d\n, 8*sizeof (void*) );} $ link tmp $ run tmp 64 $ www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 7 $ CC /POINTER Compaq C, Mittel $ CC /POINTER=32 $ CC /POINTER=short $ CC /POINTER=64 $ CC /POINTER=long Direktive INITIAL_POINTER_SIZE #if INITIAL_POINTER_SIZE == 64 /NOPOINTER (default) /POINTER=32 /POINTER=SHORT /POINTER=64 /POINTER=LONG 0 32 32 64 64 Pragma REQUIRED_POINTER_SIZE #pragma required_pointer_size save #pragma required_pointer_size 32 #pragma required_pointer_size short #pragma required_pointer_size 64 #pragma required_pointer_size long #pragma required_pointer_size restore www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 8 www.decus.de 4

Compaq C, Pragma Beides, Short- und Long-Pointer #pragma required_pointer_size save #pragma required_pointer_size long typedef char* CHAR_PQ ; #pragma required_pointer_size short Typedef int64* INT64_PS ; #pragma required_pointer_size restore char a ; int64 i CHAR_PQ pq_a ; INT64_PS ps_i ; www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 9 Compaq C++ Compiler Verfügbar ab Version 6.3, Überprüfung mit $ cxx /version nl: Compaq C++ V6.3-048 for OpenVMS Alpha V7.2-1H1 Command Qualifier /MODEL=ANSI impliziert /POINTER=LONG und C++ 64-bit Classlibrary $ CXX /MODEL=ANSI Direktive INITIAL_POINTER_SIZE Qualifier initial_pointer_size (kein Qualifier) Undefiniert /MODEL=ANSI 64 www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 10 www.decus.de 5

Compaq C++, Linker Man muss CXXLINK benutzen $ CXXLINK /MODEL=ANSI /LOG Alle C++ Module eines Images sollten mit /MODEL=ANSI kompiliert sein. Dieser Befehl ist zu benutzen wenn das Image mindestens ein C++ Modul enthält Auch wenn das Modul mit dem Hauptprogramm kein C oder C++ Programm ist www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 11 System Services STARLET.H und NEW_STARLET Unterscheidung System Services Argumente www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 12 www.decus.de 6

System Services STARLET.H NEW_STARLET und GENERIC_64 Auszug aus STARLET.H: #ifdef NEW_STARLET int sys$gettim(struct _generic_64 *timadr); #else /* OLD_STARLET */ int sys$gettim( unknown_params); #endif /* #ifdef NEW_STARLET */ Auszug aus DEMO_GETTIM.C (vgl. GEN64DEF.H) GENERIC_64 Zpkt; Zpkt.gen64$r_quad_overlay.gen64$q_quadword = 0 ; sys$gettime (&Zpkt) ; Deshalb: $ CC /DEFINE=( NEW_STARLET=1)/POINTER=LONG $ CXX /DEFINE=( NEW_STARLET=1)/MODEL=ANSI www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 13 System Services - Unterscheidung 32-Bit System Service 64-Bit Friendly Interface 64-Bit System Service Der Suffix _64 www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 14 www.decus.de 7

Aufruf von System Services Argument by value keine Änderung Argument by reference Argument by descriptor Argument mit Itemlist www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 15 Referenzargument Automatische Adresserweiterung von 32 auf 64 Bits 32-bit Beispiel Adresse im rufenden Programm 0X 7E008064 64-bit Empfangsadresse im Unterprogramm 0X 00000000 7E008064 0X 80E08064 0X FFFFFFFF 80E08064 sign extented Address Vgl. DEMO_ARG.C www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 16 www.decus.de 8

System Services - Descriptor by descriptor struct dsc$descriptor_s 31 class dtype vgl. DESCRIP.H 15 Stringadresse (32 bits) Pufferlänge 0 by 32- or 64-bit descriptor struct dsc64$descriptor_s 31 15 Class dtype +1 (16 bits) -1 (32 immer gesetzte bits) Pufferlänge (64 bits) 0 Stringadresse (64 bits) www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 17 System Services - Descriptor Auszug aus DEMO_DSC.C #include <descrip.h> main () { unsigned short int timlen ; char timbuf[40+1]; $DESCRIPTOR64 (dsc_timbuf, timbuf) ; sys$asctim (&timlen, &dsc_timbuf, 0, 0); } www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 18 www.decus.de 9

Item-List Entries (ILE) Item-List Entries (ILE) Open VMS usage: item_list_2 Open VMS usage: item_list_3 Open VMS usage: 32-bit item_list_2 or 64-bit item_list_64a Open VMS usage: 32-bit item_list_3 or 64-bit item_list_64b Vgl. ILEDEF.H Deklariere mit ILE2, ILE3, ILEA_64, ILEB_64 www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 19 Item-List Entry, 32 bit Open VMS usage: item_list_3 Der 32-bit ILE struct _ile3 in ILEDEF.H 31 item code ILE3 15 Zieladresse (32-bit) Pufferlänge (short) 0 Adresse eines short int für die tatsächliche Länge (32-bit) www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 20 www.decus.de 10

Item-List Entry, 64 bit Open VMS usage: 64-bit item_list_64b struct _ileb_64 in ILEDEF.H 31 Item code (16 bits) ILEB_64 15-1 (32 immer gesetzte bits) Pufferlänge (64 bits) +1 (16 bits) 0 Zieladresse (64 bits) Adresse eines Quadwords für die tatsächliche Länge (64 bits) vgl. DEMO_ILE.C www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 21 Item-List, Beispiel Auszug aus DEMO_ILE.C struct { SWG_ILEB_64 pid_entry ; SWG_ILEB_64 image_entry ; SWG_ILEB_64 user_entry ; long terminator ; } itemlist ; itemlist.pid_entry.ileb_64$q_length = sizeof (pid) ; itemlist.pid_entry.ileb_64$w_code = JPI$_PID ; itemlist.pid_entry.ileb_64$pq_bufaddr = (void*)&pid ; itemlist.pid_entry.ileb_64$pq_retlen_addr = &lenofpid ; itemlist.terminator = 0 ; status = sys$getjpiw (0,0,0,&itemlist, &useriosb,0,0); www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 22 www.decus.de 11

Global Sections - Übersicht Fab anlegen und File öffnen Neu: Region anlegen vorhandene Section mappen Alternativ: Section anlegen Dienstprogramm SWG_GSEC_64.C unter http://www.swg-gmbh.de/decus www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 23 Global Section die Region systemconditionvalue = sys$create_region_64 ( bytecount, // quadword read by value, size of the region region_prot, // uns.long read by value, protection flags, // uns.long read by value, flag mask & modgbl.region_id_64, // uns.quadw. written by ref, the region id & modgbl.region_va_64, // pointer written by ref, lowest address of the // region & modgbl.region_length_64, // uns. quadw written by ref, natural length 0 // pointer read by value, start address or 0 ) ; www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 24 www.decus.de 12

existierende Global Section systemconditionvalue = sys$mgblsc_64 ( &dsc_secnam, // read by desc, name of the global section &ident_64, // read by ref, identification (not really used) &modgbl.region_id_64, // read by ref, the region id 0, // read by val, offset 0, // read by val, the size of the section 0, // read by val, the access mode ) flagmask, // read by val, Flag mask specifying options for // the operation & pointertosection, // written by ref, the process virtual address & naturallengthofsection, // written by ref, the natural size of the section 0 // read by val, a starting address, must not be // given here www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 25 Global Sections Neuanlage rmsconsitionvalue = sys$create (&fab); systemconditionvalue = sys$crmpsc_gfile_64 ( &dsc_secnam, // read by desc, name of the global section &ident_64, // read by ref, identification (not really used) 0, // read by val, offset requestedlengthofsection, // read by val, size of section fab.fab$l_stv, // read by val, Number of channel on which the // file has been accessed &modgbl.region_id_64, // read by ref, the region id 0, // read by val, offset 0, // read by val, the access mode flagmask, // read by val, Flag mask specifying options & pointertosection, // written by ref, the virtual address & naturallengthofsection) // written by ref, the size of section www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 26 www.decus.de 13

64 Bit Programmierung - Tipps in einem Projekt (abgeschlossenen Entwicklungsteil) grundsätzlich 64-Bit Adressen verwenden Ausnahmen sind Argumente für runtime library routinen. Deklariere 32-bit-pointer mit typedef etwa so: # pragma required_pointer_size save # pragma required_pointer_size short typedef long* LONG_PS typedef void* VOID_PS # pragma required_pointer_size restore www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 27 Lock Status block (LKSB) Enthält keine Pointer. Deklaration in LKSBDEF.H: LKSB privatelock; Siehe SYS$ENQ www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 28 www.decus.de 14

IO-status-block (IOSB) Enthält keine Pointer. Deklaration in IOSBDEF.H: IOSB privateoutput; Siehe Beispiel DEMO_GETJPI www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 29 Übersicht über die Beispiele DEMO_ARG zu Referenzargumenten DEMO_DSC zu IOSB und DSC DEMO_GETTIM zu GENERIC_64 DEMO_ILE zu ILE SWG_GSEC_64 mit DEMO_GSEC_64 zur Programmierung von global sections Aus www.swg-gmbh.de/decus Kontakt@swg-gmbh.de Tel 06224-80315 www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 30 www.decus.de 15

Literaturhinweise OpenVMS Alpha Guide to 64-Bit Addressing and VLM Features LINK Guidelines for Writing Clean 64-Bit Code LINK Using Compaq C++ for OpenVMS Alpha; Chapter 9, Using 64-bit Address Space LINK OpenVMS System Services Reference Manual, Preface, System Services Support for OpenVMS Alpha 64-bit Addressing LINK LINK zu Pragma POINTER_SIZE LINK zu Pragma REQUIRED_POINTER_SIZE www.swg-gmbh.de IT-Symposium 20.04.2004, 1A05 Seite 31 www.decus.de 16