Willkommen im PC-Welt-Forum
Liebe Leser,
Wenn dies Ihr erster Besuch hier ist, lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Sie müssen sich vermutlich registrieren, bevor Sie Beiträge verfassen können. Klicken Sie rechts auf 'Jetzt registrieren.', um den Registrierungsprozess zu starten.
Wenn dies Ihr erster Besuch hier ist, lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Sie müssen sich vermutlich registrieren, bevor Sie Beiträge verfassen können. Klicken Sie rechts auf 'Jetzt registrieren.', um den Registrierungsprozess zu starten.
Ergebnis 1 bis 9 von 11
-
15.01.2004, 20:44 #1
interessante Frage - Prozesse verlagern
Hallo,
mich würde mal interessieren, wie man vorgehen müsste, wenn man ein schon laufendes Programm, also einen
Prozess, von einem Rechner auf einen anderen verlagern/migrieren möchte?
Was sind die Voraussetzungen hierfür?
Wie kann man das anstellen?
Also jeder Prozess unter Linux hat ja seinen eigenen Speicherbereich. Und auf einem Single-Prozessor-System kann ja sowieso nur ein Task gleichzeitig am Prozessor hängen, alle anderen müssen ja schlafen.
Geht das? Wie?
Ciao it.
-
15.01.2004, 20:53 #2
Interessante frage, einfache antwort: es geht nicht.
Dazu müssten die 2 rechner zu 100% idente platten haben und gleiche hardware besitzen. Dann müsstest du nur noch das speicherabbild rüberschaufeln... das ist aber meines wissens nicht möglich. (vielleicht eventuell mit software-suspend, da wird der prozess jedoch auch unterbrochen)
gruß, buhiAUFRUF an alle User des Forums !
Hier bitte zur Rückkehr zur alten Software deine Meinung abgeben - WIR User wollen unser vb-Board wieder haben !!!
-
15.01.2004, 22:04 #3
Kbyte
- Registriert seit
- 02.2001
- Beiträge
- 509
Mit Process Checkpoints (Dragonfly hat sowas), kannst du Prozesse beispielsweise über einen Reboot hinaus retten und später wieder starten. Zuminde theoretisch sollte es damit möglich sein, den Prozess auch auf einen anderen Rechner zu hieven. Praktisch kann ich mir gut vorstellen, daß es sehr große Probleme geben könnte. Wozu brauchst du sowas?
-
15.01.2004, 22:26 #4
Wozu ich das brauche?
Ganz einfach: ich mache gerade ein Unix-Praktikum. die letzten Aufgaben waren alle recht einfach. IPC und ein bisschen mit fork() rumgespielt.
Nun ist die eben oben gestellte Frage auf meinem Arbeitsblatt von gestern.
Ich habe bei google gesucht, alle Folien durchschaut, allen Links von Docenten verfolgt. Selbst nach seinen Arbeiten an der Uni und sonst gesucht. Ich habe dann diverse Unix-Dokus und Papers gesucht und überflogen, aber nichts gefunden.
Diese Aufgabe fällt total aus dem Schema des Kurses heraus und ich finde nichts zum Nachlesen, ob es geht. Wenn er aber so eine Frage stellt, vor allem so stellt, dann müsste es eine Lösung geben.
Glücklicherweise habe ich bis zum 29. Jan Zeit irgendetwas zu finden.
Ciao it.
-
16.01.2004, 12:48 #5
Kbyte
- Registriert seit
- 08.2003
- Beiträge
- 325
Auf die Antwort des Dozenten bin ich gespannt.
Es wäre nett, wenn du dich nach dem 29.1. noch an diesen Thread erinnerst und uns einmal informierst.
googeln bis die Feuerwehr kommt!
-
16.01.2004, 13:13 #6
Meines bescheidenen Wissens nach sollte es - unter Verränkungen - folgendermaßen gehen:
1) Der Prozess verwendet eine virtuelle Umgebung, also z.B. eine Java-VM (damit entgehst du blakcomb's Argumenten)
2) Die Programme dürfen nichts voraussetzen und jeder Zugriff auf Dateisysteme, Bildschirm, Hardware usw muß eine Transaktion sein. Also nix mit Handles; Datei öffnen, Datei lesen/schreiben, Datei schließen muß eine einzige Operation sein. Sonst kann es zu Daten-Inkonsistenzen kommen.
3) Die Programme müssen jederzeit unterbrechbar sein (nichts zeitkritisches)
4) Das Programm muß jederzeit seine Ausgaben neu schreiben können.
Hmmm....
Hört sich nichtmal sooo komplex an. Das meiste ließe sich durch anpassen der VM realisieren (das mit den Zugriffen und den gespeicherten Ausgaben). Wahrscheinlich läuft es darauf hinaus, dass nicht nur der Thread selber sondern der komplette Dateninhalt der VM übertragen werden muß (so eine Art Speicherabbild).
Schwierig wird es dann aber mit den Ein/Ausgaben. Die müssen natürlich immernoch zum richtigen Terminal geleitet werden - auch wenn das Proggy mehrmals den Rechner gewechselt hat.Nerds don't die, they just reboot.
-
16.01.2004, 13:41 #7
Hallo sarkastic_one,
vielleicht kann man ein Unix als VM sehen.
Immerhin sind die genannten Operationen (Datei "offnen, lesen, schreiben) System Calls.
Also ein Programm sagt dem System, bitte eine Datei X "offnen, darauf hin gibt das System dem Programm einen Filedescriptor (einen Pointer).
Genauso beim Lesen und Schreiben.
zu finden in man read(2) und man write(2). read(3) und write(3) greifen schliesslich auch nur auf die System Calls zur"uck.
Ausserdem ist ja jeder Prozess unterbrechbar, da ja der Unix Scheduler jeweils einen Prozess eine gewisse Zeit auf dem Prozessor zuweist und auch unterbricht.
Wenn man den Scheduler beeinflussen kann und einen Prozess komplett unterbrechen kann und seinen Speicherbereich kopiert (Pages), dann m"usste es doch gehen.
Gibt es da irgendein Veto?
Ciao it.
-
16.01.2004, 13:58 #8
Mit Unix kenn ich mich nicht so doll aus; habe grad mal in Linux reingeschnuppert.
Aber das mit den Descriptoren... liegt mir im Magen.
Beispiel:
Proggy öffnet Datei
Proggy schreibt was rein
Proggy wird versetzt
Proggy liest was aus der Datei
Proggy stürtzt ab, weil die Datei nicht (bzw wo anders) existiert.
Man müsste eine komplette HAL basteln, durch die alle IO-Streams des Proggys durch müssen. Wenn die HAL (=VM) entsprechend gestaltet ist, dann kann sie natürlich sowas abfangen und den Zugriff auf den richtigen Rechner weiterleiten, der dann die Datei liest und die Daten zurückschiebt. Dadurch kommt ein immenser Verwaltungsaufwand dazu.
Andere Idee: was ist wenn man statt "lokalen" Namen URL's verwendet? Sowas wie file://<RechnerID>/Verz/Datei.abc oder
Screen://<RechnerID>/0
Das würde den Overhead vermindern, aber das Proggy wird dafür komplexer
Nerds don't die, they just reboot.
-
16.01.2004, 16:34 #9
Kbyte
- Registriert seit
- 02.2001
- Beiträge
- 509
# und seinen Speicherbereich kopiert (Pages), dann
# m"usste es doch gehen.
Der Speicher ist zwar in Pages unterteilt und jeder Prozess liegt "in" Pages, aber der einem Prozess zugeteilte Speicher heißt nicht Pages. Nur so als Anmerkung. (:
Deine eigentliche Frage ist (bis auf die theoretische Sache mit Process Checkpoints) ganz simpel mit Nein zu beantworten.
Ist die Frage vielleicht anders gemeint?
12

Zitieren
Lesezeichen