DE69734348T2 - Verteilte verarbeitung - Google Patents

Verteilte verarbeitung Download PDF

Info

Publication number
DE69734348T2
DE69734348T2 DE69734348T DE69734348T DE69734348T2 DE 69734348 T2 DE69734348 T2 DE 69734348T2 DE 69734348 T DE69734348 T DE 69734348T DE 69734348 T DE69734348 T DE 69734348T DE 69734348 T2 DE69734348 T2 DE 69734348T2
Authority
DE
Germany
Prior art keywords
compiler
data
source program
performance
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69734348T
Other languages
English (en)
Other versions
DE69734348D1 (de
Inventor
Antony Paul Gt. Bealings MARTIN
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
British Telecommunications PLC
Original Assignee
British Telecommunications PLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by British Telecommunications PLC filed Critical British Telecommunications PLC
Application granted granted Critical
Publication of DE69734348D1 publication Critical patent/DE69734348D1/de
Publication of DE69734348T2 publication Critical patent/DE69734348T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis

Description

  • Die vorliegende Erfindung betrifft die verteilte Verarbeitung und insbesondere, aber nicht ausschließlich, die verteilte Verarbeitung zur Steuerung eines Telekommunikationsnetzwerkes. Insbesondere betrifft die vorliegende Erfindung die Entwicklung und Aktualisierung der Steuersysteme, die in den verteilten Prozessoren ausgeführt sind, bei denen es sich bevorzugt (aber nicht notwendigerweise) um Prozesse handelt, die in einer objektorientierten Art und Weise realisiert sind.
  • Telekommunikationsnetzwerke sind in zunehmendem Maße zur Unterstützung hoher Bandbreiten, dem Informationsfluß mit geringer Verzögerung erforderlich. Die benötigten Bandbreiten wachsen rapide von Kilobits pro Sekunde auf Megabits pro Sekunde und kommen in einigen Anwendungen sogar auf Gigabits pro Sekunde (insbesondere, betrifft das beispielsweise abrufbereite Videos, verfügbare animierte Simulationen (animated shared simulations) und verteiltes Rechnen).
  • Um "intelligente Netzwerk"-Einrichtungen, wie z.B. Rufumleitungen zu speziellen Nummern, zur Verfügung zu stellen, laufen Computerprogramme auf einer Reihe von Hauptrechnern (beispielsweise bis zu 100), die mit Vermittlungsstellen verbunden sind. Die Art und Weise, in der Dienste für spezielle Kunden zur Verfügung gestellt werden müssen (z.B. eine bestimmte Nummer, zu der Anrufe für einen Kunden geleitet werden müssen), hängt von den Daten ab, die in Bezug auf diesen Kunden auf den Hauptrechnern gespeichert sind. Es können sich also Millionen von Teilnehmerlisten auf Dutzenden oder Hunderten von Hauptrechnern befinden.
  • In "Twenty-twenty vision – software architectures for intelligence in the 21st century", P. A. Martin, BT Technology Journal, Bd. 13, Nr. 2, April 1995, hat der Erfinder der vorliegenden Erfindung die Verwendung von objektorientierten Techniken zur Realisierung der erfordertlichen verteilten Verarbeitung vorgeschlagen.
  • Eine Beschreibung objektorientierter Technologie ist beispielsweise im BT Technology Journal, Bd. 11, Nr. 3, Juli 1993 in "Object oriented technology", herausgegeben von E. L. Cusack und E. S. Cordingley, zu finden. Obwohl der Begriff nicht immer präzise verwendet wird, betrifft das hier angewandte objektorientierte Rechnen die Rechentechnik, bei der Daten in "eingekapselter" Form gespeichert werden, wobei, statt dass auf die Daten direkt durch ein Aufrufprogramm oder eine -Routine zugegriffen werden kann, auf diese nur mittels eines zugehörigen Programms zugegriffen werden kann, das die Daten lesen, schreiben und edieren kann. Eine Datenliste und der zugehörigen Programme wird als "Objekt" bezeichnet. Die Kommunikation mit einem Objekt und von demselben geschieht generell durch "Nachrichtenweitergabe", das heißt, durch einen Aufruf des Objekts werden Datenwerte weitergegeben und die Operation eines der Programme aufgerufen, die im Objekt enthalten sind, das dann Datenwerte zurücksendet.
  • Den Programmierern, die den objektorientierten Zugang wünschen, stehen verschiedene Sprachen zur Verfügung. Von diesen Sprachen ist C++ gegenwärtig die am meisten verbreitete.
  • Die verteilte Verarbeitung unterscheidet sich vom Betrieb eines einzelnen Prozessors in verschiedener Hinsicht. Zunächst einmal können verschiedene Zugangstechniken in Abhängigkeit davon erforderlich sein, ob sich andere Programme oder Daten auf demselben Hauptrechner als Aufrufprogramm oder auf einem anderen Hauptrechner befinden. Der Standort eines Programms oder von Daten beeinflußt auch die Geschwindigkeit, mit der es von einem andern Pro gramm erreicht werden kann. Es kann auch sein, dass ein oder mehrere Hauptrechner ausfallen, während andere in Betrieb bleiben.
  • Herkömmlicherweise wird die verteilte Verarbeitung durchgeführt, indem eine "Kunden-Server"-Anordnung verwendet wird, bei der ein "Kunden"-Programm auf einem Computer ein "Server"-Progamm auf einem anderen Computer abfragt, das dann die Funktion ausführt oder die vom Kunden-Programm benötigten Daten zurücksendet.
  • Objekt-orientierte Techniken sind bisher in der verteilten Verarbeitung nicht weit verbreitet. Eine Zusammenfassung des diesbezüglichen Standes der Technik ist in "Object oriented programming systems", Blair G., Pitman Publishing, London, 1991 (ISBN 0-273-03132-5) und insbesondere in Kapitel 9, Seiten 223–243, "Distributed systems and objects", David Hutchison und Jonathan Walpole, zu finden. Die früheren Versuche haben im allgemeinen zu einer vorhandenen Computersprache eine neue Syntax hinzugefügt, oder sie haben zur Erweiterung der herkömmlichen objektorientierten Programmierung für den Umgang mit der verteilten Verarbeitung neue Computersprachen geschaffen.
  • Die Veröffentlichung "PASCAL User Manual and Report" von Kathleen Jensen und Niklaus Wirth, zweite Ausgabe, erschienen im Springer-Verlag, 1975, offenbart einen Compiler, der so gestaltet ist, dass er mit Pascal-Anweisungen arbeitet, denen $ vorausgeht und die "Compiler-Direktiven" enthalten. Der Inhalt dieser Compiler-Direktiven ist in Abschnitt B "Compiler-Optionen" offenbart. Es handelt sich um:
    Einschließen von Laufzeittests
    Erzeugen eines Codes für "Post-Mortem Dump" (Post-Mortem Ausgabe)
    Verwaltung von Parameter-Beschreibern (durch Definition von Register-Identitäten)
    Steuerung von Symbolen für die Eingabepunkte zu deklarierten 00-Modulen
    Steuerung der Programmtextliste
    Steuerung der Länge der Quellenleitung Puffergrößenspezifikation.
  • Diese Compiler-Direktiven beziehen sich nicht auf Leistungskriterien des Systems, sondern beziehen sich alle auf den Betrieb des Programms. Die Laufzeittests, die beispielsweise überprüfen, ob die Programme korrekt arbeiten, sind:
    • (a) alles Indexieroperationen, um sicherzustellen, dass der Index innerhalb der angegebenen Datenfeldgrenzen liegt,
    • (b) alles Zuordnungen zu Variablen untergeordneter Typen, um sicherzustellen, dass der zugeordnete Wert im spezifizierten Bereich liegt,
    • (c) alles Divisionen, um sich gegen Null-Divisoren abzusichern,
    • (d) alle automatisch eine ganze Zahl, bezogen auf reale Umwandlungen, um sicherzustellen, daß der umgewandelte Wert erfüllt: abs(i) < = maxint(größte ganze Zahl), und
    • (e) alles Fallanweisungen, um sicherzustellen, dass der Fallselektor demjenigen der angegebenen Fall-Etiketten entspricht.
  • Die Veröffentlichung "The KAP Parallelizer for DEC Fortran and DEC C Programs" von Robert H. Kuhn, Bruce Leasure und Sanjiv M. Shah, Digital Technical Journal, Bd. 6, Nr. 3, Sommer 1994, offenbart einen Compiler (The KAP Parallelizer) zur Umwandlung, eines Programms, falls das möglich ist, das zur Ausführung auf einem einzelnen Prozessor geschrieben wurde, in ein Programm, das in der Laufzeit parallel auf mehreren Prozessoren ausgeführt wird, die mit einem Gemeinschaftsspeicher gekoppelt sind. Indem Teile des Programms parallel abgearbeitet werden, wird das Programm rascher ausgeführt, als das auf einem einzelnen Prozessor der Fall wäre. Bei der Umwandlung eines Programms zur parallelen Ausführung sorgt der KAP Compiler dafür, dass die parallel verarbeitenden Prozessoren mit verschiedenen diskreten Datensätzen in Laufzeit arbeiten, wobei kein Datenstück von mehr als einen Prozessor zur gleichen Zeit geschrieben wird.
  • Gemäß einem ersten Aspekt der Erfindung ist eine Compiler-Einrichtung für ein verteiltes Steuersystem angegeben, das aus mehreren miteinander verbundenen Computern besteht, wobei die Compiler-Einrichtung umfaßt:
    einen Compiler, der einen ersten Teil aufweist, der so ausgeführt ist, dass er auf ausführbare Anweisungen in einem Quellenprogramm anspricht und einen ausführbaren Code erstellt, und der dadurch gekennzeichnet ist, dass er ferner einen Speicher für aktuelle Systemdaten umfaßt und dadurch, dass:
    der Compiler einen zweiten Teil aufweist, der so ausgeführt ist, dass er auf Kommentare in einem Originalquellenprogramm anspricht,
    wobei die Kommentare mindestens ein spezifiziertes Kriterium für die geforderte Systemleistung durch:
    Zugriff auf den Speicher in Übereinstimmung mit dem mindestens einen spezifizierten Kriterium zur Wiedergewinnung der entsprechenden aktuellen Systemdaten,
    Auswertung in Übereinstimmung mit den entsprechenden aktuellen Systemdaten, ob die geforderte Systemleistung vom Originalquellenprogramm geboten werden kann und, bei einem negativen Auswertungsergebnis,
    Erzeugung geeigneter zusätzlicher Quellenprogrammanweisungen und Compiler-Direktiven und Erstellung eines modifizierten Quellenprogramms durch Einbau der zusätzlichen Quellenprogrammanweisungen und Compiler-Direktiven in das Originalquellenprogramm umfassen.
  • Im Gegensatz zum KAP-Compiler vom Stand der Technik, der Programme zur parallelen Verarbeitung erzeugt, betrifft die vorliegende Erfindung das Feld der verteilten Rechnerumgebung und sie betrifft die verzahnte Verarbeitung auf mehreren, miteinander verbundenen Einzel-Computern und bezieht einen sehr unterschiedlichen Satz Anforderungen mit ein.
  • Der erste Teil des Compilers ist bevorzugt ein herkömmlicher Compiler und der zweite Teil ein separater Vor-Compiler. Es ist aber anzumerken, dass die Funktionen der Erfindung auch direkt in einen neu eingeschriebenen Compiler eingebaut sein könnten.
  • In einer Compiler-Einrichtung für ein verteiltes Steuersystem, wie oben angegeben, in der die Computer so ausgeführt sind, dass sie Steuerdaten in Objektlisten zusammen mit den dazugehörigen Datenlese- und/oder Schreibsteuerprogrammen speichern, bezieht sich das mindestens eine spezifizierte Kriterium für die geforderte Systemleistung bevorzugt auf eine Leistungszeit oder auf Leistungszeiten, die von den Steuerprogrammen einzuhalten bzw. zu erreichen sind.
  • Die Leistungszeit/Leistungszeiten kann noch bevorzugter eine oder mehrere Zeiten sein, die ausgewählt sind unter einer minimalen Leistungszeit, einer durchschnittlichen Leistungszeit und einer maximalen Leistungszeit.
  • In einer Compiler-Einrichtung für ein verteiltes Steuersystem, wie oben beschrieben, in der die Computer so ausgeführt sind, dass sie Steuerdaten in Objektlisten zusammen mit den dazugehörigen Datenlese- und/oder Schreibsteuerprogrammen speichern, bezieht sich das mindestens eine spezifizierte Kriterium für die geforderte Systemleistung bevorzugt auf die Anzahl der äquivalenten Listen, die in dem System bereits vorhanden sind.
  • In einer Compiler-Einrichtung für ein verteiltes Steuersystem, wie oben beschrieben, in der die Computer so ausgeführt sind, dass sie Steuerdaten in Objektlisten zusammen mit den dazugehörigen Datenlese- und/oder Schreibsteuerprogrammen speichern, bezieht sich das mindestens eine spezifizierte Kriterium für die geforderte Systemleistung bevorzugt auf die Anzahl der der Zugriffspunkte innerhalb des Systems bezieht, von denen aus voraussichtlich auf die Datenlisten zugegriffen wird.
  • In einer Compiler-Einrichtung für ein verteiltes Steuersystem, wie oben beschrieben, in der die Computer so ausgeführt sind, dass sie Steuerdaten in Objektlisten zusammen mit den dazugehörigen Datenlese- und/oder Schreibsteuerprogrammen speichern, bezieht sich das mindestens eine spezifizierte Kriterium für die geforderte Systemleistung bevorzugt auf Kategorien von Benutzern, denen es erlaubt sein muß, auf die Datenlisten oder auf Teile derselben zuzugreifen.
  • In einer Compiler-Einrichtung für ein verteiltes Steuersystem, wie oben beschrieben, in der die Computer so ausgeführt sind, dass sie Steuerdaten in Objektlisten zusammen mit den dazugehörigen Datenlese- und/oder Schreibsteuerprogrammen speichern, bezieht sich das mindestens eine spezifizierte Kriterium für die geforderte Systemleistung bevorzugt auf das Ausmaß, in dem die Daten unmittelbar verfügbar sein müssen.
  • Gemäß einem zweiten Aspekt der Erfindung ist ein Verfahren zur Erzeugung eines Codes zur Ausführung auf einem verteilten Computersystem angegeben, das mehrere miteinander verbundene Computer umfaßt und die folgenden Schritte aufweist:
    Erzeugung eines Originalquellenprogramms, das ausführbare Anweisungen, die die Struktur des Codes definieren, und Kommentare umfaßt, die mindestens ein spezifiziertes Kriterium für die geforderte Systemleistung umfassen,
    Zugriff auf einen aktuellen Systemdatenspeicher des verteilten Computersystems in Übereinstimmung mit dem mindestens einen spezifizierten Kriterium zur Wiedergewinnung der entsprechenden aktuellen Systemdaten,
    Auswertung in Übereinstimmung mit den entsprechenden aktuellen Systemdaten, ob die geforderte Systemleistung vom Originalquellenprogramm geboten werden kann und, bei einem negativen Auswertungsergebnis,
    Erzeugung geeigneter zusätzlicher Quellenprogrammanweisungen und Compiler-Direktiven und Erstellung eines modifizierten Quellenprogramms durch Einbau der zusätzlichen Quellenprogrammanweisungen und Compiler-Direktiven in das Originalquellenprogramm.
  • Das verteilte Steuersystem stellt bevorzugt ein Steuersystem für ein Telekommunikationsnetzwerk dar, das mehrere Vermittlungsstellen umfaßt und in dem jeder Computer jeweils eine der Vermittlungsstellen steuert.
  • Im folgenden sind Ausführungsformen der Erfindung lediglich beispielhaft unter Bezug auf die beigefügten Zeichnungen dargestellt, in denen zeigen:
  • 1 ein Blockdiagramm, das die Elemente eines Telekommunikationsnetzwerks, das die Erfindung enthält, illustriert,
  • 2 ein Blockdiagramm, das weitere Ausführungsformen des Netzwerks von 1 illustriert,
  • 3 ein Blockdiagramm, das die Elemente eines Hauptrechners, der einen Teil des Netzwerks der 1 und 2 bildet, illustriert,
  • 4 ein Blockdiagramm, das die Elemente einer Compiler-Einrichtung, die einen Teil des Netzwerks der 1 und 2 bildet, illustriert,
  • 5 ein Flußdiagramm, das den Betrieb der Compiler-Einrichtung von 4 illustriert,
  • 6 eine illustrative Zeichnung, die die Produkte der Stufen der in 5 durchgeführten Verarbeitung zeigt,
  • 7a ein Diagramm, das die Struktur der Daten darstellt, welche in der Intelligenz-Domäne gehalten werden, die einen Teil von 1 bildet,
  • 7b ein Diagramm, das die Struktur der Daten darstellt, welche in der Transport-Domäne gehalten werden, die einen Teil von 1 bildet,
  • 8 illustriert die Datenstruktur im Speicher einer Komponente von 7a,
  • 9 illustriert den Quellencode, der bei der Compiler-Einrichtung von 4 anwendbar ist,
  • 10 ein Flußdiagramm, das einen Teil eines Vor-Compilerprozesses aus 10 bis 14 illustriert,
  • 11 ein weiterer Teil des Prozesses,
  • 12 ein weiterer Teil des Prozesses,
  • 13 ein weiterer Teil des Prozesses und
  • 14 ein. weiterer Teil des Prozesses.
  • Gemäß 1 umfaßt ein gemäß der Erfindung erstelltes Telekommunikationsnetzwerk mehrere Vermittlungszentren oder -stellen 2a, 2b, die durch Kommunikationskanäle 4 (z.B. Mikrowellenverbindungen, faseroptische Kabel, Koaxial-Kupferkabel oder virtuelle Schaltungen, die von einer obengenannten Stellen getragen werden) miteinander verbunden sind und eine Transport-Domäne 6 darstellen. Mit der Transport-Domäne 6 ist eine Intelligenz-Domäne 8, die mehrere Hauptrechner 10a, 10b umfaßt, in Zeichengabekommunikation mit den Schaltzentren 2, 2b über die Zeichengabeverbindungen 12a, 12b, 12c verbunden, die ebenfalls mit den Hauptrechnern 10a, 10b verbunden sind. Die beiden können beispielsweise miteinander verbunden sein, indem Protokolle, wie beispielsweise das Zeichengabesystem 7 (SS7) verwendet werden.
  • Benutzerendgeräte oder -ausrüstung, wie Telephone 14a, 14b, und Kommunikationsgeräte großer Bandbreiten, z.B. Videogeräte 16, umfassen gemeinsam eine Endbenutzer-Domäne 18, die über lokale Schleifenverbindungen 20a, 20b, 20c (z.B. Lichtwellenleiter-, Zellularfunk- oder Verbindungen aus einem verwundenen Paar Kupferkabeln) mit der Transport-Domäne 6 verbunden ist.
  • Ferner ist eine Diensteanbieter-Domäne 22 vorgesehen, die aus einer Ausrüstung zum Anbieten von Diensten (z.B. Video-Diensten), beispielsweise einem Videogerät 24 und einem Computer-Endgerät 26 besteht, die über lokale Schleifenverbindungen 28a, 28b, 28c, wie z.B. ISDN-Kanälen oder anderen Verbindungen mit hoher Bandbreite mit der Transport-Domäne 6 verbunden sind.
  • Ein Endgerät 14 oder 16 eines Benutzers wird in bekannter Weise verwendet, um über die Transport-Domäne 6 eine Anfrage zur Diensteanbieter-Domäne 22 weiterzuleiten. Hierdurch wird durch die Transport-Domäne 6 ein Kanal erstellt und die Diensteanbieter-Domäne 22 übermittelt über den Kanal einen Dienst zur Endbenutzer-Domäne 18 (z.B. durch Übertragung eines Videofilms in Realzeit, oder einer Datei von Daten im elektronischen Format).
  • Bei den herkömmlichen einfachen alten Telefondiensten (POTS) wird die Transport-Domäne 6 einfach durch die gewählten Nummern gesteuert, die in der Endbenutzer-Domäne 18 den Transportweg erstellen. Gegenwärtig wird demgegenüber die "intelligente Netzwerk"-Steuerung der Transport-Domäne von der Intelligenz-Domäne 8 geleistet. Die Intelligenz-Domäne 8 erhält von der Transport-Domäne 6 die gewählte Nummer und/oder die wählende Nummer und führt in Übereinstimmung entweder mit der gewählten Nummer oder der wählenden Nummer oder mit beiden Nummern irgendeine Verarbeitung durch. Typischerweise liefert die Intelligenz-Domäne Nummern- Übersetzungsdienste, in denen eine gewählte Telefonnummer übersetzt und der Dienst der Rufweitergabe geleistet wird. Im vorliegenden Fall entspricht die angerufene Nummer einer in einem der Hauptrechner 10 gespeicherten Liste, auf die in Abhängigkeit von einem Signal in einer der Verbindungen 12 zugegriffen wird und eine entsprechende Umleitungsnummer erzeugt wird.
  • Im Allgemeinen liefert die Intelligenz-Domäne in Abhängigkeit vom Auftreten eines Ereignisses in der Transport-Domäne 6 (wie z.B. der Einleitung eines Rufs von der Endbenutzer-Domäne 18) die Steuerinformation zur Steuerung der Transport-Domäne 6.
  • In der Intelligenz-Domäne werden auch andere Daten gespeichert. Bei der vorliegenden Ausführungsform werden Rechnungsstealungsdaten für jedes Gespräch in der Intelligenz-Domäne gespeichert, um eine regelmäßige Rechnungsstellung für jeden Kunden zu ermöglichen.
  • Bezugnehmend auf 2 umfaßt die Intelligenzdomäne ferner eine Compiler-Einrichtung 30, die aus einer programmierten Arbeitsstation, die über die Netzwerkserver 11a bis 11c mit den Hauptrechnern 10 verbunden ist, und einem weiträumigen Netzwerk (WAN) besteht, das zwischen der Compiler-Einrichtung 30, den Hauptrechnern 10 und den Servern 11 arbeitet.
  • Die Server sind ferner mit einem oder mehreren World Wide Web (WWW) Server-Computern verbunden, die im Internet 32 enthalten sind, und somit mit den Edier-Endgeräten 15a bis 15d, die mit dem Internet (z.B. über einen lokalen Paketvermittlungsknoten) verbunden sind.
  • Bezugnehmend auf 3 umfaßt jeder Hauptrechner 10 ein Grundgerät oder einen Server, der Kommunikationshardware 100 enthält, die über das WAN mit den Servern 11 verbunden ist, einen Prozessor 102 und eine Speicher-Einrichtung 104, die sowohl einen Schnellzugriffsspeicher in Form eines Direktzugriffsspeichers, als auch einen Offline-Speicher in Form magnetischer oder optischer Antriebe enthält.
  • In der Speicher-Einrichtung 104 sind ein Operationssystem 106 (z.B. UNIX(TM)), ein Objektmanager-Programm 108 und ein Objektmodell gespeichert, das einen Klassen-Code 110 und Objektdaten enthält, alles ist im folgenden im Einzelnen erläutert.
  • Jedes Edier-Endgerät 15 umfaßt einen Personalcomputer und kann über Modem mit einer üblichen Telefonbuchse mit einem entsprechenden Telefon 14 in den Räumlichkeiten eines Benutzers verbunden sein.
  • Jedes Edier-Endgerät 15 enthält daher einen Prozessor, ein Bildschirmausgabegerät, ein Eingabegerät (z.B. eine Tastatur und/oder Cursor-Steuergerät, wie z.B. eine Maus) und ein Speichergerät (ROM, RAM und eine Harddisk), die eine graphische Benutzer-Umgebung (z.B. WindowsTM), ein Kommunikationsprogramm und ein Objekt-Browser-Programm enthält.
  • Bezugnehmend auf 4 umfaßt die Compiler-Einrichtung eine Kommunikationsschnittstellen-Leiterplatte 300, die mit den WAN-Servern 11 verbunden ist, einen Prozessor 302 und eine Speichervorrichtung 304 (nicht separat angegeben), die einen Schnellzugriffsspeicher (RAM) und einen Hochleistungsspeicher (z.B. einen Harddisk-Antrieb) enthält und ein Betriebssystem (z.B. UNIX(TM)) ein C++-Compiler-Programm 312)(wie beispielsweise SunPRO, zu bezie hen von Sun Microsystems) speichert, einen Vor-Compiler 316, der im folgenden im einzelnen beschrieben ist, und eine Bibliothek 316, die Standardfunktionen und -definitionen (die Unterprogramme oder Subroutinen spezifizieren) speichert, die in die neuen Programme integriert werden sollen. Das Compilerprogramm 312 stellt einen ersten Teil eines Compilers der vorliegenden Erfindung dar und der Vor-Compiler 316 – einen zweiten Teil.
  • Der C++-Compiler umfaßt herkömmlicherweise einen Compiler, der einen RB-Code kompiliert, und ein Binderprogramm 312b, das den Binärcode mit der in der Bibliothek 314 gespeicherten Binärcode-Routine verkettet und den verketteten Code für die Ausführung in einem. Speicheradressierplatz anordnet. Solche Compiler umfassen auch generell einen Vorprozessor, der die Compiler-Direktiven interpretiert, beispielsweise derart, dass sie Anweisungen "enthalten", die in einem zusätzlichen Code zu lesen sind oder daß andere Operationen während der Kompilierungen durchzuführen sind.
  • Ebenfalls vorgesehen sind: Ein Speicherbereich 308 zum Speichern eines Eingangsquellencodes, der ein C++-Programm definiert (z.B. Eingabe über die Eingabevorrichtung 320 oder heruntergeladen über die Kommunikationsschaltung 300 oder aber über einen Diskettenantrieb geladen, der in der Speichervorrichtung 204 enthalten ist), und ein Speicherbereich 310 zum Speichern eines ausführbaren Codes, der vom C++-Compiler 312 erzeugt wurde (z.B. durch den unter der Steuerung des Compilerprogramms arbeitenden Prozessor 302). Ebenfalls enthalten ist ein Speicherbereich 318, der Systemdaten in Bezug auf die Anzahl der verteilten Prozessoren 10, die Kapazität des verfügbaren Speichers auf jedem der Prozessoren 10, die Operationsgeschwindigkeit der Prozessoren 10 etc. speichert.
  • Der Prozessor 102 ist so ausgeführt, dass er zur Erzeugung eines ausführbaren Codes im ausführbaren Codespeicher 310 selektiv entweder den C++-Compiler 312 im Quellencode im Quellenspeicher 308 oder den Vor-Compiler 316, gefolgt vom C++-Compiler 312 im Quellencode im Quellenspeicher 308 betreibt.
  • Im ersten Fall wird der erzeugte Code auf jedem geeigneten einzelnen Prozessor ausgeführt. In der vorliegenden Ausführungsform ist der. Prozessor 302 selbst so ausgeführt, dass er den Code ausführen kann, der auf diese Weise durch den C++-Compiler direkt erzeugt wurde, wodurch der Benutzer befähigt ist, sofort zu testen, ob das Programm im allgemeinen arbeitet, wie erwartet.
  • Im letzten Fall verarbeitet der Vor-Compiler 316 zunächst den Quellencode im Quellenspeicher 308 (wobei er beliebige Systemdaten berücksichtigt, die sich auf das verteilte System beziehen, das den Hauptrechner 10 umfaßt, auf dem der Code auszuführen ist) und erzeugt im Quellenspeicher 308 einen geänderten Quellencode, der dann vom Compiler 312 im Speicher 310 des ausführbaren Codes in den erzeugten ausführbaren Code kompiliert wird. Dieser ausführbare Code ist jedoch nicht notwendigerweise in der Compiler-Einrichtung 30 ausführbar, da er zur Ausführung auf den mehreren verteilten Hauptrechnern 10 bestimmt ist.
  • Bezugnehmend auf 5 ist der allgemeine Betrieb des Compilers 30, gesteuert vom Überwachungsprogramm 307, der folgende.
  • In einem Schritt 202 wird der Quellencode in den Quellencodespeicher 308 eingegeben (z.B. über das Eingabegerät 320). In einem Schritt 204 kann die Bedienungsperson entscheiden, dass der Quellencode im Quellenspeicher 308 editiert wird, wobei der editierte Text in den Quellenspeicher 308 eingegeben wird (wobei beispielsweise ein herkömmlicher Textprozessor verwendet wird).
  • Ist eine solche Editierung abgeschlossen, kann der Benutzer in einem Schritt 206 wählen, ob der Quellencode lokal getestet wird oder nicht. Falls er das gewählt hat, läßt der Prozessor den C++-Compiler 312 mit dem Quellencode im Quellenspeicher 308 für die Erzeugung eines ausführbaren Codes im Speicher 310 des ausführbaren Codes laufen, und in einem Schritt 210 führt der Prozessor 302 den ausführbaren Code aus. Zur Unterbrechung sinnloser Operationen und Ersatzoperationen, wie z.B. einer Anzeige auf dem Ausgangsbildschirm 322, kann ein Simulationsprogramm vorgesehen sein, das es dem Benutzer ermöglicht, zu sehen, was vor sich geht.
  • Falls bei der Ausführung Fehler auftauchen, kann sich der Benutzer in einem Schritt 212 dazu entscheiden, zur Editierung des Quellencodes im Quellencodespeicher 308 zu Schritt 204 zurückzukehren. Erscheint der Quellencode zufriedenstellend, dann wird in einem Schritt 214 dem Vor-Compiler 316 zur Erzeugung des geänderten Codes der Quellencode im Quellencodespeicher 308 gegeben, der dann in einem Schritt 216 vom C++-Compiler zur Erzeugung eines ausführbaren Codes im Speicher 310 des ausführbaren Codes kompiliert wird. Dieser wird dann in einem Schritt 218 über die WAN-Server 11 an die verteilten Hauptrechner 10 übertragen, was in 6 graphisch dargestellt ist.
  • Das in der Intelligenz-Domäne eingesetzte Datenmodell ist im folgenden kurz beschrieben. Im folgenden ist jedes "Objekt" ein Datensatz, der eine Reihe von Feldern von Daten umfaßt, auf die nur durch einen Code zugegriffen wird, der diesem Objekt entspricht (in einer Beziehung von eins bis viele, in dem Sinne, dass derselbe Code, der sich auf eine Klasse von Objekten bezieht, tatsächlich auf alle Objekte dieser Klasse zugreift).
  • Herkömmlicherweise sind Objekte in Klassen eingruppiert, wobei die Objekte derselben Klasse zwar verschiedene Daten enthalten, diese aber das gleiche Format haben. Jedes Objekt ist auch mit einer oder mehreren Subroutinen (generell "Methoden" oder "Funktionen" genannt) verknüpft, die mit den Daten Operationen ausführen und die im allgemeinen das einzige Mittel hierfür darstellen.
  • Die Formate, in denen die mit den verschiedenen Objekten derselben Klasse verknüpften Subroutinen entsprechende Daten erhalten und zurücksenden, sind dieselben (d.h. alle Objekte derselben Klasse haben eine gemeinsame Schnittstelle). In der Tat, in C++ sind die Subroutinen nur einmal für alle Objekte derselben Klasse dargestellt (d.h. der Code für die Subroutinen ist nur einmal gespeichert), so dass Code und Objekte eine Beziehung von eins bis viele aufweisen. Der Code ist daher eher mit der Objektklasse als mit jedem der Objekte verknüpft.
  • Jede Objektklasse kann eine Unterteilung einer Gattungsklasse sein, wie es beim objektorientierten Programmieren üblich ist. In diesem Fall kann der Code stattdessen bezogen auf die Gattungsklasse (die "übergeordnete Klasse") gespeichert sein. Der Objektmanager 108 enthält eine Liste der Orte der Daten, die jedes Objekt ausmachen und bei jedem Aufruf eines Objekts (d.h. dem Anruf für ein Objekt) greift der Objektmanager auf den relevanten Subroutinen-Code im Klassen-Code-Speicherfeld 110 zu und liefert zum Code die Adresse der Daten für das relevante Objekt im Objektspeicherfeld 112.
  • Bezugnehmend auf 7 umfassen in dieser Ausführungsform die in den Hauptrechnern 10 der Intelligenz-Domäne vorgesehenen Objekte mehrere Kundenobjekte 500 (wobei eines derselben Daten enthält, die sich auf jeden der zehn Millionen Kunden beziehen), die beim Zugriff durch einen neuen Kunden erzeugt werden, die zerstört werden, wenn der Kunde freiwillig aus dem Netz herausgeht oder von diesem abgeschnitten wird, und die editiert werden, wenn sich die Anforderungen eines Kunden ändern: mehrere Rufobjekte 600a–600b, die beim Beginn einer Verbindung erzeugt werden und die nach Beendigung der Verbindung zerstört werden, und mehrere Kommunikationseinrichtungs-Objekte 700a700c, die sich jeweils auf einen Gegenstand der Endgeräteausrüstung des Kunden beziehen und die bei der ersten Verbindung der Endgeräteausrüstung dieses Kundens mit dem Netzwerk erzeugt werden.
  • Bezugnehmend auf 7b umfassen in dieser Ausführungsform die Vermittlungsstellen 2a, 2b ... der Transport-Domäne 6 des weiteren Hauptrechner, auf denen Objekte 800a800b gespeichert sind, die die Vermittlungen bzw. die Ports der Vermittlungen in den Vermittlungsstellen darstellen. Daher enthält jedes Vermittlungsobjekt 800 eine Liste des Zustands der entsprechenden Vermittlung in jedem Augenblick, diese Objekte sind dauernd im Speicher vorhanden und weisen gegenüber den physischen Geräten, die in den Vermittlungsstellen 2 vorhanden sind, eine eins-zu-eins-Abbildung auf, so daß das Schreiben in den Port oder in die Vermittlungsobjekte den Zustand der jeweiligen Ports oder Vermittlungen ändert und das Lesen der Ports oder der Vermittlungsobjekte den aktuellen Zustand der entsprechenden physischen Geräte genau widerspiegelt.
  • In 8 ist die Struktur der Daten innerhalb eines Kunden-Objekts beispielhaft illustriert.
  • Die attributiven Daten, die durch das Objekt 500 aufrechterhalten werden, umfassen ein Feld 502 vom Kunden-Typ (in dem angegeben sein kann, dass der Kunde ein Angestellter ist, oder in dem irgendein anderer unüblicher Status angegeben sein kann, oder dass es sich um einen normalen Kunden handelt), ein Benutzer-ID-Feld 504, ein Hauptrechner-Feld 506, das den Hauptrechner 10 anzeigt, auf dem das Objekt 500 erstellt wurde (bequemerweise im http/TCP/IP-Format).
  • Ebenfalls sind Daten gespeichert, die für die dem Kunden geleisteten Dienste relevant sind, so z.B. die normale Telefonnummer des Kunden (Feld 508), eine Telefonnummer, zu der die Telefongespräche des Kunden zu bestimmten Zeiten des Tages umzuleiten sind (Feld 510), und die Zeiten des Tages, in denen Anrufe umzuleiten sind (Feld 512).
  • Schließlich werden Rechnungsstellungsinformationen für den Kunden in Form eines Gesprächsprotokollfeldes 514 gespeichert, das für jedes Gespräch die angerufene (und/oder die rufende) Telefonnummer, das Datum und die Zeit des Gesprächs, sowie die Kosten speichert (Feld 514).
  • Auf verschiedene Teile dieser Informationen muß durch verschiedene Einzelpersonen zugegriffen werden. Die Felder 508512, die den dem Kunden anzubietenden Dienst definieren, können beispielsweise durch Kundendienstpersonal oder durch den Kunden selbst über einen Endbenutzeranschluß 15 editiert werden, wohingegen die Rechnungsstellungsdaten (Feld 514) nur durch das Buchführungs- und Fakturierungspersonal, das das Netzwerk betreibt, beschreibar sein dürfen. Es versteht sich von selbst, dass kein Kunde dazu befähigt sein darf, die Listen für die Rechnungsstellung an ihn von einem Endbenutzeranschluß 15 zu überschreiben.
  • Im Betrieb ruft das Auftreten von Ereignissen in der Transport-Domäne (beispielsweise die Überwachung eines "abgenommenen" Zustands in der Endbenutzer-Domäne) die Operation des mit einem Objekt in der Intelligenz-Domäne verknüpften Codes hervor. So wird zum Beispiel bei einem Telefon, das in der Endbenutzer-Domäne abgenommen ist, der Code zur Erstellung eines neuen "Anruf"-Objekts 600 aufgerufen. Wenn die angerufene Nummer erfaßt ist, wird sie über die Zeichengabeverbindungen 12 zur Intelligenz-Domäne 8 übertragen, das Kundenobjekt 500 der rufenden Partei wird zur Änderung des Rechnungsstellungslistenfeldes derselben aktiviert und auf das Kundenobjekt 500 der angerufenen Partei wird zugegriffen, um die Nummer zu bestimmen, zu der der Anruf geleitet werden soll, wobei die Informationen dann zur Einrichtung des Weges, über die der Anruf geleitet wird, zu den Vermittlungsobjekten 800 in der Transport-Domäne übertragen werden.
  • Während der Weiterleitung eines Anrufs ist die Rolle der Intelligenz-Domäne normalerweise eine begrenzte. Nach Auslösen eines Rufs bei Erfassung des Ereignisses 'aufgelegt' aktualisiert der mit dem Kunden-Objekt(en) 500 verbundene Rechnungsstellungsfunktions-Code das Rechnungsstellungsdatenfeld, und das Rufobjekt wird durch den Objektmanager 108 gelöscht.
  • 9 stellt den C++-Quellencode 1000 dar, der einen Klassentyp (Kunde) deklariert, welcher den Daten von 8 entspricht. Er umfaßt einen Abschnitt 1000a, der aus Anweisungen besteht, die der C++-Compiler 312 befolgt, und einen Abschnitt 1000b, der aus kommentierenden Anweisungen besteht, die der C++-Compiler 312 ignoriert.
  • Gemäß der vorliegenden Ausführungsform wirkt jedoch der Vor-Compiler 316 auf den Abschnitt 1000b der kommentierenden Anwei sungen ein. Vor jeder kommentierenden Anweisung 1002b1012b steht das Symbol //, welches den Compiler 312 instruiert, den nachfolgenden Text zu ignorieren.
  • Der Inhalt des Kommentar-Feldes dient in seiner Gesamtheit als Dokumentation für den Programmierer und wird daher vollständig vom C++-Compiler 312 ignoriert. In der vorliegenden Ausführungsform ist der Vor-Compiler 316 so gestaltet, dass er die kommentierenden Anweisungen interpretiert.
  • In der vorliegenden Ausführungsform enthält der Text in den Kommentarfeldern Funktions- (oder Leistungs-) Spezifikationsdaten, die sich auf die Objekte beziehen, die das verteilte System ausmachen. Die Spezifikationsdaten enthalten insbesondere Daten, die Folgendes festlegen:
    • (a) Die Anzahl der Objekte (oder die dem Volumen des Speicherplatzes entsprechende Gesamtsumme), die in einer vorgegebenen Klasse erwartet wird,
    • (b) die Verfügbarkeit, d.h. der Prozentsatz von Zugriffsbeispielen, bei denen das Objekt für den Zugriff verfügbar sein muß,
    • (c) die Zugriffsfähigkeit, d.h. die Anzahl der verschiedenen Zugriffspunkte, von denen das Objekt (oder bestimmte Daten darin) aufgerufen werden kann (z.B. die Anzahl der Anschlußeinheiten oder Grundgeräte, die auf das Objekt zugreifen müssen),
    • (d) Sicherheit, d.h. die Zugriffsrechte, die verschiedene Benutzer auf verschiedene Daten haben müssen (d.h. ob sie überhaupt Zugriff haben müssen und, wenn ja, ob sie lesen, schreiben oder beides können),
    • (e) Zusammentreffen, d.h. die Anzahl anderer Prozesse, die gleichzeitig von einem gegebenen Objekt oder Prozeß aufgerufen werden könnten,
    • (f) Pünktlichkeit, d.h. die maximale, durchschnittliche und/oder minimale Zeit, in der ein Prozeß abgeschlossen werden muß.
  • Unten sind typische Werte einiger dieser Funktionskriterien für verschiedene Anwendungen angegeben.
  • Einige potentielle Anwendungen und ihre Funktionsdimensionen:
    Figure 00220001
  • Es wird erneut Bezug genommen auf 9, worin die Anweisung 1002a eine Klasse von Objekten, die "Kunde" genannt sind, definiert und die Anweisung 1002b spezifiziert, dass die Objekte dieser Klasse in 99,99% der Zeit verfügbar sein müssen.
  • Die Anweisung 1004a definiert ein Feld von 32 Byte, das "Name" heißt und die Anweisung 1004b spezifiziert, dass der Kunden-Support-Dienst (CSS) Lese- und Schreibzugriff auf die Inhalte haben muß und dass jeder andere Prozeß Nur-Lese-Zugriff haben muß (so dass nur das Personal des Kunden-Support-Dienstes den Teilnehmernamen ändern kann, der in einem Objekt der Klasse Kunde gespeichert ist, die sich auf einen einzelnen Kunden bezieht).
  • Die Anweisung 1008a definiert eine Funktion "Kunde", und die Anweisung 1008b spezifiziert, dass Kunden-Support-Dienste Zugriff haben. Die Anweisung 1006b spezifiziert minimale, durchschnittliche und maximale Leistungszeiten (in Millisekunden) für die Funktion "Kunde".
  • Die Anweisung 1010a deklariert eine Leerfunktion (d.h. auf die kein Ergebnis folgt), die "printBill" genannt wird und die die Rechnung für das Kundenobjekt druckt, und die Anweisung 1010b spezifiziert die entsprechenden minimalen, durchschnittlichen und maximalen Reaktionszeiten.
  • Schließlich deklariert die Anweisung 1012a eine Leerfunktion, die "callDelivered" (Ruf übergeben) heißt und aufgerufen wird, wenn ein Ruf abzuwickeln ist, und die Anweisung 1012b spezifiziert die minimalen, durchschnittlichen und maximalen Reaktionszeiten für die Funktion.
  • Das bedeutet daher, dass der Code von 9 ausführbare C++-Anweisungen 1000a und Kommentare 1000b umfaßt, und dass er als ein C++-Programm kompiliert werden kann, das normal abläuft, wobei der Compiler 312 nicht auf die von den kommentierenden Anweisungen 100b definierte Funktionsspezifikation achtzugeben hat.
  • Andererseits haben die Funktionskriterien 1000b, wenn sie vom Vor-Compiler 316 verarbeitet wurden, Auswirkungen sowohl auf die Erzeugung eines neuen, kompilierbaren C++-Codes als auch auf die Er zeugung der Direktiven für den Compiler, wie im Folgenden im Einzelnen beschrieben ist.
  • Größe/Anzahl der Objekte
  • Jede Klasse von Objekten kann mit einer Größenanweisung verknüpft werden, die entweder die Anzahl der Objekte dieser Klasse angibt, die erwartet werden, oder die entsprechende erforderliche Speichergröße. Generell sind die bevorzugten Ausführungsformen der Erfindung so ausgeführt, dass sie die Anweisungen interpretieren, die sich auf die Anzahl der erwarteten Objekte beziehen (da diese eher zum Programmierer gelangt) und diese durch Multiplikation der so deklarierten Anzahl von Objekten mit der Summe der Größen der deklarierten Datentypen für die Klasse in die erforderliche Speichergröße umwandelt.
  • Gemäß 10 ist der Vor-Compiler ausgeführt, in einem Schritt 2002 alle mit Klassen verknüpften Größenanweisungen zu lesen und jede einzelne in eine Speicherplatzgröße (in Megabytes) umzuwandeln und die Summe all solcher Speichergrößen zu bilden.
  • Wenn die Gesamtgröße des so berechneten Objektmodells klein genug ist, um in einen einzigen Ein-Megabyte-UNIX-Prozeß zu passen, schreibt der Vor-Compiler an den Compiler eine Direktive, den Code für einen einzigen Prozeß (Schritt 2006) zu kompilieren. Das vereinfacht die Adressierung, die eventuell einzusetzen ist, da der Compiler es dann den Objekten gestattet, Daten durch Referenz passieren zu lassen, da sich alle Objekte im gleichen Adressenraum befinden werden.
  • Ansonsten schreibt der Vor-Compiler 316 im Schritt 2008 eine Direktive an den Compiler, den Code in mehreren UNIX-Prozessen zu kompilieren. Im Schritt 2010 kann der Vor-Compiler 316 die minimale Anzahl der Ziel-Hauptprozessoren wählen, für die der Code kompiliert werden soll.
  • Die Auswahlschritte 2004 und 2010 können in Übereinstimmung mit den im Systemdatenspeicher 318 gespeicherten Daten durchgeführt werden, die angeben, wieviel Speicher in jedem der Hauptrechner 10 verfügbar ist.
  • In anderen Ausführungsformen kann die Größe des so berechneten Objektmodells auch verwendet werden, um die Adressiermethoden auf andere Weise zu steuern, so kann beispielsweise die Größe des Objektmodells verwendet werden, um den Compiler zu instruieren, zwischen der Anwendung einer Speicheradressierung (wo alle Objekte im gleichen Speicherraum lokalisiert sein können) und einer Dateiadressierung (bei einer größeren Anzahl von Objekten) oder von Objekt-Benutzer-Anwenderkennungen (ID) auszuwählen oder aber virtuelle Speicher-Zeiger zu verwenden.
  • Verfügbarkeit
  • Eine spezielle Methode zur Sicherstellung einer hohen Verfügbarkeit eines bestimmten Objektes ist es, mehrere Kopien des Objektes zu erstellen (und, selbstverständlich, falls möglich, die Daten in allen Kopien zu aktualisieren, damit sie identisch sind). Die Verfügbarkeit eines gegebenen Objektes ist ungefähr umgekehrt proportional zu der Zeit, die dieses Objekt für eine Reaktion benötigt. Somit ist die Anzahl der wünschenswerten Kopien eines Objektes ungefähr proportional zum Verhältnis der Verfügbarkeit und der durchschnittlichen Reaktionszeit des Objektes.
  • Daher ist gemäß 11 in einem Schritt 3002 der Vor-Compiler 316 so gestaltet, dass er die erforderliche Verfügbarkeit für eine Klasse von Objekten liest, und in einem Schritt 3004 die durchschnittliche Ausführungszeit liest, die für die Objekte der Klasse angegeben ist.
  • Dann wählt der Vor-Compiler in einem Schritt 3006 die Anzahl der Kopien eines Objektes, die parallel vorhanden sein müssen, um den erforderlichen Grad der Verfügbarkeit zu gewährleisten, und in einem Schritt 3008 dehnt der Vor-Compiler den Konstrukteur-Code (zur Erstellung neuer Objekte der Klasse) auf diese Klasse aus, damit die erforderliche Anzahl an Kopien gleichzeitig (auf verschiedenen Hauptrechnern 10) (in Laufzeit) erzeugt wird.
  • Die im Schritt 3006 gewählte Anzahl ist im allgemeinen Eins (in welchem Fall der Vor-Compiler 316 im Schritt 3008 keinen zusätzlichen Code schreibt), so dass die Datenintegrität aufrechterhalten wird; ausgenommen ist der Fall, daß eine hohe Verfügbarkeit erforderlich ist, wobei zwei oder mehr Kopien gewählt werden, wie oben bei der Klassenreaktionszeit und erforderlichen Verfügbarkeit erwähnt.
  • In andern Ausführungsformen kann anstelle der Sollzugriffszeiten und der Erzeugung einer gewünschten Anzahl von Replika-Objekten in Übereinstimmung damit, eine vorgegebene Anzahl von Replika-Objekten (beispielsweise zwei) gewählt werden und die Zugriffszeiten auf die Objekte können (innerhalb des vorgeschriebenen Minimums und Maximums, im folgenden im Einzelnen beschrieben) für eine Unterbringung geändert werden.
  • Zugriffsmöglichkeit
  • Da verschiedene Hauptrechner 10 mit verschiedenen Punkten im WAN 11, 12 verbunden sind, haben einige spezielle Hauptrechner 10 kürzere Kommunikationswege zu speziellen Endgeräten 15 oder Hauptrechnern 10 als andere. Diese Daten sind im Datenspeicher 318 des Systems gespeichert. Es ist daher vorteilhaft, Objekte in den Hauptrechnern 10 zu speichern, die mit jenen Endgeräten verbunden sind, die auf sie zugreifen.
  • In 12 liest der Vor-Compiler 316 in einem Schritt 4002 für jede Datendeklaration die Identität (wie beispielsweise Benutzer, Kundensupport, Diensteanbieter, Rechnungsstellung oder Vorschrift) und die Anzahl der Endgeräte 15, die auf die Objekte dieser Klasse zugreifen, und bestimmt im Schritt 4004 die Hauptrechner 10, in denen neue Objekte dieser Klasse gespeichert werden sollen, um den besten Zugriff auf diese Endgeräte zu gewähren, wobei die Daten verwendet werden, die im Datenspeicher 318 des Systems gespeichert sind.
  • In einem Schritt 4006 kann der Vor-Compiler 316 einen neuen Quellencode hinzufügen, damit der Compiler die Objektmanager 108 modifiziert, die für verschiedene Hauptrechner 10 kompiliert wurden, damit diese alle Anfragen zur Erzeugung neuer Objekte der entsprechenden Klasse zu den speziellen Hauptrechnern 10 übertragen, die im Schritt 4004 ausgewählt wurden.
  • Sicherheit
  • Der Vor-Compiler 316 fügt in einem Schritt 4008 einen neuen Quellencode für einen Test der Identität des Objekts oder des Prozesses hinzu, das/der gerade eine Funktion erzeugt, die einen bestimmten Datengegenstand ändert und der den Zugriff nur dann erlaubt, wenn die Identität mit der erwarteten Benutzerkategorie übereinstimmt. Auf diese Weise können Personaldaten beispielsweise nur durch die Personalendgeräte gelesen oder geschrieben werden.
  • Zusammentreffen
  • Wo eine Anzahl zusammentreffender Zugriffe auf Daten eines Objekts möglich ist, und ein erstes Objekt auf ein anderes Objekt zugreift, auf das zur gleichen Zeit ebenfalls ein Zugriff stattfindet, kann sich eine widersprüchliche Situation ergeben. Daher ist in bevorzugten Ausführungsformen ein Mittel zur Vermeidung dieser Unvereinbarkeit vorgesehen. In 13 liest in einem Schritt 5002 der Vor-Compiler 316 für jede Klasse die Anzahl der zusammentreffenden Prozesse, die auf Objekte dieser Klasse zugreifen könnten; wenn keine Information über ein Zusammentreffen enthalten ist, oder wenn die Anzahl der zusammentreffenden Prozesse im Schritt 5004 für eine vorgegebene Objektklasse eine vorgegebene Anzahl übersteigt (es kann sich um zwei oder um eine größere Anzahl handeln), wird im Schritt 5006 für diese Klasse eine Zusammentreffen-Steuermethode ausgewählt, die in dieser Ausführungsform ein einfacher Sperrprozeß sein kann, mit dessen Hilfe, nachdem auf ein Objekt zugegriffen wurde, kein weiterer Zugriff möglich ist, bis der erste beendet ist.
  • Im Schritt 5008 wird dem ursprünglichen Quellencode ein zusätzlicher Quellencode hinzugefügt, mit dem der Compiler dem Code für die entsprechende Klasse einen Sperrschritt hinzufügt.
  • Pünktlichkeit
  • Jeder Hauptcomputer 10 betreibt eine Anzahl Prozesse verschiedener Objekte parallel, indem ein Multitasking-Betriebssystem (Mehraufgaben-Betriebssystem) 106 verwendet wird.
  • In 14 liest der Vor-Compiler in einem Schritt 6002 die mit jeder Klasse verbundenen Leistungszeiten. Abhängig von der Summe aller durchschnittlichen Leistungszeiten in einem Schritt 6004 schließt der Vor-Compiler eine Compiler-Direktive mit ein, um für jeden Hauptcomputer 10 in Übereinstimmung mit der Größe des Speichers, aufgezeichnet im Datenspeicher 318 des Systems, eine Cache-Größe zu etablieren, um eine Cache-Größe umgekehrt proportional zur erforderlichen Summe der Zugriffszeiten innerhalb des verfügbaren Speichers vorzusehen.
  • In einem Schritt 6006 wird für jede Klassendefinition getestet, ob eine kurze durchschnittliche oder eine maximale Leistungszeit spezifiziert ist und, wenn das der Fall ist, wird in einem Schritt 6008 eine Prioritätsgewichtung für diese Klasse umgekehrt proportional zur durchschnittlichen Leistungszeit gewählt, und in einem Schritt 6010 wird dem für die entsprechende Klasse definierten Code ein Quellencode zugefügt, um einen Zeitgeber zu implementieren, der testet, ob nach Aufruf der Klasse eine vorgegebene Zeit abgelaufen ist (für eine spezielle Funktion oder Operation innerhalb der Klasse) und, wenn das der Fall ist, die Operation abbricht.
  • Der gewählte Gewichtungswert wird in eine Liste von Gewichtungswerten geschrieben, die vom Compiler für den Gebrauch durch den Objektmanager 108 für jeden Hauptcomputer 10 kompiliert wird, in Übereinstimmung mit welcher die Priorität eingestellt wird, in der jedes Objekt auszuführen ist, so dass Objekten mit einer relevanten langen Reaktionszeit eine relativ kurze Prioritätswartezeit zugewiesen wird und diese vom Betriebssystem 106 als "Hintergrund"-Aufgaben behandelt werden.
  • Zusammenfassung
  • Nach dem Betrieb des Vor-Compilers 316, enthält somit der im Quellencodespeicher 308 gespeicherte verlängerte Quellencode einen zu sätzlichen Quellencode und Compiler-Direktiven, die die funktionellen oder Leistungskriterien implementieren, indem sie entweder
    • (a) dem Klassencode 110 zusätzliche Codedaten hinzufügen oder
    • (b) den Objektmanagercode 108 für alle Hauptrechner 10 modifizieren oder
    • (c) den Compiler instruieren, separate Versionen des Objektmanagers für verschiedene Hauptrechner 10 zu erzeugen.
  • In Übereinstimmung mit diesem verlängerten Quellencode erzeugt der Compiler dann eine ausführbare Codedatei, die den Klassencode 110 für jede deklarierte Klasse im Eingangsquellencode enthält, und die auch einen Objektmanager 108 für jeden Hauptrechner 10 enthalten kann.
  • Statt nun aber einen Code des Objektmanagers 108 für jeden Hauptrechner 10 zu kompilieren, ist es eher bevorzugt, statt dessen eine Datei von Daten zu liefern, die vom Objektmanager 108 für jeden Hauptrechner 10 einzusetzen ist, um dessen Betrieb zu modifizieren.
  • Somit werden, wenn das Telekommunikationsnetzwerk geändert werden muß, beispielsweise wegen einer Änderung der verfügbaren Systeminformationen, wie z.B. der Hinzufügung eines neuen Hauptrechners oder der Vergrößerung des auf Hauptrechnern verfügbaren Speichers oder weil die Funktion einer oder mehrerer Klassen von Objekten geändert werden muß, die Vorkompilierungs- und die Kompilierungsprozesse wiederholt, und die neuen ausführbaren Dateien werden, nach einem lokalen Test, wie oben beschrieben, über WAN jedem Hauptrechner 10 übertragen.
  • Wo dem verteilten Steuersystem nur einfach ein neuer Hauptrechner hinzugefügt wird, ohne dass weitere Änderungen vorgenommen wurden, kann dem Hauptrechner einfach eine Kopie der vorher kompilierten ausführbaren Datei über WAN geliefert werden, so daß dieser in der Art und Weise der vorhandenen Hauptcomputer arbeitet.
  • Es ist daher deutlich erkennbar, dass durch das Vorsehen spezieller Anforderungen in Anweisungen des verteilten Steuersystems, die durch den ersten Compiler-Typ ignoriert werden (z.B. kommentierender Anweisungen), ein einfaches lokales Testen der grundlegenden Funktionen des Steuersystems vor dessen Freigabe ermöglichen, wodurch mögliche Ausfallzeiten der Hauptrechner 10, wenn der Einsatz des Steuersystems geändert wird, auf ein Minimum reduziert werden.
  • Weitere alternative Ausführungsformen und Modifikationen
  • Aus dem Vorhergehenden wird klar, dass viele Modifikationen und Änderungen möglich sind. So ist es zum Beispiel aus dem obigen Gründen zweckmäßig, die Erfindung als Vor-Compiler vorzusehen, der mit einem herkömmlichen C++-Compiler kooperiert; ebenso wäre es möglich, die vorliegende Erfindung in einen nicht herkömmlichen Compiler zu integrieren (und, in der Tat kann die Kombination von Vor-Compiler und Compiler als etwas angesehen werden, das genau das enthält).
  • Selbstverständlich kann die Erfindung nicht nur mit C++-Compilern verwendet werden, sondern auch mit anderen objektorientierten Sprachen, wie beispielsweise Smalltalk(TM), die in einer verteilten Umgebung vorgesehen sein müssen. Im allgemeinen wäre es möglich, äquivalente Techniken mit einer nicht-objektorientierten Sprache zu nutzen.
  • Die Erfindung ist zwar beschrieben worden, dass sie die Compiler-Einrichtung in einem Telekommunikationsnetzwerk enthält, aber es versteht sich von selbst, daß sich die Compiler-Einrichtung in der Praxis in einem anderen Zuständigkeitsbereich befinden könnte und mit den Hauptrechnern über ein internationales Telekommunikationsnetzwerk verbunden sein könnte. Dementsprechend wird Schutz für die Compiler-Einrichtung sowohl in Kombination mit dem Telekommunikationsnetzwerk, mit dem sie verwendet wird, als isoliert davon beantragt.
  • Selbstverständlich sind auch andere als Telekommunikationsanwendungen möglich, sowie beispielsweise ein verteiltes Gemeinschaftsrechnen.
  • Die andere UK-Patentanmeldung 9600823.0 vom gleichen Anmelder (die am gleichen Tag und mit dem gleichen Titel wie die vorliegende Anmeldung eingereicht wurde, kann zusammen mit der vorliegenden Erfindung verwendet werden.
  • Insbesondere wird der dort beschriebene Mechanismus zur Erzeugung eines Typen-Modells bevorzugt dahingehend erweitert, dass es zusätzliche Datenfelder für jedes Objekt enthält, die die funktionellen Leistungsdaten wieder angeben, wie sie für die vorliegende Erfindung erkannt wurden, die dann als Teil des kompilierten ausführbaren Codes geliefert werden, der von jedem Objektmanager 108 zu verwenden ist. Auf diese Weise kann jedem Hauptrechner 10 das gleiche ausführbare Programm geliefert werden und es entfällt die Notwendigkeit, die im Speicher 318 gespeicherte Systeminformation zu verwenden.

Claims (10)

  1. Compiler-Einrichtung für ein verteiltes Steuersystem, das aus mehreren miteinander verbundenen Computern (10) besteht, wobei die Compiler-Einrichtung (30) umfaßt: einen Compiler, der einen ersten Teil (312) aufweist, der so ausgeführt ist, dass er auf ausführbare Anweisungen in einem Quellenprogramm (1000) anspricht und einen ausführbaren Code erstellt (216), und der dadurch gekennzeichnet ist, dass er ferner einen Speicher (318) für aktuelle Systemdaten umfaßt und dadurch, dass: der Compiler einen zweiten Teil (316) aufweist, der so ausgeführt ist, dass er auf Kommentare in einem Originalquellenprogramm (1000) anspricht, wobei die Kommentare mindestens ein spezifiziertes Kriterium (1002b1012b) für die geforderte Systemleistung durch: Zugriff (2004, 2010; 3004; 4004; 6004) auf den Speicher (318) in Übereinstimmung mit dem mindestens einen spezifizierten Kriterium zur Wiedergewinnung der entsprechenden aktuellen Systemdaten, Auswertung (2004; 3006; 4004; 5004; 6006) in Übereinstimmung mit den entsprechenden aktuellen Systemdaten, ob die geforderte Systemleistung vom Originalquellenprogramm geboten werden kann und, bei einem negativen Auswertungsergebnis, Erzeugung (2008, 2010; 3008; 4006; 5006, 5008; 6010) geeigneter zusätzlicher Quellenprogrammanweisungen und Compiler-Direktiven und Erstellung eines modifizierten Quellenprogramms durch Einbau der zusätzlichen Quellenprogrammanweisungen und Compiler-Direktiven in das Originalquellenprogramm umfassen.
  2. Compiler-Einrichtung nach Anspruch 1, wobei der erste Teil des Compilers ein herkömmlicher Compiler und der zweite Teil ein separater Vor-Compiler ist.
  3. Compiler-Einrichtung nach Anspruch 1 oder 2 für das verteilte Steuersystem, wobei die Computer so ausgeführt sind, dass sie Steuerdaten in Objektlisten zusammen mit den dazugehörigen Datenlese- und/oder Schreibsteuerprogrammen speichern, und wobei die Einrichtung das mindestens eine spezifizierte Kriterium für die geforderte Systemleistung auf eine Leistungszeit oder auf Leistungszeiten bezieht, die von den Steuerprogrammen einzuhalten sind.
  4. Compiler-Einrichtung nach Anspruch 3, wobei die Leistungszeit/Leistungszeiten eine oder mehrere Zeiten sein kann, die ausgewählt sind unter einer minimalen Leistungszeit, einer durchschnittlichen Leistungszeit und einer maximalen Leistungszeit.
  5. Compiler-Einrichtung nach Anspruch 1 oder 2 für ein verteiltes Steuersystem, wobei die Computer so ausgeführt sind, dass sie Steuerdaten in Objektlisten zusammen mit den dazugehörigen Datenlese- und/oder Schreibsteuerprogrammen speichern, und wobei die Einrichtung das mindestens eine spezifizierte Kriterium für die geforderte Systemleistung auf die Anzahl der äquivalenten Listen bezieht, die in dem System bereits vorhanden sind.
  6. Compiler-Einrichtung nach Anspruch 1 oder 2 für das verteilte Steuersystem, wobei die Computer so ausgeführt sind, dass sie Steuerdaten in Objektlisten zusammen mit den dazugehörigen Datenlese- und/oder Schreibsteuerprogrammen speichern, und wobei die Einrichtung das mindestens eine spezifizierte Kriterium für die geforderte Systemleistung auf die Anzahl der Zugriffspunkte innerhalb des Systems bezieht, von denen aus voraussichtlich auf die Datenlisten zugegriffen wird.
  7. Compiler-Einrichtung nach einem der Ansprüche 1 oder 2 für das verteilte Steuersystem, wobei die Computer so ausgeführt sind, dass sie Steuerdaten in Objektlisten zusammen mit den dazugehörigen Datenlese- und/oder Schreibsteuerprogrammen speichern, und wobei die Einrichtung das mindestens eine spezifizierte Kriterium für die geforderte Systemleistung auf Kategorien von Benutzern bezieht, denen es erlaubt sein soll, auf die Datenlisten oder auf Teile derselben zuzugreifen.
  8. Compiler-Einrichtung nach einem der Ansprüche 1 oder 2 für das verteilte Steuersystem, wobei die Computer so ausgeführt sind, dass sie Steuerdaten in Objektlisten zusammen mit den dazugehörigen Datenlese- und/oder Schreibsteuerprogrammen speichern, und wobei die Einrichtung das mindestens eine spezifizierte Kriterium für die geforderte Systemleistung auf das Ausmaß bezieht, in dem die Daten unmittelbar verfügbar sein müssen.
  9. Verfahren zur Erzeugung eines Codes zur Ausführung auf einem verteilten Computersystem, das mehrere miteinander verbundene Computer (10) umfaßt und die folgenden Schritte aufweist: Erzeugung (202) eines Originalquellenprogramms (1000), das ausführbare Anweisungen (1000a), die die Struktur des Codes definieren, und Kommentare umfaßt, die mindestens ein spezifiziertes Kriterium (1002b1012b) für die geforderte Systemleistung umfassen, Zugriff (2004, 2010; 3004; 4004; 6004) auf einen aktuellen Systemdatenspeicher (318) des verteilten Computersystems in Übereinstimmung mit dem mindestens einen spezifizierten Kriterium zur Wiedergewinnung der entsprechenden aktuellen Systemdaten; Auswertung (2004; 3006; 4004; 5004; 6006) in Übereinstimmung mit den entsprechenden aktuellen Systemdaten, ob die geforderte Systemleistung vom Originalquellenprogramm geboten werden kann und, bei einem negativen Auswertungsergebnis, Erzeugung (2008, 2010; 3008; 4006; 5006; 5008; 6010) geeigneter zusätzlicher Quellenprogrammanweisungen und Compiler-Direktiven und Erstellung eines modifizierten Quellenprogramms durch Einbau der zusätzlichen Quellenprogrammanweisungen und Compiler-Direktiven in das Originalquellenprogramm.
  10. Verfahren nach Anspruch 9, wobei das verteilte System ein Steuersystem für ein Telekommunikationsnetzwerk darstellt, das mehrere Vermittlungsstellen umfaßt und jeder Computer jeweils eine der Vermittlungsstellen steuert.
DE69734348T 1996-01-16 1997-01-07 Verteilte verarbeitung Expired - Lifetime DE69734348T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GBGB9600854.5A GB9600854D0 (en) 1996-01-16 1996-01-16 Distributed processing
GB9600854 1996-01-16
PCT/GB1997/000035 WO1997026595A1 (en) 1996-01-16 1997-01-07 Distributed processing

Publications (2)

Publication Number Publication Date
DE69734348D1 DE69734348D1 (de) 2005-11-17
DE69734348T2 true DE69734348T2 (de) 2006-07-06

Family

ID=10787110

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69734348T Expired - Lifetime DE69734348T2 (de) 1996-01-16 1997-01-07 Verteilte verarbeitung

Country Status (13)

Country Link
US (2) US6438746B1 (de)
EP (1) EP0875028B1 (de)
JP (1) JP3878217B2 (de)
KR (1) KR19990077378A (de)
CN (2) CN1208481A (de)
AU (1) AU707109B2 (de)
CA (1) CA2240508C (de)
DE (1) DE69734348T2 (de)
GB (1) GB9600854D0 (de)
MX (1) MX9805682A (de)
NO (1) NO983263L (de)
NZ (1) NZ325380A (de)
WO (1) WO1997026595A1 (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7152200B2 (en) * 1997-12-31 2006-12-19 Qwest Communications International Inc. Internet-based database report writer and customer data management system
DE19919874A1 (de) * 1999-04-30 2000-11-02 Univ Dresden Tech Verfahren zur Informationsübergabe bei der Steuerung von Abläufen
US6772140B1 (en) * 1999-11-01 2004-08-03 Harris-Exigent, Inc. Hierarchical syntax for satellite command and control directives
AU2001296394A1 (en) * 2000-09-27 2002-04-15 Conducive Technology Corp Scripting business logic in a distributed object oriented environment
JP2002116917A (ja) * 2000-10-05 2002-04-19 Fujitsu Ltd オブジェクト指向型プログラミング言語によるソース・プログラムをコンパイルするコンパイラ
US7346849B1 (en) * 2001-04-03 2008-03-18 Cypress Semiconductor Corp. Executable code derived from user-selectable links embedded within the comments portion of a program
US7707544B2 (en) * 2002-12-05 2010-04-27 Bea Systems, Inc. System and method for generating and reusing software application code with source definition files
GB0303270D0 (en) 2003-02-13 2003-03-19 Renishaw Plc A machine tool control process and apparatus therefor
US7185215B2 (en) * 2003-02-24 2007-02-27 International Business Machines Corporation Machine code builder derived power consumption reduction
US20040187099A1 (en) * 2003-03-20 2004-09-23 Convergys Information Management Group, Inc. System and method for processing price plans on a device based rating engine
JP5396979B2 (ja) * 2009-04-10 2014-01-22 日本電気株式会社 ソフトウェア開発支援装置、システム、ソフトウェア開発支援装置の機能拡張方法、及びプログラム
CN110825378B (zh) * 2019-09-17 2023-07-18 秦皇岛米格教育科技有限公司 基于程序积木的编程系统和控制系统
CN115658078B (zh) * 2022-12-27 2023-03-17 金篆信科有限责任公司 数据库的预编译处理方法、装置、设备及介质

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04505977A (ja) * 1989-12-26 1992-10-15 富士通株式会社 オブジェクト指向分散処理システム
US5307499A (en) * 1990-11-30 1994-04-26 Singapore Computer Systems Limited Interpretive object-oriented facility which can access pre-compiled classes
JP3050645B2 (ja) * 1991-06-04 2000-06-12 川崎製鉄株式会社 亜鉛めっき付着ムラ原因を突き止める方法
DE4131380A1 (de) * 1991-09-20 1993-03-25 Siemens Ag Verfahren zur adaption einer objektorientierten applikation
US5327561A (en) * 1991-09-20 1994-07-05 International Business Machines Corporation System and method for solving monotone information propagation problems
US5717929A (en) * 1993-03-30 1998-02-10 Sanyo Electric Co., Ltd. Apparatus and method for program execution, and image reproduction apparatus with special effects utilizing such apparatus and method
US5539907A (en) * 1994-03-01 1996-07-23 Digital Equipment Corporation System for monitoring computer system performance
GB9600823D0 (en) * 1996-01-16 1996-03-20 British Telecomm Distributed processing
US5960200A (en) * 1996-05-03 1999-09-28 I-Cube System to transition an enterprise to a distributed infrastructure
US5892950A (en) * 1996-08-09 1999-04-06 Sun Microsystems, Inc. Interface for telecommunications network management

Also Published As

Publication number Publication date
JP2000503430A (ja) 2000-03-21
NZ325380A (en) 1999-07-29
EP0875028A1 (de) 1998-11-04
CN101154165A (zh) 2008-04-02
KR19990077378A (ko) 1999-10-25
US6343374B1 (en) 2002-01-29
AU1387997A (en) 1997-08-11
NO983263D0 (no) 1998-07-15
US6438746B1 (en) 2002-08-20
CN1208481A (zh) 1999-02-17
JP3878217B2 (ja) 2007-02-07
CN100557569C (zh) 2009-11-04
AU707109B2 (en) 1999-07-01
WO1997026595A1 (en) 1997-07-24
CA2240508A1 (en) 1997-07-24
DE69734348D1 (de) 2005-11-17
CA2240508C (en) 2005-10-18
GB9600854D0 (en) 1996-03-20
NO983263L (no) 1998-07-15
EP0875028B1 (de) 2005-10-12
MX9805682A (es) 1998-11-29

Similar Documents

Publication Publication Date Title
DE69729926T2 (de) Netzwerkbrowser
DE69734348T2 (de) Verteilte verarbeitung
DE69724356T2 (de) Verfahren und Apparat für die Darstellung von Information im Bezug auf jeden einzelnen von mehreren Hyperlinks
DE69738309T2 (de) Verteilte verarbeitung
EP0682318B1 (de) Datenverwaltungssystem
DE19882235B4 (de) Verwendung von Web-Technologie für Teilnehmerverwaltungsaktivitäten
DE69730276T2 (de) Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes
DE69637436T2 (de) Objektorientiertes Kommunikationssystem mit Unterstützung für mehrere entfernte Maschinentypen
DE69832354T2 (de) Netzwerkverwaltungsrahmenwerk
DE69918334T2 (de) Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen
DE19705955A1 (de) Verfahren zum Generieren einer Implementierung eines Workflow-Prozessmodells in einer Objektumgebung
EP0525432A2 (de) Verfahren zur Änderung von Systemkonfigurationsdatensätzen in einem Fernmeldevermittlungssystem
DE69733305T2 (de) System/Verfahren zur wirkungsvollen Übermittlung von Datenströmen in einem Multimediasystem
EP0959588A2 (de) Netzelement mit einer Steuerungseinrichtung und Steuerungsverfahren
EP1241603A1 (de) Internet-Banner
DE69907714T2 (de) Komponentbasiertes quellcodegeneratorverfahren
DE19924261A1 (de) Netzmanagementverfahren und System
EP0632668B1 (de) Verfahren zum Aktualisieren eines Systemprogramms in einer Vermittlungseinrichtung
DE10041072A1 (de) Verfahren zur automatischen Erzeugung von Programmcode
DE69734352T2 (de) Verteilte verarbeitung
EP0838054B1 (de) Verfahren und steuereinrichtung für eine graphische steuerung von abläufen in einem netzwerkmanagementsystem
EP0990984B1 (de) Verfahren zum Vermitteln von Prozessdaten sowie Verfahren zum Erstellen von anwenderspezifischen Daten und mit diesem Verfahren erstellte Daten
EP0303869A1 (de) Modular strukturiertes digitales Kommunikationssystem mit betriebstechnischen Kommunikationsmitteln
DE4310615C2 (de) Entwurf elektrischer Vorrichtungen mit mehreren Entwurfswerkzeugen, die zumindest teilweise untereinander inkompatibel sind
DE19637883B4 (de) Datenverarbeitungsanlage zur Ausführung großer Programmsysteme

Legal Events

Date Code Title Description
8364 No opposition during term of opposition