-
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 700a–700c,
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 800a–800b 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 508–512, 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 1002b–1012b 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:
-
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.