-
Die Erfindung betrifft ein Verfahren zum Betreiben eines hochverfügbaren Computersystems unter Verwendung einer oder mehrerer virtueller Software Maschinen, nachfolgend virtuelle Maschine genannt.
-
Hochverfügbare Computersysteme sind bereits bekannt. Sie weisen eine Master-/Slave-Konfiguration auf, wobei jeweils der Master einen technischen Prozess bzw. eine Anwendungsapplikation durch Ausführung eines Anwendungsprogrammes aktiv steuert, während der Slave im Standbymodus betrieben wird und bei einem Ausfall des Masters die Steuerung des technischen Prozesses übernimmt. Bei diesem technischen Prozess kann es sich beispielsweise um den Arbeitsvorgang einer Produktionsmaschine handeln, welcher vom Master unter Verwendung von Zugriffen auf ein Eingabe-/Ausgabe-System gesteuert wird.
-
Aus der
DE 10 2005 053 275 A1 ist ein hochverfügbares Computerverbundsystem bekannt, welches ein erstes Computersystem und ein zweites Computersystem aufweist. Das erste Computersystem weist mindestens eine virtuelle Computereinheit und eine Steuereinrichtung auf, wobei die Steuereinrichtung geeignet ist, der mindestens einen virtuellen Computereinheit Arbeitsspeicher des Computersystems von variabler Größe zuzuteilen. Die virtuelle Computereinheit ist als virtuelle Ersatzcomputereinheit innerhalb des Computerverbundsystems eingerichtet und dazu geeignet, beim Ausfall eines der weiteren Computersysteme dessen Aufgaben zu übernehmen. Das erste Computersystem weist einen Hochverfügbarkeitsagenten auf, der dazu geeignet ist, einen Ausfall eines der weiteren Computersysteme zu erkennen und nach dem Erkennen eines Ausfalls die Steuereinrichtung anzuweisen, der virtuellen Ersatzcomputereinheit Arbeitsspeicher einer bestimmten Größe zuzuteilen. Die Größe des der virtuellen Ersatzcomputereinheit zugeteilten Arbeitsspeichers hängt davon ab, ob die virtuelle Ersatzcomputereinheit Aufgaben eines der weiteren Computersysteme übernimmt oder nicht.
-
Die Lösung in
DE 10 2005 053 275 A1 hat Nachteile bei der Steuerung eines technischen Prozesses. Die Zuteilung des Arbeitsspeichers nach dem Erkennen des Ausfalls eines Computersystems nimmt Zeit in Anspruch. Dies ist mit den Ansprüchen eines zu steuernden Prozesses oftmals nicht vereinbar.
-
Die Aufgabe der Erfindung besteht darin, ein Verfahren zum Betreiben eines hochverfügbaren Computersystems unter Verwendung einer oder mehrerer virtueller Maschinen bereitzustellen, bei welchem bei einem Ausfall des einen technischen Prozess steuernden Anwendungsprogrammes die Weiterführung des technischen Prozesses beschleunigt ist.
-
Diese Aufgabe wird durch ein Verfahren mit den im Anspruch 1 angegebenen Merkmalen gelöst. Vorteilhafte Ausgestaltungen und Weiterbildungen der Erfindung sind in den abhängigen Ansprüchen angegeben.
-
Die Vorteile der Erfindung ergeben sich aus deren nachfolgender beispielhafter Erläuterung anhand der Figuren. Es zeigt
-
1 eine Blockdarstellung eines ersten Ausführungsbeispiels für ein hochverfügbares Computersystem,
-
2 eine Blockdarstellung eines zweiten Ausführungsbeispiels für ein hochverfügbares Computersystem,
-
3 eine Blockdarstellung eines dritten Ausführungsbeispiels für ein hochverfügbares Computersystem,
-
4 eine Blockdarstellung eines vierten Ausführungsbeispiels für ein hochverfügbares Computersystem,
-
5 eine Blockdarstellung des grundsätzlichen Aufbaus einer virtuellen Maschine,
-
6 eine Darstellung zur Erläuterung der Arbeitsweise eines Interpreters,
-
7 eine Blockdarstellung zur Erläuterung einer Master/Slave-Konfiguration,
-
8 eine Darstellung zur Erläuterung eines Redundanzfalles bei der in der 7 gezeigten Konfiguration,
-
9 eine Darstellung zur Erläuterung des Datentransfers vom Master zum Slave im Fehlerfall,
-
10 eine Blockdarstellung des Aufbaus eines Computersystems, bei welchem in einem einzigen Steuerungssystem eine virtuelle Maschine zur Steuerung zweier Anwendungsprogramme vorgesehen ist,
-
11 eine Darstellung zur Erläuterung der den beiden Anwendungsprogrammen von 10 zugeordneten Laufzeitumgebung,
-
12 eine Blockdarstellung zur Erläuterung einer Master/Slave-Konfiguration, bei welcher im Master und im Slave jeweils zwei verschiedene Anwendungsprogramme implementiert sind,
-
13 eine Darstellung zur Erläuterung der Laufzeitumgebung der der virtuellen Maschine des Mastersystems von 12 zugeordneten beiden verschiedenen Anwendungsprogramme im Normalbetrieb und
-
14 eine Darstellung zur Erläuterung der der virtuellen Maschine des Mastersystems von 12 zugeordneten verschiedenen Anwendungsprogramme beim Auftreten eines Fehlers im Mastersystem.
-
Gemäß der vorliegenden Erfindung wird ein Verfahren zum Betreiben eines hochverfügbaren Computersystems unter Verwendung einer oder mehrerer virtueller Maschinen bereitgestellt. Dieses Computersystem weist ein, zwei oder mehr Steuerungssysteme auf. Sind zwei oder mehr Steuerungssysteme vorhanden, dann sind diese durch bidirektionale Kommunikationsverbindungen miteinander gekoppelt. Jedes dieser Steuerungssysteme enthält eine virtuelle Maschine, wobei die virtuellen Maschinen verschiedener Steuerungssysteme identisch sind. Jede virtuelle Maschine implementiert eine komplette Laufzeitumgebung für ein oder mehrere Anwendungsprogramme.
-
Ein Anwender des Computersystems erstellt in einem ersten Schritt ein zur Ausführung einer Anwendungsapplikation vorgesehenes Anwendungsprogramm in einer gewünschten Programmiersprache. Dadurch entsteht ein Quellencode, der von einem Compiler in die Maschinensprache der virtuellen Maschine übersetzt wird. Diese Maschinensprache wird dann von einem Interpreter der virtuellen Maschine ausgeführt.
-
Die 1 zeigt eine Blockdarstellung eines ersten Ausführungsbeispiels für ein hochverfügbares Computersystem. Bei diesem ersten Ausführungsbeispiel weist das Computersystem ein einziges Steuerungssystem auf. Zu diesem gehört eine virtuelle Maschine VM, welche zwei zur Ausführung derselben Anwendungsapplikation bereitgestellte, nicht identische Anwendungsprogramme AW1 und AW2 betreibt bzw. steuert. Diese nicht identischen Anwendungsprogramme, die zur Ausführung derselben Anwendungsapplikation vorgesehen sind, weisen unterschiedliche Implementierungen auf. Beispielsweise sind die Anwendungsprogramme in unterschiedlichen Programmiersprachen erstellt. Das erste Anwendungsprogramm AW1 wird im Normalbetrieb zur Steuerung der Anwendungsapplikation verwendet. Das zweite Anwendungsprogramm AW2 wird von der virtuellen Maschine zeitgleich ebenfalls bearbeitet.
-
Während dieses Betreibens der Anwendungsprogramme durch die virtuelle Maschine erfolgt eine Synchronisierung der beiden Anwendungsprogramme durch die virtuellen Maschine, wobei diese Synchronisierung bei jedem Zugriff eines der beiden Anwendungsprogramme auf das Eingangs-/Ausgangssystem des Steuerungssystems vorgenommen wird. Will eines der Anwendungsprogramme an einer bestimmten Programmstelle Daten schreiben, dann stoppt die virtuelle Maschine dieses Anwendungsprogramm solange, bis auch das andere Anwendungsprogramm auf das I/O System zugreift. Danach werden beide Anwendungsprogramme zeitsynchron fortgesetzt. Durch diese Synchronisation laufen beide Anwendungsprogramme im Hinblick auf die Bearbeitung der Eingangs-/Ausgangssignale synchron und sind in sich konsistent.
-
Während dieses Betreibens der Anwendungsprogramme überwacht die virtuelle Maschine die beiden Anwendungsprogramme in Bezug auf das Auftreten von Fehlern. Zu diesen Fehlern gehören beispielsweise das Auftreten einer Division durch Null, ein stetig steigender Speicherbedarf, usw.. Erkennt die virtuelle Maschine das Auftreten eines Fehlers, dann wird das betroffene Anwendungsprogramm von der virtuellen Maschine abgebrochen. Ist der Fehler bei Anwendung AW1 aufgetreten, dann führt die virtuelle Maschine eine stoßfreie Umschaltung von Anwendung AW1 nach Anwendung AW2 durch, d. h. vom ersten Anwendungsprogramm auf das zweite Anwendungsprogramm. Bei dieser stoßfreien Umschaltung tritt keinerlei Datenverlust auf, da die beiden Anwendungsprogramme stets Zugriff auf die momentan gültigen Laufzeitdaten haben und in Bezug auf ihre Zugriffe auf das Eingang-/Ausgangsystem miteinander synchronisiert sind. Nach dieser stoßfreien Umschaltung wird das zweite Anwendungsprogramm zur weiteren Steuerung der Anwendungsapplikation verwendet. Auf diese Weise wird nach alledem eine Software Hochverfügbarkeit und damit auch eine Hochverfügbarkeit der Anwendungsapplikation erreicht.
-
Durch die Verwendung zweier nicht identischer Anwendungsprogramme wird die Wahrscheinlichkeit des Auftretens von Software Gleichtaktfehlern, d. h. im Falle einer identischen Programmierung auftretender Fehler, vermindert.
-
Tritt bei diesem Ausführungsbeispiel jedoch ein kompletter Stromausfall im (einzigen) Steuerungssystem auf, dann ist eine weitere Steuerung der Anwendungsprogramme und damit eine Ausführung der Anwendungsapplikation nicht mehr möglich.
-
Die 2 zeigt eine Blockdarstellung eines zweiten Ausführungsbeispiels für ein hochverfügbares Computersystem. Bei diesem zweiten Ausführungsbeispiel weist das Computersystem zwei über eine Kommunikationsverbindung miteinander gekoppelte Steuerungssysteme auf. Jedes dieser Steuerungssysteme weist eine virtuelle Maschine VM auf. Die virtuelle Maschine des ersten Steuerungssystems steuert ein erstes Anwendungsprogramm AW1, die virtuelle Maschine des zweiten Steuerungssystems ein zweites Anwendungsprogramm AW2. Bei den beiden Anwendungsprogrammen AW1 und AW2 handelt es sich um identische Anwendungsprogramme, die zur Ausführung derselben Anwendungsapplikation vorgesehen sind. Dem ersten Anwendungsprogramm AW1 ist Masterfunktion zugeordnet, dem zweiten Anwendungsprogramm AW2 Slavefunktion. Das erste Anwendungsprogramm AW1 wird zur Steuerung der Anwendungsapplikation verwendet. Das zweite Anwendungsprogramm AW2 wird im Standbymodus betrieben. Die virtuellen Maschinen überwachen das jeweils zugehörige Anwendungsprogramm und auch den Zustand des jeweiligen Steuerungssystems. Die Zugriffe auf das Eingabe-/Ausgabesystem werden nicht synchronisiert.
-
Im Falle eines im ersten Steuerungssystem auftretenden Fehlers, der nicht vom ersten Anwendungsprogramm verursacht wurde, wird das erste Anwendungsprogramm gestoppt und es werden die Laufzeitdaten und die Peripheriedaten des ersten Anwendungsprogrammes an das zweite Steuerungssystem übertragen. Das dort vorhandene identische Anwendungsprogramm übernimmt die weitere Ausführung der Anwendungsapplikation.
-
Die Umschaltung zwischen dem im ersten Steuerungssystem implementierten ersten Anwendungsprogramm auf das im zweiten Steuerungssystem implementierte, identische zweite Anwendungsprogramm erfolgt stoßfrei, d. h. ohne Datenverlust, da die Laufzeitdaten und die Peripheriedaten des ersten Anwendungsprogrammes beim Auftreten eines Fehlers dem zweiten Anwendungsprogramm bereitgestellt werden.
-
Die 3 zeigt eine Blockdarstellung eines dritten Ausführungsbeispiels für ein hochverfügbares Computersystem. Bei diesem dritten Ausführungsbeispiel weist das Computersystem zwei über eine Kommunikationsverbindung miteinander gekoppelte Steuerungssysteme auf. Jedes dieser Steuerungssysteme weist eine virtuelle Maschine VM auf. Die virtuelle Maschine des ersten Steuerungssystem steuert ein erstes Anwendungsprogramm AW1, die virtuelle Maschine des zweiten Steuerungssystems ein zweites Anwendungsprogramm AW2. Bei den beiden Anwendungsprogrammen AW1 und AW2 handelt es sich um nicht identische Anwendungsprogramme, die jedoch zur Ausführung derselben Anwendungsapplikation vorgesehen sind. Das erste Anwendungsprogramm AW1 weist eine unterschiedliche Implementierung zum Anwendungsprogramm 2 auf. Dem ersten Anwendungsprogramm AW1 ist Masterfunktion zugeordnet, dem zweiten Anwendungsprogramm AW2 Slavefunktion. Das erste Anwendungsprogramm AW1 wird im Normalbetrieb zur Steuerung der Anwendungsapplikation verwendet. Das zweite Anwendungsprogramm AW2 läuft quasi parallel zum AW1. Die virtuellen Maschinen überwachen jeweils das zugehörige Anwendungsprogramm und auch den Zustand des jeweiligen Steuerungssystems. Die Zugriffe auf das Eingangs-/Ausgangssystem werden synchronisiert. Im Falle eines im ersten Steuerungssystem auftretenden Fehlers, bei dem es sich um einen Laufzeitfehler des ersten Anwendungsprogrammes oder um einen anderen Fehler im ersten Steuerungssystem handeln kann, wird das erste Anwendungsprogramm gestoppt und eine Umschaltung durchgeführt. Das im zweiten Steuerungssystem vorhandene Anwendungsprogramm AW2 erhält dann Masterfunktion und übernimmt die weitere Ausführung der Anwendungsapplikation.
-
Die Umschaltung zwischen dem im ersten Steuerungssystem implementierten ersten Anwendungsprogramm auf das im zweiten Steuerungssystem implementierte, nicht identische zweite Anwendungsprogramm erfolgt stoßfrei, da die Zugriffe beider Anwendungsprogramme auf das Eingabe-/Ausgabesystem synchronisiert erfolgen.
-
Die 4 zeigt eine Blockdarstellung eines vierten Ausführungsbeispiels für ein hoch verfügbares Computersystem. Bei diesem vierten Ausführungsbeispiel weist das Computersystem zwei über eine Kommunikationsverbindung miteinander gekoppelte Steuerungssysteme auf. Jedes dieser Steuerungssysteme weist eine virtuelle Maschine VM auf. Die virtuelle Maschine des ersten Steuerungssystems steuert ein erstes Anwendungsprogramm AW1 und ein zweites Anwendungsprogramm AW3, bei denen es sich um nicht identische Anwendungsprogramme handelt. Die virtuelle Maschine des zweiten Steuerungssystems steuert ein zweites Anwendungsprogramm AW2 und ein viertes Anwendungsprogramm AW4, bei denen es sich ebenfalls um nicht identische Anwendungsprogramme handelt. Das Anwendungsprogramm AW1 stimmt jedoch mit dem Anwendungsprogramm AW2 überein. Das Anwendungsprogramm AW3 stimmt mit dem Anwendungsprogramm AW4 überein. Alle Anwendungsprogramme sind zur Ausführung ein und derselben Anwendungsapplikation vorgesehen.
-
Die virtuellen Maschinen überprüfen jeweils die ihr zugeordneten, nicht identischen Anwendungsprogramme, welche zeitgleich ausgeführt werden und bezüglich ihrer Zugriffe auf das Eingabe/Ausgabesystem synchronisiert werden, und überwachen auch den Zustand des jeweiligen Steuerungssystems.
-
Im Falle eines im ersten Steuerungssystem auftretenden Fehlers, bei dem es sich um einen Laufzeitfehler eines Anwendungsprogrammes handelt, wird das fehlerhafte Anwendungsprogramm von der virtuellen Maschine gestoppt. Die virtuelle Maschine prüft nun den Typ des Fehlers. Abhängig vom erkannten Fehler werden entweder:
- – Die Laufzeit- und Peripheriedaten des gestoppten Anwendungsprogammes an das zweite Steuerungssystem übertragen. Das identische Anwendungsprogramm des zweiten Steuerungssystems übernimmt die weitere Ausführung der Anwendungsapplikation oder:
- – Das nicht identische Anwendungsprogramm des ersten Steuersystems übernimmt die weitere Ausführung der Anwendungsapplikation.
-
Die 5 zeigt eine Blockdarstellung des grundsätzlichen Aufbaus einer virtuellen Maschine. Eine derartige virtuelle Maschine weist eine Befehlsverarbeitungseinheit 1, einen Compiler 2, einen Interpreter 3, ein Anwendungsprogramm 4, ein Laufzeitsystem 5, eine Eingabe-/Ausgabeeinheit 6, eine Eingabe-/Ausgabe-Hardware 7, ein Netzwerksystem 8,gegebenenfalls zusätzliche Systemdienste 9, einen Agent 10 und eine Master-/Slavesynchronisation 11 auf. Die Eingabe/Ausgabeeinheit 6 und die Eingabe/Ausgabe-Hardware 7 bilden zusammen ein Ein/Ausgabesystem, nachfolgend auch als I/O-System bezeichnet.
-
Das Laufzeitsystem implementiert eine komplette Laufzeitumgebung für ein oder mehrere Anwenderprogramme. Dabei erstellt ein Anwender in einem ersten Schritt ein Anwendungsprogramm 4 in einer gewünschten Programmiersprache. Der Compiler 2 übersetzt dieses Anwendungsprogramm bzw. den Quellencode dieses Anwendungsprogrammes in die Maschinensprache der virtuellen Maschine. Diese Maschinensprache wird vom Interpreter 3 ausgeführt. Dabei können unterschiedliche Programmiersprachen verwendet bzw. unterstützt werden. Der Compiler 2 ist derart ausgebildet, dass er Anwendungsprogramme mehrerer Programmiersprachen in die vom Interpreter 3 der virtuellen Maschine benötigte Maschinensprache übersetzen kann.
-
Wird dann im Normalbetrieb des Computersystems vom Interpreter 3 ein Anwendungsprogramm ausgeführt, dann erzeugt der Interpreter 3 für dieses Anwendungsprogramm die benötigte Laufzeitinformation. Dabei verwendet der Interpreter für die Abarbeitung des Anwendungsprogrammes ein Registerabbild, das im Wesentlichen aus Arbeitsregistern und einem Befehlszeigerregister besteht. Das Anwendungsprogramm selbst weist Programmdaten PD und einen Programmcode PC auf. Sowohl das Registerabbild des Interpreters als auch die Laufzeitdaten des Anwendungsprogrammes, die die Programmdaten und den Programmcode umfassen, sind in einem über das Betriebssystem verwalteten Speicherbereich abgespeichert.
-
Mittels der Eingabe-/Ausgabeeinheit 6 und der Eingabe/Ausgabe-Hardware 7, die ein Eingabe/Ausgabesystem bilden, erfolgt ein Schreiben und Lesen von Peripheriedaten. Das Netzwerksystem 8 bietet die Möglichkeit der Interprozesskommunikation der Anwendungsapplikation mit anderen Systemkomponenten. Die Serviceeinheit 9 bietet zusätzliche Systemdienste wie beispielsweise einen Zugriff auf das Filesystem. Der Agent 10 übernimmt die Überwachung der Anwendungsapplikation(en) bezüglich des Resourcenbedarfs, usw., und implementiert das Redundanzmanagement. Die Synchronisation 11 implementiert die Datenübertragung der Laufzeit- und Peripheriedaten vom Master zum Slave.
-
Die 6 zeigt eine Darstellung zur Erläuterung der Arbeitsweise des Interpreters 3. Dabei ist auf der linken Seite der 6 das vom Interpreter für die Abarbeitung des jeweiligen Anwendungsprogrammes verwendete Registerabbild RA veranschaulicht, das im Wesentlichen aus Arbeitsregistern und einem Befehlszeigerregister besteht. Auf der rechten Seite der 6 sind die Laufzeitdaten LZD des Anwendungsprogrammes dargestellt, zu denen die Programmdaten PD und der Programmcode PC gehören. Der Programmcode umfasst eine Vielzahl von Maschinenbefehlen. Die Programmdaten bestehen aus einer Vielzahl von Variablen.
-
Die 7 zeigt eine Blockdarstellung zur Erläuterung einer Master/Slave-Konfiguration, welche ein einfaches Redundanzsystem auf Basis einer virtuellen Maschine darstellt. Dabei bildet das Mastersystem ein erstes Steuerungssystem und das Slavesystem ein zweites Steuerungssystem. Diese Systeme können aus handelsüblichen Industrie-PCs bestehen oder aus sogenannten Embedded Systemen.
-
Beide Systeme enthalten eine Befehlsverarbeitungseinheit 1, einen Compiler 2, einen Interpreter 3, ein Anwendungsprogramm 4, ein Laufzeitsystem 5, eine Eingabe-/Ausgabeeinheit 6, eine Eingabe/Ausgabe-Hardware 7, ein Netzwerksystem 8, eine Serviceeinheit 9, einen Agenten 10 und eine Sychronisation 11
-
Mittels des Agenten 10 wird eine gegenseitige Überwachung der Systeme durchgeführt. Des Weiteren ist die Synchronisation 11 im Fehlerfall dazu vorgesehen, Daten vom gestörten Mastersystem zum Slavesystem zu übertragen, wobei diese Datenübertragung über die zwischen den Systemen vorgesehene Kommunikationsverbindung erfolgt.
-
Im Betrieb mit identischen Anwenderprogrammen erfolgt die Ausführung der Anwendungsapplikation unter Steuerung der im Mastersystem vorgesehenen virtuellen Maschine, die das im Mastersystem vorgesehene Anwendungsprogramm zur Ausführung der Anwendungsapplikation verwendet. Das Mastersystem hat dabei die alleinige Kontrolle über die Anwendungsapplikation. Das Slavesystem befindet sich im Standbymodus. Die virtuelle Maschine des Slavesystems hat ein identisches Anwendungsprogramm geladen, das jedoch im Normalbetrieb vom zugehörigen Interpreter nicht ausgeführt wird. Der Interpreter selbst befindet sich ebenfalls in einem Standbymodus. Das Slavesystem überwacht das Mastersystem durch eine zyklische Kommunikation über die Kommunikationsverbindung zwischen den beiden Systemen.
-
Das Mastersystem fährt mit der Ausführung der Anwendungsapplikation fort, solange im Mastersystem kein Fehler auftritt.
-
Mögliche Fehler lassen sich in die beiden folgenden Kategorien aufteilen:
- – von der virtuellen Maschine nicht detektierbare Fehler und
- – von der virtuellen Maschine detektierbare Fehler.
-
Zu den Fehlern, die von der virtuellen Maschine nicht detektiert werden können, gehören beispielsweise ein plötzlicher Spannungsausfall des Mastersystems sowie ein Totalausfall der Hardwareplattform.
-
Ein plötzlicher Spannungsausfall führt zu einem sofortigen Systemstillstand, sofern keine Batteriepufferung vorgesehen ist, welche die Spannung noch für einige Zeit aufrechterhält. Ein totaler Ausfall der Hardwareplattform des Mastersystems liegt vor, wenn systemrelevante Hardwarebaugruppen des Mastersystems wie beispielsweise Speicherbaugruppen oder der Prozessor selbst nicht mehr funktionsfähig sind. In derartigen Fällen kann die virtuelle Maschine keine kontrollierte Umschaltung auf das Slavesystem initiieren.
-
Die virtuelle Maschine kann hingegen auftretende Fehler detektieren:
- – Fehler im Eingabe/Ausgabesystem,
- – kritische Fehler im Anwendungsprogramm,
- – einen stetig steigenden Ressourcenverbrauch des Anwendungsprogrammes,
- – Fehler in den Subsystemen der virtuellen Maschine selbst.
-
Fehler im Eingabe/Ausgabesystem treten auf, wenn die I/O-Hardware 7 beim Schreiben und/oder Lesen von Signalen einen Fehler meldet. Kritische Fehler im Anwendungsprogramm treten durch fehlerhafte Implementierung seitens des Anwenders auf, beispielsweise beim Auftreten einer Division durch Null. Ein stetig steigender Ressourcenverbrauch tritt auf, wenn das Anwendungsprogramm beispielsweise dynamischen Speicher allokiert und diesen nicht wieder freigibt. Über einen längeren Zeitraum wird dadurch insgesamt ein kritischer Systemzustand erreicht, da andere Subsysteme keinen dynamischen Speicher mehr allokieren können. Fehler in der virtuellen Maschine treten durch fehlerhafte Implementierung der virtuellen Maschine selbst auf, wie beispielsweise im Falle eines Zugriffes auf nicht gültige Speicherbereiche. Ein Redundanzfall tritt auf, wenn der Master aufgrund eines Fehlers ausfällt. Dann übernimmt das Slavesystem die Kontrolle über den zu steuernden Prozess.
-
Im Wesentlichen werden zwei Redundanzfälle unterschieden:
- – Redundanzfall bei nicht detektierbaren Fehlern
- – Redundanzfall bei detektierbaren Fehlern.
-
Tritt ein Redundanzfall durch einen nicht detektierbaren Fehler auf, dann kann das Mastersystem keine kontrollierte Umschaltung auf das Slavesystem vornehmen. Da das Slavesystem das Mastersystem über den Kommunikationskanal zyklisch überwacht und auch das aktuelle Abbild über Eingangs- und Ausgangssignale zyklisch mitgeteilt bekommt, übernimmt der Slave automatisch die Kontrolle, wenn nach Ablauf der Zykluszeit die Kommunikation mit dem Master nicht mehr stattfindet. Dabei verwendet der Slave die zuletzt vom Master erhaltenen Werte der I/O-Signale. Da sich zum Zeitpunkt der Übernahme der Kontrolle durch den Slave die I/O-Signale geändert haben können, ist der Slave nicht im Besitz der letzten Änderung der I/O-Signale. Dies bedeutet, dass sein Abbild dieser Signale eventuell inkonsistent ist.
-
Tritt hingegen ein Redundanzfall durch einen von der virtuellen Maschine detektierbaren Fehler auf, so kann das Mastersystem eine stoßfreie Umschaltung auf das Slavesystem durchführen, bei welchem kein Informationsverlust auftritt.
-
Dieser letztgenannte Fall wird nachfolgend anhand der 8 erläutert, welche eine Darstellung zur Erläuterung eines Redundanzfalles bei der in der 7 gezeigten Konfiguration zeigt.
-
Die 8 zeigt den Zustand des Mastersystems und des Slavesystems bei auftretendem detektierbaren Fehler mit anschließendem Redundanzfall. Der Interpreter des Mastersystems führt die angegebene Befehlssequenz aus. Das Slavesystem befindet sich im Standbymodus, wobei im Slavesystem das gleiche Anwendungsprogramm wie im Mastersystem geladen wurde. Der Interpreter führt dieses Anwendungsprogramm jedoch im Standbymodus nicht aus. Das Codesegment PC des Anwendungsprogrammes ist bereits im Interpreter des Slavesystems verfügbar. Das Datensegment PD wurde ebenfalls erzeugt. Da jedoch das Anwendungsprogramm noch nicht gestartet wurde, sind entsprechende Variablen der Applikation noch nicht initialisiert (NI). Die Registerinhalte des Interpreters des Slaves sind ebenfalls noch ungültig (UG).
-
Der Interpreter des Mastersystems führt den Befehl IOSYS $R1 aus und ruft die Schreibfunktion des I/O-Systems auf, um ein entsprechendes Ausgangssignal zu setzen. Bei Hardwarezugriff des I/O-Systems tritt ein Fehler F auf, so dass das Signal nicht geschrieben werden kann. Das I/O-System meldet an die Fehlerbehandlung der virtuellen Maschine einen Fehler der I/O-Hardware. Die virtuelle Maschine hält die Programmbearbeitung durch den Interpreter an, so dass der Befehlszeiger des Registers auf den Befehl IOSYS $R1 verweist und stehen bleibt.
-
Durch den Kommunikationskanal informiert der Master den Slave, dass ein Redundanzfall eingetreten ist.
-
Der Master überträgt die Werte aller I/O-Signale sowie die Laufzeitinformation des Interpreters bestehend aus den Arbeitsregistern und dem Datensegment des Anwendungsprogrammes zum Slave.
-
Dies ist in der 9 veranschaulicht, welche eine Darstellung zur Erläuterung dieses in einem Fehlerfall erfolgenden Datentransfers zeigt.
-
Der Slave übernimmt die aktuellen Werte aller I/O-Signale, die dem genauen Abbild des zu steuernden Prozesses zum Zeitpunkt des Fehlers entsprechen. Weiterhin initialisiert die virtuelle Maschine des Slavesystems den Interpreter mit der Laufzeitinformation des Mastersystems. Dabei werden alle variablen Werte der Applikation aus dem Datensegment des Masters in das Datensegment des Slaves geschrieben. Ebenso werden die Inhalte sämtlicher Register des Interpreters des Masters in die Register des Interpreters des Slaves übernommen. Das Befehlszeigerregister wird dabei so initialisiert, dass es auf denselben Maschinenbefehl verweist, der im Master einen Fehler verursacht hat. In diesem Anwendungsfall zeigt der Befehlszeiger auf den Maschinenbefehl IOSYS $R1 an derselben Stelle im Codesegment. Anschließend wird der Interpreter des Slaves gestartet, der jetzt genau diesen Maschinenbefehl ausführt, da dieser Befehl aufgrund eines Fehlers in I/O-System im Master nicht ausgeführt werden konnte. Der Interpreter des Slaves führt diesen I/O-Befehl in der bereits beschriebenen Art und Weise aus, indem er das entsprechende Signal in der eigenen, redundant vorhandenen I/O-Hardware setzt.
-
In diesem Verfahren kann die Programmausführung befehlsgenau vom Master auf den Slave umgeschaltet werden, ohne dass Laufzeitinformation der Applikation sowie aktuelle Werte von I/O-Signalen verloren gehen. Herkömmliche Systeme benötigen für eine möglichst exakte Umschaltung eine zyklische Synchronisation zwischen Master und Slave während des Normalbetriebes und müssen mitunter eine Historie von applikationsspezifischen Zustandsdaten mitführen.
-
Bei dem hier beschriebenen Verfahren ist weder eine zyklische Synchronisation im Normalbetrieb noch das Mitführen einer Historie von applikationsspezifischen Zustandsdaten notwendig. Durch das Übertragen der Laufzeitinformation des Interpreters vom Master zum Slave kann die Anwendungsapplikation im Slavesystem befehlsgenau weitergeführt werden.
-
Die 10 zeigt eine Blockdarstellung des Aufbaus eines Computersystems, bei welchem in einem einzigen Steuerungssystem eine virtuelle Maschine zur Steuerung zweier zur Ausführung derselben Anwendungsapplikation vorgesehener, verschiedener Anwendungsprogramme A und B vorgesehen ist. Die 11 zeigt eine Darstellung zur Erläuterung der den verschiedenen Anwendungsprogrammen A und B von 10 zugeordneten Laufzeitumgebung.
-
Bei diesem Ausführungsbeispiel erfolgt beim Auftreten eines Fehlers im Eingabe/Ausgabesystem 6, 7 des Masters eine stoßfreie Umschaltung von der fehlerhaften zur noch funktionsfähigen Anwendung, so dass die Anwendungsapplikation (zu steuernder Prozess) stoßfrei weitergeführt werden kann.
-
Die Verwendung verschiedener, d. h. beispielsweise eine unterschiedliche Programmierung und damit unterschiedlichen Programmcode aufweisender Anwendungsprogramme A und B, die zur Ausführung derselben Anwendungsapplikation vorgesehen sind, hat den Vorteil, dass sogenannte Gleichtaktfehler vermieden werden. Gleichtaktfehler würden auftreten, wenn im Falle eines Fehlers im Anwendungsprogramm des Masters eine Umschaltung vom Master zum Slave erfolgt und im Slave ein identisches Anwendungsprogramm, d. h. ein Anwendungsprogramm gleicher Implementierung, geladen wäre.
-
Grundsätzlich sind bei der Verwendung zweier verschiedener Anwendungsprogramme, die zur Ausführung derselben Anwendungsapplikation vorgesehen sind, folgende beiden Konfigurationen möglich:
- – die beiden verschiedenen Anwendungsprogramme sind – wie es in der 10 dargestellt ist – in einem einzigen Steuerungssystem implementiert;
- – die beiden verschiedenen Anwendungsprogramme sind in zwei verschiedenen Steuerungssystemen implementiert, wobei in jedem dieser Steuerungssystem eines der Anwendungsprogramme implementiert ist.
-
Das in der 10 gezeigte Steuerungssystem weist eine virtuelle Maschine auf, die eine Befehlsverarbeitungseinheit 1, einen Compiler 2, einen ersten Interpreter 3a, ein erstes Anwendungsprogramm A, einen zweiten Interpreter 3b, ein zweites Anwendungsprogramm B, ein Laufzeitsystem 5, eine Eingabe/Ausgabeeinheit 6, eine Eingabe/Ausgabe-Hardware 7, ein Netzwerksystem 8 eine Serviceeinheit 9, einen Agenten 10 und eine Sychronisation 11 enthält. Das erste Anwendungsprogramm A wird mittels des Compilers 2 in die Maschinensprache der virtuellen Maschine übersetzt und vom ersten Interpreter 3a ausgeführt. Das zweite Anwendungsprogramm B wird mittels des Compilers 2 in die Maschinensprache der virtuellen Maschine übersetzt und vom zweiten Interpreter 3b ausgeführt.
-
Im Normalbetrieb des in der 10 gezeigten Steuerungssystems führen die Interpreter 3a und 3b das ihnen jeweils zugehörige Anwendungsprogramm aus, so dass bezüglich jedes dieser Anwendungsprogramme unabhängig voneinander Laufzeitdaten ermittelt und abgespeichert werden. Dabei besteht jeweils kein Zugriff auf die Laufzeitdaten des jeweils anderen Anwendungsprogrammes.
-
Damit beim Auftreten eines Fehlers in Anwendung A eine stoßfreie Umschaltung von Anwendung A zu Anwendung B erfolgen kann, wird bei jedem Zugriff eines der beiden Anwendungsprogramme auf das Eingabe/Ausgabesystem 6, 7 eine Synchronisierung der beiden Anwendungsprogramme durchgeführt. Beispielsweise erfolgt dann, wenn nach dem gleichzeitigen Start der beiden Anwendungsprogramme ein bestimmtes Signal geschrieben werden soll und das Anwendungsprogramm A die entsprechende Stelle im Programmcode zuerst erreicht, das Signal geschrieben und der Interpreter des Anwenderprogrammes A solange blockiert, bis das Anwendungsprogramm B das gleiche Signal schreiben will. Ruft der Interpreter des Anwendungsprogrammes B das Eingabe/Ausgabe-System 6, 7 auf, um das genannte Signal zu schreiben, dann wird die Blockierung des Interpreters des Anwenderprogrammes A wieder aufgehoben, so dass beide Interpreter die Ausführungen ihres jeweiligen Anwendungsprogrammes fortsetzen können, wobei diese Fortsetzung damit zeitgleich bzw. synchronisiert erfolgt.
-
Auf diese Weise wird eine Synchronisation der beiden Anwendungsprogramme sichergestellt, aufgrund derer die beiden Anwendungsprogramme, die aufgrund ihrer unterschiedlichen Implementierung unterschiedlichen Code ausführen, stets das gleiche Abbild der I/O-Signale besitzen. Dadurch sind die internen Zustandsdaten und Variablen des jeweiligen Anwendungsprogrammes im Hinblick auf die aktuellen Werte der I/O-Signale stets konsistent, so dass im Falle des Auftretens eines Fehlers in Anwendung A eine stoßfreie, datenverlustfreie Umschaltung von Anwendung A zu Anwendung B erfolgen kann.
-
Die 12 zeigt eine Blockdarstellung zur Erläuterung einer Master-/Slave-Konfiguration, bei welcher im Master und im Slave jeweils zwei verschiedene Anwendungsprogramme A und B implementiert sind. Alle diese Anwendungsprogramme sind zur Ausführung derselben Anwendungsapplikation vorgesehen. Die 13 zeigt eine Darstellung zur Erläuterung der Laufzeitumgebung der der virtuellen Maschine des Mastersystems von 12 zugeordneten nicht identischen Anwendungsprogramme im Normalbetrieb. Die 14 zeigt eine Darstellung zur Erläuterung der Laufzeitumgebung des der virtuellen Maschine des Mastersystems von 12 zugeordneten nicht identischen Anwendungsprogramme beim Auftreten eines Fehlers im Mastersystem.
-
Bei der in der 12 gezeigten Master/Slavekonfiguration sind im Mastersystem die Anwendungsprogramme A und B und im Slavesystem ebenfalls die Anwendungsprogramme A und B geladen.
-
Das Mastersystem weist zwei Interpreter 3a und 3b auf, von denen einer das Anwendungsprogramm A und der andere das Anwendungsprogram B ausführt. Das Slavesystem weist ebenfalls zwei Interpreter 3a und 3b auf, von denen einer das Anwendungsprogramm A und der andere das Anwendungsprogramm B ausführt. Alle Anwendungsprograme sind zur Ausführung derselben Anwendungsapplikation vorgesehen.
-
Im Normalbetrieb werden im Mastersystem die beiden dort implementierten, verschiedenen Anwendungsprogramme A und B zur selben Zeit ausgeführt. Die im Slavesystem implementierten Anwendungsprogramme A und B befinden sich während des Normalbetriebes im Standby Modus.
-
Die Anwendungsprogramme A und B führen verschiedenen Code aus. Dabei führen die beiden Interpreter das ihnen jeweils zugeordnete Anwendungsprogramm aus und haben dabei keinen Zugriff auf den Laufzeitdatenbereich des jeweils anderen Anwendungsprogrammes. Damit eine befehlsgenaue Umschaltung vom Master auf den Slave im Fehlerfall durchgeführt werden kann, werden beide Anwendungsprogramme A und B (innerhalb einer virtuellen Maschine) beim Zugriff auf das I/O-System synchronisiert. Wenn beispielsweise nach dem Start der beiden Anwendungsprogramme ein bestimmtes Signal geschrieben werden soll und das Anwendungsprogramm A die entsprechende Stelle im Code zuerst erreicht, dann wird das Signal geschrieben und das I/O-System blockiert den Interpreter des Anwendungsprogrammes A solange, bis das Anwendungsprogramm B das gleiche Signal schreiben will. Sobald der Interpreter des Anwendungsprogrammes B dann ebenfalls das I/O-System aufruft, um das Signal zu schreiben, wird der wartende Interpreter des Anwendungsprogrammes A wieder fortgeführt, wobei der Interpreter des Anwendungsprogrammes B ebenfalls weiterläuft.
-
Auf diese Weise wird eine Synchronisation der beiden Anwendungsprogramme auf I/O-Signalebene durchgeführt. Dadurch ist sichergestellt, dass beide Anwendungsprogramme, welche unterschiedlichen Code ausführen, immer das gleiche Abbild der I/O-Signale besitzen. Dadurch sind die internen Zustandsdaten und Variablen des jeweiligen Anwendungsprogrammes im Hinblick auf die aktuellen Werte der I/O-Signale stets konsistent.
-
Aus der 14 ist die Laufzeitinformation beider Anwendungsprogramme zum Zeitpunkt eines Fehlers innerhalb der virtuellen Maschine des Masters dargestellt. Der Interpreter des Anwendungsprogrammes B führt zu diesem Zeitpunkt gerade den Maschinenbefehl LADDR $R1, Value aus. Da die virtuelle Maschine das Anwendungsprogramm A aufgrund des genannten Fehlers nicht weiterführen kann, beendet der zugehörige Interpreter das Anwendungsprogramm A und informiert den Interpreter des Anwendungsprogrammes B darüber, dass die Programmausführung des Anwendungsprogrammes B nach Abarbeitung des aktuellen Maschinenbefehls angehalten wird. Nachdem der Interpreter des Anwendungsprogrammes B den aktuellen Maschinenbefehl LADDR $R1, Value ausgeführt hat, erhöht der Interpreter den Befehlszeiger um 1, so dass das Befehlszeigerregister auf den Maschinenbefehl LOAD $R2, $R1 verweist und stoppt die Programmausführung. Die Laufzeitinformation des Anwendungsprogrammes B wird eingefroren.
-
Die virtuelle Maschine überträgt nun das Abbild aller I/O-Signale sowie die Laufzeitinformation des Anwendungsprogrammes B an das Slavesystem. Das Slavesystem initialisiert den Laufzeitdatenbereich seines Anwendungsprogrammes B, das sich im Standbymodus befindet, mit der vom Master erhaltenen Laufzeitinformation. Der Interpreter des Anwendungsprogrammes B im Slavesystem führt den nächsten Maschinenbefehl aus, in diesem Fall den Befehl LOAD $R2, $R1.
-
Auf diese Weise wird eine stoßfreie, befehlsgenaue Umschaltung vom Master zum Slave ohne Laufzeitdatenverlust ermöglicht. Dabei ist es nicht relevant, welches Anwendungsprogramm ausfällt, da das System immer die Laufzeitinformation des jeweils funktionsfähigen Anwendungsprogrammes an den Slave übertragen kann. Es muss in diesem Anwendungsfall weder eine zyklische Synchronisation im Normalbetrieb zwischen Master und Slave stattfinden, noch ist das Mitführen einer Historie von applikationsspezifischen Zustandsdaten notwendig. In dem hier beschriebenen Ausführungsbeispiel werden vom Anwender zwei verschiedene Anwendungsprogramme für dieselbe Anwendungsapplikation implementiert. Das hier beschriebene Verfahren ist im Hinblick auf die redundant vorhandenen Anwendungsprogramme skalierbar, so dass der Anwender theoretisch beliebig viele Anwendungsprogramme für dieselbe Anwendungsapplikation implementieren kann. Es erhöht sich in diesem Fall lediglich der Zeitbedarf für die Synchronisierung der Anwendungsprogramme bei I/O-Zugriffen.
-
Die vorstehend beschriebene Synchronisation der Anwendungsprogramme beim Zugriff auf I/O-Signale erfolgt, um zwei unabhängig voneinander laufende Anwendungsprogramme im Hinblick auf die Verarbeitung der I/O-Signale konsistent zu halten und ein redundantes Verhalten zu ermöglichen. Die beiden Anwendungsprogramme rufen Funktionen des I/O-Systems auf, um I/O-Signale zu schreiben oder zu lesen. Ruft eines der Anwendungsprogramme das I/O-System auf, um ein bestimmtes Signal mit einem bestimmten Wert zu schreiben, dann wird dieses Anwendungsprogramm solange blockiert, bis auch das andere Anwendungsprogramm das I/O-System aufruft. Das I/O-System prüft dabei, ob beide Anwendungsprogramme dasselbe Signal lesen oder mit dem gleichen Wert schreiben wollen. Dies bedeutet, dass eine konsistente Synchronisation nur dann möglich ist, wenn folgende Kriterien erfüllt sind:
- – beide Anwendungsprogramme greifen auf das gleiche Signal zu,
- – beide Anwendungsprogramme wollen die gleiche Operation auf dem Signal ausführen, d. h. beide Anwendungsprogramme wollen das Signal entweder lesen oder schreiben, und
- – wenn das Signal von beiden Anwendungsprogrammen geschrieben werden soll, wird geprüft, ob der gleiche Wert geschrieben werden soll.
-
Werden nicht alle vorgenannten Kriterien erfüllt, dann laufen beide Anwendungsprogramme nicht synchron und eine Redundanz ist nicht mehr gegeben. Da das I/O-System einen derartigen Synchronisationsfehler erkennt, kann das System entsprechend reagieren. Nachdem der Zugriff auf ein bestimmtes I/O-Signal unter erfolgreicher Prüfung der obigen Kriterien erfolgt ist, lässt das I/O-System beide Anwendungsprogramme unabhängig voneinander weiterlaufen, bis der nächste Zugriff auf ein I/O-Signal erfolgt. Auf diese Weise haben beide Anwendungsprogramme immer das aktuelle Abbild der I/O-Signale. Fällt nun ein Anwendungsprogramm aufgrund eines Fehlers aus, kann das weitere, redundante Anwendungsprogramm durch das konsistente Abbild der I/O-Signale alleine weiterlaufen, was eine stoßfreie Umschaltung vom fehlerhaften zum redundanten Anwendungsprogramm ermöglicht. Werden beide Anwendungsprogramme im selben Steuerungssystem ausgeführt, dann erfolgt die Synchronisation innerhalb des I/O-Systems über Betriebssystemmechanismen. Werden beide Anwendungsprogramme in verschiedenen Steuerungssystemen ausgeführt, dann wird die Synchronisation über den Austausch von Daten über eine Kommunikationsverbindung zwischen den Steuerungssystemen des Masters und des Slaves ausgeführt.
-
Die virtuellen Maschinen werden bereits im Anlauf auf allen Computern gestartet und laufen, je nach Anwendungsfall, zeitlich parallel, nicht befehlssynchron, mit. Alle Betriebssystem technischen Anforderungen wie eine Reservierung von Speicherbedarf, etc., werden bereits beim Anlauf durchgeführt. Die virtuellen Maschinen bearbeiten jeweils ein oder mehrere Anwendungsprogramme zeitgleich.
-
Die Erfindung betrifft nach alledem ein Verfahren zum Betreiben eines hochverfügbaren Computersystems unter Verwendung einer oder mehrerer virtueller Maschinen, wobei zur Ausführung einer Anwendungsapplikation mehrerer Anwendungsprogramme bereitgestellt wurden. Diese können nicht identisch oder identisch zueinander sein. Wird ein einziges Steuerungssystem verwendet, welches mit zwei nicht identischen Anwendungsprogrammen ausgestattet ist, dann wird eine Softwarehochverfügbarkeit erreicht. Werden zwei oder mehr Steuerungssysteme, die mit identischen oder nicht identischen Anwendungsprogrammen ausgestattet sind, verwendet, dann wird eine Software- und Hardwarehochverfügbarkeit erreicht. Nicht identische Anwendungsprogramme werden von den virtuellen Maschinen zeitgleich betrieben, wobei Zugriffe aus das Ein-/Ausgabesystem synchronisiert werden.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-
- DE 102005053275 A1 [0003, 0004]