staging.inyokaproject.org

Prozesse simulieren und Scheduler schreiben

Status: Ungelöst | Ubuntu-Version: Ubuntu 17.10 (Artful Aardvark)
Antworten |

Bankfenster

Anmeldungsdatum:
19. Mai 2012

Beiträge: 26

Hallo,

wir sollen Prozesse erzeugen, diese manuell pausieren und fortsetzen können und als zweite Aufgabenstellung die laufenden Prozesse dann mit einem Scheduler "managen" (Round Robin).

Die Prozesse sollen wir allerdings nicht per fork() erzeugen, sondern die Prozesse sollen wir "simulieren" indem wir in dem Hauptprogramm andere Programme ausführen. Das heißt ich hab irgendwie meine main.cpp , aus dieser führe ich dann ein Beispielprogramm bla.cpp mit execve() aus, was dann ein neuer Prozess ist. Dann muss ich irgendwie in der main.cpp speichern wie weit der Programmzähler in der bla.cpp ist, denn ich will den Prozess ja auch pausieren können und zum späteren Zeitpunkt dort fortsetzen können wo er zuletzt aufgehört hat.

Weiß wer wie das geht? In der Aufgabenstellung steht an sich nicht direkt was von execve() , sondern sowas:

Jeder simulierte Prozess führt ein Programm aus. Die Programme werden aus Linux-Dateien gelesen und im Befehlsspeicher gespeichert. Wenn ein neuer Prozess simuliert wird, wird zuerst seine Programm-Datei gelesen und gespeichert werden.

Klar ich kann das bla.cpp Programm mittels read(), write() auslesen und von mir aus in einen String speichern. Aber ich glaub nicht das ich dann diesen String in meinem Hauptprogramm irgendwie befehl für befehl ausführen kann?

Hat da wer nen tipp?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@Bankfenster: Das sind zu wenig Informationen um sagen zu können was sich der Dozent bei der Aufgabe gedacht hat. Da kann alles möglich gemeint sein, wie beispielsweise kooperatives Multitasking oder auch ein Interpreter für die ”Programme” der zeitbasiert oder nach einer gewissen Anzahl von Befehlen den Prozess wechselt.

Wie würdest Du denn exec*() ohne fork() verwenden wollen?

Was sind denn ”Linux-Dateien”?

Bankfenster

(Themenstarter)

Anmeldungsdatum:
19. Mai 2012

Beiträge: 26

Bin mir ziemlich sicher das, dass hier gemeint ist

auch ein Interpreter für die ”Programme” der zeitbasiert oder nach einer gewissen Anzahl von Befehlen den Prozess wechselt.

Was mit linux-dateien gemeint ist weiß ich nicht, hab ich mich auch gefragt. Ich glaube damit sind C oder C++ dateien gemeint.

Bei dem execve() hab ich mich bei der man page verlesen, ich glaube damit lässt sich sowas nicht machen. Was der Prof will weiß ich auch nicht so wirklich, er kann auch nicht so gut deutsch, Aufgabenstellung dementsprechend sehr verwirrend gestellt. Ich weiß auch nicht ob ich hier die Aufgabe einfach hochladen darf (pdf), wegen copyright und so.

Aber so wie ich das verstehe ist es so:

- kein Multitasking

- aus dem Hauptprogramm sollen Prozesse erzeugt/simuliert werden, indem externe Programme eingelesen und ausgeführt werden

- diese externen Programme stellen dann ein Prozess dar

- diese Prozesse sollen unterbrochen werden können und zu einem späteren Zeitpunkt an der Stelle weitermachen können wo sie unterbrochen worden sind

- es kann immer nur ein Prozess aktiv sein

- d.h. es muss irgendwie in dem Hauptprogramm gespeichert werden an welcher Zeile Code die jeweiligen Prozesse unterbrochen worden sind

- Prozesse nicht durch fork() erzeugen

- diese externen Programme können irgendwas sein, z.b. es wird einfach nur hochgezählt, oder irgendwas berechnet

Ja und ich weiß nicht wie das funktionieren soll. Ich weiß nicht wie ich:

- aus dem Hauptprogramm eine andere .cpp Datei einlese und diese dann ausführe (einlesen bekomm ich noch hin, aber ausführen weiß ich nich)

- wie ich diese Ausführung dann unterbrechen kann und dann auch herauskriege an welcher Stelle ich unterbrochen habe

Mehr als fork(), pipe(), signal(), wait(), sleep() und alarm() können wir an Linux-Systemaufrufen auch noch nicht.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@Bankfenster: Bei so grundsätzlichen Fragen müsstest Du bei der Quelle der Aufgaben nachfragen, also beim Professor oder bei Deinem Tutor, oder wer auch immer die Aufgaben betreut. Vielleicht auch bei Kommilitonen, denn die stehen ja vor dem/den gleichen Problem(en). Man sollte auf jeden Fall eine saubere Aufgabenstellung erwarten dürfen.

Ich denke nicht das die ”Programme” C++-Quelltextdateien sein sollen. Dazu müsste man ja einen C++-Interpeter haben oder schreiben. Letzteres sprengt deutlich den Rahmen einer normalen Hausaufgabe.

Antworten |